1 /************************************************************************
 
   2  * s2io.h: A Linux PCI-X Ethernet driver for Neterion 10GbE Server NIC
 
   3  * Copyright(c) 2002-2005 Neterion Inc.
 
   5  * This software may be used and distributed according to the terms of
 
   6  * the GNU General Public License (GPL), incorporated herein by reference.
 
   7  * Drivers based on or derived from this code fall under the GPL and must
 
   8  * retain the authorship, copyright and license notice.  This file is not
 
   9  * a complete program and may only be used when the entire operating
 
  10  * system is licensed under the GPL.
 
  11  * See the file COPYING in this distribution for more information.
 
  12  ************************************************************************/
 
  17 #define BIT(loc)                (0x8000000000000000ULL >> (loc))
 
  18 #define vBIT(val, loc, sz)      (((u64)val) << (64-loc-sz))
 
  19 #define INV(d)  ((d&0xff)<<24) | (((d>>8)&0xff)<<16) | (((d>>16)&0xff)<<8)| ((d>>24)&0xff)
 
  34 /* Maximum time to flicker LED when asked to identify NIC using ethtool */
 
  35 #define MAX_FLICKER_TIME        60000 /* 60 Secs */
 
  37 /* Maximum outstanding splits to be configured into xena. */
 
  38 typedef enum xena_max_outstanding_splits {
 
  39         XENA_ONE_SPLIT_TRANSACTION = 0,
 
  40         XENA_TWO_SPLIT_TRANSACTION = 1,
 
  41         XENA_THREE_SPLIT_TRANSACTION = 2,
 
  42         XENA_FOUR_SPLIT_TRANSACTION = 3,
 
  43         XENA_EIGHT_SPLIT_TRANSACTION = 4,
 
  44         XENA_TWELVE_SPLIT_TRANSACTION = 5,
 
  45         XENA_SIXTEEN_SPLIT_TRANSACTION = 6,
 
  46         XENA_THIRTYTWO_SPLIT_TRANSACTION = 7
 
  47 } xena_max_outstanding_splits;
 
  48 #define XENA_MAX_OUTSTANDING_SPLITS(n) (n << 4)
 
  50 /*  OS concerned variables and constants */
 
  51 #define WATCH_DOG_TIMEOUT               15*HZ
 
  53 #define ALIGN_SIZE                      127
 
  54 #define PCIX_COMMAND_REGISTER           0x62
 
  57  * Debug related variables.
 
  59 /* different debug levels. */
 
  66 /* Global variable that defines the present debug level of the driver. */
 
  67 int debug_level = ERR_DBG;      /* Default level. */
 
  69 /* DEBUG message print. */
 
  70 #define DBG_PRINT(dbg_level, args...)  if(!(debug_level<dbg_level)) printk(args)
 
  72 /* Protocol assist features of the NIC */
 
  73 #define L3_CKSUM_OK 0xFFFF
 
  74 #define L4_CKSUM_OK 0xFFFF
 
  75 #define S2IO_JUMBO_SIZE 9600
 
  77 /* Driver statistics maintained by driver */
 
  79         unsigned long long single_ecc_errs;
 
  80         unsigned long long double_ecc_errs;
 
  83 /* The statistics block of Xena */
 
  84 typedef struct stat_block {
 
  85 /* Tx MAC statistics counters. */
 
  91         u64 tmac_pause_ctrl_frms;
 
  94         u32 tmac_any_err_frms;
 
  96         u64 tmac_ttl_less_fb_octets;
 
  97         u64 tmac_vld_ip_octets;
 
 106 /* Rx MAC Statistics counters. */
 
 107         u32 rmac_data_octets;
 
 109         u64 rmac_fcs_err_frms;
 
 111         u32 rmac_vld_bcst_frms;
 
 112         u32 rmac_vld_mcst_frms;
 
 113         u32 rmac_out_rng_len_err_frms;
 
 114         u32 rmac_in_rng_len_err_frms;
 
 116         u64 rmac_pause_ctrl_frms;
 
 117         u64 rmac_unsup_ctrl_frms;
 
 118         u32 rmac_accepted_ucst_frms;
 
 120         u32 rmac_discarded_frms;
 
 121         u32 rmac_accepted_nucst_frms;
 
 123         u32 rmac_drop_events;
 
 124         u64 rmac_ttl_less_fb_octets;
 
 127         u32 rmac_usized_frms;
 
 130         u32 rmac_osized_frms;
 
 132         u32 rmac_jabber_frms;
 
 133         u64 rmac_ttl_64_frms;
 
 134         u64 rmac_ttl_65_127_frms;
 
 136         u64 rmac_ttl_128_255_frms;
 
 137         u64 rmac_ttl_256_511_frms;
 
 139         u64 rmac_ttl_512_1023_frms;
 
 140         u64 rmac_ttl_1024_1518_frms;
 
 149         u32 rmac_err_drp_udp;
 
 151         u64 rmac_xgmii_err_sym;
 
 170         u64 rmac_xgmii_data_err_cnt;
 
 171         u64 rmac_xgmii_ctrl_err_cnt;
 
 173         u32 rmac_accepted_ip;
 
 175 /* PCI/PCI-X Read transaction statistics. */
 
 179         u32 new_rd_req_rtry_cnt;
 
 181 /* PCI/PCI-X Write/Read transaction statistics. */
 
 183         u32 wr_rtry_rd_ack_cnt;
 
 184         u32 new_wr_req_rtry_cnt;
 
 189 /*      PCI/PCI-X Write / DMA Transaction statistics. */
 
 191         u32 rd_rtry_wr_ack_cnt;
 
 199 /* Tx MAC statistics overflow counters. */
 
 200         u32 tmac_data_octets_oflow;
 
 202         u32 tmac_bcst_frms_oflow;
 
 203         u32 tmac_mcst_frms_oflow;
 
 204         u32 tmac_ucst_frms_oflow;
 
 205         u32 tmac_ttl_octets_oflow;
 
 206         u32 tmac_any_err_frms_oflow;
 
 207         u32 tmac_nucst_frms_oflow;
 
 209         u32 tmac_drop_ip_oflow;
 
 210         u32 tmac_vld_ip_oflow;
 
 211         u32 tmac_rst_tcp_oflow;
 
 213         u32 tpa_unknown_protocol;
 
 216         u32 tpa_parse_failure;
 
 218 /* Rx MAC Statistics overflow counters. */
 
 219         u32 rmac_data_octets_oflow;
 
 220         u32 rmac_vld_frms_oflow;
 
 221         u32 rmac_vld_bcst_frms_oflow;
 
 222         u32 rmac_vld_mcst_frms_oflow;
 
 223         u32 rmac_accepted_ucst_frms_oflow;
 
 224         u32 rmac_ttl_octets_oflow;
 
 225         u32 rmac_discarded_frms_oflow;
 
 226         u32 rmac_accepted_nucst_frms_oflow;
 
 227         u32 rmac_usized_frms_oflow;
 
 228         u32 rmac_drop_events_oflow;
 
 229         u32 rmac_frag_frms_oflow;
 
 230         u32 rmac_osized_frms_oflow;
 
 232         u32 rmac_jabber_frms_oflow;
 
 234         u32 rmac_drop_ip_oflow;
 
 235         u32 rmac_err_drp_udp_oflow;
 
 238         u32 rmac_pause_cnt_oflow;
 
 239         u64 rmac_ttl_1519_4095_frms;
 
 240         u64 rmac_ttl_4096_8191_frms;
 
 241         u64 rmac_ttl_8192_max_frms;
 
 242         u64 rmac_ttl_gt_max_frms;
 
 243         u64 rmac_osized_alt_frms;
 
 244         u64 rmac_jabber_alt_frms;
 
 245         u64 rmac_gt_max_alt_frms;
 
 247         u32 rmac_len_discard;
 
 248         u32 rmac_fcs_discard;
 
 251         u32 rmac_red_discard;
 
 252         u32 rmac_rts_discard;
 
 254         u32 rmac_ingm_full_discard;
 
 256         u32 rmac_accepted_ip_oflow;
 
 263  * Structures representing different init time configuration
 
 264  * parameters of the NIC.
 
 267 #define MAX_TX_FIFOS 8
 
 268 #define MAX_RX_RINGS 8
 
 270 /* FIFO mappings for all possible number of fifos configured */
 
 271 int fifo_map[][MAX_TX_FIFOS] = {
 
 272         {0, 0, 0, 0, 0, 0, 0, 0},
 
 273         {0, 0, 0, 0, 1, 1, 1, 1},
 
 274         {0, 0, 0, 1, 1, 1, 2, 2},
 
 275         {0, 0, 1, 1, 2, 2, 3, 3},
 
 276         {0, 0, 1, 1, 2, 2, 3, 4},
 
 277         {0, 0, 1, 1, 2, 3, 4, 5},
 
 278         {0, 0, 1, 2, 3, 4, 5, 6},
 
 279         {0, 1, 2, 3, 4, 5, 6, 7},
 
 282 /* Maintains Per FIFO related information. */
 
 283 typedef struct tx_fifo_config {
 
 284 #define MAX_AVAILABLE_TXDS      8192
 
 285         u32 fifo_len;           /* specifies len of FIFO upto 8192, ie no of TxDLs */
 
 286 /* Priority definition */
 
 287 #define TX_FIFO_PRI_0               0   /*Highest */
 
 288 #define TX_FIFO_PRI_1               1
 
 289 #define TX_FIFO_PRI_2               2
 
 290 #define TX_FIFO_PRI_3               3
 
 291 #define TX_FIFO_PRI_4               4
 
 292 #define TX_FIFO_PRI_5               5
 
 293 #define TX_FIFO_PRI_6               6
 
 294 #define TX_FIFO_PRI_7               7   /*lowest */
 
 295         u8 fifo_priority;       /* specifies pointer level for FIFO */
 
 296         /* user should not set twos fifos with same pri */
 
 298 #define NO_SNOOP_TXD                0x01
 
 299 #define NO_SNOOP_TXD_BUFFER          0x02
 
 303 /* Maintains per Ring related information */
 
 304 typedef struct rx_ring_config {
 
 305         u32 num_rxd;            /*No of RxDs per Rx Ring */
 
 306 #define RX_RING_PRI_0               0   /* highest */
 
 307 #define RX_RING_PRI_1               1
 
 308 #define RX_RING_PRI_2               2
 
 309 #define RX_RING_PRI_3               3
 
 310 #define RX_RING_PRI_4               4
 
 311 #define RX_RING_PRI_5               5
 
 312 #define RX_RING_PRI_6               6
 
 313 #define RX_RING_PRI_7               7   /* lowest */
 
 315         u8 ring_priority;       /*Specifies service priority of ring */
 
 316         /* OSM should not set any two rings with same priority */
 
 317         u8 ring_org;            /*Organization of ring */
 
 318 #define RING_ORG_BUFF1          0x01
 
 319 #define RX_RING_ORG_BUFF3       0x03
 
 320 #define RX_RING_ORG_BUFF5       0x05
 
 323 #define NO_SNOOP_RXD                0x01
 
 324 #define NO_SNOOP_RXD_BUFFER         0x02
 
 327 /* This structure provides contains values of the tunable parameters
 
 330 struct config_param {
 
 332         u32 tx_fifo_num;        /*Number of Tx FIFOs */
 
 334         u8 fifo_mapping[MAX_TX_FIFOS];
 
 335         tx_fifo_config_t tx_cfg[MAX_TX_FIFOS];  /*Per-Tx FIFO config */
 
 336         u32 max_txds;           /*Max no. of Tx buffer descriptor per TxDL */
 
 338         /* Specifies if Tx Intr is UTILZ or PER_LIST type. */
 
 341         u32 rx_ring_num;        /*Number of receive rings */
 
 342 #define MAX_RX_BLOCKS_PER_RING  150
 
 344         rx_ring_config_t rx_cfg[MAX_RX_RINGS];  /*Per-Rx Ring config */
 
 345         u8 bimodal;             /*Flag for setting bimodal interrupts*/
 
 347 #define HEADER_ETHERNET_II_802_3_SIZE 14
 
 348 #define HEADER_802_2_SIZE              3
 
 349 #define HEADER_SNAP_SIZE               5
 
 350 #define HEADER_VLAN_SIZE               4
 
 353 #define MAX_PYLD                    1500
 
 354 #define MAX_MTU                     (MAX_PYLD+18)
 
 355 #define MAX_MTU_VLAN                (MAX_PYLD+22)
 
 356 #define MAX_PYLD_JUMBO              9600
 
 357 #define MAX_MTU_JUMBO               (MAX_PYLD_JUMBO+18)
 
 358 #define MAX_MTU_JUMBO_VLAN          (MAX_PYLD_JUMBO+22)
 
 362 /* Structure representing MAC Addrs */
 
 363 typedef struct mac_addr {
 
 364         u8 mac_addr[ETH_ALEN];
 
 367 /* Structure that represent every FIFO element in the BAR1
 
 370 typedef struct _TxFIFO_element {
 
 374 #define TX_FIFO_LAST_TXD_NUM( val)     vBIT(val,0,8)
 
 375 #define TX_FIFO_FIRST_LIST             BIT(14)
 
 376 #define TX_FIFO_LAST_LIST              BIT(15)
 
 377 #define TX_FIFO_FIRSTNLAST_LIST        vBIT(3,14,2)
 
 378 #define TX_FIFO_SPECIAL_FUNC           BIT(23)
 
 379 #define TX_FIFO_DS_NO_SNOOP            BIT(31)
 
 380 #define TX_FIFO_BUFF_NO_SNOOP          BIT(30)
 
 383 /* Tx descriptor structure */
 
 384 typedef struct _TxD {
 
 387 #define TXD_LIST_OWN_XENA       BIT(7)
 
 388 #define TXD_T_CODE              (BIT(12)|BIT(13)|BIT(14)|BIT(15))
 
 389 #define TXD_T_CODE_OK(val)      (|(val & TXD_T_CODE))
 
 390 #define GET_TXD_T_CODE(val)     ((val & TXD_T_CODE)<<12)
 
 391 #define TXD_GATHER_CODE         (BIT(22) | BIT(23))
 
 392 #define TXD_GATHER_CODE_FIRST   BIT(22)
 
 393 #define TXD_GATHER_CODE_LAST    BIT(23)
 
 394 #define TXD_TCP_LSO_EN          BIT(30)
 
 395 #define TXD_UDP_COF_EN          BIT(31)
 
 396 #define TXD_TCP_LSO_MSS(val)    vBIT(val,34,14)
 
 397 #define TXD_BUFFER0_SIZE(val)   vBIT(val,48,16)
 
 400 #define TXD_TX_CKO_CONTROL      (BIT(5)|BIT(6)|BIT(7))
 
 401 #define TXD_TX_CKO_IPV4_EN      BIT(5)
 
 402 #define TXD_TX_CKO_TCP_EN       BIT(6)
 
 403 #define TXD_TX_CKO_UDP_EN       BIT(7)
 
 404 #define TXD_VLAN_ENABLE         BIT(15)
 
 405 #define TXD_VLAN_TAG(val)       vBIT(val,16,16)
 
 406 #define TXD_INT_NUMBER(val)     vBIT(val,34,6)
 
 407 #define TXD_INT_TYPE_PER_LIST   BIT(47)
 
 408 #define TXD_INT_TYPE_UTILZ      BIT(46)
 
 409 #define TXD_SET_MARKER         vBIT(0x6,0,4)
 
 412         u64 Host_Control;       /* reserved for host */
 
 415 /* Structure to hold the phy and virt addr of every TxDL. */
 
 416 typedef struct list_info_hold {
 
 417         dma_addr_t list_phy_addr;
 
 418         void *list_virt_addr;
 
 421 /* Rx descriptor structure */
 
 422 typedef struct _RxD_t {
 
 423         u64 Host_Control;       /* reserved for host */
 
 425 #define RXD_OWN_XENA            BIT(7)
 
 426 #define RXD_T_CODE              (BIT(12)|BIT(13)|BIT(14)|BIT(15))
 
 427 #define RXD_FRAME_PROTO         vBIT(0xFFFF,24,8)
 
 428 #define RXD_FRAME_PROTO_IPV4    BIT(27)
 
 429 #define RXD_FRAME_PROTO_IPV6    BIT(28)
 
 430 #define RXD_FRAME_IP_FRAG       BIT(29)
 
 431 #define RXD_FRAME_PROTO_TCP     BIT(30)
 
 432 #define RXD_FRAME_PROTO_UDP     BIT(31)
 
 433 #define TCP_OR_UDP_FRAME        (RXD_FRAME_PROTO_TCP | RXD_FRAME_PROTO_UDP)
 
 434 #define RXD_GET_L3_CKSUM(val)   ((u16)(val>> 16) & 0xFFFF)
 
 435 #define RXD_GET_L4_CKSUM(val)   ((u16)(val) & 0xFFFF)
 
 438 #define THE_RXD_MARK            0x3
 
 439 #define SET_RXD_MARKER          vBIT(THE_RXD_MARK, 0, 2)
 
 440 #define GET_RXD_MARKER(ctrl)    ((ctrl & SET_RXD_MARKER) >> 62)
 
 442 #ifndef CONFIG_2BUFF_MODE
 
 443 #define MASK_BUFFER0_SIZE       vBIT(0x3FFF,2,14)
 
 444 #define SET_BUFFER0_SIZE(val)   vBIT(val,2,14)
 
 446 #define MASK_BUFFER0_SIZE       vBIT(0xFF,2,14)
 
 447 #define MASK_BUFFER1_SIZE       vBIT(0xFFFF,16,16)
 
 448 #define MASK_BUFFER2_SIZE       vBIT(0xFFFF,32,16)
 
 449 #define SET_BUFFER0_SIZE(val)   vBIT(val,8,8)
 
 450 #define SET_BUFFER1_SIZE(val)   vBIT(val,16,16)
 
 451 #define SET_BUFFER2_SIZE(val)   vBIT(val,32,16)
 
 454 #define MASK_VLAN_TAG           vBIT(0xFFFF,48,16)
 
 455 #define SET_VLAN_TAG(val)       vBIT(val,48,16)
 
 456 #define SET_NUM_TAG(val)       vBIT(val,16,32)
 
 458 #ifndef CONFIG_2BUFF_MODE
 
 459 #define RXD_GET_BUFFER0_SIZE(Control_2) (u64)((Control_2 & vBIT(0x3FFF,2,14)))
 
 461 #define RXD_GET_BUFFER0_SIZE(Control_2) (u8)((Control_2 & MASK_BUFFER0_SIZE) \
 
 463 #define RXD_GET_BUFFER1_SIZE(Control_2) (u16)((Control_2 & MASK_BUFFER1_SIZE) \
 
 465 #define RXD_GET_BUFFER2_SIZE(Control_2) (u16)((Control_2 & MASK_BUFFER2_SIZE) \
 
 472 #ifdef CONFIG_2BUFF_MODE
 
 478 /* Structure that represents the Rx descriptor block which contains
 
 479  * 128 Rx descriptors.
 
 481 #ifndef CONFIG_2BUFF_MODE
 
 482 typedef struct _RxD_block {
 
 483 #define MAX_RXDS_PER_BLOCK             127
 
 484         RxD_t rxd[MAX_RXDS_PER_BLOCK];
 
 487 #define END_OF_BLOCK    0xFEFFFFFFFFFFFFFFULL
 
 488         u64 reserved_1;         /* 0xFEFFFFFFFFFFFFFF to mark last
 
 490         u64 reserved_2_pNext_RxD_block; /* Logical ptr to next */
 
 491         u64 pNext_RxD_Blk_physical;     /* Buff0_ptr.In a 32 bit arch
 
 492                                          * the upper 32 bits should
 
 496 typedef struct _RxD_block {
 
 497 #define MAX_RXDS_PER_BLOCK             85
 
 498         RxD_t rxd[MAX_RXDS_PER_BLOCK];
 
 500 #define END_OF_BLOCK    0xFEFFFFFFFFFFFFFFULL
 
 501         u64 reserved_1;         /* 0xFEFFFFFFFFFFFFFF to mark last Rxd
 
 503         u64 pNext_RxD_Blk_physical;     /* Phy ponter to next blk. */
 
 505 #define SIZE_OF_BLOCK   4096
 
 507 /* Structure to hold virtual addresses of Buf0 and Buf1 in
 
 509 typedef struct bufAdd {
 
 517 /* Structure which stores all the MAC control parameters */
 
 519 /* This structure stores the offset of the RxD in the ring
 
 520  * from which the Rx Interrupt processor can start picking
 
 521  * up the RxDs for processing.
 
 523 typedef struct _rx_curr_get_info_t {
 
 527 } rx_curr_get_info_t;
 
 529 typedef rx_curr_get_info_t rx_curr_put_info_t;
 
 531 /* This structure stores the offset of the TxDl in the FIFO
 
 532  * from which the Tx Interrupt processor can start picking
 
 533  * up the TxDLs for send complete interrupt processing.
 
 538 } tx_curr_get_info_t;
 
 540 typedef tx_curr_get_info_t tx_curr_put_info_t;
 
 542 /* Structure that holds the Phy and virt addresses of the Blocks */
 
 543 typedef struct rx_block_info {
 
 544         RxD_t *block_virt_addr;
 
 545         dma_addr_t block_dma_addr;
 
 548 /* pre declaration of the nic structure */
 
 549 typedef struct s2io_nic nic_t;
 
 551 /* Ring specific structure */
 
 552 typedef struct ring_info {
 
 553         /* The ring number */
 
 557          *  Place holders for the virtual and physical addresses of
 
 560         rx_block_info_t rx_blocks[MAX_RX_BLOCKS_PER_RING];
 
 565          * Put pointer info which indictes which RxD has to be replenished
 
 568         rx_curr_put_info_t rx_curr_put_info;
 
 571          * Get pointer info which indictes which is the last RxD that was
 
 572          * processed by the driver.
 
 574         rx_curr_get_info_t rx_curr_get_info;
 
 576 #ifndef CONFIG_S2IO_NAPI
 
 577         /* Index to the absolute position of the put pointer of Rx ring */
 
 581 #ifdef CONFIG_2BUFF_MODE
 
 582         /* Buffer Address store. */
 
 588 /* Fifo specific structure */
 
 589 typedef struct fifo_info {
 
 593         /* Maximum TxDs per TxDL */
 
 596         /* Place holder of all the TX List's Phy and Virt addresses. */
 
 597         list_info_hold_t *list_info;
 
 600          * Current offset within the tx FIFO where driver would write
 
 603         tx_curr_put_info_t tx_curr_put_info;
 
 606          * Current offset within tx FIFO from where the driver would start freeing
 
 609         tx_curr_get_info_t tx_curr_get_info;
 
 614 /* Infomation related to the Tx and Rx FIFOs and Rings of Xena
 
 615  * is maintained in this structure.
 
 617 typedef struct mac_info {
 
 619         /* logical pointer of start of each Tx FIFO */
 
 620         TxFIFO_element_t __iomem *tx_FIFO_start[MAX_TX_FIFOS];
 
 622         /* Fifo specific structure */
 
 623         fifo_info_t fifos[MAX_TX_FIFOS];
 
 625         /* Save virtual address of TxD page with zero DMA addr(if any) */
 
 626         void *zerodma_virt_addr;
 
 629         /* Ring specific structure */
 
 630         ring_info_t rings[MAX_RX_RINGS];
 
 633         u16 mc_pause_threshold_q0q3;
 
 634         u16 mc_pause_threshold_q4q7;
 
 636         void *stats_mem;        /* orignal pointer to allocated mem */
 
 637         dma_addr_t stats_mem_phy;       /* Physical address of the stat block */
 
 639         StatInfo_t *stats_info; /* Logical address of the stat block */
 
 642 /* structure representing the user defined MAC addresses */
 
 648 /* Default Tunable parameters of the NIC. */
 
 649 #define DEFAULT_FIFO_LEN 4096
 
 650 #define SMALL_RXD_CNT   30 * (MAX_RXDS_PER_BLOCK+1)
 
 651 #define LARGE_RXD_CNT   100 * (MAX_RXDS_PER_BLOCK+1)
 
 652 #define SMALL_BLK_CNT   30
 
 653 #define LARGE_BLK_CNT   100
 
 655 /* Structure representing one instance of the NIC */
 
 657 #ifdef CONFIG_S2IO_NAPI
 
 659          * Count of packets to be processed in a given iteration, it will be indicated
 
 660          * by the quota field of the device structure when NAPI is enabled.
 
 664         struct net_device *dev;
 
 665         mac_info_t mac_control;
 
 666         struct config_param config;
 
 667         struct pci_dev *pdev;
 
 670 #define MAX_MAC_SUPPORTED   16
 
 671 #define MAX_SUPPORTED_MULTICASTS MAX_MAC_SUPPORTED
 
 673         macaddr_t def_mac_addr[MAX_MAC_SUPPORTED];
 
 674         macaddr_t pre_mac_addr[MAX_MAC_SUPPORTED];
 
 676         struct net_device_stats stats;
 
 678         int device_close_flag;
 
 679         int device_enabled_once;
 
 682         struct tasklet_struct task;
 
 683         volatile unsigned long tasklet_status;
 
 685         /* Timer that handles I/O errors/exceptions */
 
 686         struct timer_list alarm_timer;
 
 688         /* Space to back up the PCI config space */
 
 689         u32 config_space[256 / sizeof(u32)];
 
 691         atomic_t rx_bufs_left[MAX_RX_RINGS];
 
 694 #ifndef CONFIG_S2IO_NAPI
 
 701 #define MAX_ADDRS_SUPPORTED 64
 
 704         usr_addr_t usr_addrs[MAX_ADDRS_SUPPORTED];
 
 715         /*  Id timer, used to blink NIC to physically identify NIC. */
 
 716         struct timer_list id_timer;
 
 718         /*  Restart timer, used to restart NIC if the device is stuck and
 
 719          *  a schedule task that will set the correct Link state once the
 
 720          *  NIC's PHY has stabilized after a state change.
 
 723         struct tq_struct rst_timer_task;
 
 724         struct tq_struct set_link_task;
 
 726         struct work_struct rst_timer_task;
 
 727         struct work_struct set_link_task;
 
 730         /* Flag that can be used to turn on or turn off the Rx checksum
 
 735         /*  after blink, the adapter must be restored with original
 
 740         /* Last known link state. */
 
 749         volatile unsigned long link_state;
 
 750         struct vlan_group *vlgrp;
 
 751 #define XFRAME_I_DEVICE         1
 
 752 #define XFRAME_II_DEVICE        2
 
 759 #define RESET_ERROR 1;
 
 762 /*  OS related system calls */
 
 764 static inline u64 readq(void __iomem *addr)
 
 767         ret = readl(addr + 4);
 
 776 static inline void writeq(u64 val, void __iomem *addr)
 
 778         writel((u32) (val), addr);
 
 779         writel((u32) (val >> 32), (addr + 4));
 
 782 /* In 32 bit modes, some registers have to be written in a
 
 783  * particular order to expect correct hardware operation. The
 
 784  * macro SPECIAL_REG_WRITE is used to perform such ordered
 
 785  * writes. Defines UF (Upper First) and LF (Lower First) will
 
 786  * be used to specify the required write order.
 
 790 static inline void SPECIAL_REG_WRITE(u64 val, void __iomem *addr, int order)
 
 793                 writel((u32) (val), addr);
 
 794                 writel((u32) (val >> 32), (addr + 4));
 
 796                 writel((u32) (val >> 32), (addr + 4));
 
 797                 writel((u32) (val), addr);
 
 801 #define SPECIAL_REG_WRITE(val, addr, dummy) writeq(val, addr)
 
 804 /*  Interrupt related values of Xena */
 
 806 #define ENABLE_INTRS    1
 
 807 #define DISABLE_INTRS   2
 
 809 /*  Highest level interrupt blocks */
 
 810 #define TX_PIC_INTR     (0x0001<<0)
 
 811 #define TX_DMA_INTR     (0x0001<<1)
 
 812 #define TX_MAC_INTR     (0x0001<<2)
 
 813 #define TX_XGXS_INTR    (0x0001<<3)
 
 814 #define TX_TRAFFIC_INTR (0x0001<<4)
 
 815 #define RX_PIC_INTR     (0x0001<<5)
 
 816 #define RX_DMA_INTR     (0x0001<<6)
 
 817 #define RX_MAC_INTR     (0x0001<<7)
 
 818 #define RX_XGXS_INTR    (0x0001<<8)
 
 819 #define RX_TRAFFIC_INTR (0x0001<<9)
 
 820 #define MC_INTR         (0x0001<<10)
 
 821 #define ENA_ALL_INTRS    (   TX_PIC_INTR     | \
 
 833 /*  Interrupt masks for the general interrupt mask register */
 
 834 #define DISABLE_ALL_INTRS   0xFFFFFFFFFFFFFFFFULL
 
 836 #define TXPIC_INT_M         BIT(0)
 
 837 #define TXDMA_INT_M         BIT(1)
 
 838 #define TXMAC_INT_M         BIT(2)
 
 839 #define TXXGXS_INT_M        BIT(3)
 
 840 #define TXTRAFFIC_INT_M     BIT(8)
 
 841 #define PIC_RX_INT_M        BIT(32)
 
 842 #define RXDMA_INT_M         BIT(33)
 
 843 #define RXMAC_INT_M         BIT(34)
 
 844 #define MC_INT_M            BIT(35)
 
 845 #define RXXGXS_INT_M        BIT(36)
 
 846 #define RXTRAFFIC_INT_M     BIT(40)
 
 848 /*  PIC level Interrupts TODO*/
 
 850 /*  DMA level Inressupts */
 
 851 #define TXDMA_PFC_INT_M     BIT(0)
 
 852 #define TXDMA_PCC_INT_M     BIT(2)
 
 854 /*  PFC block interrupts */
 
 855 #define PFC_MISC_ERR_1      BIT(0)      /* Interrupt to indicate FIFO full */
 
 857 /* PCC block interrupts. */
 
 858 #define PCC_FB_ECC_ERR     vBIT(0xff, 16, 8)    /* Interrupt to indicate
 
 861 #define RXD_GET_VLAN_TAG(Control_2) (u16)(Control_2 & MASK_VLAN_TAG)
 
 863  * Prototype declaration.
 
 865 static int __devinit s2io_init_nic(struct pci_dev *pdev,
 
 866                                    const struct pci_device_id *pre);
 
 867 static void __devexit s2io_rem_nic(struct pci_dev *pdev);
 
 868 static int init_shared_mem(struct s2io_nic *sp);
 
 869 static void free_shared_mem(struct s2io_nic *sp);
 
 870 static int init_nic(struct s2io_nic *nic);
 
 871 static void rx_intr_handler(ring_info_t *ring_data);
 
 872 static void tx_intr_handler(fifo_info_t *fifo_data);
 
 873 static void alarm_intr_handler(struct s2io_nic *sp);
 
 875 static int s2io_starter(void);
 
 876 void s2io_closer(void);
 
 877 static void s2io_tx_watchdog(struct net_device *dev);
 
 878 static void s2io_tasklet(unsigned long dev_addr);
 
 879 static void s2io_set_multicast(struct net_device *dev);
 
 880 static int rx_osm_handler(ring_info_t *ring_data, RxD_t * rxdp);
 
 881 void s2io_link(nic_t * sp, int link);
 
 882 void s2io_reset(nic_t * sp);
 
 883 #if defined(CONFIG_S2IO_NAPI)
 
 884 static int s2io_poll(struct net_device *dev, int *budget);
 
 886 static void s2io_init_pci(nic_t * sp);
 
 887 int s2io_set_mac_addr(struct net_device *dev, u8 * addr);
 
 888 static void s2io_alarm_handle(unsigned long data);
 
 889 static irqreturn_t s2io_isr(int irq, void *dev_id, struct pt_regs *regs);
 
 890 static int verify_xena_quiescence(nic_t *sp, u64 val64, int flag);
 
 891 static struct ethtool_ops netdev_ethtool_ops;
 
 892 static void s2io_set_link(unsigned long data);
 
 893 int s2io_set_swapper(nic_t * sp);
 
 894 static void s2io_card_down(nic_t *nic);
 
 895 static int s2io_card_up(nic_t *nic);
 
 896 int get_xena_rev_id(struct pci_dev *pdev);