skgeinit.h 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797
  1. /******************************************************************************
  2. *
  3. * Name: skgeinit.h
  4. * Project: Gigabit Ethernet Adapters, Common Modules
  5. * Version: $Revision: 1.83 $
  6. * Date: $Date: 2003/09/16 14:07:37 $
  7. * Purpose: Structures and prototypes for the GE Init Module
  8. *
  9. ******************************************************************************/
  10. /******************************************************************************
  11. *
  12. * (C)Copyright 1998-2002 SysKonnect.
  13. * (C)Copyright 2002-2003 Marvell.
  14. *
  15. * This program is free software; you can redistribute it and/or modify
  16. * it under the terms of the GNU General Public License as published by
  17. * the Free Software Foundation; either version 2 of the License, or
  18. * (at your option) any later version.
  19. *
  20. * The information in this file is provided "AS IS" without warranty.
  21. *
  22. ******************************************************************************/
  23. #ifndef __INC_SKGEINIT_H_
  24. #define __INC_SKGEINIT_H_
  25. #ifdef __cplusplus
  26. extern "C" {
  27. #endif /* __cplusplus */
  28. /* defines ********************************************************************/
  29. #define SK_TEST_VAL 0x11335577UL
  30. /* modifying Link LED behaviour (used with SkGeLinkLED()) */
  31. #define SK_LNK_OFF LED_OFF
  32. #define SK_LNK_ON (LED_ON | LED_BLK_OFF | LED_SYNC_OFF)
  33. #define SK_LNK_BLINK (LED_ON | LED_BLK_ON | LED_SYNC_ON)
  34. #define SK_LNK_PERM (LED_ON | LED_BLK_OFF | LED_SYNC_ON)
  35. #define SK_LNK_TST (LED_ON | LED_BLK_ON | LED_SYNC_OFF)
  36. /* parameter 'Mode' when calling SK_HWAC_LINK_LED() */
  37. #define SK_LED_OFF LED_OFF
  38. #define SK_LED_ACTIVE (LED_ON | LED_BLK_OFF | LED_SYNC_OFF)
  39. #define SK_LED_STANDBY (LED_ON | LED_BLK_ON | LED_SYNC_OFF)
  40. /* addressing LED Registers in SkGeXmitLED() */
  41. #define XMIT_LED_INI 0
  42. #define XMIT_LED_CNT (RX_LED_VAL - RX_LED_INI)
  43. #define XMIT_LED_CTRL (RX_LED_CTRL- RX_LED_INI)
  44. #define XMIT_LED_TST (RX_LED_TST - RX_LED_INI)
  45. /* parameter 'Mode' when calling SkGeXmitLED() */
  46. #define SK_LED_DIS 0
  47. #define SK_LED_ENA 1
  48. #define SK_LED_TST 2
  49. /* Counter and Timer constants, for a host clock of 62.5 MHz */
  50. #define SK_XMIT_DUR 0x002faf08UL /* 50 ms */
  51. #define SK_BLK_DUR 0x01dcd650UL /* 500 ms */
  52. #define SK_DPOLL_DEF 0x00ee6b28UL /* 250 ms at 62.5 MHz */
  53. #define SK_DPOLL_MAX 0x00ffffffUL /* 268 ms at 62.5 MHz */
  54. /* 215 ms at 78.12 MHz */
  55. #define SK_FACT_62 100 /* is given in percent */
  56. #define SK_FACT_53 85 /* on GENESIS: 53.12 MHz */
  57. #define SK_FACT_78 125 /* on YUKON: 78.12 MHz */
  58. /* Timeout values */
  59. #define SK_MAC_TO_53 72 /* MAC arbiter timeout */
  60. #define SK_PKT_TO_53 0x2000 /* Packet arbiter timeout */
  61. #define SK_PKT_TO_MAX 0xffff /* Maximum value */
  62. #define SK_RI_TO_53 36 /* RAM interface timeout */
  63. #define SK_PHY_ACC_TO 600000 /* PHY access timeout */
  64. /* RAM Buffer High Pause Threshold values */
  65. #define SK_RB_ULPP ( 8 * 1024) /* Upper Level in kB/8 */
  66. #define SK_RB_LLPP_S (10 * 1024) /* Lower Level for small Queues */
  67. #define SK_RB_LLPP_B (16 * 1024) /* Lower Level for big Queues */
  68. #ifndef SK_BMU_RX_WM
  69. #define SK_BMU_RX_WM 0x600 /* BMU Rx Watermark */
  70. #endif
  71. #ifndef SK_BMU_TX_WM
  72. #define SK_BMU_TX_WM 0x600 /* BMU Tx Watermark */
  73. #endif
  74. /* XMAC II Rx High Watermark */
  75. #define SK_XM_RX_HI_WM 0x05aa /* 1450 */
  76. /* XMAC II Tx Threshold */
  77. #define SK_XM_THR_REDL 0x01fb /* .. for redundant link usage */
  78. #define SK_XM_THR_SL 0x01fb /* .. for single link adapters */
  79. #define SK_XM_THR_MULL 0x01fb /* .. for multiple link usage */
  80. #define SK_XM_THR_JUMBO 0x03fc /* .. for jumbo frame usage */
  81. /* values for GIPortUsage */
  82. #define SK_RED_LINK 1 /* redundant link usage */
  83. #define SK_MUL_LINK 2 /* multiple link usage */
  84. #define SK_JUMBO_LINK 3 /* driver uses jumbo frames */
  85. /* Minimum RAM Buffer Rx Queue Size */
  86. #define SK_MIN_RXQ_SIZE 16 /* 16 kB */
  87. /* Minimum RAM Buffer Tx Queue Size */
  88. #define SK_MIN_TXQ_SIZE 16 /* 16 kB */
  89. /* Queue Size units */
  90. #define QZ_UNITS 0x7
  91. #define QZ_STEP 8
  92. /* Percentage of queue size from whole memory */
  93. /* 80 % for receive */
  94. #define RAM_QUOTA_RX 80L
  95. /* 0% for sync transfer */
  96. #define RAM_QUOTA_SYNC 0L
  97. /* the rest (20%) is taken for async transfer */
  98. /* Get the rounded queue size in Bytes in 8k steps */
  99. #define ROUND_QUEUE_SIZE(SizeInBytes) \
  100. ((((unsigned long) (SizeInBytes) + (QZ_STEP*1024L)-1) / 1024) & \
  101. ~(QZ_STEP-1))
  102. /* Get the rounded queue size in KBytes in 8k steps */
  103. #define ROUND_QUEUE_SIZE_KB(Kilobytes) \
  104. ROUND_QUEUE_SIZE((Kilobytes) * 1024L)
  105. /* Types of RAM Buffer Queues */
  106. #define SK_RX_SRAM_Q 1 /* small receive queue */
  107. #define SK_RX_BRAM_Q 2 /* big receive queue */
  108. #define SK_TX_RAM_Q 3 /* small or big transmit queue */
  109. /* parameter 'Dir' when calling SkGeStopPort() */
  110. #define SK_STOP_TX 1 /* Stops the transmit path, resets the XMAC */
  111. #define SK_STOP_RX 2 /* Stops the receive path */
  112. #define SK_STOP_ALL 3 /* Stops Rx and Tx path, resets the XMAC */
  113. /* parameter 'RstMode' when calling SkGeStopPort() */
  114. #define SK_SOFT_RST 1 /* perform a software reset */
  115. #define SK_HARD_RST 2 /* perform a hardware reset */
  116. /* Init Levels */
  117. #define SK_INIT_DATA 0 /* Init level 0: init data structures */
  118. #define SK_INIT_IO 1 /* Init level 1: init with IOs */
  119. #define SK_INIT_RUN 2 /* Init level 2: init for run time */
  120. /* Link Mode Parameter */
  121. #define SK_LMODE_HALF 1 /* Half Duplex Mode */
  122. #define SK_LMODE_FULL 2 /* Full Duplex Mode */
  123. #define SK_LMODE_AUTOHALF 3 /* AutoHalf Duplex Mode */
  124. #define SK_LMODE_AUTOFULL 4 /* AutoFull Duplex Mode */
  125. #define SK_LMODE_AUTOBOTH 5 /* AutoBoth Duplex Mode */
  126. #define SK_LMODE_AUTOSENSE 6 /* configured mode auto sensing */
  127. #define SK_LMODE_INDETERMINATED 7 /* indeterminated */
  128. /* Auto-negotiation timeout in 100ms granularity */
  129. #define SK_AND_MAX_TO 6 /* Wait 600 msec before link comes up */
  130. /* Auto-negotiation error codes */
  131. #define SK_AND_OK 0 /* no error */
  132. #define SK_AND_OTHER 1 /* other error than below */
  133. #define SK_AND_DUP_CAP 2 /* Duplex capabilities error */
  134. /* Link Speed Capabilities */
  135. #define SK_LSPEED_CAP_AUTO (1<<0) /* Automatic resolution */
  136. #define SK_LSPEED_CAP_10MBPS (1<<1) /* 10 Mbps */
  137. #define SK_LSPEED_CAP_100MBPS (1<<2) /* 100 Mbps */
  138. #define SK_LSPEED_CAP_1000MBPS (1<<3) /* 1000 Mbps */
  139. #define SK_LSPEED_CAP_INDETERMINATED (1<<4) /* indeterminated */
  140. /* Link Speed Parameter */
  141. #define SK_LSPEED_AUTO 1 /* Automatic resolution */
  142. #define SK_LSPEED_10MBPS 2 /* 10 Mbps */
  143. #define SK_LSPEED_100MBPS 3 /* 100 Mbps */
  144. #define SK_LSPEED_1000MBPS 4 /* 1000 Mbps */
  145. #define SK_LSPEED_INDETERMINATED 5 /* indeterminated */
  146. /* Link Speed Current State */
  147. #define SK_LSPEED_STAT_UNKNOWN 1
  148. #define SK_LSPEED_STAT_10MBPS 2
  149. #define SK_LSPEED_STAT_100MBPS 3
  150. #define SK_LSPEED_STAT_1000MBPS 4
  151. #define SK_LSPEED_STAT_INDETERMINATED 5
  152. /* Link Capability Parameter */
  153. #define SK_LMODE_CAP_HALF (1<<0) /* Half Duplex Mode */
  154. #define SK_LMODE_CAP_FULL (1<<1) /* Full Duplex Mode */
  155. #define SK_LMODE_CAP_AUTOHALF (1<<2) /* AutoHalf Duplex Mode */
  156. #define SK_LMODE_CAP_AUTOFULL (1<<3) /* AutoFull Duplex Mode */
  157. #define SK_LMODE_CAP_INDETERMINATED (1<<4) /* indeterminated */
  158. /* Link Mode Current State */
  159. #define SK_LMODE_STAT_UNKNOWN 1 /* Unknown Duplex Mode */
  160. #define SK_LMODE_STAT_HALF 2 /* Half Duplex Mode */
  161. #define SK_LMODE_STAT_FULL 3 /* Full Duplex Mode */
  162. #define SK_LMODE_STAT_AUTOHALF 4 /* Half Duplex Mode obtained by Auto-Neg */
  163. #define SK_LMODE_STAT_AUTOFULL 5 /* Full Duplex Mode obtained by Auto-Neg */
  164. #define SK_LMODE_STAT_INDETERMINATED 6 /* indeterminated */
  165. /* Flow Control Mode Parameter (and capabilities) */
  166. #define SK_FLOW_MODE_NONE 1 /* No Flow-Control */
  167. #define SK_FLOW_MODE_LOC_SEND 2 /* Local station sends PAUSE */
  168. #define SK_FLOW_MODE_SYMMETRIC 3 /* Both stations may send PAUSE */
  169. #define SK_FLOW_MODE_SYM_OR_REM 4 /* Both stations may send PAUSE or
  170. * just the remote station may send PAUSE
  171. */
  172. #define SK_FLOW_MODE_INDETERMINATED 5 /* indeterminated */
  173. /* Flow Control Status Parameter */
  174. #define SK_FLOW_STAT_NONE 1 /* No Flow Control */
  175. #define SK_FLOW_STAT_REM_SEND 2 /* Remote Station sends PAUSE */
  176. #define SK_FLOW_STAT_LOC_SEND 3 /* Local station sends PAUSE */
  177. #define SK_FLOW_STAT_SYMMETRIC 4 /* Both station may send PAUSE */
  178. #define SK_FLOW_STAT_INDETERMINATED 5 /* indeterminated */
  179. /* Master/Slave Mode Capabilities */
  180. #define SK_MS_CAP_AUTO (1<<0) /* Automatic resolution */
  181. #define SK_MS_CAP_MASTER (1<<1) /* This station is master */
  182. #define SK_MS_CAP_SLAVE (1<<2) /* This station is slave */
  183. #define SK_MS_CAP_INDETERMINATED (1<<3) /* indeterminated */
  184. /* Set Master/Slave Mode Parameter (and capabilities) */
  185. #define SK_MS_MODE_AUTO 1 /* Automatic resolution */
  186. #define SK_MS_MODE_MASTER 2 /* This station is master */
  187. #define SK_MS_MODE_SLAVE 3 /* This station is slave */
  188. #define SK_MS_MODE_INDETERMINATED 4 /* indeterminated */
  189. /* Master/Slave Status Parameter */
  190. #define SK_MS_STAT_UNSET 1 /* The M/S status is not set */
  191. #define SK_MS_STAT_MASTER 2 /* This station is master */
  192. #define SK_MS_STAT_SLAVE 3 /* This station is slave */
  193. #define SK_MS_STAT_FAULT 4 /* M/S resolution failed */
  194. #define SK_MS_STAT_INDETERMINATED 5 /* indeterminated */
  195. /* parameter 'Mode' when calling SkXmSetRxCmd() */
  196. #define SK_STRIP_FCS_ON (1<<0) /* Enable FCS stripping of Rx frames */
  197. #define SK_STRIP_FCS_OFF (1<<1) /* Disable FCS stripping of Rx frames */
  198. #define SK_STRIP_PAD_ON (1<<2) /* Enable pad byte stripping of Rx fr */
  199. #define SK_STRIP_PAD_OFF (1<<3) /* Disable pad byte stripping of Rx fr */
  200. #define SK_LENERR_OK_ON (1<<4) /* Don't chk fr for in range len error */
  201. #define SK_LENERR_OK_OFF (1<<5) /* Check frames for in range len error */
  202. #define SK_BIG_PK_OK_ON (1<<6) /* Don't set Rx Error bit for big frames */
  203. #define SK_BIG_PK_OK_OFF (1<<7) /* Set Rx Error bit for big frames */
  204. #define SK_SELF_RX_ON (1<<8) /* Enable Rx of own packets */
  205. #define SK_SELF_RX_OFF (1<<9) /* Disable Rx of own packets */
  206. /* parameter 'Para' when calling SkMacSetRxTxEn() */
  207. #define SK_MAC_LOOPB_ON (1<<0) /* Enable MAC Loopback Mode */
  208. #define SK_MAC_LOOPB_OFF (1<<1) /* Disable MAC Loopback Mode */
  209. #define SK_PHY_LOOPB_ON (1<<2) /* Enable PHY Loopback Mode */
  210. #define SK_PHY_LOOPB_OFF (1<<3) /* Disable PHY Loopback Mode */
  211. #define SK_PHY_FULLD_ON (1<<4) /* Enable GMII Full Duplex */
  212. #define SK_PHY_FULLD_OFF (1<<5) /* Disable GMII Full Duplex */
  213. /* States of PState */
  214. #define SK_PRT_RESET 0 /* the port is reset */
  215. #define SK_PRT_STOP 1 /* the port is stopped (similar to SW reset) */
  216. #define SK_PRT_INIT 2 /* the port is initialized */
  217. #define SK_PRT_RUN 3 /* the port has an active link */
  218. /* PHY power down modes */
  219. #define PHY_PM_OPERATIONAL_MODE 0 /* PHY operational mode */
  220. #define PHY_PM_DEEP_SLEEP 1 /* coma mode --> minimal power */
  221. #define PHY_PM_IEEE_POWER_DOWN 2 /* IEEE 22.2.4.1.5 compl. power down */
  222. #define PHY_PM_ENERGY_DETECT 3 /* energy detect */
  223. #define PHY_PM_ENERGY_DETECT_PLUS 4 /* energy detect plus */
  224. /* Default receive frame limit for Workaround of XMAC Errata */
  225. #define SK_DEF_RX_WA_LIM SK_CONSTU64(100)
  226. /* values for GILedBlinkCtrl (LED Blink Control) */
  227. #define SK_ACT_LED_BLINK (1<<0) /* Active LED blinking */
  228. #define SK_DUP_LED_NORMAL (1<<1) /* Duplex LED normal */
  229. #define SK_LED_LINK100_ON (1<<2) /* Link 100M LED on */
  230. /* Link Partner Status */
  231. #define SK_LIPA_UNKNOWN 0 /* Link partner is in unknown state */
  232. #define SK_LIPA_MANUAL 1 /* Link partner is in detected manual state */
  233. #define SK_LIPA_AUTO 2 /* Link partner is in auto-negotiation state */
  234. /* Maximum Restarts before restart is ignored (3Com WA) */
  235. #define SK_MAX_LRESTART 3 /* Max. 3 times the link is restarted */
  236. /* Max. Auto-neg. timeouts before link detection in sense mode is reset */
  237. #define SK_MAX_ANEG_TO 10 /* Max. 10 times the sense mode is reset */
  238. /* structures *****************************************************************/
  239. /*
  240. * MAC specific functions
  241. */
  242. typedef struct s_GeMacFunc {
  243. int (*pFnMacUpdateStats)(SK_AC *pAC, SK_IOC IoC, unsigned int Port);
  244. int (*pFnMacStatistic)(SK_AC *pAC, SK_IOC IoC, unsigned int Port,
  245. SK_U16 StatAddr, SK_U32 SK_FAR *pVal);
  246. int (*pFnMacResetCounter)(SK_AC *pAC, SK_IOC IoC, unsigned int Port);
  247. int (*pFnMacOverflow)(SK_AC *pAC, SK_IOC IoC, unsigned int Port,
  248. SK_U16 IStatus, SK_U64 SK_FAR *pVal);
  249. } SK_GEMACFUNC;
  250. /*
  251. * Port Structure
  252. */
  253. typedef struct s_GePort {
  254. #ifndef SK_DIAG
  255. SK_TIMER PWaTimer; /* Workaround Timer */
  256. SK_TIMER HalfDupChkTimer;
  257. #endif /* SK_DIAG */
  258. SK_U32 PPrevShorts; /* Previous Short Counter checking */
  259. SK_U32 PPrevFcs; /* Previous FCS Error Counter checking */
  260. SK_U64 PPrevRx; /* Previous RxOk Counter checking */
  261. SK_U64 PRxLim; /* Previous RxOk Counter checking */
  262. SK_U64 LastOctets; /* For half duplex hang check */
  263. int PLinkResCt; /* Link Restart Counter */
  264. int PAutoNegTimeOut;/* Auto-negotiation timeout current value */
  265. int PAutoNegTOCt; /* Auto-negotiation Timeout Counter */
  266. int PRxQSize; /* Port Rx Queue Size in kB */
  267. int PXSQSize; /* Port Synchronous Transmit Queue Size in kB */
  268. int PXAQSize; /* Port Asynchronous Transmit Queue Size in kB */
  269. SK_U32 PRxQRamStart; /* Receive Queue RAM Buffer Start Address */
  270. SK_U32 PRxQRamEnd; /* Receive Queue RAM Buffer End Address */
  271. SK_U32 PXsQRamStart; /* Sync Tx Queue RAM Buffer Start Address */
  272. SK_U32 PXsQRamEnd; /* Sync Tx Queue RAM Buffer End Address */
  273. SK_U32 PXaQRamStart; /* Async Tx Queue RAM Buffer Start Address */
  274. SK_U32 PXaQRamEnd; /* Async Tx Queue RAM Buffer End Address */
  275. SK_U32 PRxOverCnt; /* Receive Overflow Counter */
  276. int PRxQOff; /* Rx Queue Address Offset */
  277. int PXsQOff; /* Synchronous Tx Queue Address Offset */
  278. int PXaQOff; /* Asynchronous Tx Queue Address Offset */
  279. int PhyType; /* PHY used on this port */
  280. int PState; /* Port status (reset, stop, init, run) */
  281. SK_U16 PhyId1; /* PHY Id1 on this port */
  282. SK_U16 PhyAddr; /* MDIO/MDC PHY address */
  283. SK_U16 PIsave; /* Saved Interrupt status word */
  284. SK_U16 PSsave; /* Saved PHY status word */
  285. SK_U16 PGmANegAdv; /* Saved GPhy AutoNegAdvertisment register */
  286. SK_BOOL PHWLinkUp; /* The hardware Link is up (wiring) */
  287. SK_BOOL PLinkBroken; /* Is Link broken ? */
  288. SK_BOOL PCheckPar; /* Do we check for parity errors ? */
  289. SK_BOOL HalfDupTimerActive;
  290. SK_U8 PLinkCap; /* Link Capabilities */
  291. SK_U8 PLinkModeConf; /* Link Mode configured */
  292. SK_U8 PLinkMode; /* Link Mode currently used */
  293. SK_U8 PLinkModeStatus;/* Link Mode Status */
  294. SK_U8 PLinkSpeedCap; /* Link Speed Capabilities(10/100/1000 Mbps) */
  295. SK_U8 PLinkSpeed; /* configured Link Speed (10/100/1000 Mbps) */
  296. SK_U8 PLinkSpeedUsed; /* current Link Speed (10/100/1000 Mbps) */
  297. SK_U8 PFlowCtrlCap; /* Flow Control Capabilities */
  298. SK_U8 PFlowCtrlMode; /* Flow Control Mode */
  299. SK_U8 PFlowCtrlStatus;/* Flow Control Status */
  300. SK_U8 PMSCap; /* Master/Slave Capabilities */
  301. SK_U8 PMSMode; /* Master/Slave Mode */
  302. SK_U8 PMSStatus; /* Master/Slave Status */
  303. SK_BOOL PAutoNegFail; /* Auto-negotiation fail flag */
  304. SK_U8 PLipaAutoNeg; /* Auto-negotiation possible with Link Partner */
  305. SK_U8 PCableLen; /* Cable Length */
  306. SK_U8 PMdiPairLen[4]; /* MDI[0..3] Pair Length */
  307. SK_U8 PMdiPairSts[4]; /* MDI[0..3] Pair Diagnostic Status */
  308. SK_U8 PPhyPowerState; /* PHY current power state */
  309. int PMacColThres; /* MAC Collision Threshold */
  310. int PMacJamLen; /* MAC Jam length */
  311. int PMacJamIpgVal; /* MAC Jam IPG */
  312. int PMacJamIpgData; /* MAC IPG Jam to Data */
  313. int PMacIpgData; /* MAC Data IPG */
  314. SK_BOOL PMacLimit4; /* reset collision counter and backoff algorithm */
  315. } SK_GEPORT;
  316. /*
  317. * Gigabit Ethernet Initialization Struct
  318. * (has to be included in the adapter context)
  319. */
  320. typedef struct s_GeInit {
  321. int GIChipId; /* Chip Identification Number */
  322. int GIChipRev; /* Chip Revision Number */
  323. SK_U8 GIPciHwRev; /* PCI HW Revision Number */
  324. SK_BOOL GIGenesis; /* Genesis adapter ? */
  325. SK_BOOL GIYukon; /* YUKON-A1/Bx chip */
  326. SK_BOOL GIYukonLite; /* YUKON-Lite chip */
  327. SK_BOOL GICopperType; /* Copper Type adapter ? */
  328. SK_BOOL GIPciSlot64; /* 64-bit PCI Slot */
  329. SK_BOOL GIPciClock66; /* 66 MHz PCI Clock */
  330. SK_BOOL GIVauxAvail; /* VAUX available (YUKON) */
  331. SK_BOOL GIYukon32Bit; /* 32-Bit YUKON adapter */
  332. SK_U16 GILedBlinkCtrl; /* LED Blink Control */
  333. int GIMacsFound; /* Number of MACs found on this adapter */
  334. int GIMacType; /* MAC Type used on this adapter */
  335. int GIHstClkFact; /* Host Clock Factor (62.5 / HstClk * 100) */
  336. int GIPortUsage; /* Driver Port Usage */
  337. int GILevel; /* Initialization Level completed */
  338. int GIRamSize; /* The RAM size of the adapter in kB */
  339. int GIWolOffs; /* WOL Register Offset (HW-Bug in Rev. A) */
  340. SK_U32 GIRamOffs; /* RAM Address Offset for addr calculation */
  341. SK_U32 GIPollTimerVal; /* Descr. Poll Timer Init Val (HstClk ticks) */
  342. SK_U32 GIValIrqMask; /* Value for Interrupt Mask */
  343. SK_U32 GITimeStampCnt; /* Time Stamp High Counter (YUKON only) */
  344. SK_GEPORT GP[SK_MAX_MACS];/* Port Dependent Information */
  345. SK_GEMACFUNC GIFunc; /* MAC depedent functions */
  346. } SK_GEINIT;
  347. /*
  348. * Error numbers and messages for skxmac2.c and skgeinit.c
  349. */
  350. #define SKERR_HWI_E001 (SK_ERRBASE_HWINIT)
  351. #define SKERR_HWI_E001MSG "SkXmClrExactAddr() has got illegal parameters"
  352. #define SKERR_HWI_E002 (SKERR_HWI_E001+1)
  353. #define SKERR_HWI_E002MSG "SkGeInit(): Level 1 call missing"
  354. #define SKERR_HWI_E003 (SKERR_HWI_E002+1)
  355. #define SKERR_HWI_E003MSG "SkGeInit() called with illegal init Level"
  356. #define SKERR_HWI_E004 (SKERR_HWI_E003+1)
  357. #define SKERR_HWI_E004MSG "SkGeInitPort(): Queue Size illegal configured"
  358. #define SKERR_HWI_E005 (SKERR_HWI_E004+1)
  359. #define SKERR_HWI_E005MSG "SkGeInitPort(): cannot init running ports"
  360. #define SKERR_HWI_E006 (SKERR_HWI_E005+1)
  361. #define SKERR_HWI_E006MSG "SkGeMacInit(): PState does not match HW state"
  362. #define SKERR_HWI_E007 (SKERR_HWI_E006+1)
  363. #define SKERR_HWI_E007MSG "SkXmInitDupMd() called with invalid Dup Mode"
  364. #define SKERR_HWI_E008 (SKERR_HWI_E007+1)
  365. #define SKERR_HWI_E008MSG "SkXmSetRxCmd() called with invalid Mode"
  366. #define SKERR_HWI_E009 (SKERR_HWI_E008+1)
  367. #define SKERR_HWI_E009MSG "SkGeCfgSync() called although PXSQSize zero"
  368. #define SKERR_HWI_E010 (SKERR_HWI_E009+1)
  369. #define SKERR_HWI_E010MSG "SkGeCfgSync() called with invalid parameters"
  370. #define SKERR_HWI_E011 (SKERR_HWI_E010+1)
  371. #define SKERR_HWI_E011MSG "SkGeInitPort(): Receive Queue Size too small"
  372. #define SKERR_HWI_E012 (SKERR_HWI_E011+1)
  373. #define SKERR_HWI_E012MSG "SkGeInitPort(): invalid Queue Size specified"
  374. #define SKERR_HWI_E013 (SKERR_HWI_E012+1)
  375. #define SKERR_HWI_E013MSG "SkGeInitPort(): cfg changed for running queue"
  376. #define SKERR_HWI_E014 (SKERR_HWI_E013+1)
  377. #define SKERR_HWI_E014MSG "SkGeInitPort(): unknown GIPortUsage specified"
  378. #define SKERR_HWI_E015 (SKERR_HWI_E014+1)
  379. #define SKERR_HWI_E015MSG "Illegal Link mode parameter"
  380. #define SKERR_HWI_E016 (SKERR_HWI_E015+1)
  381. #define SKERR_HWI_E016MSG "Illegal Flow control mode parameter"
  382. #define SKERR_HWI_E017 (SKERR_HWI_E016+1)
  383. #define SKERR_HWI_E017MSG "Illegal value specified for GIPollTimerVal"
  384. #define SKERR_HWI_E018 (SKERR_HWI_E017+1)
  385. #define SKERR_HWI_E018MSG "FATAL: SkGeStopPort() does not terminate (Tx)"
  386. #define SKERR_HWI_E019 (SKERR_HWI_E018+1)
  387. #define SKERR_HWI_E019MSG "Illegal Speed parameter"
  388. #define SKERR_HWI_E020 (SKERR_HWI_E019+1)
  389. #define SKERR_HWI_E020MSG "Illegal Master/Slave parameter"
  390. #define SKERR_HWI_E021 (SKERR_HWI_E020+1)
  391. #define SKERR_HWI_E021MSG "MacUpdateStats(): cannot update statistic counter"
  392. #define SKERR_HWI_E022 (SKERR_HWI_E021+1)
  393. #define SKERR_HWI_E022MSG "MacStatistic(): illegal statistic base address"
  394. #define SKERR_HWI_E023 (SKERR_HWI_E022+1)
  395. #define SKERR_HWI_E023MSG "SkGeInitPort(): Transmit Queue Size too small"
  396. #define SKERR_HWI_E024 (SKERR_HWI_E023+1)
  397. #define SKERR_HWI_E024MSG "FATAL: SkGeStopPort() does not terminate (Rx)"
  398. #define SKERR_HWI_E025 (SKERR_HWI_E024+1)
  399. #define SKERR_HWI_E025MSG ""
  400. /* function prototypes ********************************************************/
  401. #ifndef SK_KR_PROTO
  402. /*
  403. * public functions in skgeinit.c
  404. */
  405. extern void SkGePollTxD(
  406. SK_AC *pAC,
  407. SK_IOC IoC,
  408. int Port,
  409. SK_BOOL PollTxD);
  410. extern void SkGeYellowLED(
  411. SK_AC *pAC,
  412. SK_IOC IoC,
  413. int State);
  414. extern int SkGeCfgSync(
  415. SK_AC *pAC,
  416. SK_IOC IoC,
  417. int Port,
  418. SK_U32 IntTime,
  419. SK_U32 LimCount,
  420. int SyncMode);
  421. extern void SkGeLoadLnkSyncCnt(
  422. SK_AC *pAC,
  423. SK_IOC IoC,
  424. int Port,
  425. SK_U32 CntVal);
  426. extern void SkGeStopPort(
  427. SK_AC *pAC,
  428. SK_IOC IoC,
  429. int Port,
  430. int Dir,
  431. int RstMode);
  432. extern int SkGeInit(
  433. SK_AC *pAC,
  434. SK_IOC IoC,
  435. int Level);
  436. extern void SkGeDeInit(
  437. SK_AC *pAC,
  438. SK_IOC IoC);
  439. extern int SkGeInitPort(
  440. SK_AC *pAC,
  441. SK_IOC IoC,
  442. int Port);
  443. extern void SkGeXmitLED(
  444. SK_AC *pAC,
  445. SK_IOC IoC,
  446. int Led,
  447. int Mode);
  448. extern int SkGeInitAssignRamToQueues(
  449. SK_AC *pAC,
  450. int ActivePort,
  451. SK_BOOL DualNet);
  452. /*
  453. * public functions in skxmac2.c
  454. */
  455. extern void SkMacRxTxDisable(
  456. SK_AC *pAC,
  457. SK_IOC IoC,
  458. int Port);
  459. extern void SkMacSoftRst(
  460. SK_AC *pAC,
  461. SK_IOC IoC,
  462. int Port);
  463. extern void SkMacHardRst(
  464. SK_AC *pAC,
  465. SK_IOC IoC,
  466. int Port);
  467. extern void SkXmInitMac(
  468. SK_AC *pAC,
  469. SK_IOC IoC,
  470. int Port);
  471. extern void SkGmInitMac(
  472. SK_AC *pAC,
  473. SK_IOC IoC,
  474. int Port);
  475. extern void SkMacInitPhy(
  476. SK_AC *pAC,
  477. SK_IOC IoC,
  478. int Port,
  479. SK_BOOL DoLoop);
  480. extern void SkMacIrqDisable(
  481. SK_AC *pAC,
  482. SK_IOC IoC,
  483. int Port);
  484. extern void SkMacFlushTxFifo(
  485. SK_AC *pAC,
  486. SK_IOC IoC,
  487. int Port);
  488. extern void SkMacIrq(
  489. SK_AC *pAC,
  490. SK_IOC IoC,
  491. int Port);
  492. extern int SkMacAutoNegDone(
  493. SK_AC *pAC,
  494. SK_IOC IoC,
  495. int Port);
  496. extern void SkMacAutoNegLipaPhy(
  497. SK_AC *pAC,
  498. SK_IOC IoC,
  499. int Port,
  500. SK_U16 IStatus);
  501. extern int SkMacRxTxEnable(
  502. SK_AC *pAC,
  503. SK_IOC IoC,
  504. int Port);
  505. extern void SkMacPromiscMode(
  506. SK_AC *pAC,
  507. SK_IOC IoC,
  508. int Port,
  509. SK_BOOL Enable);
  510. extern void SkMacHashing(
  511. SK_AC *pAC,
  512. SK_IOC IoC,
  513. int Port,
  514. SK_BOOL Enable);
  515. extern void SkXmPhyRead(
  516. SK_AC *pAC,
  517. SK_IOC IoC,
  518. int Port,
  519. int Addr,
  520. SK_U16 SK_FAR *pVal);
  521. extern void SkXmPhyWrite(
  522. SK_AC *pAC,
  523. SK_IOC IoC,
  524. int Port,
  525. int Addr,
  526. SK_U16 Val);
  527. extern void SkGmPhyRead(
  528. SK_AC *pAC,
  529. SK_IOC IoC,
  530. int Port,
  531. int Addr,
  532. SK_U16 SK_FAR *pVal);
  533. extern void SkGmPhyWrite(
  534. SK_AC *pAC,
  535. SK_IOC IoC,
  536. int Port,
  537. int Addr,
  538. SK_U16 Val);
  539. extern void SkXmClrExactAddr(
  540. SK_AC *pAC,
  541. SK_IOC IoC,
  542. int Port,
  543. int StartNum,
  544. int StopNum);
  545. extern void SkXmAutoNegLipaXmac(
  546. SK_AC *pAC,
  547. SK_IOC IoC,
  548. int Port,
  549. SK_U16 IStatus);
  550. extern int SkXmUpdateStats(
  551. SK_AC *pAC,
  552. SK_IOC IoC,
  553. unsigned int Port);
  554. extern int SkGmUpdateStats(
  555. SK_AC *pAC,
  556. SK_IOC IoC,
  557. unsigned int Port);
  558. extern int SkXmMacStatistic(
  559. SK_AC *pAC,
  560. SK_IOC IoC,
  561. unsigned int Port,
  562. SK_U16 StatAddr,
  563. SK_U32 SK_FAR *pVal);
  564. extern int SkGmMacStatistic(
  565. SK_AC *pAC,
  566. SK_IOC IoC,
  567. unsigned int Port,
  568. SK_U16 StatAddr,
  569. SK_U32 SK_FAR *pVal);
  570. extern int SkXmResetCounter(
  571. SK_AC *pAC,
  572. SK_IOC IoC,
  573. unsigned int Port);
  574. extern int SkGmResetCounter(
  575. SK_AC *pAC,
  576. SK_IOC IoC,
  577. unsigned int Port);
  578. extern int SkXmOverflowStatus(
  579. SK_AC *pAC,
  580. SK_IOC IoC,
  581. unsigned int Port,
  582. SK_U16 IStatus,
  583. SK_U64 SK_FAR *pStatus);
  584. extern int SkGmOverflowStatus(
  585. SK_AC *pAC,
  586. SK_IOC IoC,
  587. unsigned int Port,
  588. SK_U16 MacStatus,
  589. SK_U64 SK_FAR *pStatus);
  590. extern int SkGmCableDiagStatus(
  591. SK_AC *pAC,
  592. SK_IOC IoC,
  593. int Port,
  594. SK_BOOL StartTest);
  595. #ifdef SK_DIAG
  596. extern void SkGePhyRead(
  597. SK_AC *pAC,
  598. SK_IOC IoC,
  599. int Port,
  600. int Addr,
  601. SK_U16 *pVal);
  602. extern void SkGePhyWrite(
  603. SK_AC *pAC,
  604. SK_IOC IoC,
  605. int Port,
  606. int Addr,
  607. SK_U16 Val);
  608. extern void SkMacSetRxCmd(
  609. SK_AC *pAC,
  610. SK_IOC IoC,
  611. int Port,
  612. int Mode);
  613. extern void SkMacCrcGener(
  614. SK_AC *pAC,
  615. SK_IOC IoC,
  616. int Port,
  617. SK_BOOL Enable);
  618. extern void SkMacTimeStamp(
  619. SK_AC *pAC,
  620. SK_IOC IoC,
  621. int Port,
  622. SK_BOOL Enable);
  623. extern void SkXmSendCont(
  624. SK_AC *pAC,
  625. SK_IOC IoC,
  626. int Port,
  627. SK_BOOL Enable);
  628. #endif /* SK_DIAG */
  629. #else /* SK_KR_PROTO */
  630. /*
  631. * public functions in skgeinit.c
  632. */
  633. extern void SkGePollTxD();
  634. extern void SkGeYellowLED();
  635. extern int SkGeCfgSync();
  636. extern void SkGeLoadLnkSyncCnt();
  637. extern void SkGeStopPort();
  638. extern int SkGeInit();
  639. extern void SkGeDeInit();
  640. extern int SkGeInitPort();
  641. extern void SkGeXmitLED();
  642. extern int SkGeInitAssignRamToQueues();
  643. /*
  644. * public functions in skxmac2.c
  645. */
  646. extern void SkMacRxTxDisable();
  647. extern void SkMacSoftRst();
  648. extern void SkMacHardRst();
  649. extern void SkMacInitPhy();
  650. extern int SkMacRxTxEnable();
  651. extern void SkMacPromiscMode();
  652. extern void SkMacHashing();
  653. extern void SkMacIrqDisable();
  654. extern void SkMacFlushTxFifo();
  655. extern void SkMacIrq();
  656. extern int SkMacAutoNegDone();
  657. extern void SkMacAutoNegLipaPhy();
  658. extern void SkXmInitMac();
  659. extern void SkXmPhyRead();
  660. extern void SkXmPhyWrite();
  661. extern void SkGmInitMac();
  662. extern void SkGmPhyRead();
  663. extern void SkGmPhyWrite();
  664. extern void SkXmClrExactAddr();
  665. extern void SkXmAutoNegLipaXmac();
  666. extern int SkXmUpdateStats();
  667. extern int SkGmUpdateStats();
  668. extern int SkXmMacStatistic();
  669. extern int SkGmMacStatistic();
  670. extern int SkXmResetCounter();
  671. extern int SkGmResetCounter();
  672. extern int SkXmOverflowStatus();
  673. extern int SkGmOverflowStatus();
  674. extern int SkGmCableDiagStatus();
  675. #ifdef SK_DIAG
  676. extern void SkGePhyRead();
  677. extern void SkGePhyWrite();
  678. extern void SkMacSetRxCmd();
  679. extern void SkMacCrcGener();
  680. extern void SkMacTimeStamp();
  681. extern void SkXmSendCont();
  682. #endif /* SK_DIAG */
  683. #endif /* SK_KR_PROTO */
  684. #ifdef __cplusplus
  685. }
  686. #endif /* __cplusplus */
  687. #endif /* __INC_SKGEINIT_H_ */