ixgb_hw.h 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792
  1. /*******************************************************************************
  2. Intel PRO/10GbE Linux driver
  3. Copyright(c) 1999 - 2008 Intel Corporation.
  4. This program is free software; you can redistribute it and/or modify it
  5. under the terms and conditions of the GNU General Public License,
  6. version 2, as published by the Free Software Foundation.
  7. This program is distributed in the hope it will be useful, but WITHOUT
  8. ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  9. FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
  10. more details.
  11. You should have received a copy of the GNU General Public License along with
  12. this program; if not, write to the Free Software Foundation, Inc.,
  13. 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
  14. The full GNU General Public License is included in this distribution in
  15. the file called "COPYING".
  16. Contact Information:
  17. Linux NICS <linux.nics@intel.com>
  18. e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
  19. Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
  20. *******************************************************************************/
  21. #ifndef _IXGB_HW_H_
  22. #define _IXGB_HW_H_
  23. #include <linux/mdio.h>
  24. #include "ixgb_osdep.h"
  25. /* Enums */
  26. typedef enum {
  27. ixgb_mac_unknown = 0,
  28. ixgb_82597,
  29. ixgb_num_macs
  30. } ixgb_mac_type;
  31. /* Types of physical layer modules */
  32. typedef enum {
  33. ixgb_phy_type_unknown = 0,
  34. ixgb_phy_type_g6005, /* 850nm, MM fiber, XPAK transceiver */
  35. ixgb_phy_type_g6104, /* 1310nm, SM fiber, XPAK transceiver */
  36. ixgb_phy_type_txn17201, /* 850nm, MM fiber, XPAK transceiver */
  37. ixgb_phy_type_txn17401, /* 1310nm, SM fiber, XENPAK transceiver */
  38. ixgb_phy_type_bcm /* SUN specific board */
  39. } ixgb_phy_type;
  40. /* XPAK transceiver vendors, for the SR adapters */
  41. typedef enum {
  42. ixgb_xpak_vendor_intel,
  43. ixgb_xpak_vendor_infineon
  44. } ixgb_xpak_vendor;
  45. /* Media Types */
  46. typedef enum {
  47. ixgb_media_type_unknown = 0,
  48. ixgb_media_type_fiber = 1,
  49. ixgb_media_type_copper = 2,
  50. ixgb_num_media_types
  51. } ixgb_media_type;
  52. /* Flow Control Settings */
  53. typedef enum {
  54. ixgb_fc_none = 0,
  55. ixgb_fc_rx_pause = 1,
  56. ixgb_fc_tx_pause = 2,
  57. ixgb_fc_full = 3,
  58. ixgb_fc_default = 0xFF
  59. } ixgb_fc_type;
  60. /* PCI bus types */
  61. typedef enum {
  62. ixgb_bus_type_unknown = 0,
  63. ixgb_bus_type_pci,
  64. ixgb_bus_type_pcix
  65. } ixgb_bus_type;
  66. /* PCI bus speeds */
  67. typedef enum {
  68. ixgb_bus_speed_unknown = 0,
  69. ixgb_bus_speed_33,
  70. ixgb_bus_speed_66,
  71. ixgb_bus_speed_100,
  72. ixgb_bus_speed_133,
  73. ixgb_bus_speed_reserved
  74. } ixgb_bus_speed;
  75. /* PCI bus widths */
  76. typedef enum {
  77. ixgb_bus_width_unknown = 0,
  78. ixgb_bus_width_32,
  79. ixgb_bus_width_64
  80. } ixgb_bus_width;
  81. #define IXGB_EEPROM_SIZE 64 /* Size in words */
  82. #define SPEED_10000 10000
  83. #define FULL_DUPLEX 2
  84. #define MIN_NUMBER_OF_DESCRIPTORS 8
  85. #define MAX_NUMBER_OF_DESCRIPTORS 0xFFF8 /* 13 bits in RDLEN/TDLEN, 128B aligned */
  86. #define IXGB_DELAY_BEFORE_RESET 10 /* allow 10ms after idling rx/tx units */
  87. #define IXGB_DELAY_AFTER_RESET 1 /* allow 1ms after the reset */
  88. #define IXGB_DELAY_AFTER_EE_RESET 10 /* allow 10ms after the EEPROM reset */
  89. #define IXGB_DELAY_USECS_AFTER_LINK_RESET 13 /* allow 13 microseconds after the reset */
  90. /* NOTE: this is MICROSECONDS */
  91. #define MAX_RESET_ITERATIONS 8 /* number of iterations to get things right */
  92. /* General Registers */
  93. #define IXGB_CTRL0 0x00000 /* Device Control Register 0 - RW */
  94. #define IXGB_CTRL1 0x00008 /* Device Control Register 1 - RW */
  95. #define IXGB_STATUS 0x00010 /* Device Status Register - RO */
  96. #define IXGB_EECD 0x00018 /* EEPROM/Flash Control/Data Register - RW */
  97. #define IXGB_MFS 0x00020 /* Maximum Frame Size - RW */
  98. /* Interrupt */
  99. #define IXGB_ICR 0x00080 /* Interrupt Cause Read - R/clr */
  100. #define IXGB_ICS 0x00088 /* Interrupt Cause Set - RW */
  101. #define IXGB_IMS 0x00090 /* Interrupt Mask Set/Read - RW */
  102. #define IXGB_IMC 0x00098 /* Interrupt Mask Clear - WO */
  103. /* Receive */
  104. #define IXGB_RCTL 0x00100 /* RX Control - RW */
  105. #define IXGB_FCRTL 0x00108 /* Flow Control Receive Threshold Low - RW */
  106. #define IXGB_FCRTH 0x00110 /* Flow Control Receive Threshold High - RW */
  107. #define IXGB_RDBAL 0x00118 /* RX Descriptor Base Low - RW */
  108. #define IXGB_RDBAH 0x0011C /* RX Descriptor Base High - RW */
  109. #define IXGB_RDLEN 0x00120 /* RX Descriptor Length - RW */
  110. #define IXGB_RDH 0x00128 /* RX Descriptor Head - RW */
  111. #define IXGB_RDT 0x00130 /* RX Descriptor Tail - RW */
  112. #define IXGB_RDTR 0x00138 /* RX Delay Timer Ring - RW */
  113. #define IXGB_RXDCTL 0x00140 /* Receive Descriptor Control - RW */
  114. #define IXGB_RAIDC 0x00148 /* Receive Adaptive Interrupt Delay Control - RW */
  115. #define IXGB_RXCSUM 0x00158 /* Receive Checksum Control - RW */
  116. #define IXGB_RA 0x00180 /* Receive Address Array Base - RW */
  117. #define IXGB_RAL 0x00180 /* Receive Address Low [0:15] - RW */
  118. #define IXGB_RAH 0x00184 /* Receive Address High [0:15] - RW */
  119. #define IXGB_MTA 0x00200 /* Multicast Table Array [0:127] - RW */
  120. #define IXGB_VFTA 0x00400 /* VLAN Filter Table Array [0:127] - RW */
  121. #define IXGB_REQ_RX_DESCRIPTOR_MULTIPLE 8
  122. /* Transmit */
  123. #define IXGB_TCTL 0x00600 /* TX Control - RW */
  124. #define IXGB_TDBAL 0x00608 /* TX Descriptor Base Low - RW */
  125. #define IXGB_TDBAH 0x0060C /* TX Descriptor Base High - RW */
  126. #define IXGB_TDLEN 0x00610 /* TX Descriptor Length - RW */
  127. #define IXGB_TDH 0x00618 /* TX Descriptor Head - RW */
  128. #define IXGB_TDT 0x00620 /* TX Descriptor Tail - RW */
  129. #define IXGB_TIDV 0x00628 /* TX Interrupt Delay Value - RW */
  130. #define IXGB_TXDCTL 0x00630 /* Transmit Descriptor Control - RW */
  131. #define IXGB_TSPMT 0x00638 /* TCP Segmentation PAD & Min Threshold - RW */
  132. #define IXGB_PAP 0x00640 /* Pause and Pace - RW */
  133. #define IXGB_REQ_TX_DESCRIPTOR_MULTIPLE 8
  134. /* Physical */
  135. #define IXGB_PCSC1 0x00700 /* PCS Control 1 - RW */
  136. #define IXGB_PCSC2 0x00708 /* PCS Control 2 - RW */
  137. #define IXGB_PCSS1 0x00710 /* PCS Status 1 - RO */
  138. #define IXGB_PCSS2 0x00718 /* PCS Status 2 - RO */
  139. #define IXGB_XPCSS 0x00720 /* 10GBASE-X PCS Status (or XGXS Lane Status) - RO */
  140. #define IXGB_UCCR 0x00728 /* Unilink Circuit Control Register */
  141. #define IXGB_XPCSTC 0x00730 /* 10GBASE-X PCS Test Control */
  142. #define IXGB_MACA 0x00738 /* MDI Autoscan Command and Address - RW */
  143. #define IXGB_APAE 0x00740 /* Autoscan PHY Address Enable - RW */
  144. #define IXGB_ARD 0x00748 /* Autoscan Read Data - RO */
  145. #define IXGB_AIS 0x00750 /* Autoscan Interrupt Status - RO */
  146. #define IXGB_MSCA 0x00758 /* MDI Single Command and Address - RW */
  147. #define IXGB_MSRWD 0x00760 /* MDI Single Read and Write Data - RW, RO */
  148. /* Wake-up */
  149. #define IXGB_WUFC 0x00808 /* Wake Up Filter Control - RW */
  150. #define IXGB_WUS 0x00810 /* Wake Up Status - RO */
  151. #define IXGB_FFLT 0x01000 /* Flexible Filter Length Table - RW */
  152. #define IXGB_FFMT 0x01020 /* Flexible Filter Mask Table - RW */
  153. #define IXGB_FTVT 0x01420 /* Flexible Filter Value Table - RW */
  154. /* Statistics */
  155. #define IXGB_TPRL 0x02000 /* Total Packets Received (Low) */
  156. #define IXGB_TPRH 0x02004 /* Total Packets Received (High) */
  157. #define IXGB_GPRCL 0x02008 /* Good Packets Received Count (Low) */
  158. #define IXGB_GPRCH 0x0200C /* Good Packets Received Count (High) */
  159. #define IXGB_BPRCL 0x02010 /* Broadcast Packets Received Count (Low) */
  160. #define IXGB_BPRCH 0x02014 /* Broadcast Packets Received Count (High) */
  161. #define IXGB_MPRCL 0x02018 /* Multicast Packets Received Count (Low) */
  162. #define IXGB_MPRCH 0x0201C /* Multicast Packets Received Count (High) */
  163. #define IXGB_UPRCL 0x02020 /* Unicast Packets Received Count (Low) */
  164. #define IXGB_UPRCH 0x02024 /* Unicast Packets Received Count (High) */
  165. #define IXGB_VPRCL 0x02028 /* VLAN Packets Received Count (Low) */
  166. #define IXGB_VPRCH 0x0202C /* VLAN Packets Received Count (High) */
  167. #define IXGB_JPRCL 0x02030 /* Jumbo Packets Received Count (Low) */
  168. #define IXGB_JPRCH 0x02034 /* Jumbo Packets Received Count (High) */
  169. #define IXGB_GORCL 0x02038 /* Good Octets Received Count (Low) */
  170. #define IXGB_GORCH 0x0203C /* Good Octets Received Count (High) */
  171. #define IXGB_TORL 0x02040 /* Total Octets Received (Low) */
  172. #define IXGB_TORH 0x02044 /* Total Octets Received (High) */
  173. #define IXGB_RNBC 0x02048 /* Receive No Buffers Count */
  174. #define IXGB_RUC 0x02050 /* Receive Undersize Count */
  175. #define IXGB_ROC 0x02058 /* Receive Oversize Count */
  176. #define IXGB_RLEC 0x02060 /* Receive Length Error Count */
  177. #define IXGB_CRCERRS 0x02068 /* CRC Error Count */
  178. #define IXGB_ICBC 0x02070 /* Illegal control byte in mid-packet Count */
  179. #define IXGB_ECBC 0x02078 /* Error Control byte in mid-packet Count */
  180. #define IXGB_MPC 0x02080 /* Missed Packets Count */
  181. #define IXGB_TPTL 0x02100 /* Total Packets Transmitted (Low) */
  182. #define IXGB_TPTH 0x02104 /* Total Packets Transmitted (High) */
  183. #define IXGB_GPTCL 0x02108 /* Good Packets Transmitted Count (Low) */
  184. #define IXGB_GPTCH 0x0210C /* Good Packets Transmitted Count (High) */
  185. #define IXGB_BPTCL 0x02110 /* Broadcast Packets Transmitted Count (Low) */
  186. #define IXGB_BPTCH 0x02114 /* Broadcast Packets Transmitted Count (High) */
  187. #define IXGB_MPTCL 0x02118 /* Multicast Packets Transmitted Count (Low) */
  188. #define IXGB_MPTCH 0x0211C /* Multicast Packets Transmitted Count (High) */
  189. #define IXGB_UPTCL 0x02120 /* Unicast Packets Transmitted Count (Low) */
  190. #define IXGB_UPTCH 0x02124 /* Unicast Packets Transmitted Count (High) */
  191. #define IXGB_VPTCL 0x02128 /* VLAN Packets Transmitted Count (Low) */
  192. #define IXGB_VPTCH 0x0212C /* VLAN Packets Transmitted Count (High) */
  193. #define IXGB_JPTCL 0x02130 /* Jumbo Packets Transmitted Count (Low) */
  194. #define IXGB_JPTCH 0x02134 /* Jumbo Packets Transmitted Count (High) */
  195. #define IXGB_GOTCL 0x02138 /* Good Octets Transmitted Count (Low) */
  196. #define IXGB_GOTCH 0x0213C /* Good Octets Transmitted Count (High) */
  197. #define IXGB_TOTL 0x02140 /* Total Octets Transmitted Count (Low) */
  198. #define IXGB_TOTH 0x02144 /* Total Octets Transmitted Count (High) */
  199. #define IXGB_DC 0x02148 /* Defer Count */
  200. #define IXGB_PLT64C 0x02150 /* Packet Transmitted was less than 64 bytes Count */
  201. #define IXGB_TSCTC 0x02170 /* TCP Segmentation Context Transmitted Count */
  202. #define IXGB_TSCTFC 0x02178 /* TCP Segmentation Context Tx Fail Count */
  203. #define IXGB_IBIC 0x02180 /* Illegal byte during Idle stream count */
  204. #define IXGB_RFC 0x02188 /* Remote Fault Count */
  205. #define IXGB_LFC 0x02190 /* Local Fault Count */
  206. #define IXGB_PFRC 0x02198 /* Pause Frame Receive Count */
  207. #define IXGB_PFTC 0x021A0 /* Pause Frame Transmit Count */
  208. #define IXGB_MCFRC 0x021A8 /* MAC Control Frames (non-Pause) Received Count */
  209. #define IXGB_MCFTC 0x021B0 /* MAC Control Frames (non-Pause) Transmitted Count */
  210. #define IXGB_XONRXC 0x021B8 /* XON Received Count */
  211. #define IXGB_XONTXC 0x021C0 /* XON Transmitted Count */
  212. #define IXGB_XOFFRXC 0x021C8 /* XOFF Received Count */
  213. #define IXGB_XOFFTXC 0x021D0 /* XOFF Transmitted Count */
  214. #define IXGB_RJC 0x021D8 /* Receive Jabber Count */
  215. /* CTRL0 Bit Masks */
  216. #define IXGB_CTRL0_LRST 0x00000008
  217. #define IXGB_CTRL0_JFE 0x00000010
  218. #define IXGB_CTRL0_XLE 0x00000020
  219. #define IXGB_CTRL0_MDCS 0x00000040
  220. #define IXGB_CTRL0_CMDC 0x00000080
  221. #define IXGB_CTRL0_SDP0 0x00040000
  222. #define IXGB_CTRL0_SDP1 0x00080000
  223. #define IXGB_CTRL0_SDP2 0x00100000
  224. #define IXGB_CTRL0_SDP3 0x00200000
  225. #define IXGB_CTRL0_SDP0_DIR 0x00400000
  226. #define IXGB_CTRL0_SDP1_DIR 0x00800000
  227. #define IXGB_CTRL0_SDP2_DIR 0x01000000
  228. #define IXGB_CTRL0_SDP3_DIR 0x02000000
  229. #define IXGB_CTRL0_RST 0x04000000
  230. #define IXGB_CTRL0_RPE 0x08000000
  231. #define IXGB_CTRL0_TPE 0x10000000
  232. #define IXGB_CTRL0_VME 0x40000000
  233. /* CTRL1 Bit Masks */
  234. #define IXGB_CTRL1_GPI0_EN 0x00000001
  235. #define IXGB_CTRL1_GPI1_EN 0x00000002
  236. #define IXGB_CTRL1_GPI2_EN 0x00000004
  237. #define IXGB_CTRL1_GPI3_EN 0x00000008
  238. #define IXGB_CTRL1_SDP4 0x00000010
  239. #define IXGB_CTRL1_SDP5 0x00000020
  240. #define IXGB_CTRL1_SDP6 0x00000040
  241. #define IXGB_CTRL1_SDP7 0x00000080
  242. #define IXGB_CTRL1_SDP4_DIR 0x00000100
  243. #define IXGB_CTRL1_SDP5_DIR 0x00000200
  244. #define IXGB_CTRL1_SDP6_DIR 0x00000400
  245. #define IXGB_CTRL1_SDP7_DIR 0x00000800
  246. #define IXGB_CTRL1_EE_RST 0x00002000
  247. #define IXGB_CTRL1_RO_DIS 0x00020000
  248. #define IXGB_CTRL1_PCIXHM_MASK 0x00C00000
  249. #define IXGB_CTRL1_PCIXHM_1_2 0x00000000
  250. #define IXGB_CTRL1_PCIXHM_5_8 0x00400000
  251. #define IXGB_CTRL1_PCIXHM_3_4 0x00800000
  252. #define IXGB_CTRL1_PCIXHM_7_8 0x00C00000
  253. /* STATUS Bit Masks */
  254. #define IXGB_STATUS_LU 0x00000002
  255. #define IXGB_STATUS_AIP 0x00000004
  256. #define IXGB_STATUS_TXOFF 0x00000010
  257. #define IXGB_STATUS_XAUIME 0x00000020
  258. #define IXGB_STATUS_RES 0x00000040
  259. #define IXGB_STATUS_RIS 0x00000080
  260. #define IXGB_STATUS_RIE 0x00000100
  261. #define IXGB_STATUS_RLF 0x00000200
  262. #define IXGB_STATUS_RRF 0x00000400
  263. #define IXGB_STATUS_PCI_SPD 0x00000800
  264. #define IXGB_STATUS_BUS64 0x00001000
  265. #define IXGB_STATUS_PCIX_MODE 0x00002000
  266. #define IXGB_STATUS_PCIX_SPD_MASK 0x0000C000
  267. #define IXGB_STATUS_PCIX_SPD_66 0x00000000
  268. #define IXGB_STATUS_PCIX_SPD_100 0x00004000
  269. #define IXGB_STATUS_PCIX_SPD_133 0x00008000
  270. #define IXGB_STATUS_REV_ID_MASK 0x000F0000
  271. #define IXGB_STATUS_REV_ID_SHIFT 16
  272. /* EECD Bit Masks */
  273. #define IXGB_EECD_SK 0x00000001
  274. #define IXGB_EECD_CS 0x00000002
  275. #define IXGB_EECD_DI 0x00000004
  276. #define IXGB_EECD_DO 0x00000008
  277. #define IXGB_EECD_FWE_MASK 0x00000030
  278. #define IXGB_EECD_FWE_DIS 0x00000010
  279. #define IXGB_EECD_FWE_EN 0x00000020
  280. /* MFS */
  281. #define IXGB_MFS_SHIFT 16
  282. /* Interrupt Register Bit Masks (used for ICR, ICS, IMS, and IMC) */
  283. #define IXGB_INT_TXDW 0x00000001
  284. #define IXGB_INT_TXQE 0x00000002
  285. #define IXGB_INT_LSC 0x00000004
  286. #define IXGB_INT_RXSEQ 0x00000008
  287. #define IXGB_INT_RXDMT0 0x00000010
  288. #define IXGB_INT_RXO 0x00000040
  289. #define IXGB_INT_RXT0 0x00000080
  290. #define IXGB_INT_AUTOSCAN 0x00000200
  291. #define IXGB_INT_GPI0 0x00000800
  292. #define IXGB_INT_GPI1 0x00001000
  293. #define IXGB_INT_GPI2 0x00002000
  294. #define IXGB_INT_GPI3 0x00004000
  295. /* RCTL Bit Masks */
  296. #define IXGB_RCTL_RXEN 0x00000002
  297. #define IXGB_RCTL_SBP 0x00000004
  298. #define IXGB_RCTL_UPE 0x00000008
  299. #define IXGB_RCTL_MPE 0x00000010
  300. #define IXGB_RCTL_RDMTS_MASK 0x00000300
  301. #define IXGB_RCTL_RDMTS_1_2 0x00000000
  302. #define IXGB_RCTL_RDMTS_1_4 0x00000100
  303. #define IXGB_RCTL_RDMTS_1_8 0x00000200
  304. #define IXGB_RCTL_MO_MASK 0x00003000
  305. #define IXGB_RCTL_MO_47_36 0x00000000
  306. #define IXGB_RCTL_MO_46_35 0x00001000
  307. #define IXGB_RCTL_MO_45_34 0x00002000
  308. #define IXGB_RCTL_MO_43_32 0x00003000
  309. #define IXGB_RCTL_MO_SHIFT 12
  310. #define IXGB_RCTL_BAM 0x00008000
  311. #define IXGB_RCTL_BSIZE_MASK 0x00030000
  312. #define IXGB_RCTL_BSIZE_2048 0x00000000
  313. #define IXGB_RCTL_BSIZE_4096 0x00010000
  314. #define IXGB_RCTL_BSIZE_8192 0x00020000
  315. #define IXGB_RCTL_BSIZE_16384 0x00030000
  316. #define IXGB_RCTL_VFE 0x00040000
  317. #define IXGB_RCTL_CFIEN 0x00080000
  318. #define IXGB_RCTL_CFI 0x00100000
  319. #define IXGB_RCTL_RPDA_MASK 0x00600000
  320. #define IXGB_RCTL_RPDA_MC_MAC 0x00000000
  321. #define IXGB_RCTL_MC_ONLY 0x00400000
  322. #define IXGB_RCTL_CFF 0x00800000
  323. #define IXGB_RCTL_SECRC 0x04000000
  324. #define IXGB_RDT_FPDB 0x80000000
  325. #define IXGB_RCTL_IDLE_RX_UNIT 0
  326. /* FCRTL Bit Masks */
  327. #define IXGB_FCRTL_XONE 0x80000000
  328. /* RXDCTL Bit Masks */
  329. #define IXGB_RXDCTL_PTHRESH_MASK 0x000001FF
  330. #define IXGB_RXDCTL_PTHRESH_SHIFT 0
  331. #define IXGB_RXDCTL_HTHRESH_MASK 0x0003FE00
  332. #define IXGB_RXDCTL_HTHRESH_SHIFT 9
  333. #define IXGB_RXDCTL_WTHRESH_MASK 0x07FC0000
  334. #define IXGB_RXDCTL_WTHRESH_SHIFT 18
  335. /* RAIDC Bit Masks */
  336. #define IXGB_RAIDC_HIGHTHRS_MASK 0x0000003F
  337. #define IXGB_RAIDC_DELAY_MASK 0x000FF800
  338. #define IXGB_RAIDC_DELAY_SHIFT 11
  339. #define IXGB_RAIDC_POLL_MASK 0x1FF00000
  340. #define IXGB_RAIDC_POLL_SHIFT 20
  341. #define IXGB_RAIDC_RXT_GATE 0x40000000
  342. #define IXGB_RAIDC_EN 0x80000000
  343. #define IXGB_RAIDC_POLL_1000_INTERRUPTS_PER_SECOND 1220
  344. #define IXGB_RAIDC_POLL_5000_INTERRUPTS_PER_SECOND 244
  345. #define IXGB_RAIDC_POLL_10000_INTERRUPTS_PER_SECOND 122
  346. #define IXGB_RAIDC_POLL_20000_INTERRUPTS_PER_SECOND 61
  347. /* RXCSUM Bit Masks */
  348. #define IXGB_RXCSUM_IPOFL 0x00000100
  349. #define IXGB_RXCSUM_TUOFL 0x00000200
  350. /* RAH Bit Masks */
  351. #define IXGB_RAH_ASEL_MASK 0x00030000
  352. #define IXGB_RAH_ASEL_DEST 0x00000000
  353. #define IXGB_RAH_ASEL_SRC 0x00010000
  354. #define IXGB_RAH_AV 0x80000000
  355. /* TCTL Bit Masks */
  356. #define IXGB_TCTL_TCE 0x00000001
  357. #define IXGB_TCTL_TXEN 0x00000002
  358. #define IXGB_TCTL_TPDE 0x00000004
  359. #define IXGB_TCTL_IDLE_TX_UNIT 0
  360. /* TXDCTL Bit Masks */
  361. #define IXGB_TXDCTL_PTHRESH_MASK 0x0000007F
  362. #define IXGB_TXDCTL_HTHRESH_MASK 0x00007F00
  363. #define IXGB_TXDCTL_HTHRESH_SHIFT 8
  364. #define IXGB_TXDCTL_WTHRESH_MASK 0x007F0000
  365. #define IXGB_TXDCTL_WTHRESH_SHIFT 16
  366. /* TSPMT Bit Masks */
  367. #define IXGB_TSPMT_TSMT_MASK 0x0000FFFF
  368. #define IXGB_TSPMT_TSPBP_MASK 0xFFFF0000
  369. #define IXGB_TSPMT_TSPBP_SHIFT 16
  370. /* PAP Bit Masks */
  371. #define IXGB_PAP_TXPC_MASK 0x0000FFFF
  372. #define IXGB_PAP_TXPV_MASK 0x000F0000
  373. #define IXGB_PAP_TXPV_10G 0x00000000
  374. #define IXGB_PAP_TXPV_1G 0x00010000
  375. #define IXGB_PAP_TXPV_2G 0x00020000
  376. #define IXGB_PAP_TXPV_3G 0x00030000
  377. #define IXGB_PAP_TXPV_4G 0x00040000
  378. #define IXGB_PAP_TXPV_5G 0x00050000
  379. #define IXGB_PAP_TXPV_6G 0x00060000
  380. #define IXGB_PAP_TXPV_7G 0x00070000
  381. #define IXGB_PAP_TXPV_8G 0x00080000
  382. #define IXGB_PAP_TXPV_9G 0x00090000
  383. #define IXGB_PAP_TXPV_WAN 0x000F0000
  384. /* PCSC1 Bit Masks */
  385. #define IXGB_PCSC1_LOOPBACK 0x00004000
  386. /* PCSC2 Bit Masks */
  387. #define IXGB_PCSC2_PCS_TYPE_MASK 0x00000003
  388. #define IXGB_PCSC2_PCS_TYPE_10GBX 0x00000001
  389. /* PCSS1 Bit Masks */
  390. #define IXGB_PCSS1_LOCAL_FAULT 0x00000080
  391. #define IXGB_PCSS1_RX_LINK_STATUS 0x00000004
  392. /* PCSS2 Bit Masks */
  393. #define IXGB_PCSS2_DEV_PRES_MASK 0x0000C000
  394. #define IXGB_PCSS2_DEV_PRES 0x00004000
  395. #define IXGB_PCSS2_TX_LF 0x00000800
  396. #define IXGB_PCSS2_RX_LF 0x00000400
  397. #define IXGB_PCSS2_10GBW 0x00000004
  398. #define IXGB_PCSS2_10GBX 0x00000002
  399. #define IXGB_PCSS2_10GBR 0x00000001
  400. /* XPCSS Bit Masks */
  401. #define IXGB_XPCSS_ALIGN_STATUS 0x00001000
  402. #define IXGB_XPCSS_PATTERN_TEST 0x00000800
  403. #define IXGB_XPCSS_LANE_3_SYNC 0x00000008
  404. #define IXGB_XPCSS_LANE_2_SYNC 0x00000004
  405. #define IXGB_XPCSS_LANE_1_SYNC 0x00000002
  406. #define IXGB_XPCSS_LANE_0_SYNC 0x00000001
  407. /* XPCSTC Bit Masks */
  408. #define IXGB_XPCSTC_BERT_TRIG 0x00200000
  409. #define IXGB_XPCSTC_BERT_SST 0x00100000
  410. #define IXGB_XPCSTC_BERT_PSZ_MASK 0x000C0000
  411. #define IXGB_XPCSTC_BERT_PSZ_SHIFT 17
  412. #define IXGB_XPCSTC_BERT_PSZ_INF 0x00000003
  413. #define IXGB_XPCSTC_BERT_PSZ_68 0x00000001
  414. #define IXGB_XPCSTC_BERT_PSZ_1028 0x00000000
  415. /* MSCA bit Masks */
  416. /* New Protocol Address */
  417. #define IXGB_MSCA_NP_ADDR_MASK 0x0000FFFF
  418. #define IXGB_MSCA_NP_ADDR_SHIFT 0
  419. /* Either Device Type or Register Address,depending on ST_CODE */
  420. #define IXGB_MSCA_DEV_TYPE_MASK 0x001F0000
  421. #define IXGB_MSCA_DEV_TYPE_SHIFT 16
  422. #define IXGB_MSCA_PHY_ADDR_MASK 0x03E00000
  423. #define IXGB_MSCA_PHY_ADDR_SHIFT 21
  424. #define IXGB_MSCA_OP_CODE_MASK 0x0C000000
  425. /* OP_CODE == 00, Address cycle, New Protocol */
  426. /* OP_CODE == 01, Write operation */
  427. /* OP_CODE == 10, Read operation */
  428. /* OP_CODE == 11, Read, auto increment, New Protocol */
  429. #define IXGB_MSCA_ADDR_CYCLE 0x00000000
  430. #define IXGB_MSCA_WRITE 0x04000000
  431. #define IXGB_MSCA_READ 0x08000000
  432. #define IXGB_MSCA_READ_AUTOINC 0x0C000000
  433. #define IXGB_MSCA_OP_CODE_SHIFT 26
  434. #define IXGB_MSCA_ST_CODE_MASK 0x30000000
  435. /* ST_CODE == 00, New Protocol */
  436. /* ST_CODE == 01, Old Protocol */
  437. #define IXGB_MSCA_NEW_PROTOCOL 0x00000000
  438. #define IXGB_MSCA_OLD_PROTOCOL 0x10000000
  439. #define IXGB_MSCA_ST_CODE_SHIFT 28
  440. /* Initiate command, self-clearing when command completes */
  441. #define IXGB_MSCA_MDI_COMMAND 0x40000000
  442. /*MDI In Progress Enable. */
  443. #define IXGB_MSCA_MDI_IN_PROG_EN 0x80000000
  444. /* MSRWD bit masks */
  445. #define IXGB_MSRWD_WRITE_DATA_MASK 0x0000FFFF
  446. #define IXGB_MSRWD_WRITE_DATA_SHIFT 0
  447. #define IXGB_MSRWD_READ_DATA_MASK 0xFFFF0000
  448. #define IXGB_MSRWD_READ_DATA_SHIFT 16
  449. /* Definitions for the optics devices on the MDIO bus. */
  450. #define IXGB_PHY_ADDRESS 0x0 /* Single PHY, multiple "Devices" */
  451. #define MDIO_PMA_PMD_XPAK_VENDOR_NAME 0x803A /* XPAK/XENPAK devices only */
  452. /* Vendor-specific MDIO registers */
  453. #define G6XXX_PMA_PMD_VS1 0xC001 /* Vendor-specific register */
  454. #define G6XXX_XGXS_XAUI_VS2 0x18 /* Vendor-specific register */
  455. #define G6XXX_PMA_PMD_VS1_PLL_RESET 0x80
  456. #define G6XXX_PMA_PMD_VS1_REMOVE_PLL_RESET 0x00
  457. #define G6XXX_XGXS_XAUI_VS2_INPUT_MASK 0x0F /* XAUI lanes synchronized */
  458. /* Layout of a single receive descriptor. The controller assumes that this
  459. * structure is packed into 16 bytes, which is a safe assumption with most
  460. * compilers. However, some compilers may insert padding between the fields,
  461. * in which case the structure must be packed in some compiler-specific
  462. * manner. */
  463. struct ixgb_rx_desc {
  464. __le64 buff_addr;
  465. __le16 length;
  466. __le16 reserved;
  467. u8 status;
  468. u8 errors;
  469. __le16 special;
  470. };
  471. #define IXGB_RX_DESC_STATUS_DD 0x01
  472. #define IXGB_RX_DESC_STATUS_EOP 0x02
  473. #define IXGB_RX_DESC_STATUS_IXSM 0x04
  474. #define IXGB_RX_DESC_STATUS_VP 0x08
  475. #define IXGB_RX_DESC_STATUS_TCPCS 0x20
  476. #define IXGB_RX_DESC_STATUS_IPCS 0x40
  477. #define IXGB_RX_DESC_STATUS_PIF 0x80
  478. #define IXGB_RX_DESC_ERRORS_CE 0x01
  479. #define IXGB_RX_DESC_ERRORS_SE 0x02
  480. #define IXGB_RX_DESC_ERRORS_P 0x08
  481. #define IXGB_RX_DESC_ERRORS_TCPE 0x20
  482. #define IXGB_RX_DESC_ERRORS_IPE 0x40
  483. #define IXGB_RX_DESC_ERRORS_RXE 0x80
  484. #define IXGB_RX_DESC_SPECIAL_VLAN_MASK 0x0FFF /* VLAN ID is in lower 12 bits */
  485. #define IXGB_RX_DESC_SPECIAL_PRI_MASK 0xE000 /* Priority is in upper 3 bits */
  486. #define IXGB_RX_DESC_SPECIAL_PRI_SHIFT 0x000D /* Priority is in upper 3 of 16 */
  487. /* Layout of a single transmit descriptor. The controller assumes that this
  488. * structure is packed into 16 bytes, which is a safe assumption with most
  489. * compilers. However, some compilers may insert padding between the fields,
  490. * in which case the structure must be packed in some compiler-specific
  491. * manner. */
  492. struct ixgb_tx_desc {
  493. __le64 buff_addr;
  494. __le32 cmd_type_len;
  495. u8 status;
  496. u8 popts;
  497. __le16 vlan;
  498. };
  499. #define IXGB_TX_DESC_LENGTH_MASK 0x000FFFFF
  500. #define IXGB_TX_DESC_TYPE_MASK 0x00F00000
  501. #define IXGB_TX_DESC_TYPE_SHIFT 20
  502. #define IXGB_TX_DESC_CMD_MASK 0xFF000000
  503. #define IXGB_TX_DESC_CMD_SHIFT 24
  504. #define IXGB_TX_DESC_CMD_EOP 0x01000000
  505. #define IXGB_TX_DESC_CMD_TSE 0x04000000
  506. #define IXGB_TX_DESC_CMD_RS 0x08000000
  507. #define IXGB_TX_DESC_CMD_VLE 0x40000000
  508. #define IXGB_TX_DESC_CMD_IDE 0x80000000
  509. #define IXGB_TX_DESC_TYPE 0x00100000
  510. #define IXGB_TX_DESC_STATUS_DD 0x01
  511. #define IXGB_TX_DESC_POPTS_IXSM 0x01
  512. #define IXGB_TX_DESC_POPTS_TXSM 0x02
  513. #define IXGB_TX_DESC_SPECIAL_PRI_SHIFT IXGB_RX_DESC_SPECIAL_PRI_SHIFT /* Priority is in upper 3 of 16 */
  514. struct ixgb_context_desc {
  515. u8 ipcss;
  516. u8 ipcso;
  517. __le16 ipcse;
  518. u8 tucss;
  519. u8 tucso;
  520. __le16 tucse;
  521. __le32 cmd_type_len;
  522. u8 status;
  523. u8 hdr_len;
  524. __le16 mss;
  525. };
  526. #define IXGB_CONTEXT_DESC_CMD_TCP 0x01000000
  527. #define IXGB_CONTEXT_DESC_CMD_IP 0x02000000
  528. #define IXGB_CONTEXT_DESC_CMD_TSE 0x04000000
  529. #define IXGB_CONTEXT_DESC_CMD_RS 0x08000000
  530. #define IXGB_CONTEXT_DESC_CMD_IDE 0x80000000
  531. #define IXGB_CONTEXT_DESC_TYPE 0x00000000
  532. #define IXGB_CONTEXT_DESC_STATUS_DD 0x01
  533. /* Filters */
  534. #define IXGB_MC_TBL_SIZE 128 /* Multicast Filter Table (4096 bits) */
  535. #define IXGB_VLAN_FILTER_TBL_SIZE 128 /* VLAN Filter Table (4096 bits) */
  536. #define IXGB_RAR_ENTRIES 3 /* Number of entries in Rx Address array */
  537. #define IXGB_MEMORY_REGISTER_BASE_ADDRESS 0
  538. #define ENET_HEADER_SIZE 14
  539. #define ENET_FCS_LENGTH 4
  540. #define IXGB_MAX_NUM_MULTICAST_ADDRESSES 128
  541. #define IXGB_MIN_ENET_FRAME_SIZE_WITHOUT_FCS 60
  542. #define IXGB_MAX_ENET_FRAME_SIZE_WITHOUT_FCS 1514
  543. #define IXGB_MAX_JUMBO_FRAME_SIZE 0x3F00
  544. /* Phy Addresses */
  545. #define IXGB_OPTICAL_PHY_ADDR 0x0 /* Optical Module phy address */
  546. #define IXGB_XAUII_PHY_ADDR 0x1 /* Xauii transceiver phy address */
  547. #define IXGB_DIAG_PHY_ADDR 0x1F /* Diagnostic Device phy address */
  548. /* This structure takes a 64k flash and maps it for identification commands */
  549. struct ixgb_flash_buffer {
  550. u8 manufacturer_id;
  551. u8 device_id;
  552. u8 filler1[0x2AA8];
  553. u8 cmd2;
  554. u8 filler2[0x2AAA];
  555. u8 cmd1;
  556. u8 filler3[0xAAAA];
  557. };
  558. /* Flow control parameters */
  559. struct ixgb_fc {
  560. u32 high_water; /* Flow Control High-water */
  561. u32 low_water; /* Flow Control Low-water */
  562. u16 pause_time; /* Flow Control Pause timer */
  563. bool send_xon; /* Flow control send XON */
  564. ixgb_fc_type type; /* Type of flow control */
  565. };
  566. /* The historical defaults for the flow control values are given below. */
  567. #define FC_DEFAULT_HI_THRESH (0x8000) /* 32KB */
  568. #define FC_DEFAULT_LO_THRESH (0x4000) /* 16KB */
  569. #define FC_DEFAULT_TX_TIMER (0x100) /* ~130 us */
  570. /* Phy definitions */
  571. #define IXGB_MAX_PHY_REG_ADDRESS 0xFFFF
  572. #define IXGB_MAX_PHY_ADDRESS 31
  573. #define IXGB_MAX_PHY_DEV_TYPE 31
  574. /* Bus parameters */
  575. struct ixgb_bus {
  576. ixgb_bus_speed speed;
  577. ixgb_bus_width width;
  578. ixgb_bus_type type;
  579. };
  580. struct ixgb_hw {
  581. u8 __iomem *hw_addr;/* Base Address of the hardware */
  582. void *back; /* Pointer to OS-dependent struct */
  583. struct ixgb_fc fc; /* Flow control parameters */
  584. struct ixgb_bus bus; /* Bus parameters */
  585. u32 phy_id; /* Phy Identifier */
  586. u32 phy_addr; /* XGMII address of Phy */
  587. ixgb_mac_type mac_type; /* Identifier for MAC controller */
  588. ixgb_phy_type phy_type; /* Transceiver/phy identifier */
  589. u32 max_frame_size; /* Maximum frame size supported */
  590. u32 mc_filter_type; /* Multicast filter hash type */
  591. u32 num_mc_addrs; /* Number of current Multicast addrs */
  592. u8 curr_mac_addr[ETH_ALEN]; /* Individual address currently programmed in MAC */
  593. u32 num_tx_desc; /* Number of Transmit descriptors */
  594. u32 num_rx_desc; /* Number of Receive descriptors */
  595. u32 rx_buffer_size; /* Size of Receive buffer */
  596. bool link_up; /* true if link is valid */
  597. bool adapter_stopped; /* State of adapter */
  598. u16 device_id; /* device id from PCI configuration space */
  599. u16 vendor_id; /* vendor id from PCI configuration space */
  600. u8 revision_id; /* revision id from PCI configuration space */
  601. u16 subsystem_vendor_id; /* subsystem vendor id from PCI configuration space */
  602. u16 subsystem_id; /* subsystem id from PCI configuration space */
  603. u32 bar0; /* Base Address registers */
  604. u32 bar1;
  605. u32 bar2;
  606. u32 bar3;
  607. u16 pci_cmd_word; /* PCI command register id from PCI configuration space */
  608. __le16 eeprom[IXGB_EEPROM_SIZE]; /* EEPROM contents read at init time */
  609. unsigned long io_base; /* Our I/O mapped location */
  610. u32 lastLFC;
  611. u32 lastRFC;
  612. };
  613. /* Statistics reported by the hardware */
  614. struct ixgb_hw_stats {
  615. u64 tprl;
  616. u64 tprh;
  617. u64 gprcl;
  618. u64 gprch;
  619. u64 bprcl;
  620. u64 bprch;
  621. u64 mprcl;
  622. u64 mprch;
  623. u64 uprcl;
  624. u64 uprch;
  625. u64 vprcl;
  626. u64 vprch;
  627. u64 jprcl;
  628. u64 jprch;
  629. u64 gorcl;
  630. u64 gorch;
  631. u64 torl;
  632. u64 torh;
  633. u64 rnbc;
  634. u64 ruc;
  635. u64 roc;
  636. u64 rlec;
  637. u64 crcerrs;
  638. u64 icbc;
  639. u64 ecbc;
  640. u64 mpc;
  641. u64 tptl;
  642. u64 tpth;
  643. u64 gptcl;
  644. u64 gptch;
  645. u64 bptcl;
  646. u64 bptch;
  647. u64 mptcl;
  648. u64 mptch;
  649. u64 uptcl;
  650. u64 uptch;
  651. u64 vptcl;
  652. u64 vptch;
  653. u64 jptcl;
  654. u64 jptch;
  655. u64 gotcl;
  656. u64 gotch;
  657. u64 totl;
  658. u64 toth;
  659. u64 dc;
  660. u64 plt64c;
  661. u64 tsctc;
  662. u64 tsctfc;
  663. u64 ibic;
  664. u64 rfc;
  665. u64 lfc;
  666. u64 pfrc;
  667. u64 pftc;
  668. u64 mcfrc;
  669. u64 mcftc;
  670. u64 xonrxc;
  671. u64 xontxc;
  672. u64 xoffrxc;
  673. u64 xofftxc;
  674. u64 rjc;
  675. };
  676. /* Function Prototypes */
  677. bool ixgb_adapter_stop(struct ixgb_hw *hw);
  678. bool ixgb_init_hw(struct ixgb_hw *hw);
  679. bool ixgb_adapter_start(struct ixgb_hw *hw);
  680. void ixgb_check_for_link(struct ixgb_hw *hw);
  681. bool ixgb_check_for_bad_link(struct ixgb_hw *hw);
  682. void ixgb_rar_set(struct ixgb_hw *hw, u8 *addr, u32 index);
  683. /* Filters (multicast, vlan, receive) */
  684. void ixgb_mc_addr_list_update(struct ixgb_hw *hw, u8 *mc_addr_list,
  685. u32 mc_addr_count, u32 pad);
  686. /* Vfta functions */
  687. void ixgb_write_vfta(struct ixgb_hw *hw, u32 offset, u32 value);
  688. /* Access functions to eeprom data */
  689. void ixgb_get_ee_mac_addr(struct ixgb_hw *hw, u8 *mac_addr);
  690. u32 ixgb_get_ee_pba_number(struct ixgb_hw *hw);
  691. u16 ixgb_get_ee_device_id(struct ixgb_hw *hw);
  692. bool ixgb_get_eeprom_data(struct ixgb_hw *hw);
  693. __le16 ixgb_get_eeprom_word(struct ixgb_hw *hw, u16 index);
  694. /* Everything else */
  695. void ixgb_led_on(struct ixgb_hw *hw);
  696. void ixgb_led_off(struct ixgb_hw *hw);
  697. void ixgb_write_pci_cfg(struct ixgb_hw *hw,
  698. u32 reg,
  699. u16 * value);
  700. #endif /* _IXGB_HW_H_ */