e100.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:34k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*******************************************************************************
  2.   
  3.   Copyright(c) 1999 - 2002 Intel Corporation. All rights reserved.
  4.   
  5.   This program is free software; you can redistribute it and/or modify it 
  6.   under the terms of the GNU General Public License as published by the Free 
  7.   Software Foundation; either version 2 of the License, or (at your option) 
  8.   any later version.
  9.   
  10.   This program is distributed in the hope that it will be useful, but WITHOUT 
  11.   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
  12.   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for 
  13.   more details.
  14.   
  15.   You should have received a copy of the GNU General Public License along with
  16.   this program; if not, write to the Free Software Foundation, Inc., 59 
  17.   Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  18.   
  19.   The full GNU General Public License is included in this distribution in the
  20.   file called LICENSE.
  21.   
  22.   Contact Information:
  23.   Linux NICS <linux.nics@intel.com>
  24.   Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
  25. *******************************************************************************/
  26. #ifndef _E100_INC_
  27. #define _E100_INC_
  28. #include <linux/module.h>
  29. #include <linux/types.h>
  30. #include <linux/init.h>
  31. #include <linux/mm.h>
  32. #include <linux/errno.h>
  33. #include <linux/ioport.h>
  34. #include <linux/pci.h>
  35. #include <linux/kernel.h>
  36. #include <linux/netdevice.h>
  37. #include <linux/etherdevice.h>
  38. #include <linux/skbuff.h>
  39. #include <linux/delay.h>
  40. #include <linux/timer.h>
  41. #include <linux/slab.h>
  42. #include <linux/interrupt.h>
  43. #include <linux/version.h>
  44. #include <linux/string.h>
  45. #include <linux/wait.h>
  46. #include <linux/reboot.h>
  47. #include <asm/io.h>
  48. #include <asm/unaligned.h>
  49. #include <asm/processor.h>
  50. #include <linux/ethtool.h>
  51. #include <linux/inetdevice.h>
  52. #include <linux/bitops.h>
  53. #include <linux/if.h>
  54. #include <asm/uaccess.h>
  55. #include <linux/proc_fs.h>
  56. #include <linux/ip.h>
  57. #define E100_REGS_LEN 1
  58. /*
  59.  *  Configure parameters for buffers per controller.
  60.  *  If the machine this is being used on is a faster machine (i.e. > 150MHz)
  61.  *  and running on a 10MBS network then more queueing of data occurs. This
  62.  *  may indicate the some of the numbers below should be adjusted.  Here are
  63.  *  some typical numbers:
  64.  *                             MAX_TCB 64
  65.  *                             MAX_RFD 64
  66.  *  The default numbers give work well on most systems tests so no real
  67.  *  adjustments really need to take place.  Also, if the machine is connected
  68.  *  to a 100MBS network the numbers described above can be lowered from the
  69.  *  defaults as considerably less data will be queued.
  70.  */
  71. #define TX_FRAME_CNT   8 /* consecutive transmit frames per interrupt */
  72. /* TX_FRAME_CNT must be less than MAX_TCB    */
  73. #define E100_DEFAULT_TCB   64
  74. #define E100_MIN_TCB       2*TX_FRAME_CNT + 3 /* make room for at least 2 interrupts */
  75. #define E100_MAX_TCB       1024
  76. #define E100_DEFAULT_RFD   64
  77. #define E100_MIN_RFD       8
  78. #define E100_MAX_RFD       1024
  79. #define E100_DEFAULT_XSUM         true
  80. #define E100_DEFAULT_BER          ZLOCK_MAX_ERRORS
  81. #define E100_DEFAULT_SPEED_DUPLEX 0
  82. #define E100_DEFAULT_FC           0
  83. #define E100_DEFAULT_IFS          true
  84. #define E100_DEFAULT_UCODE        true
  85. #define TX_THRSHLD     8
  86. /* IFS parameters */
  87. #define MIN_NUMBER_OF_TRANSMITS_100 1000
  88. #define MIN_NUMBER_OF_TRANSMITS_10  100
  89. #define E100_MAX_NIC 16
  90. #define E100_MAX_SCB_WAIT 100 /* Max udelays in wait_scb */
  91. #define E100_MAX_CU_IDLE_WAIT 50 /* Max udelays in wait_cus_idle */
  92. /* HWI feature related constant */
  93. #define HWI_MAX_LOOP                    100
  94. #define MAX_SAME_RESULTS 3
  95. #define HWI_REGISTER_GRANULARITY        80 /* register granularity = 80 Cm */
  96. #define HWI_NEAR_END_BOUNDARY           1000 /* Near end is defined as < 10 meters */
  97. /* CPUSAVER_BUNDLE_MAX: Sets the maximum number of frames that will be bundled.
  98.  * In some situations, such as the TCP windowing algorithm, it may be
  99.  * better to limit the growth of the bundle size than let it go as
  100.  * high as it can, because that could cause too much added latency.
  101.  * The default is six, because this is the number of packets in the
  102.  * default TCP window size.  A value of 1 would make CPUSaver indicate
  103.  * an interrupt for every frame received.  If you do not want to put
  104.  * a limit on the bundle size, set this value to xFFFF.
  105.  */
  106. #define E100_DEFAULT_CPUSAVER_BUNDLE_MAX 6
  107. #define E100_DEFAULT_CPUSAVER_INTERRUPT_DELAY 0x600
  108. #define E100_DEFAULT_BUNDLE_SMALL_FR false
  109. /* end of configurables */
  110. /* ====================================================================== */
  111. /*                                hw                                      */
  112. /* ====================================================================== */
  113. /* timeout for command completion */
  114. #define E100_CMD_WAIT   100 /* iterations */
  115. struct driver_stats {
  116. struct net_device_stats net_stats;
  117. unsigned long tx_late_col;
  118. unsigned long tx_ok_defrd;
  119. unsigned long tx_one_retry;
  120. unsigned long tx_mt_one_retry;
  121. unsigned long rcv_cdt_frames;
  122. unsigned long xmt_fc_pkts;
  123. unsigned long rcv_fc_pkts;
  124. unsigned long rcv_fc_unsupported;
  125. unsigned long xmt_tco_pkts;
  126. unsigned long rcv_tco_pkts;
  127. unsigned long rx_intr_pkts;
  128. };
  129. /* TODO: kill me when we can do C99 */
  130. #define false (0)
  131. #define true (1)
  132. /* Changed for 82558 and 82559 enhancements */
  133. /* defines for 82558/9 flow control CSR values */
  134. #define DFLT_FC_THLD       0x00 /* Rx FIFO threshold of 0.5KB free  */
  135. #define DFLT_FC_CMD        0x00 /* FC Command in CSR */
  136. /* ====================================================================== */
  137. /*                              equates                                   */
  138. /* ====================================================================== */
  139. /*
  140.  * These are general purpose defines 
  141.  */
  142. /* Bit Mask definitions */
  143. #define BIT_0       0x0001
  144. #define BIT_1       0x0002
  145. #define BIT_2       0x0004
  146. #define BIT_3       0x0008
  147. #define BIT_4       0x0010
  148. #define BIT_5       0x0020
  149. #define BIT_6       0x0040
  150. #define BIT_7       0x0080
  151. #define BIT_8       0x0100
  152. #define BIT_9       0x0200
  153. #define BIT_10      0x0400
  154. #define BIT_11      0x0800
  155. #define BIT_12      0x1000
  156. #define BIT_13      0x2000
  157. #define BIT_14      0x4000
  158. #define BIT_15      0x8000
  159. #define BIT_28      0x10000000
  160. #define BIT_0_2     0x0007
  161. #define BIT_0_3     0x000F
  162. #define BIT_0_4     0x001F
  163. #define BIT_0_5     0x003F
  164. #define BIT_0_6     0x007F
  165. #define BIT_0_7     0x00FF
  166. #define BIT_0_8     0x01FF
  167. #define BIT_0_13    0x3FFF
  168. #define BIT_0_15    0xFFFF
  169. #define BIT_1_2     0x0006
  170. #define BIT_1_3     0x000E
  171. #define BIT_2_5     0x003C
  172. #define BIT_3_4     0x0018
  173. #define BIT_4_5     0x0030
  174. #define BIT_4_6     0x0070
  175. #define BIT_4_7     0x00F0
  176. #define BIT_5_7     0x00E0
  177. #define BIT_5_12    0x1FE0
  178. #define BIT_5_15    0xFFE0
  179. #define BIT_6_7     0x00c0
  180. #define BIT_7_11    0x0F80
  181. #define BIT_8_10    0x0700
  182. #define BIT_9_13    0x3E00
  183. #define BIT_12_15   0xF000
  184. #define BIT_8_15    0xFF00
  185. #define BIT_16_20   0x001F0000
  186. #define BIT_21_25   0x03E00000
  187. #define BIT_26_27   0x0C000000
  188. /* Transmit Threshold related constants */
  189. #define DEFAULT_TX_PER_UNDERRUN         20000
  190. #define MAX_MULTICAST_ADDRS             64
  191. #define MAX_FILTER                      16
  192. #define FULL_DUPLEX      2
  193. #define HALF_DUPLEX      1
  194. /*
  195.  * These defines are specific to the 82557 
  196.  */
  197. /* E100 PORT functions -- lower 4 bits */
  198. #define PORT_SOFTWARE_RESET         0
  199. #define PORT_SELFTEST               1
  200. #define PORT_SELECTIVE_RESET        2
  201. #define PORT_DUMP                   3
  202. /* SCB Status Word bit definitions */
  203. /* Interrupt status/ack fields */
  204. /* ER and FCP interrupts for 82558 masks  */
  205. #define SCB_STATUS_ACK_MASK        BIT_8_15 /* Status Mask */
  206. #define SCB_STATUS_ACK_CX          BIT_15 /* CU Completed Action Cmd */
  207. #define SCB_STATUS_ACK_FR          BIT_14 /* RU Received A Frame */
  208. #define SCB_STATUS_ACK_CNA         BIT_13 /* CU Became Inactive (IDLE) */
  209. #define SCB_STATUS_ACK_RNR         BIT_12 /* RU Became Not Ready */
  210. #define SCB_STATUS_ACK_MDI         BIT_11 /* MDI read or write done */
  211. #define SCB_STATUS_ACK_SWI         BIT_10 /* S/W generated interrupt */
  212. #define SCB_STATUS_ACK_ER          BIT_9 /* Early Receive */
  213. #define SCB_STATUS_ACK_FCP         BIT_8 /* Flow Control Pause */
  214. /*- CUS Fields */
  215. #define SCB_CUS_MASK            (BIT_6 | BIT_7) /* CUS 2-bit Mask */
  216. #define SCB_CUS_IDLE            0 /* CU Idle */
  217. #define SCB_CUS_SUSPEND         BIT_6 /* CU Suspended */
  218. #define SCB_CUS_ACTIVE          BIT_7 /* CU Active */
  219. /*- RUS Fields */
  220. #define SCB_RUS_IDLE            0 /* RU Idle */
  221. #define SCB_RUS_MASK            BIT_2_5 /* RUS 3-bit Mask */
  222. #define SCB_RUS_SUSPEND         BIT_2 /* RU Suspended */
  223. #define SCB_RUS_NO_RESOURCES    BIT_3 /* RU Out Of Resources */
  224. #define SCB_RUS_READY           BIT_4 /* RU Ready */
  225. #define SCB_RUS_SUSP_NO_RBDS    (BIT_2 | BIT_5) /* RU No More RBDs */
  226. #define SCB_RUS_NO_RBDS         (BIT_3 | BIT_5) /* RU No More RBDs */
  227. #define SCB_RUS_READY_NO_RBDS   (BIT_4 | BIT_5) /* RU Ready, No RBDs */
  228. /* SCB Command Word bit definitions */
  229. /*- CUC fields */
  230. /* Changing mask to 4 bits */
  231. #define SCB_CUC_MASK            BIT_4_7 /* CUC 4-bit Mask */
  232. #define SCB_CUC_NOOP            0
  233. #define SCB_CUC_START           BIT_4 /* CU Start */
  234. #define SCB_CUC_RESUME          BIT_5 /* CU Resume */
  235. /* Changed for 82558 enhancements */
  236. #define SCB_CUC_STATIC_RESUME   (BIT_5 | BIT_7) /* 82558/9 Static Resume */
  237. #define SCB_CUC_DUMP_ADDR       BIT_6 /* CU Dump Counters Address */
  238. #define SCB_CUC_DUMP_STAT       (BIT_4 | BIT_6) /* CU Dump stat. counters */
  239. #define SCB_CUC_LOAD_BASE       (BIT_5 | BIT_6) /* Load the CU base */
  240. /* Below was defined as BIT_4_7 */
  241. #define SCB_CUC_DUMP_RST_STAT   BIT_4_6 /* CU Dump & reset statistics cntrs */
  242. /*- RUC fields */
  243. #define SCB_RUC_MASK            BIT_0_2 /* RUC 3-bit Mask */
  244. #define SCB_RUC_START           BIT_0 /* RU Start */
  245. #define SCB_RUC_RESUME          BIT_1 /* RU Resume */
  246. #define SCB_RUC_ABORT           BIT_2 /* RU Abort */
  247. #define SCB_RUC_LOAD_HDS        (BIT_0 | BIT_2) /* Load RFD Header Data Size */
  248. #define SCB_RUC_LOAD_BASE       (BIT_1 | BIT_2) /* Load the RU base */
  249. #define SCB_RUC_RBD_RESUME      BIT_0_2 /* RBD resume */
  250. /* Interrupt fields (assuming byte addressing) */
  251. #define SCB_INT_MASK            BIT_0 /* Mask interrupts */
  252. #define SCB_SOFT_INT            BIT_1 /* Generate a S/W interrupt */
  253. /*  Specific Interrupt Mask Bits (upper byte of SCB Command word) */
  254. #define SCB_FCP_INT_MASK        BIT_2 /* Flow Control Pause */
  255. #define SCB_ER_INT_MASK         BIT_3 /* Early Receive */
  256. #define SCB_RNR_INT_MASK        BIT_4 /* RU Not Ready */
  257. #define SCB_CNA_INT_MASK        BIT_5 /* CU Not Active */
  258. #define SCB_FR_INT_MASK         BIT_6 /* Frame Received */
  259. #define SCB_CX_INT_MASK         BIT_7 /* CU eXecution w/ I-bit done */
  260. #define SCB_BACHELOR_INT_MASK   BIT_2_7 /* 82558 interrupt mask bits */
  261. #define SCB_GCR2_EEPROM_ACCESS_SEMAPHORE BIT_7
  262. /* EEPROM bit definitions */
  263. /*- EEPROM control register bits */
  264. #define EN_TRNF          0x10 /* Enable turnoff */
  265. #define EEDO             0x08 /* EEPROM data out */
  266. #define EEDI             0x04 /* EEPROM data in (set for writing data) */
  267. #define EECS             0x02 /* EEPROM chip select (1=hi, 0=lo) */
  268. #define EESK             0x01 /* EEPROM shift clock (1=hi, 0=lo) */
  269. /*- EEPROM opcodes */
  270. #define EEPROM_READ_OPCODE          06
  271. #define EEPROM_WRITE_OPCODE         05
  272. #define EEPROM_ERASE_OPCODE         07
  273. #define EEPROM_EWEN_OPCODE          19 /* Erase/write enable */
  274. #define EEPROM_EWDS_OPCODE          16 /* Erase/write disable */
  275. /*- EEPROM data locations */
  276. #define EEPROM_NODE_ADDRESS_BYTE_0      0
  277. #define EEPROM_COMPATIBILITY_WORD       3
  278. #define EEPROM_PWA_NO                   8
  279. #define EEPROM_ID_WORD 0x0A
  280. #define EEPROM_SUM                      0xbaba
  281. // Zero Locking Algorithm definitions:
  282. #define ZLOCK_ZERO_MASK 0x00F0
  283. #define ZLOCK_MAX_READS 50
  284. #define ZLOCK_SET_ZERO 0x2010
  285. #define ZLOCK_MAX_SLEEP 300 * HZ
  286. #define ZLOCK_MAX_ERRORS 300
  287. /* E100 Action Commands */
  288. #define CB_IA_ADDRESS           1
  289. #define CB_CONFIGURE            2
  290. #define CB_MULTICAST            3
  291. #define CB_TRANSMIT             4
  292. #define CB_LOAD_MICROCODE       5
  293. #define CB_LOAD_FILTER 8
  294. #define CB_MAX_NONTX_CMD        9
  295. #define CB_IPCB_TRANSMIT        9
  296. /* Pre-defined Filter Bits */
  297. #define CB_FILTER_EL            0x80000000
  298. #define CB_FILTER_FIX           0x40000000
  299. #define CB_FILTER_ARP           0x08000000
  300. #define CB_FILTER_IA_MATCH      0x02000000
  301. /* Command Block (CB) Field Definitions */
  302. /*- CB Command Word */
  303. #define CB_EL_BIT           BIT_15 /* CB EL Bit */
  304. #define CB_S_BIT            BIT_14 /* CB Suspend Bit */
  305. #define CB_I_BIT            BIT_13 /* CB Interrupt Bit */
  306. #define CB_TX_SF_BIT        BIT_3 /* TX CB Flexible Mode */
  307. #define CB_CMD_MASK         BIT_0_3 /* CB 4-bit CMD Mask */
  308. #define CB_CID_DEFAULT      (0x1f << 8) /* CB 5-bit CID (max value) */
  309. /*- CB Status Word */
  310. #define CB_STATUS_MASK          BIT_12_15 /* CB Status Mask (4-bits) */
  311. #define CB_STATUS_COMPLETE      BIT_15 /* CB Complete Bit */
  312. #define CB_STATUS_OK            BIT_13 /* CB OK Bit */
  313. #define CB_STATUS_UNDERRUN      BIT_12 /* CB A Bit */
  314. #define CB_STATUS_FAIL          BIT_11 /* CB Fail (F) Bit */
  315. /*misc command bits */
  316. #define CB_TX_EOF_BIT           BIT_15 /* TX CB/TBD EOF Bit */
  317. /* Config params */
  318. #define CB_CFIG_BYTE_COUNT          22 /* 22 config bytes */
  319. #define CB_CFIG_D102_BYTE_COUNT    10
  320. /* Receive Frame Descriptor Fields */
  321. /*- RFD Status Bits */
  322. #define RFD_RECEIVE_COLLISION   BIT_0 /* Collision detected on Receive */
  323. #define RFD_IA_MATCH            BIT_1 /* Indv Address Match Bit */
  324. #define RFD_RX_ERR              BIT_4 /* RX_ERR pin on Phy was set */
  325. #define RFD_FRAME_TOO_SHORT     BIT_7 /* Receive Frame Short */
  326. #define RFD_DMA_OVERRUN         BIT_8 /* Receive DMA Overrun */
  327. #define RFD_NO_RESOURCES        BIT_9 /* No Buffer Space */
  328. #define RFD_ALIGNMENT_ERROR     BIT_10 /* Alignment Error */
  329. #define RFD_CRC_ERROR           BIT_11 /* CRC Error */
  330. #define RFD_STATUS_OK           BIT_13 /* RFD OK Bit */
  331. #define RFD_STATUS_COMPLETE     BIT_15 /* RFD Complete Bit */
  332. /*- RFD Command Bits*/
  333. #define RFD_EL_BIT      BIT_15 /* RFD EL Bit */
  334. #define RFD_S_BIT       BIT_14 /* RFD Suspend Bit */
  335. #define RFD_H_BIT       BIT_4 /* Header RFD Bit */
  336. #define RFD_SF_BIT      BIT_3 /* RFD Flexible Mode */
  337. /*- RFD misc bits*/
  338. #define RFD_EOF_BIT         BIT_15 /* RFD End-Of-Frame Bit */
  339. #define RFD_F_BIT           BIT_14 /* RFD Buffer Fetch Bit */
  340. #define RFD_ACT_COUNT_MASK  BIT_0_13 /* RFD Actual Count Mask */
  341. /* Receive Buffer Descriptor Fields*/
  342. #define RBD_EOF_BIT             BIT_15 /* RBD End-Of-Frame Bit */
  343. #define RBD_F_BIT               BIT_14 /* RBD Buffer Fetch Bit */
  344. #define RBD_ACT_COUNT_MASK      BIT_0_13 /* RBD Actual Count Mask */
  345. #define SIZE_FIELD_MASK     BIT_0_13 /* Size of the associated buffer */
  346. #define RBD_EL_BIT          BIT_15 /* RBD EL Bit */
  347. /* Self Test Results*/
  348. #define CB_SELFTEST_FAIL_BIT        BIT_12
  349. #define CB_SELFTEST_DIAG_BIT        BIT_5
  350. #define CB_SELFTEST_REGISTER_BIT    BIT_3
  351. #define CB_SELFTEST_ROM_BIT         BIT_2
  352. #define CB_SELFTEST_ERROR_MASK ( 
  353.                 CB_SELFTEST_FAIL_BIT | CB_SELFTEST_DIAG_BIT | 
  354.                 CB_SELFTEST_REGISTER_BIT | CB_SELFTEST_ROM_BIT)
  355. /* adapter vendor & device ids */
  356. #define PCI_OHIO_BOARD   0x10f0 /* subdevice ID, Ohio dual port nic */
  357. /* Values for PCI_REV_ID_REGISTER values */
  358. #define D101A4_REV_ID      4 /* 82558 A4 stepping */
  359. #define D101B0_REV_ID      5 /* 82558 B0 stepping */
  360. #define D101MA_REV_ID      8 /* 82559 A0 stepping */
  361. #define D101S_REV_ID      9 /* 82559S A-step */
  362. #define D102_REV_ID      12
  363. #define D102C_REV_ID     13 /* 82550 step C */
  364. #define D102E_REV_ID     15
  365. /* ############Start of 82555 specific defines################## */
  366. #define PHY_82555_LED_SWITCH_CONTROL     0x1b /* 82555 led switch control register */
  367. /* 82555 led switch control reg. opcodes */
  368. #define PHY_82555_LED_NORMAL_CONTROL    0 // control back to the 8255X
  369. #define PHY_82555_LED_DRIVER_CONTROL    BIT_2 // the driver is in control
  370. #define PHY_82555_LED_OFF               BIT_2 // activity LED is off
  371. #define PHY_82555_LED_ON_559           (BIT_0 | BIT_2) // activity LED is on for 559 and later
  372. #define PHY_82555_LED_ON_PRE_559       (BIT_0 | BIT_1 | BIT_2) // activity LED is on for 558 and before
  373. // Describe the state of the phy led.
  374. // needed for the function : 'e100_blink_timer'
  375. enum led_state_e {
  376. LED_OFF = 0,
  377. LED_ON,
  378. };
  379. /* ############End of 82555 specific defines##################### */
  380. #define RFD_PARSE_BIT BIT_3
  381. #define RFD_TCP_PACKET 0x00
  382. #define RFD_UDP_PACKET 0x01
  383. #define TCPUDP_CHECKSUM_BIT_VALID BIT_4
  384. #define TCPUDP_CHECKSUM_VALID BIT_5
  385. #define CHECKSUM_PROTOCOL_MASK 0x03
  386. #define VLAN_SIZE   4
  387. #define CHKSUM_SIZE 2
  388. #define RFD_DATA_SIZE (ETH_FRAME_LEN + CHKSUM_SIZE + VLAN_SIZE)
  389. /* Bits for bdp->flags */
  390. #define DF_LINK_FC_CAP     0x00000001 /* Link is flow control capable */
  391. #define DF_CSUM_OFFLOAD    0x00000002
  392. #define DF_UCODE_LOADED    0x00000004
  393. #define USE_IPCB           0x00000008 /* set if using ipcb for transmits */
  394. #define IS_BACHELOR        0x00000010 /* set if 82558 or newer board */
  395. #define IS_ICH             0x00000020
  396. #define DF_SPEED_FORCED    0x00000040 /* set if speed is forced */
  397. #define LED_IS_ON    0x00000080 /* LED is turned ON by the driver */
  398. #define DF_LINK_FC_TX_ONLY 0x00000100 /* Received PAUSE frames are honored*/
  399. typedef struct net_device_stats net_dev_stats_t;
  400. /* needed macros */
  401. /* These macros use the bdp pointer. If you use them it better be defined */
  402. #define PREV_TCB_USED(X)  ((X).tail ? (X).tail - 1 : bdp->params.TxDescriptors - 1)
  403. #define NEXT_TCB_TOUSE(X) ((((X) + 1) >= bdp->params.TxDescriptors) ? 0 : (X) + 1)
  404. #define TCB_TO_USE(X)     ((X).tail)
  405. #define TCBS_AVAIL(X)     (NEXT_TCB_TOUSE( NEXT_TCB_TOUSE((X).tail)) != (X).head)
  406. #define RFD_POINTER(skb,bdp)      ((rfd_t *) (((unsigned char *)((skb)->data))-((bdp)->rfd_size)))
  407. #define SKB_RFD_STATUS(skb,bdp)   ((RFD_POINTER((skb),(bdp)))->rfd_header.cb_status)
  408. /* ====================================================================== */
  409. /*                              82557                                     */
  410. /* ====================================================================== */
  411. /* Changed for 82558 enhancement */
  412. typedef struct _d101_scb_ext_t {
  413. u32 scb_rx_dma_cnt; /* Rx DMA byte count */
  414. u8 scb_early_rx_int; /* Early Rx DMA byte count */
  415. u8 scb_fc_thld; /* Flow Control threshold */
  416. u8 scb_fc_xon_xoff; /* Flow Control XON/XOFF values */
  417. u8 scb_pmdr; /* Power Mgmt. Driver Reg */
  418. } d101_scb_ext __attribute__ ((__packed__));
  419. /* Changed for 82559 enhancement */
  420. typedef struct _d101m_scb_ext_t {
  421. u32 scb_rx_dma_cnt; /* Rx DMA byte count */
  422. u8 scb_early_rx_int; /* Early Rx DMA byte count */
  423. u8 scb_fc_thld; /* Flow Control threshold */
  424. u8 scb_fc_xon_xoff; /* Flow Control XON/XOFF values */
  425. u8 scb_pmdr; /* Power Mgmt. Driver Reg */
  426. u8 scb_gen_ctrl; /* General Control */
  427. u8 scb_gen_stat; /* General Status */
  428. u16 scb_reserved; /* Reserved */
  429. u32 scb_function_event; /* Cardbus Function Event */
  430. u32 scb_function_event_mask; /* Cardbus Function Mask */
  431. u32 scb_function_present_state; /* Cardbus Function state */
  432. u32 scb_force_event; /* Cardbus Force Event */
  433. } d101m_scb_ext __attribute__ ((__packed__));
  434. /* Changed for 82550 enhancement */
  435. typedef struct _d102_scb_ext_t {
  436. u32 scb_rx_dma_cnt; /* Rx DMA byte count */
  437. u8 scb_early_rx_int; /* Early Rx DMA byte count */
  438. u8 scb_fc_thld; /* Flow Control threshold */
  439. u8 scb_fc_xon_xoff; /* Flow Control XON/XOFF values */
  440. u8 scb_pmdr; /* Power Mgmt. Driver Reg */
  441. u8 scb_gen_ctrl; /* General Control */
  442. u8 scb_gen_stat; /* General Status */
  443. u8 scb_gen_ctrl2;
  444. u8 scb_reserved; /* Reserved */
  445. u32 scb_scheduling_reg;
  446. u32 scb_reserved2;
  447. u32 scb_function_event; /* Cardbus Function Event */
  448. u32 scb_function_event_mask; /* Cardbus Function Mask */
  449. u32 scb_function_present_state; /* Cardbus Function state */
  450. u32 scb_force_event; /* Cardbus Force Event */
  451. } d102_scb_ext __attribute__ ((__packed__));
  452. /*
  453.  * 82557 status control block. this will be memory mapped & will hang of the
  454.  * the bdp, which hangs of the bdp. This is the brain of it.
  455.  */
  456. typedef struct _scb_t {
  457. u16 scb_status; /* SCB Status register */
  458. u8 scb_cmd_low; /* SCB Command register (low byte) */
  459. u8 scb_cmd_hi; /* SCB Command register (high byte) */
  460. u32 scb_gen_ptr; /* SCB General pointer */
  461. u32 scb_port; /* PORT register */
  462. u16 scb_flsh_cntrl; /* Flash Control register */
  463. u16 scb_eprm_cntrl; /* EEPROM control register */
  464. u32 scb_mdi_cntrl; /* MDI Control Register */
  465. /* Changed for 82558 enhancement */
  466. union {
  467. u32 scb_rx_dma_cnt; /* Rx DMA byte count */
  468. d101_scb_ext d101_scb; /* 82558/9 specific fields */
  469. d101m_scb_ext d101m_scb; /* 82559 specific fields */
  470. d102_scb_ext d102_scb;
  471. } scb_ext;
  472. } scb_t __attribute__ ((__packed__));
  473. /* Self test
  474.  * This is used to dump results of the self test 
  475.  */
  476. typedef struct _self_test_t {
  477. u32 st_sign; /* Self Test Signature */
  478. u32 st_result; /* Self Test Results */
  479. } self_test_t __attribute__ ((__packed__));
  480. /* 
  481.  *  Statistical Counters 
  482.  */
  483. /* 82557 counters */
  484. typedef struct _basic_cntr_t {
  485. u32 xmt_gd_frames; /* Good frames transmitted */
  486. u32 xmt_max_coll; /* Fatal frames -- had max collisions */
  487. u32 xmt_late_coll; /* Fatal frames -- had a late coll. */
  488. u32 xmt_uruns; /* Xmit underruns (fatal or re-transmit) */
  489. u32 xmt_lost_crs; /* Frames transmitted without CRS */
  490. u32 xmt_deferred; /* Deferred transmits */
  491. u32 xmt_sngl_coll; /* Transmits that had 1 and only 1 coll. */
  492. u32 xmt_mlt_coll; /* Transmits that had multiple coll. */
  493. u32 xmt_ttl_coll; /* Transmits that had 1+ collisions. */
  494. u32 rcv_gd_frames; /* Good frames received */
  495. u32 rcv_crc_errs; /* Aligned frames that had a CRC error */
  496. u32 rcv_algn_errs; /* Receives that had alignment errors */
  497. u32 rcv_rsrc_err; /* Good frame dropped cuz no resources */
  498. u32 rcv_oruns; /* Overrun errors - bus was busy */
  499. u32 rcv_err_coll; /* Received frms. that encountered coll. */
  500. u32 rcv_shrt_frames; /* Received frames that were to short */
  501. } basic_cntr_t;
  502. /* 82558 extended statistic counters */
  503. typedef struct _ext_cntr_t {
  504. u32 xmt_fc_frames;
  505. u32 rcv_fc_frames;
  506. u32 rcv_fc_unsupported;
  507. } ext_cntr_t;
  508. /* 82559 TCO statistic counters */
  509. typedef struct _tco_cntr_t {
  510. u16 xmt_tco_frames;
  511. u16 rcv_tco_frames;
  512. } tco_cntr_t;
  513. /* Structures to access thet physical dump area */
  514. /* Use one of these types, according to the statisitcal counters mode,
  515.    to cast the pointer to the physical dump area and access the cmd_complete
  516.    DWORD. */
  517. /* 557-mode : only basic counters + cmd_complete */
  518. typedef struct _err_cntr_557_t {
  519. basic_cntr_t basic_stats;
  520. u32 cmd_complete;
  521. } err_cntr_557_t;
  522. /* 558-mode : basic + extended counters + cmd_complete */
  523. typedef struct _err_cntr_558_t {
  524. basic_cntr_t basic_stats;
  525. ext_cntr_t extended_stats;
  526. u32 cmd_complete;
  527. } err_cntr_558_t;
  528. /* 559-mode : basic + extended + TCO counters + cmd_complete */
  529. typedef struct _err_cntr_559_t {
  530. basic_cntr_t basic_stats;
  531. ext_cntr_t extended_stats;
  532. tco_cntr_t tco_stats;
  533. u32 cmd_complete;
  534. } err_cntr_559_t;
  535. /* This typedef defines the struct needed to hold the largest number of counters */
  536. typedef err_cntr_559_t max_counters_t;
  537. /* Different statistical-counters mode the controller may be in */
  538. typedef enum _stat_mode_t {
  539. E100_BASIC_STATS = 0, /* 82557 stats : 16 counters / 16 dw */
  540. E100_EXTENDED_STATS, /* 82558 stats : 19 counters / 19 dw */
  541. E100_TCO_STATS /* 82559 stats : 21 counters / 20 dw */
  542. } stat_mode_t;
  543. /* dump statistical counters complete codes */
  544. #define DUMP_STAT_COMPLETED 0xA005
  545. #define DUMP_RST_STAT_COMPLETED 0xA007
  546. /* Command Block (CB) Generic Header Structure*/
  547. typedef struct _cb_header_t {
  548. u16 cb_status; /* Command Block Status */
  549. u16 cb_cmd; /* Command Block Command */
  550. u32 cb_lnk_ptr; /* Link To Next CB */
  551. } cb_header_t __attribute__ ((__packed__));
  552. //* Individual Address Command Block (IA_CB)*/
  553. typedef struct _ia_cb_t {
  554. cb_header_t ia_cb_hdr;
  555. u8 ia_addr[ETH_ALEN];
  556. } ia_cb_t __attribute__ ((__packed__));
  557. /* Configure Command Block (CONFIG_CB)*/
  558. typedef struct _config_cb_t {
  559. cb_header_t cfg_cbhdr;
  560. u8 cfg_byte[CB_CFIG_BYTE_COUNT + CB_CFIG_D102_BYTE_COUNT];
  561. } config_cb_t __attribute__ ((__packed__));
  562. /* MultiCast Command Block (MULTICAST_CB)*/
  563. typedef struct _multicast_cb_t {
  564. cb_header_t mc_cbhdr;
  565. u16 mc_count; /* Number of multicast addresses */
  566. u8 mc_addr[(ETH_ALEN * MAX_MULTICAST_ADDRS)];
  567. } mltcst_cb_t __attribute__ ((__packed__));
  568. #define UCODE_MAX_DWORDS 134
  569. /* Load Microcode Command Block (LOAD_UCODE_CB)*/
  570. typedef struct _load_ucode_cb_t {
  571. cb_header_t load_ucode_cbhdr;
  572. u32 ucode_dword[UCODE_MAX_DWORDS];
  573. } load_ucode_cb_t __attribute__ ((__packed__));
  574. /* Load Programmable Filter Data*/
  575. typedef struct _filter_cb_t {
  576. cb_header_t filter_cb_hdr;
  577. u32 filter_data[MAX_FILTER];
  578. } filter_cb_t __attribute__ ((__packed__));
  579. /* NON_TRANSMIT_CB -- Generic Non-Transmit Command Block 
  580.  */
  581. typedef struct _nxmit_cb_t {
  582. union {
  583. config_cb_t config;
  584. ia_cb_t setup;
  585. load_ucode_cb_t load_ucode;
  586. mltcst_cb_t multicast;
  587. filter_cb_t filter;
  588. } ntcb;
  589. } nxmit_cb_t __attribute__ ((__packed__));
  590. /*Block for queuing for postponed execution of the non-transmit commands*/
  591. typedef struct _nxmit_cb_entry_t {
  592. struct list_head list_elem;
  593. nxmit_cb_t *non_tx_cmd;
  594. dma_addr_t dma_addr;
  595. unsigned long expiration_time;
  596. } nxmit_cb_entry_t;
  597. /* States for postponed non tx commands execution */
  598. typedef enum _non_tx_cmd_state_t {
  599. E100_NON_TX_IDLE = 0, /* No queued NON-TX commands */
  600. E100_WAIT_TX_FINISH, /* Wait for completion of the TX activities */
  601. E100_WAIT_NON_TX_FINISH /* Wait for completion of the non TX command */
  602. } non_tx_cmd_state_t;
  603. /* some defines for the ipcb */
  604. #define IPCB_IP_CHECKSUM_ENABLE  BIT_4
  605. #define IPCB_TCPUDP_CHECKSUM_ENABLE BIT_5
  606. #define IPCB_TCP_PACKET  BIT_6
  607. #define IPCB_LARGESEND_ENABLE  BIT_7
  608. #define IPCB_HARDWAREPARSING_ENABLE BIT_0
  609. #define IPCB_INSERTVLAN_ENABLE  BIT_1
  610. #define IPCB_IP_ACTIVATION_DEFAULT      IPCB_HARDWAREPARSING_ENABLE
  611. #define FOLD_CSUM(_XSUM)  ((((_XSUM << 16) | (_XSUM >> 16)) + _XSUM) >> 16)
  612. /* Transmit Buffer Descriptor (TBD)*/
  613. typedef struct _tbd_t {
  614. u32 tbd_buf_addr; /* Physical Transmit Buffer Address */
  615. u16 tbd_buf_cnt; /* Actual Count Of Bytes */
  616. u16 padd;
  617. } tbd_t __attribute__ ((__packed__));
  618. /* d102 specific fields */
  619. typedef struct _tcb_ipcb_t {
  620. u16 schedule_low;
  621. u8 ip_schedule;
  622. u8 ip_activation_high;
  623. u16 vlan;
  624. u8 ip_header_offset;
  625. u8 tcp_header_offset;
  626. union {
  627. u32 sec_rec_phys_addr;
  628. u32 tbd_zero_address;
  629. } tbd_sec_addr;
  630. union {
  631. u16 sec_rec_size;
  632. u16 tbd_zero_size;
  633. } tbd_sec_size;
  634. u16 total_tcp_payload;
  635. } tcb_ipcb_t __attribute__ ((__packed__));
  636. #define E100_TBD_ARRAY_SIZE (2+MAX_SKB_FRAGS)
  637. /* Transmit Command Block (TCB)*/
  638. struct _tcb_t {
  639. cb_header_t tcb_hdr;
  640. u32 tcb_tbd_ptr; /* TBD address */
  641. u16 tcb_cnt; /* Data Bytes In TCB past header */
  642. u8 tcb_thrshld; /* TX Threshold for FIFO Extender */
  643. u8 tcb_tbd_num;
  644. union {
  645. tcb_ipcb_t ipcb; /* d102 ipcb fields */
  646. tbd_t tbd_array[E100_TBD_ARRAY_SIZE];
  647. } tcbu;
  648. /* From here onward we can dump anything we want as long as the
  649.  * size of the total structure is a multiple of a paragraph
  650.  * boundary ( i.e. -16 bit aligned ).
  651.  */
  652. tbd_t *tbd_ptr;
  653. u32 tcb_tbd_dflt_ptr; /* TBD address for non-segmented packet */
  654. u32 tcb_tbd_expand_ptr; /* TBD address for segmented packet */
  655. struct sk_buff *tcb_skb; /* the associated socket buffer */
  656. dma_addr_t tcb_phys; /* phys addr of the TCB */
  657. } __attribute__ ((__packed__));
  658. #define _TCB_T_
  659. typedef struct _tcb_t tcb_t;
  660. /* Receive Frame Descriptor (RFD) - will be using the simple model*/
  661. struct _rfd_t {
  662. /* 8255x */
  663. cb_header_t rfd_header;
  664. u32 rfd_rbd_ptr; /* Receive Buffer Descriptor Addr */
  665. u16 rfd_act_cnt; /* Number Of Bytes Received */
  666. u16 rfd_sz; /* Number Of Bytes In RFD */
  667. /* D102 aka Gamla */
  668. u16 vlanid;
  669. u8 rcvparserstatus;
  670. u8 reserved;
  671. u16 securitystatus;
  672. u8 checksumstatus;
  673. u8 zerocopystatus;
  674. u8 pad[8]; /* data should be 16 byte aligned */
  675. u8 data[RFD_DATA_SIZE];
  676. } __attribute__ ((__packed__));
  677. #define _RFD_T_
  678. typedef struct _rfd_t rfd_t;
  679. /* Receive Buffer Descriptor (RBD)*/
  680. typedef struct _rbd_t {
  681. u16 rbd_act_cnt; /* Number Of Bytes Received */
  682. u16 rbd_filler;
  683. u32 rbd_lnk_addr; /* Link To Next RBD */
  684. u32 rbd_rcb_addr; /* Receive Buffer Address */
  685. u16 rbd_sz; /* Receive Buffer Size */
  686. u16 rbd_filler1;
  687. } rbd_t __attribute__ ((__packed__));
  688. /*
  689.  * This structure is used to maintain a FIFO access to a resource that is 
  690.  * maintained as a circular queue. The resource to be maintained is pointed
  691.  * to by the "data" field in the structure below. In this driver the TCBs', 
  692.  * TBDs' & RFDs' are maintained  as a circular queue & are managed thru this
  693.  * structure.
  694.  */
  695. typedef struct _buf_pool_t {
  696. unsigned int head; /* index to first used resource */
  697. unsigned int tail; /* index to last used resource */
  698. void *data; /* points to resource pool */
  699. } buf_pool_t;
  700. /*Rx skb holding structure*/
  701. struct rx_list_elem {
  702. struct list_head list_elem;
  703. dma_addr_t dma_addr;
  704. struct sk_buff *skb;
  705. };
  706. enum next_cu_cmd_e { RESUME_NO_WAIT = 0, RESUME_WAIT, START_WAIT };
  707. enum zlock_state_e { ZLOCK_INITIAL, ZLOCK_READING, ZLOCK_SLEEPING };
  708. enum tx_queue_stop_type { LONG_STOP = 0, SHORT_STOP };
  709. /* 64 bit aligned size */
  710. #define E100_SIZE_64A(X) ((sizeof(X) + 7) & ~0x7)
  711. typedef struct _bd_dma_able_t {
  712. char selftest[E100_SIZE_64A(self_test_t)];
  713. char stats_counters[E100_SIZE_64A(max_counters_t)];
  714. } bd_dma_able_t;
  715. /* bit masks for bool parameters */
  716. #define PRM_XSUMRX       0x00000001
  717. #define PRM_UCODE        0x00000002
  718. #define PRM_FC           0x00000004
  719. #define PRM_IFS          0x00000008
  720. #define PRM_BUNDLE_SMALL 0x00000010
  721. struct cfg_params {
  722. int e100_speed_duplex;
  723. int RxDescriptors;
  724. int TxDescriptors;
  725. int IntDelay;
  726. int BundleMax;
  727. int ber;
  728. u32 b_params;
  729. };
  730. struct ethtool_lpbk_data{
  731.         dma_addr_t dma_handle;
  732.         tcb_t *tcb;
  733.         rfd_t *rfd;
  734. };
  735. struct e100_private {
  736. u32 flags; /* board management flags */
  737. u32 tx_per_underrun; /* number of good tx frames per underrun */
  738. unsigned int tx_count; /* count of tx frames, so we can request an interrupt */
  739. u8 tx_thld; /* stores transmit threshold */
  740. u16 eeprom_size;
  741. u32 pwa_no; /* PWA: xxxxxx-0xx */
  742. u8 perm_node_address[ETH_ALEN];
  743. struct list_head active_rx_list; /* list of rx buffers */
  744. struct list_head rx_struct_pool; /* pool of rx buffer struct headers */
  745. u16 rfd_size; /* size of the adapter's RFD struct */
  746. int skb_req; /* number of skbs neede by the adapter */
  747. u8 intr_mask; /* mask for interrupt status */
  748. void *dma_able; /* dma allocated structs */
  749. dma_addr_t dma_able_phys;
  750. self_test_t *selftest; /* pointer to self test area */
  751. dma_addr_t selftest_phys; /* phys addr of selftest */
  752. max_counters_t *stats_counters; /* pointer to stats table */
  753. dma_addr_t stat_cnt_phys; /* phys addr of stat counter area */
  754. stat_mode_t stat_mode; /* statistics mode: extended, TCO, basic */
  755. scb_t *scb; /* memory mapped ptr to 82557 scb */
  756. tcb_t *last_tcb; /* pointer to last tcb sent */
  757. buf_pool_t tcb_pool; /* adapter's TCB array */
  758. dma_addr_t tcb_phys; /* phys addr of start of TCBs */
  759. u16 cur_line_speed;
  760. u16 cur_dplx_mode;
  761. struct net_device *device;
  762. struct pci_dev *pdev;
  763. struct driver_stats drv_stats;
  764. u8 rev_id; /* adapter PCI revision ID */
  765. unsigned long device_type; /* device type from e100_vendor.h */
  766. unsigned int phy_addr; /* address of PHY component */
  767. unsigned int PhyId; /* ID of PHY component */
  768. unsigned int PhyState; /* state for the fix squelch algorithm */
  769. unsigned int PhyDelay; /* delay for the fix squelch algorithm */
  770. /* Lock defintions for the driver */
  771. spinlock_t bd_lock; /* board lock */
  772. spinlock_t bd_non_tx_lock; /* Non transmit command lock  */
  773. spinlock_t config_lock; /* config block lock */
  774. spinlock_t mdi_access_lock; /* mdi lock */
  775. struct timer_list watchdog_timer; /* watchdog timer id */
  776. /* non-tx commands parameters */
  777. struct timer_list nontx_timer_id; /* non-tx timer id */
  778. struct list_head non_tx_cmd_list;
  779. non_tx_cmd_state_t non_tx_command_state;
  780. nxmit_cb_entry_t *same_cmd_entry[CB_MAX_NONTX_CMD];
  781. enum next_cu_cmd_e next_cu_cmd;
  782. /* Zero Locking Algorithm data members */
  783. enum zlock_state_e zlock_state;
  784. u8 zlock_read_data[16]; /* number of times each value 0-15 was read */
  785. u16 zlock_read_cnt; /* counts number of reads */
  786. ulong zlock_sleep_cnt; /* keeps track of "sleep" time */
  787. u8 config[CB_CFIG_BYTE_COUNT + CB_CFIG_D102_BYTE_COUNT];
  788. /* IFS params */
  789. u8 ifs_state;
  790. u8 ifs_value;
  791. struct cfg_params params; /* adapter's command line parameters */
  792. struct proc_dir_entry *proc_parent;
  793. rwlock_t isolate_lock;
  794. int driver_isolated;
  795. char *id_string;
  796. char *cable_status;
  797. char *mdix_status;
  798. /* Variables for HWI */
  799. int saved_open_circut;
  800. int saved_short_circut;
  801. int saved_distance;
  802. int saved_i;
  803. int saved_same;
  804. unsigned char hwi_started;
  805. struct timer_list hwi_timer; /* hwi timer id */
  806. u32 speed_duplex_caps; /* adapter's speed/duplex capabilities */
  807. /* WOL params for ethtool */
  808. u32 wolsupported;
  809. u32 wolopts;
  810. u16 ip_lbytes;
  811. struct ethtool_lpbk_data loopback;
  812. struct timer_list blink_timer; /* led blink timer id */
  813. #ifdef CONFIG_PM
  814. u32 pci_state[16];
  815. #endif
  816. char ifname[IFNAMSIZ];
  817. };
  818. #define E100_AUTONEG        0
  819. #define E100_SPEED_10_HALF  1
  820. #define E100_SPEED_10_FULL  2
  821. #define E100_SPEED_100_HALF 3
  822. #define E100_SPEED_100_FULL 4
  823. /********* function prototypes *************/
  824. extern void e100_isolate_driver(struct e100_private *bdp);
  825. extern void e100_sw_reset(struct e100_private *bdp, u32 reset_cmd);
  826. extern void e100_start_cu(struct e100_private *bdp, tcb_t *tcb);
  827. extern void e100_free_non_tx_cmd(struct e100_private *bdp,
  828.  nxmit_cb_entry_t *non_tx_cmd);
  829. extern nxmit_cb_entry_t *e100_alloc_non_tx_cmd(struct e100_private *bdp);
  830. extern unsigned char e100_exec_non_cu_cmd(struct e100_private *bdp,
  831.   nxmit_cb_entry_t *cmd);
  832. extern unsigned char e100_selftest(struct e100_private *bdp, u32 *st_timeout,
  833.    u32 *st_result);
  834. extern unsigned char e100_get_link_state(struct e100_private *bdp);
  835. extern unsigned char e100_wait_scb(struct e100_private *bdp);
  836. extern void e100_deisolate_driver(struct e100_private *bdp,
  837.   u8 recover, u8 full_reset);
  838. extern unsigned char e100_hw_reset_recover(struct e100_private *bdp,
  839.    u32 reset_cmd);
  840. #define ROM_TEST_FAIL 0x01
  841. #define REGISTER_TEST_FAIL 0x02
  842. #define SELF_TEST_FAIL 0x04
  843. #define TEST_TIMEOUT 0x08
  844. enum test_offsets {
  845. E100_EEPROM_TEST_FAIL = 0,
  846. E100_CHIP_TIMEOUT,
  847. E100_ROM_TEST_FAIL,
  848. E100_REG_TEST_FAIL,
  849. E100_MAC_TEST_FAIL,
  850. E100_LPBK_MAC_FAIL,
  851. E100_LPBK_PHY_FAIL,
  852. E100_MAX_TEST_RES
  853. };
  854. #endif