rclanmtl.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:26k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2. ** *************************************************************************
  3. **
  4. **
  5. **     R C L A N M T L . H             $Revision: 6 $
  6. **
  7. **
  8. **  RedCreek I2O LAN Message Transport Layer header file.
  9. **
  10. **  ---------------------------------------------------------------------
  11. **  ---     Copyright (c) 1997-1999, RedCreek Communications Inc.     ---
  12. **  ---                   All rights reserved.                        ---
  13. **  ---------------------------------------------------------------------
  14. **
  15. **  File Description:
  16. **
  17. **  Header file for host I2O (Intelligent I/O) LAN message transport layer 
  18. **  API and data types.
  19. **
  20. **  This program is free software; you can redistribute it and/or modify
  21. **  it under the terms of the GNU General Public License as published by
  22. **  the Free Software Foundation; either version 2 of the License, or
  23. **  (at your option) any later version.
  24. **  This program is distributed in the hope that it will be useful,
  25. **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  26. **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  27. **  GNU General Public License for more details.
  28. **  You should have received a copy of the GNU General Public License
  29. **  along with this program; if not, write to the Free Software
  30. **  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  31. **
  32. ** *************************************************************************
  33. */
  34. #ifndef RCLANMTL_H
  35. #define RCLANMTL_H
  36. /* Linux specific includes */
  37. #include <asm/types.h>
  38. #ifdef RC_LINUX_MODULE /* linux modules need non-library version of string functions */
  39. #include <linux/string.h>
  40. #else
  41. #include <string.h>
  42. #endif
  43. #include <linux/delay.h> /* for udelay() */
  44. #include <linux/netdevice.h>
  45. #include <linux/if_ether.h>
  46. #include <linux/etherdevice.h>
  47. #include <linux/skbuff.h>
  48. #include <asm/io.h>
  49. /* Debug stuff. Define for debug output */
  50. #undef RCDEBUG
  51. #ifdef RCDEBUG
  52. #define dprintk(args...) printk("rc: " args)
  53. #else
  54. #define dprintk(args...) { }
  55. #endif
  56. /* Typedefs */
  57.  /* scalar data types */
  58. typedef __u8 U8;
  59. typedef __u16 U16;
  60. typedef __u32 U32;
  61. typedef __u8 *PU8;
  62. typedef __u16 *PU16;
  63. typedef __u32 *PU32;
  64. typedef unsigned long BF;
  65. typedef int RC_RETURN;
  66.  /* 
  67.     ** type PFNWAITCALLBACK
  68.     **
  69.     ** pointer to void function - type used for WaitCallback in some functions 
  70.   */
  71. typedef void (*PFNWAITCALLBACK) (void); /* void argument avoids compiler complaint */
  72.  /*
  73.     ** type PFNTXCALLBACK 
  74.     **
  75.     ** Pointer to user's transmit callback function.  This user function is
  76.     ** called from RCProcI2OMsgQ() when packet have been transmitted from buffers
  77.     ** given in the RCI2OSendPacket() function.  BufferContext is a pointer to
  78.     ** an array of 32 bit context values.  These are the values the user assigned
  79.     ** and passed in the TCB to the RCI2OSendPacket() function.  PcktCount
  80.     ** indicates the number of buffer context values in the BufferContext[] array.
  81.     ** The User's TransmitCallbackFunction should recover (put back in free queue)
  82.     ** the packet buffers associated with the buffer context values.
  83.   */
  84. typedef void (*PFNTXCALLBACK) (U32 Status,
  85.        U16 PcktCount,
  86.        PU32 BufferContext, struct net_device *);
  87.  /* 
  88.     ** type PFNRXCALLBACK 
  89.     **
  90.     ** Pointer to user's receive callback function.  This user function
  91.     ** is called from RCProcI2OMsgQ() when packets have been received into
  92.     ** previously posted packet buffers throught the RCPostRecvBuffers() function.
  93.     ** The received callback function should process the Packet Descriptor Block
  94.     ** pointed to by PacketDescBlock. See Packet Decription Block below.
  95.   */
  96. typedef void (*PFNRXCALLBACK) (U32 Status,
  97.        U8 PktCount,
  98.        U32 BucketsRemain,
  99.        PU32 PacketDescBlock, struct net_device *);
  100.  /* 
  101.     ** type PFNCALLBACK 
  102.     **
  103.     ** Pointer to user's generic callback function.  This user function
  104.     ** can be passed to LANReset or LANShutdown and is called when the 
  105.     ** the reset or shutdown is complete.
  106.     ** Param1 and Param2 are invalid for LANReset and LANShutdown.
  107.   */
  108. typedef void (*PFNCALLBACK) (U32 Status,
  109.      U32 Param1, U32 Param2, struct net_device * dev);
  110. /*
  111. **  Message Unit CSR definitions for RedCreek PCI45 board
  112. */
  113. typedef struct tag_rcatu {
  114. volatile unsigned long APICRegSel; /* APIC Register Select */
  115. volatile unsigned long reserved0;
  116. volatile unsigned long APICWinReg; /* APIC Window Register */
  117. volatile unsigned long reserved1;
  118. volatile unsigned long InMsgReg0; /* inbound message register 0 */
  119. volatile unsigned long InMsgReg1; /* inbound message register 1 */
  120. volatile unsigned long OutMsgReg0; /* outbound message register 0 */
  121. volatile unsigned long OutMsgReg1; /* outbound message register 1 */
  122. volatile unsigned long InDoorReg; /* inbound doorbell register */
  123. volatile unsigned long InIntStat; /* inbound interrupt status register */
  124. volatile unsigned long InIntMask; /* inbound interrupt mask register */
  125. volatile unsigned long OutDoorReg; /* outbound doorbell register */
  126. volatile unsigned long OutIntStat; /* outbound interrupt status register */
  127. volatile unsigned long OutIntMask; /* outbound interrupt mask register */
  128. volatile unsigned long reserved2;
  129. volatile unsigned long reserved3;
  130. volatile unsigned long InQueue; /* inbound queue port */
  131. volatile unsigned long OutQueue; /* outbound queue port */
  132. volatile unsigned long reserved4;
  133. volatile unsigned long reserver5;
  134. /* RedCreek extension */
  135. volatile unsigned long EtherMacLow;
  136. volatile unsigned long EtherMacHi;
  137. volatile unsigned long IPaddr;
  138. volatile unsigned long IPmask;
  139. } *PATU;
  140.  /* 
  141.     ** typedef PAB
  142.     **
  143.     ** PCI Adapter Block - holds instance specific information.
  144.   */
  145. typedef struct {
  146. PATU p_atu; /* ptr to  ATU register block */
  147. PU8 pPci45LinBaseAddr;
  148. PU8 pLinOutMsgBlock;
  149. U32 outMsgBlockPhyAddr;
  150. PFNTXCALLBACK pTransCallbackFunc;
  151. PFNRXCALLBACK pRecvCallbackFunc;
  152. PFNCALLBACK pRebootCallbackFunc;
  153. PFNCALLBACK pCallbackFunc;
  154. U16 IOPState;
  155. U16 InboundMFrameSize;
  156. } *PPAB;
  157. /*
  158.  * Driver Private Area, DPA.
  159.  */
  160. typedef struct {
  161. U8 id; /* the AdapterID */
  162. /* These two field are basically for the RCioctl function.
  163.  * I could not determine if they could be avoided. (RAA)*/
  164. U32 pci_addr; /* the pci address of the adapter */
  165. U32 pci_addr_len;
  166. struct timer_list timer; /*  timer */
  167. struct net_device_stats stats; /* the statistics structure */
  168. unsigned long numOutRcvBuffers; /* number of outstanding receive buffers */
  169. unsigned char shutdown;
  170. unsigned char reboot;
  171. unsigned char nexus;
  172. PU8 msgbuf; /* Pointer to Lan Api Private Area */
  173. PU8 PLanApiPA; /* Pointer to Lan Api Private Area (aligned) */
  174. PPAB pPab; /* Pointer to the PCI Adapter Block */
  175. } *PDPA;
  176. /* PCI/45 Configuration space values */
  177. #define RC_PCI45_VENDOR_ID  0x4916
  178. #define RC_PCI45_DEVICE_ID  0x1960
  179.  /* RedCreek API function return values */
  180. #define RC_RTN_NO_ERROR             0
  181. #define RC_RTN_I2O_NOT_INIT         1
  182. #define RC_RTN_FREE_Q_EMPTY         2
  183. #define RC_RTN_TCB_ERROR            3
  184. #define RC_RTN_TRANSACTION_ERROR    4
  185. #define RC_RTN_ADAPTER_ALREADY_INIT 5
  186. #define RC_RTN_MALLOC_ERROR         6
  187. #define RC_RTN_ADPTR_NOT_REGISTERED 7
  188. #define RC_RTN_MSG_REPLY_TIMEOUT    8
  189. #define RC_RTN_NO_I2O_STATUS        9
  190. #define RC_RTN_NO_FIRM_VER         10
  191. #define RC_RTN_NO_LINK_SPEED       11
  192. /* Driver capability flags */
  193. #define WARM_REBOOT_CAPABLE      0x01
  194. /*
  195. ** Status - Transmit and Receive callback status word 
  196. **
  197. ** A 32 bit Status is returned to the TX and RX callback functions.  This value
  198. ** contains both the reply status and the detailed status as follows:
  199. **
  200. **  32    24     16            0
  201. **  +------+------+------------+
  202. **  | Reply|      |  Detailed  |
  203. **  |Status|   0  |   Status   |
  204. **  +------+------+------------+
  205. **
  206. ** Reply Status and Detailed Status of zero indicates No Errors.
  207. */
  208.  /* reply message status defines */
  209. #define    I2O_REPLY_STATUS_SUCCESS                    0x00
  210. #define    I2O_REPLY_STATUS_ABORT_NO_DATA_TRANSFER     0x02
  211. #define    I2O_REPLY_STATUS_TRANSACTION_ERROR          0x0A
  212. /* DetailedStatusCode defines */
  213. #define    I2O_LAN_DSC_SUCCESS                         0x0000
  214. #define    I2O_LAN_DSC_DEVICE_FAILURE                  0x0001
  215. #define    I2O_LAN_DSC_DESTINATION_NOT_FOUND           0x0002
  216. #define    I2O_LAN_DSC_TRANSMIT_ERROR                  0x0003
  217. #define    I2O_LAN_DSC_TRANSMIT_ABORTED                0x0004
  218. #define    I2O_LAN_DSC_RECEIVE_ERROR                   0x0005
  219. #define    I2O_LAN_DSC_RECEIVE_ABORTED                 0x0006
  220. #define    I2O_LAN_DSC_DMA_ERROR                       0x0007
  221. #define    I2O_LAN_DSC_BAD_PACKET_DETECTED             0x0008
  222. #define    I2O_LAN_DSC_OUT_OF_MEMORY                   0x0009
  223. #define    I2O_LAN_DSC_BUCKET_OVERRUN                  0x000A
  224. #define    I2O_LAN_DSC_IOP_INTERNAL_ERROR              0x000B
  225. #define    I2O_LAN_DSC_CANCELED                        0x000C
  226. #define    I2O_LAN_DSC_INVALID_TRANSACTION_CONTEXT     0x000D
  227. #define    I2O_LAN_DSC_DESTINATION_ADDRESS_DETECTED    0x000E
  228. #define    I2O_LAN_DSC_DESTINATION_ADDRESS_OMITTED     0x000F
  229. #define    I2O_LAN_DSC_PARTIAL_PACKET_RETURNED         0x0010
  230. /*
  231. ** Packet Description Block   (Received packets)
  232. **
  233. ** A pointer to this block structure is returned to the ReceiveCallback 
  234. ** function.  It contains the list of packet buffers which have either been
  235. ** filled with a packet or returned to host due to a LANReset function. 
  236. ** Currently there will only be one packet per receive bucket (buffer) posted. 
  237. **
  238. **   32   24               0     
  239. **  +-----------------------+  -
  240. **  |   Buffer 1 Context    |    
  241. **  +-----------------------+     
  242. **  |      0xC0000000       |     / First Bucket Descriptor
  243. **  +-----+-----------------+    /
  244. **  |  0  | packet 1 length |   / 
  245. **  +-----------------------+  -
  246. **  |   Buffer 2 Context    |    
  247. **  +-----------------------+     
  248. **  |      0xC0000000       |     / Second Bucket Descriptor
  249. **  +-----+-----------------+    /
  250. **  |  0  | packet 2 length |   / 
  251. **  +-----+-----------------+  -
  252. **  |         ...           |  ----- more bucket descriptors
  253. **  +-----------------------+  -
  254. **  |   Buffer n Context    |    
  255. **  +-----------------------+     
  256. **  |      0xC0000000       |     / Last Bucket Descriptor
  257. **  +-----+-----------------+    /
  258. **  |  0  | packet n length |   / 
  259. **  +-----+-----------------+  -
  260. **
  261. ** Buffer Context values are those given to adapter in the TCB on calls to
  262. ** RCPostRecvBuffers().
  263. **  
  264. */
  265. /*
  266. ** Transaction Control Block (TCB) structure
  267. **
  268. ** A structure like this is filled in by the user and passed by reference to 
  269. ** RCI2OSendPacket() and RCPostRecvBuffers() functions.  Minimum size is five
  270. ** 32-bit words for one buffer with one segment descriptor.  
  271. ** MAX_NMBR_POST_BUFFERS_PER_MSG defines the maximum single segment buffers
  272. ** that can be described in a given TCB.
  273. **
  274. **   32                    0
  275. **  +-----------------------+
  276. **  |   Buffer Count        |  Number of buffers in the TCB
  277. **  +-----------------------+
  278. **  |   Buffer 1 Context    |  first buffer reference
  279. **  +-----------------------+
  280. **  |   Buffer 1 Seg Count  |  number of segments in buffer
  281. **  +-----------------------+
  282. **  |   Buffer 1 Seg Desc 1 |  first segment descriptor (size, physical address)
  283. **  +-----------------------+
  284. **  |         ...           |  more segment descriptors (size, physical address)
  285. **  +-----------------------+
  286. **  |   Buffer 1 Seg Desc n |  last segment descriptor (size, physical address)
  287. **  +-----------------------+
  288. **  |   Buffer 2 Context    |  second buffer reference
  289. **  +-----------------------+
  290. **  |   Buffer 2 Seg Count  |  number of segments in buffer
  291. **  +-----------------------+
  292. **  |   Buffer 2 Seg Desc 1 |  segment descriptor (size, physical address)
  293. **  +-----------------------+
  294. **  |         ...           |  more segment descriptors (size, physical address)
  295. **  +-----------------------+
  296. **  |   Buffer 2 Seg Desc n |
  297. **  +-----------------------+
  298. **  |         ...           |  more buffer descriptor blocks ...
  299. **  +-----------------------+
  300. **  |   Buffer n Context    |
  301. **  +-----------------------+
  302. **  |   Buffer n Seg Count  |
  303. **  +-----------------------+
  304. **  |   Buffer n Seg Desc 1 |
  305. **  +-----------------------+
  306. **  |         ...           |
  307. **  +-----------------------+
  308. **  |   Buffer n Seg Desc n |
  309. **  +-----------------------+
  310. **
  311. **
  312. ** A TCB for one contigous packet buffer would look like the following:
  313. **
  314. **   32                    0
  315. **  +-----------------------+
  316. **  |         1             |  one buffer in the TCB
  317. **  +-----------------------+
  318. **  |  <user's Context>     |  user's buffer reference
  319. **  +-----------------------+
  320. **  |         1             |  one segment buffer
  321. **  +-----------------------+                            _
  322. **  |    <buffer size>      |  size                        
  323. **  +-----------------------+                               segment descriptor
  324. **  |  <physical address>   |  physical address of buffer  /
  325. **  +-----------------------+                            _/
  326. **
  327. */
  328.  /* Buffer Segment Descriptor */
  329. typedef struct {
  330. U32 size;
  331. U32 phyAddress;
  332. } BSD, *PBSD;
  333. typedef PU32 PRCTCB;
  334. /*
  335. ** -------------------------------------------------------------------------
  336. ** Exported functions comprising the API to the LAN I2O message transport layer
  337. ** -------------------------------------------------------------------------
  338. */
  339.  /*
  340.     ** InitRCI2OMsgLayer()
  341.     ** 
  342.     ** Called once prior to using the I2O LAN message transport layer.  User 
  343.     ** provides both the physical and virual address of a locked page buffer 
  344.     ** that is used as a private buffer for the RedCreek I2O message
  345.     ** transport layer.  This buffer must be a contigous memory block of a 
  346.     ** minimum of 16K bytes and long word aligned.  The user also must provide
  347.     ** the base address of the RedCreek PCI adapter assigned by BIOS or operating
  348.     ** system.  
  349.     **
  350.     ** Inputs:  dev - the net_device struct for the device.
  351.     **          TransmitCallbackFunction - address of user's TX callback function
  352.     **          ReceiveCallbackFunction  - address of user's RX callback function
  353.     **          RebootCallbackFunction  - address of user's reboot callback function
  354.     **
  355.   */
  356. RC_RETURN RCInitI2OMsgLayer (struct net_device *dev,
  357.      PFNTXCALLBACK TransmitCallbackFunction,
  358.      PFNRXCALLBACK ReceiveCallbackFunction,
  359.      PFNCALLBACK RebootCallbackFunction);
  360.  /*
  361.     ** RCSetRavlinIPandMask()
  362.     **
  363.     ** Set the Ravlin 45/PCI cards IP address and network mask.
  364.     **
  365.     ** IP address and mask must be in network byte order.
  366.     ** For example, IP address 1.2.3.4 and mask 255.255.255.0 would be
  367.     ** 0x04030201 and 0x00FFFFFF on a little endian machine.
  368.     **
  369.   */
  370. RC_RETURN RCSetRavlinIPandMask (struct net_device *dev, U32 ipAddr,
  371. U32 netMask);
  372. /*
  373. ** =========================================================================
  374. ** RCGetRavlinIPandMask()
  375. **
  376. ** get the IP address and MASK from the card
  377. ** 
  378. ** =========================================================================
  379. */
  380. RC_RETURN
  381. RCGetRavlinIPandMask (struct net_device *dev, PU32 pIpAddr, PU32 pNetMask,
  382.       PFNWAITCALLBACK WaitCallback);
  383.  /* 
  384.     ** RCProcI2OMsgQ()
  385.     ** 
  386.     ** Called from user's polling loop or Interrupt Service Routine for a PCI 
  387.     ** interrupt from the RedCreek PCI adapter.  User responsible for determining
  388.     ** and hooking the PCI interrupt. This function will call the registered
  389.     ** callback functions, TransmitCallbackFunction or ReceiveCallbackFunction,
  390.     ** if a TX or RX transaction has completed.
  391.   */
  392. void RCProcI2OMsgQ (struct net_device *dev);
  393.  /*
  394.     ** Disable and Enable I2O interrupts.  I2O interrupts are enabled at Init time
  395.     ** but can be disabled and re-enabled through these two function calls.
  396.     ** Packets will still be put into any posted received buffers and packets will
  397.     ** be sent through RCI2OSendPacket() functions.  Disabling I2O interrupts
  398.     ** will prevent hardware interrupt to host even though the outbound I2O msg
  399.     ** queue is not emtpy.
  400.   */
  401. RC_RETURN RCEnableI2OInterrupts (struct net_device *dev);
  402. RC_RETURN RCDisableI2OInterrupts (struct net_device *dev);
  403.  /* 
  404.     ** RCPostRecvBuffers()
  405.     ** 
  406.     ** Post user's page locked buffers for use by the PCI adapter to
  407.     ** return ethernet packets received from the LAN.  Transaction Control Block,
  408.     ** provided by user, contains buffer descriptor(s) which includes a buffer
  409.     ** context number along with buffer size and physical address.  See TCB above.
  410.     ** The buffer context and actual packet length are returned to the 
  411.     ** ReceiveCallbackFunction when packets have been received.  Buffers posted
  412.     ** to the RedCreek adapter are considered owned by the adapter until the
  413.     ** context is return to user through the ReceiveCallbackFunction.
  414.   */
  415. RC_RETURN RCPostRecvBuffers (struct net_device *dev,
  416.      PRCTCB pTransactionCtrlBlock);
  417. #define MAX_NMBR_POST_BUFFERS_PER_MSG 32
  418.  /*
  419.     ** RCI2OSendPacket()
  420.     ** 
  421.     ** Send user's ethernet packet from a locked page buffer.  
  422.     ** Packet must have full MAC header, however without a CRC.  
  423.     ** Initiator context is a user provided value that is returned 
  424.     ** to the TransmitCallbackFunction when packet buffer is free.
  425.     ** Transmit buffer are considered owned by the adapter until context's
  426.     ** returned to user through the TransmitCallbackFunction.
  427.   */
  428. RC_RETURN RCI2OSendPacket (struct net_device *dev,
  429.    U32 context, PRCTCB pTransactionCtrlBlock);
  430.  /* Ethernet Link Statistics structure */
  431. typedef struct tag_RC_link_stats {
  432. U32 TX_good; /* good transmit frames */
  433. U32 TX_maxcol; /* frames not TX due to MAX collisions */
  434. U32 TX_latecol; /* frames not TX due to late collisions */
  435. U32 TX_urun; /* frames not TX due to DMA underrun */
  436. U32 TX_crs; /* frames TX with lost carrier sense */
  437. U32 TX_def; /* frames deferred due to activity on link */
  438. U32 TX_singlecol; /* frames TX with one and only on collision */
  439. U32 TX_multcol; /* frames TX with more than one collision */
  440. U32 TX_totcol; /* total collisions detected during TX */
  441. U32 Rcv_good; /* good frames received */
  442. U32 Rcv_CRCerr; /* frames RX and discarded with CRC errors */
  443. U32 Rcv_alignerr; /* frames RX with alignment and CRC errors */
  444. U32 Rcv_reserr; /* good frames discarded due to no RX buffer */
  445. U32 Rcv_orun; /* RX frames lost due to FIFO overrun */
  446. U32 Rcv_cdt; /* RX frames with collision during RX */
  447. U32 Rcv_runt; /* RX frames shorter than 64 bytes */
  448. } RCLINKSTATS, *P_RCLINKSTATS;
  449.  /*
  450.     ** RCGetLinkStatistics()
  451.     **
  452.     ** Returns link statistics in user's structure at address StatsReturnAddr
  453.     ** If given, not NULL, the function WaitCallback is called during the wait
  454.     ** loop while waiting for the adapter to respond.
  455.   */
  456. RC_RETURN RCGetLinkStatistics (struct net_device *dev,
  457.        P_RCLINKSTATS StatsReturnAddr,
  458.        PFNWAITCALLBACK WaitCallback);
  459.  /*
  460.     ** RCGetLinkStatus()
  461.     **
  462.     ** Return link status, up or down, to user's location addressed by ReturnAddr.
  463.     ** If given, not NULL, the function WaitCallback is called during the wait
  464.     ** loop while waiting for the adapter to respond.
  465.   */
  466. RC_RETURN RCGetLinkStatus (struct net_device *dev,
  467.    PU32 pReturnStatus, PFNWAITCALLBACK WaitCallback);
  468.  /* Link Status defines - value returned in pReturnStatus */
  469. #define RC_LAN_LINK_STATUS_DOWN     0
  470. #define RC_LAN_LINK_STATUS_UP       1
  471.  /*
  472.     ** RCGetMAC()
  473.     **
  474.     ** Get the current MAC address assigned to user.  RedCreek Ravlin 45/PCI 
  475.     ** has two MAC addresses.  One which is private to the PCI Card, and 
  476.     ** another MAC which is given to the user as its link layer MAC address. The
  477.     ** adapter runs in promiscous mode because of the dual address requirement.
  478.     ** The MAC address is returned to the unsigned char array pointer to by mac.
  479.   */
  480. RC_RETURN RCGetMAC (struct net_device *dev, PFNWAITCALLBACK WaitCallback);
  481.  /*
  482.     ** RCSetMAC()
  483.     **
  484.     ** Set a new user port MAC address.  This address will be returned on
  485.     ** subsequent RCGetMAC() calls.
  486.   */
  487. RC_RETURN RCSetMAC (struct net_device *dev, PU8 mac);
  488.  /*
  489.     ** RCSetLinkSpeed()
  490.     **
  491.     ** set adapter's link speed based on given input code.
  492.   */
  493. RC_RETURN RCSetLinkSpeed (struct net_device *dev, U16 LinkSpeedCode);
  494.  /* Set link speed codes */
  495. #define LNK_SPD_AUTO_NEG_NWAY   0
  496. #define LNK_SPD_100MB_FULL      1
  497. #define LNK_SPD_100MB_HALF      2
  498. #define LNK_SPD_10MB_FULL       3
  499. #define LNK_SPD_10MB_HALF       4
  500.  /*
  501.     ** RCGetLinkSpeed()
  502.     **
  503.     ** Return link speed code.
  504.   */
  505.  /* Return link speed codes */
  506. #define LNK_SPD_UNKNOWN         0
  507. #define LNK_SPD_100MB_FULL      1
  508. #define LNK_SPD_100MB_HALF      2
  509. #define LNK_SPD_10MB_FULL       3
  510. #define LNK_SPD_10MB_HALF       4
  511. RC_RETURN
  512. RCGetLinkSpeed (struct net_device *dev, PU32 pLinkSpeedCode,
  513. PFNWAITCALLBACK WaitCallback);
  514. /*
  515. ** =========================================================================
  516. ** RCSetPromiscuousMode(struct net_device *dev, U16 Mode)
  517. **
  518. ** Defined values for Mode:
  519. **  0 - turn off promiscuous mode
  520. **  1 - turn on  promiscuous mode
  521. **
  522. ** =========================================================================
  523. */
  524. #define PROMISCUOUS_MODE_OFF 0
  525. #define PROMISCUOUS_MODE_ON  1
  526. RC_RETURN RCSetPromiscuousMode (struct net_device *dev, U16 Mode);
  527. /*
  528. ** =========================================================================
  529. ** RCGetPromiscuousMode(struct net_device *dev, PU32 pMode, PFNWAITCALLBACK WaitCallback)
  530. **
  531. ** get promiscuous mode setting
  532. **
  533. ** Possible return values placed in pMode:
  534. **  0 = promisuous mode not set
  535. **  1 = promisuous mode is set
  536. **
  537. ** =========================================================================
  538. */
  539. RC_RETURN
  540. RCGetPromiscuousMode (struct net_device *dev, PU32 pMode,
  541.       PFNWAITCALLBACK WaitCallback);
  542. /*
  543. ** =========================================================================
  544. ** RCSetBroadcastMode(struct net_device *dev, U16 Mode)
  545. **
  546. ** Defined values for Mode:
  547. **  0 - turn off promiscuous mode
  548. **  1 - turn on  promiscuous mode
  549. **
  550. ** =========================================================================
  551. */
  552. #define BROADCAST_MODE_OFF 0
  553. #define BROADCAST_MODE_ON  1
  554. RC_RETURN RCSetBroadcastMode (struct net_device *dev, U16 Mode);
  555. /*
  556. ** =========================================================================
  557. ** RCGetBroadcastMode(struct net_device *dev, PU32 pMode, PFNWAITCALLBACK WaitCallback)
  558. **
  559. ** get broadcast mode setting
  560. **
  561. ** Possible return values placed in pMode:
  562. **  0 = broadcast mode not set
  563. **  1 = broadcast mode is set
  564. **
  565. ** =========================================================================
  566. */
  567. RC_RETURN
  568. RCGetBroadcastMode (struct net_device *dev, PU32 pMode,
  569.     PFNWAITCALLBACK WaitCallback);
  570. /*
  571. ** =========================================================================
  572. ** RCReportDriverCapability(struct net_device *dev, U32 capability)
  573. **
  574. ** Currently defined bits:
  575. ** WARM_REBOOT_CAPABLE   0x01
  576. **
  577. ** =========================================================================
  578. */
  579. RC_RETURN RCReportDriverCapability (struct net_device *dev, U32 capability);
  580. /*
  581. ** RCGetFirmwareVer()
  582. **
  583. ** Return firmware version in the form "SoftwareVersion : Bt BootVersion"
  584. **
  585. ** WARNING: user's space pointed to by pFirmString should be at least 60 bytes.
  586. */
  587. RC_RETURN
  588. RCGetFirmwareVer (struct net_device *dev, PU8 pFirmString,
  589.   PFNWAITCALLBACK WaitCallback);
  590. /*
  591. ** ----------------------------------------------
  592. ** LAN adapter Reset and Shutdown functions
  593. ** ----------------------------------------------
  594. */
  595.  /* resource flag bit assignments for RCResetLANCard() & RCShutdownLANCard() */
  596. #define RC_RESOURCE_RETURN_POSTED_RX_BUCKETS  0x0001
  597. #define RC_RESOURCE_RETURN_PEND_TX_BUFFERS    0x0002
  598.  /*
  599.     ** RCResetLANCard()
  600.     **
  601.     ** Reset LAN card operation.  Causes a software reset of the ethernet
  602.     ** controller and restarts the command and receive units. Depending on 
  603.     ** the ResourceFlags given, the buffers are either returned to the
  604.     ** host with reply status of I2O_REPLY_STATUS_ABORT_NO_DATA_TRANSFER and
  605.     ** detailed status of I2O_LAN_DSC_CANCELED (new receive buffers must be
  606.     ** posted after issuing this) OR the buffers are kept and reused by
  607.     ** the ethernet controller. If CallbackFunction is not NULL, the function
  608.     ** will be called when the reset is complete.  If the CallbackFunction is
  609.     ** NULL,a 1 will be put into the ReturnAddr after waiting for the reset 
  610.     ** to complete (please disable I2O interrupts during this method).
  611.     ** Any outstanding transmit or receive buffers that are complete will be
  612.     ** returned via the normal reply messages before the requested resource
  613.     ** buffers are returned.
  614.     ** A call to RCPostRecvBuffers() is needed to return the ethernet to full
  615.     ** operation if the receive buffers were returned during LANReset.
  616.     ** Note: The IOP status is not affected by a LAN reset.
  617.   */
  618. RC_RETURN RCResetLANCard (struct net_device *dev, U16 ResourceFlags,
  619.   PU32 ReturnAddr, PFNCALLBACK CallbackFunction);
  620.  /*
  621.     ** RCShutdownLANCard()
  622.     **
  623.     ** Shutdown LAN card operation and put into an idle (suspended) state.
  624.     ** The LAN card is restarted with RCResetLANCard() function.
  625.     ** Depending on the ResourceFlags given, the buffers are either returned 
  626.     ** to the host with reply status of I2O_REPLY_STATUS_ABORT_NO_DATA_TRANSFER 
  627.     ** and detailed status of I2O_LAN_DSC_CANCELED (new receive buffers must be
  628.     ** posted after issuing this) OR the buffers are kept and reused by
  629.     ** the ethernet controller. If CallbackFunction is not NULL, the function
  630.     ** will be called when the reset is complete.  If the CallbackFunction is
  631.     ** NULL,a 1 will be put into the ReturnAddr after waiting for the reset 
  632.     ** to complete (please disable I2O interrupts during this method).
  633.     ** Any outstanding transmit or receive buffers that are complete will be
  634.     ** returned via the normal reply messages before the requested resource
  635.     ** buffers are returned.
  636.     ** Note: The IOP status is not affected by a LAN shutdown.
  637.   */
  638. RC_RETURN
  639. RCShutdownLANCard (struct net_device *dev, U16 ResourceFlags, PU32 ReturnAddr,
  640.    PFNCALLBACK CallbackFunction);
  641.  /*
  642.     ** RCResetIOP();
  643.     **     Initializes IOPState to I2O_IOP_STATE_RESET.
  644.     **     Stops access to outbound message Q.
  645.     **     Discards any outstanding transmit or posted receive buffers.
  646.     **     Clears outbound message Q. 
  647.   */
  648. RC_RETURN RCResetIOP (struct net_device *dev);
  649. #endif /* RCLANMTL_H */