bcm570x_lm.h 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451
  1. /******************************************************************************/
  2. /* */
  3. /* Broadcom BCM5700 Linux Network Driver, Copyright (c) 2000 Broadcom */
  4. /* Corporation. */
  5. /* All rights reserved. */
  6. /* */
  7. /* This program is free software; you can redistribute it and/or modify */
  8. /* it under the terms of the GNU General Public License as published by */
  9. /* the Free Software Foundation, located in the file LICENSE. */
  10. /* */
  11. /* History: */
  12. /* 02/25/00 Hav Khauv Initial version. */
  13. /******************************************************************************/
  14. #ifndef LM_H
  15. #define LM_H
  16. #include "bcm570x_queue.h"
  17. #include "bcm570x_bits.h"
  18. /******************************************************************************/
  19. /* Basic types. */
  20. /******************************************************************************/
  21. typedef char LM_CHAR, *PLM_CHAR;
  22. typedef unsigned int LM_UINT, *PLM_UINT;
  23. typedef unsigned char LM_UINT8, *PLM_UINT8;
  24. typedef unsigned short LM_UINT16, *PLM_UINT16;
  25. typedef unsigned int LM_UINT32, *PLM_UINT32;
  26. typedef unsigned int LM_COUNTER, *PLM_COUNTER;
  27. typedef void LM_VOID, *PLM_VOID;
  28. typedef char LM_BOOL, *PLM_BOOL;
  29. /* 64bit value. */
  30. typedef struct {
  31. #ifdef BIG_ENDIAN_HOST
  32. LM_UINT32 High;
  33. LM_UINT32 Low;
  34. #else /* BIG_ENDIAN_HOST */
  35. LM_UINT32 Low;
  36. LM_UINT32 High;
  37. #endif /* !BIG_ENDIAN_HOST */
  38. } LM_UINT64, *PLM_UINT64;
  39. typedef LM_UINT64 LM_PHYSICAL_ADDRESS, *PLM_PHYSICAL_ADDRESS;
  40. /* void LM_INC_PHYSICAL_ADDRESS(PLM_PHYSICAL_ADDRESS pAddr,LM_UINT32 IncSize) */
  41. #define LM_INC_PHYSICAL_ADDRESS(pAddr, IncSize) \
  42. { \
  43. LM_UINT32 OrgLow; \
  44. \
  45. OrgLow = (pAddr)->Low; \
  46. (pAddr)->Low += IncSize; \
  47. if((pAddr)->Low < OrgLow) { \
  48. (pAddr)->High++; /* Wrap around. */ \
  49. } \
  50. }
  51. #ifndef NULL
  52. #define NULL ((void *) 0)
  53. #endif /* NULL */
  54. #ifndef OFFSETOF
  55. #define OFFSETOF(_s, _m) (MM_UINT_PTR(&(((_s *) 0)->_m)))
  56. #endif /* OFFSETOF */
  57. /******************************************************************************/
  58. /* Simple macros. */
  59. /******************************************************************************/
  60. #define IS_ETH_BROADCAST(_pEthAddr) \
  61. (((unsigned char *) (_pEthAddr))[0] == ((unsigned char) 0xff))
  62. #define IS_ETH_MULTICAST(_pEthAddr) \
  63. (((unsigned char *) (_pEthAddr))[0] & ((unsigned char) 0x01))
  64. #define IS_ETH_ADDRESS_EQUAL(_pEtherAddr1, _pEtherAddr2) \
  65. ((((unsigned char *) (_pEtherAddr1))[0] == \
  66. ((unsigned char *) (_pEtherAddr2))[0]) && \
  67. (((unsigned char *) (_pEtherAddr1))[1] == \
  68. ((unsigned char *) (_pEtherAddr2))[1]) && \
  69. (((unsigned char *) (_pEtherAddr1))[2] == \
  70. ((unsigned char *) (_pEtherAddr2))[2]) && \
  71. (((unsigned char *) (_pEtherAddr1))[3] == \
  72. ((unsigned char *) (_pEtherAddr2))[3]) && \
  73. (((unsigned char *) (_pEtherAddr1))[4] == \
  74. ((unsigned char *) (_pEtherAddr2))[4]) && \
  75. (((unsigned char *) (_pEtherAddr1))[5] == \
  76. ((unsigned char *) (_pEtherAddr2))[5]))
  77. #define COPY_ETH_ADDRESS(_Src, _Dst) \
  78. ((unsigned char *) (_Dst))[0] = ((unsigned char *) (_Src))[0]; \
  79. ((unsigned char *) (_Dst))[1] = ((unsigned char *) (_Src))[1]; \
  80. ((unsigned char *) (_Dst))[2] = ((unsigned char *) (_Src))[2]; \
  81. ((unsigned char *) (_Dst))[3] = ((unsigned char *) (_Src))[3]; \
  82. ((unsigned char *) (_Dst))[4] = ((unsigned char *) (_Src))[4]; \
  83. ((unsigned char *) (_Dst))[5] = ((unsigned char *) (_Src))[5];
  84. /******************************************************************************/
  85. /* Constants. */
  86. /******************************************************************************/
  87. #define ETHERNET_ADDRESS_SIZE 6
  88. #define ETHERNET_PACKET_HEADER_SIZE 14
  89. #define MIN_ETHERNET_PACKET_SIZE 64 /* with 4 byte crc. */
  90. #define MAX_ETHERNET_PACKET_SIZE 1518 /* with 4 byte crc. */
  91. #define MIN_ETHERNET_PACKET_SIZE_NO_CRC 60
  92. #define MAX_ETHERNET_PACKET_SIZE_NO_CRC 1514
  93. #define MAX_ETHERNET_PACKET_BUFFER_SIZE 1536 /* A nice even number. */
  94. #ifndef LM_MAX_MC_TABLE_SIZE
  95. #define LM_MAX_MC_TABLE_SIZE 32
  96. #endif /* LM_MAX_MC_TABLE_SIZE */
  97. #define LM_MC_ENTRY_SIZE (ETHERNET_ADDRESS_SIZE+1)
  98. #define LM_MC_INSTANCE_COUNT_INDEX (LM_MC_ENTRY_SIZE-1)
  99. /* Receive filter masks. */
  100. #define LM_ACCEPT_UNICAST 0x0001
  101. #define LM_ACCEPT_MULTICAST 0x0002
  102. #define LM_ACCEPT_ALL_MULTICAST 0x0004
  103. #define LM_ACCEPT_BROADCAST 0x0008
  104. #define LM_ACCEPT_ERROR_PACKET 0x0010
  105. #define LM_PROMISCUOUS_MODE 0x10000
  106. /******************************************************************************/
  107. /* PCI registers. */
  108. /******************************************************************************/
  109. #define PCI_VENDOR_ID_REG 0x00
  110. #define PCI_DEVICE_ID_REG 0x02
  111. #define PCI_COMMAND_REG 0x04
  112. #define PCI_IO_SPACE_ENABLE 0x0001
  113. #define PCI_MEM_SPACE_ENABLE 0x0002
  114. #define PCI_BUSMASTER_ENABLE 0x0004
  115. #define PCI_MEMORY_WRITE_INVALIDATE 0x0010
  116. #define PCI_PARITY_ERROR_ENABLE 0x0040
  117. #define PCI_SYSTEM_ERROR_ENABLE 0x0100
  118. #define PCI_FAST_BACK_TO_BACK_ENABLE 0x0200
  119. #define PCI_STATUS_REG 0x06
  120. #define PCI_REV_ID_REG 0x08
  121. #define PCI_CACHE_LINE_SIZE_REG 0x0c
  122. #define PCI_IO_BASE_ADDR_REG 0x10
  123. #define PCI_IO_BASE_ADDR_MASK 0xfffffff0
  124. #define PCI_MEM_BASE_ADDR_LOW 0x10
  125. #define PCI_MEM_BASE_ADDR_HIGH 0x14
  126. #define PCI_SUBSYSTEM_VENDOR_ID_REG 0x2c
  127. #define PCI_SUBSYSTEM_ID_REG 0x2e
  128. #define PCI_INT_LINE_REG 0x3c
  129. #define PCIX_CAP_REG 0x40
  130. #define PCIX_ENABLE_RELAXED_ORDERING BIT_17
  131. /******************************************************************************/
  132. /* Fragment structure. */
  133. /******************************************************************************/
  134. typedef struct {
  135. LM_UINT32 FragSize;
  136. LM_PHYSICAL_ADDRESS FragBuf;
  137. } LM_FRAG, *PLM_FRAG;
  138. typedef struct {
  139. /* FragCount is initialized for the caller to the maximum array size, on */
  140. /* return FragCount is the number of the actual fragments in the array. */
  141. LM_UINT32 FragCount;
  142. /* Total buffer size. */
  143. LM_UINT32 TotalSize;
  144. /* Fragment array buffer. */
  145. LM_FRAG Fragments[1];
  146. } LM_FRAG_LIST, *PLM_FRAG_LIST;
  147. #define DECLARE_FRAG_LIST_BUFFER_TYPE(_FRAG_LIST_TYPE_NAME, _MAX_FRAG_COUNT) \
  148. typedef struct { \
  149. LM_FRAG_LIST FragList; \
  150. LM_FRAG FragListBuffer[_MAX_FRAG_COUNT-1]; \
  151. } _FRAG_LIST_TYPE_NAME, *P##_FRAG_LIST_TYPE_NAME
  152. /******************************************************************************/
  153. /* Status codes. */
  154. /******************************************************************************/
  155. #define LM_STATUS_SUCCESS 0
  156. #define LM_STATUS_FAILURE 1
  157. #define LM_STATUS_INTERRUPT_ACTIVE 2
  158. #define LM_STATUS_INTERRUPT_NOT_ACTIVE 3
  159. #define LM_STATUS_LINK_ACTIVE 4
  160. #define LM_STATUS_LINK_DOWN 5
  161. #define LM_STATUS_LINK_SETTING_MISMATCH 6
  162. #define LM_STATUS_TOO_MANY_FRAGMENTS 7
  163. #define LM_STATUS_TRANSMIT_ABORTED 8
  164. #define LM_STATUS_TRANSMIT_ERROR 9
  165. #define LM_STATUS_RECEIVE_ABORTED 10
  166. #define LM_STATUS_RECEIVE_ERROR 11
  167. #define LM_STATUS_INVALID_PACKET_SIZE 12
  168. #define LM_STATUS_OUT_OF_MAP_REGISTERS 13
  169. #define LM_STATUS_UNKNOWN_ADAPTER 14
  170. typedef LM_UINT LM_STATUS, *PLM_STATUS;
  171. /******************************************************************************/
  172. /* Requested media type. */
  173. /******************************************************************************/
  174. #define LM_REQUESTED_MEDIA_TYPE_AUTO 0
  175. #define LM_REQUESTED_MEDIA_TYPE_BNC 1
  176. #define LM_REQUESTED_MEDIA_TYPE_UTP_AUTO 2
  177. #define LM_REQUESTED_MEDIA_TYPE_UTP_10MBPS 3
  178. #define LM_REQUESTED_MEDIA_TYPE_UTP_10MBPS_FULL_DUPLEX 4
  179. #define LM_REQUESTED_MEDIA_TYPE_UTP_100MBPS 5
  180. #define LM_REQUESTED_MEDIA_TYPE_UTP_100MBPS_FULL_DUPLEX 6
  181. #define LM_REQUESTED_MEDIA_TYPE_UTP_1000MBPS 7
  182. #define LM_REQUESTED_MEDIA_TYPE_UTP_1000MBPS_FULL_DUPLEX 8
  183. #define LM_REQUESTED_MEDIA_TYPE_FIBER_100MBPS 9
  184. #define LM_REQUESTED_MEDIA_TYPE_FIBER_100MBPS_FULL_DUPLEX 10
  185. #define LM_REQUESTED_MEDIA_TYPE_FIBER_1000MBPS 11
  186. #define LM_REQUESTED_MEDIA_TYPE_FIBER_1000MBPS_FULL_DUPLEX 12
  187. #define LM_REQUESTED_MEDIA_TYPE_MAC_LOOPBACK 0xfffe
  188. #define LM_REQUESTED_MEDIA_TYPE_PHY_LOOPBACK 0xffff
  189. typedef LM_UINT32 LM_REQUESTED_MEDIA_TYPE, *PLM_REQUESTED_MEDIA_TYPE;
  190. /******************************************************************************/
  191. /* Media type. */
  192. /******************************************************************************/
  193. #define LM_MEDIA_TYPE_UNKNOWN -1
  194. #define LM_MEDIA_TYPE_AUTO 0
  195. #define LM_MEDIA_TYPE_UTP 1
  196. #define LM_MEDIA_TYPE_BNC 2
  197. #define LM_MEDIA_TYPE_AUI 3
  198. #define LM_MEDIA_TYPE_FIBER 4
  199. typedef LM_UINT32 LM_MEDIA_TYPE, *PLM_MEDIA_TYPE;
  200. /******************************************************************************/
  201. /* Line speed. */
  202. /******************************************************************************/
  203. #define LM_LINE_SPEED_UNKNOWN 0
  204. #define LM_LINE_SPEED_10MBPS 1
  205. #define LM_LINE_SPEED_100MBPS 2
  206. #define LM_LINE_SPEED_1000MBPS 3
  207. typedef LM_UINT32 LM_LINE_SPEED, *PLM_LINE_SPEED;
  208. /******************************************************************************/
  209. /* Duplex mode. */
  210. /******************************************************************************/
  211. #define LM_DUPLEX_MODE_UNKNOWN 0
  212. #define LM_DUPLEX_MODE_HALF 1
  213. #define LM_DUPLEX_MODE_FULL 2
  214. typedef LM_UINT32 LM_DUPLEX_MODE, *PLM_DUPLEX_MODE;
  215. /******************************************************************************/
  216. /* Power state. */
  217. /******************************************************************************/
  218. #define LM_POWER_STATE_D0 0
  219. #define LM_POWER_STATE_D1 1
  220. #define LM_POWER_STATE_D2 2
  221. #define LM_POWER_STATE_D3 3
  222. typedef LM_UINT32 LM_POWER_STATE, *PLM_POWER_STATE;
  223. /******************************************************************************/
  224. /* Task offloading. */
  225. /******************************************************************************/
  226. #define LM_TASK_OFFLOAD_NONE 0x0000
  227. #define LM_TASK_OFFLOAD_TX_IP_CHECKSUM 0x0001
  228. #define LM_TASK_OFFLOAD_RX_IP_CHECKSUM 0x0002
  229. #define LM_TASK_OFFLOAD_TX_TCP_CHECKSUM 0x0004
  230. #define LM_TASK_OFFLOAD_RX_TCP_CHECKSUM 0x0008
  231. #define LM_TASK_OFFLOAD_TX_UDP_CHECKSUM 0x0010
  232. #define LM_TASK_OFFLOAD_RX_UDP_CHECKSUM 0x0020
  233. #define LM_TASK_OFFLOAD_TCP_SEGMENTATION 0x0040
  234. typedef LM_UINT32 LM_TASK_OFFLOAD, *PLM_TASK_OFFLOAD;
  235. /******************************************************************************/
  236. /* Flow control. */
  237. /******************************************************************************/
  238. #define LM_FLOW_CONTROL_NONE 0x00
  239. #define LM_FLOW_CONTROL_RECEIVE_PAUSE 0x01
  240. #define LM_FLOW_CONTROL_TRANSMIT_PAUSE 0x02
  241. #define LM_FLOW_CONTROL_RX_TX_PAUSE (LM_FLOW_CONTROL_RECEIVE_PAUSE | \
  242. LM_FLOW_CONTROL_TRANSMIT_PAUSE)
  243. /* This value can be or-ed with RECEIVE_PAUSE and TRANSMIT_PAUSE. If the */
  244. /* auto-negotiation is disabled and the RECEIVE_PAUSE and TRANSMIT_PAUSE */
  245. /* bits are set, then flow control is enabled regardless of link partner's */
  246. /* flow control capability. */
  247. #define LM_FLOW_CONTROL_AUTO_PAUSE 0x80000000
  248. typedef LM_UINT32 LM_FLOW_CONTROL, *PLM_FLOW_CONTROL;
  249. /******************************************************************************/
  250. /* Wake up mode. */
  251. /******************************************************************************/
  252. #define LM_WAKE_UP_MODE_NONE 0
  253. #define LM_WAKE_UP_MODE_MAGIC_PACKET 1
  254. #define LM_WAKE_UP_MODE_NWUF 2
  255. #define LM_WAKE_UP_MODE_LINK_CHANGE 4
  256. typedef LM_UINT32 LM_WAKE_UP_MODE, *PLM_WAKE_UP_MODE;
  257. /******************************************************************************/
  258. /* Counters. */
  259. /******************************************************************************/
  260. #define LM_COUNTER_FRAMES_XMITTED_OK 0
  261. #define LM_COUNTER_FRAMES_RECEIVED_OK 1
  262. #define LM_COUNTER_ERRORED_TRANSMIT_COUNT 2
  263. #define LM_COUNTER_ERRORED_RECEIVE_COUNT 3
  264. #define LM_COUNTER_RCV_CRC_ERROR 4
  265. #define LM_COUNTER_ALIGNMENT_ERROR 5
  266. #define LM_COUNTER_SINGLE_COLLISION_FRAMES 6
  267. #define LM_COUNTER_MULTIPLE_COLLISION_FRAMES 7
  268. #define LM_COUNTER_FRAMES_DEFERRED 8
  269. #define LM_COUNTER_MAX_COLLISIONS 9
  270. #define LM_COUNTER_RCV_OVERRUN 10
  271. #define LM_COUNTER_XMIT_UNDERRUN 11
  272. #define LM_COUNTER_UNICAST_FRAMES_XMIT 12
  273. #define LM_COUNTER_MULTICAST_FRAMES_XMIT 13
  274. #define LM_COUNTER_BROADCAST_FRAMES_XMIT 14
  275. #define LM_COUNTER_UNICAST_FRAMES_RCV 15
  276. #define LM_COUNTER_MULTICAST_FRAMES_RCV 16
  277. #define LM_COUNTER_BROADCAST_FRAMES_RCV 17
  278. typedef LM_UINT32 LM_COUNTER_TYPE, *PLM_COUNTER_TYPE;
  279. /******************************************************************************/
  280. /* Forward definition. */
  281. /******************************************************************************/
  282. typedef struct _LM_DEVICE_BLOCK *PLM_DEVICE_BLOCK;
  283. typedef struct _LM_PACKET *PLM_PACKET;
  284. /******************************************************************************/
  285. /* Function prototypes. */
  286. /******************************************************************************/
  287. LM_STATUS LM_GetAdapterInfo(PLM_DEVICE_BLOCK pDevice);
  288. LM_STATUS LM_InitializeAdapter(PLM_DEVICE_BLOCK pDevice);
  289. LM_STATUS LM_ResetAdapter(PLM_DEVICE_BLOCK pDevice);
  290. LM_STATUS LM_DisableInterrupt(PLM_DEVICE_BLOCK pDevice);
  291. LM_STATUS LM_EnableInterrupt(PLM_DEVICE_BLOCK pDevice);
  292. LM_STATUS LM_SendPacket(PLM_DEVICE_BLOCK pDevice, PLM_PACKET pPacket);
  293. LM_STATUS LM_ServiceInterrupts(PLM_DEVICE_BLOCK pDevice);
  294. LM_STATUS LM_QueueRxPackets(PLM_DEVICE_BLOCK pDevice);
  295. LM_STATUS LM_SetReceiveMask(PLM_DEVICE_BLOCK pDevice, LM_UINT32 Mask);
  296. LM_STATUS LM_Halt(PLM_DEVICE_BLOCK pDevice);
  297. LM_STATUS LM_Abort(PLM_DEVICE_BLOCK pDevice);
  298. LM_STATUS LM_MulticastAdd(PLM_DEVICE_BLOCK pDevice, PLM_UINT8 pMcAddress);
  299. LM_STATUS LM_MulticastDel(PLM_DEVICE_BLOCK pDevice, PLM_UINT8 pMcAddress);
  300. LM_STATUS LM_MulticastClear(PLM_DEVICE_BLOCK pDevice);
  301. LM_STATUS LM_SetMacAddress(PLM_DEVICE_BLOCK pDevice, PLM_UINT8 pMacAddress);
  302. LM_STATUS LM_LoopbackAddress(PLM_DEVICE_BLOCK pDevice, PLM_UINT8 pAddress);
  303. LM_UINT32 LM_GetCrcCounter(PLM_DEVICE_BLOCK pDevice);
  304. LM_WAKE_UP_MODE LM_PMCapabilities(PLM_DEVICE_BLOCK pDevice);
  305. LM_STATUS LM_NwufAdd(PLM_DEVICE_BLOCK pDevice, LM_UINT32 ByteMaskSize,
  306. LM_UINT8 *pByteMask, LM_UINT8 *pPattern);
  307. LM_STATUS LM_NwufRemove(PLM_DEVICE_BLOCK pDevice, LM_UINT32 ByteMaskSize,
  308. LM_UINT8 *pByteMask, LM_UINT8 *pPattern);
  309. LM_STATUS LM_SetPowerState(PLM_DEVICE_BLOCK pDevice, LM_POWER_STATE PowerLevel);
  310. LM_VOID LM_ReadPhy(PLM_DEVICE_BLOCK pDevice, LM_UINT32 PhyReg,
  311. PLM_UINT32 pData32);
  312. LM_VOID LM_WritePhy(PLM_DEVICE_BLOCK pDevice, LM_UINT32 PhyReg,
  313. LM_UINT32 Data32);
  314. LM_STATUS LM_ControlLoopBack(PLM_DEVICE_BLOCK pDevice, LM_UINT32 Control);
  315. LM_STATUS LM_SetupPhy(PLM_DEVICE_BLOCK pDevice);
  316. int LM_BlinkLED(PLM_DEVICE_BLOCK pDevice, LM_UINT32 BlinkDuration);
  317. /******************************************************************************/
  318. /* These are the OS specific functions called by LMAC. */
  319. /******************************************************************************/
  320. LM_STATUS MM_ReadConfig16(PLM_DEVICE_BLOCK pDevice, LM_UINT32 Offset,
  321. LM_UINT16 *pValue16);
  322. LM_STATUS MM_WriteConfig16(PLM_DEVICE_BLOCK pDevice, LM_UINT32 Offset,
  323. LM_UINT16 Value16);
  324. LM_STATUS MM_ReadConfig32(PLM_DEVICE_BLOCK pDevice, LM_UINT32 Offset,
  325. LM_UINT32 *pValue32);
  326. LM_STATUS MM_WriteConfig32(PLM_DEVICE_BLOCK pDevice, LM_UINT32 Offset,
  327. LM_UINT32 Value32);
  328. LM_STATUS MM_MapMemBase(PLM_DEVICE_BLOCK pDevice);
  329. LM_STATUS MM_MapIoBase(PLM_DEVICE_BLOCK pDevice);
  330. LM_STATUS MM_IndicateRxPackets(PLM_DEVICE_BLOCK pDevice);
  331. LM_STATUS MM_IndicateTxPackets(PLM_DEVICE_BLOCK pDevice);
  332. LM_STATUS MM_StartTxDma(PLM_DEVICE_BLOCK pDevice, PLM_PACKET pPacket);
  333. LM_STATUS MM_CompleteTxDma(PLM_DEVICE_BLOCK pDevice, PLM_PACKET pPacket);
  334. LM_STATUS MM_AllocateMemory(PLM_DEVICE_BLOCK pDevice, LM_UINT32 BlockSize,
  335. PLM_VOID *pMemoryBlockVirt);
  336. LM_STATUS MM_AllocateSharedMemory(PLM_DEVICE_BLOCK pDevice, LM_UINT32 BlockSize,
  337. PLM_VOID *pMemoryBlockVirt, PLM_PHYSICAL_ADDRESS pMemoryBlockPhy,
  338. LM_BOOL Cached);
  339. LM_STATUS MM_GetConfig(PLM_DEVICE_BLOCK pDevice);
  340. LM_STATUS MM_IndicateStatus(PLM_DEVICE_BLOCK pDevice, LM_STATUS Status);
  341. LM_STATUS MM_InitializeUmPackets(PLM_DEVICE_BLOCK pDevice);
  342. LM_STATUS MM_FreeRxBuffer(PLM_DEVICE_BLOCK pDevice, PLM_PACKET pPacket);
  343. LM_STATUS MM_CoalesceTxBuffer(PLM_DEVICE_BLOCK pDevice, PLM_PACKET pPacket);
  344. LM_STATUS LM_MbufWorkAround(PLM_DEVICE_BLOCK pDevice);
  345. LM_STATUS LM_SetLinkSpeed(PLM_DEVICE_BLOCK pDevice,
  346. LM_REQUESTED_MEDIA_TYPE RequestedMediaType);
  347. #if INCLUDE_5703_A0_FIX
  348. LM_STATUS LM_Load5703DmaWFirmware(PLM_DEVICE_BLOCK pDevice);
  349. #endif
  350. #endif /* LM_H */