|
|
1.1 ! root 1: /******************************************************************************* ! 2: ! 3: Intel(R) Gigabit Ethernet Linux driver ! 4: Copyright(c) 2007-2009 Intel Corporation. ! 5: ! 6: This program is free software; you can redistribute it and/or modify it ! 7: under the terms and conditions of the GNU General Public License, ! 8: version 2, as published by the Free Software Foundation. ! 9: ! 10: This program is distributed in the hope 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., ! 17: 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. ! 18: ! 19: The full GNU General Public License is included in this distribution in ! 20: the file called "COPYING". ! 21: ! 22: Contact Information: ! 23: e1000-devel Mailing List <[email protected]> ! 24: Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 ! 25: ! 26: *******************************************************************************/ ! 27: ! 28: FILE_LICENCE ( GPL2_ONLY ); ! 29: ! 30: /* Linux PRO/1000 Ethernet Driver main header file */ ! 31: ! 32: #ifndef _IGB_H_ ! 33: #define _IGB_H_ ! 34: ! 35: #include "igb_api.h" ! 36: ! 37: extern int igb_probe ( struct pci_device *pdev ); ! 38: extern void igb_remove ( struct pci_device *pdev ); ! 39: ! 40: struct igb_adapter; ! 41: ! 42: /* Interrupt defines */ ! 43: #define IGB_START_ITR 648 /* ~6000 ints/sec */ ! 44: ! 45: /* Interrupt modes, as used by the IntMode paramter */ ! 46: #define IGB_INT_MODE_LEGACY 0 ! 47: #define IGB_INT_MODE_MSI 1 ! 48: #define IGB_INT_MODE_MSIX 2 ! 49: ! 50: #define HW_PERF ! 51: /* TX/RX descriptor defines */ ! 52: #define IGB_DEFAULT_TXD 256 ! 53: #define IGB_MIN_TXD 80 ! 54: #define IGB_MAX_TXD 4096 ! 55: ! 56: #define IGB_DEFAULT_RXD 256 ! 57: #define IGB_MIN_RXD 80 ! 58: #define IGB_MAX_RXD 4096 ! 59: ! 60: #define IGB_MIN_ITR_USECS 10 /* 100k irq/sec */ ! 61: #define IGB_MAX_ITR_USECS 8191 /* 120 irq/sec */ ! 62: ! 63: #define NON_Q_VECTORS 1 ! 64: #define MAX_Q_VECTORS 8 ! 65: ! 66: /* Transmit and receive queues */ ! 67: #define IGB_MAX_RX_QUEUES (adapter->vfs_allocated_count ? 2 : \ ! 68: (hw->mac.type > e1000_82575 ? 8 : 4)) ! 69: #define IGB_ABS_MAX_TX_QUEUES 8 ! 70: #define IGB_MAX_TX_QUEUES IGB_MAX_RX_QUEUES ! 71: ! 72: #define IGB_MAX_VF_MC_ENTRIES 30 ! 73: #define IGB_MAX_VF_FUNCTIONS 8 ! 74: #define IGB_MAX_VFTA_ENTRIES 128 ! 75: #define IGB_MAX_UTA_ENTRIES 128 ! 76: #define MAX_EMULATION_MAC_ADDRS 16 ! 77: #define OUI_LEN 3 ! 78: ! 79: struct vf_data_storage { ! 80: unsigned char vf_mac_addresses[ETH_ALEN]; ! 81: u16 vf_mc_hashes[IGB_MAX_VF_MC_ENTRIES]; ! 82: u16 num_vf_mc_hashes; ! 83: u16 default_vf_vlan_id; ! 84: u16 vlans_enabled; ! 85: unsigned char em_mac_addresses[MAX_EMULATION_MAC_ADDRS * ETH_ALEN]; ! 86: u32 uta_table_copy[IGB_MAX_UTA_ENTRIES]; ! 87: u32 flags; ! 88: unsigned long last_nack; ! 89: }; ! 90: ! 91: #define IGB_VF_FLAG_CTS 0x00000001 /* VF is clear to send data */ ! 92: #define IGB_VF_FLAG_UNI_PROMISC 0x00000002 /* VF has unicast promisc */ ! 93: #define IGB_VF_FLAG_MULTI_PROMISC 0x00000004 /* VF has multicast promisc */ ! 94: ! 95: /* RX descriptor control thresholds. ! 96: * PTHRESH - MAC will consider prefetch if it has fewer than this number of ! 97: * descriptors available in its onboard memory. ! 98: * Setting this to 0 disables RX descriptor prefetch. ! 99: * HTHRESH - MAC will only prefetch if there are at least this many descriptors ! 100: * available in host memory. ! 101: * If PTHRESH is 0, this should also be 0. ! 102: * WTHRESH - RX descriptor writeback threshold - MAC will delay writing back ! 103: * descriptors until either it has this many to write back, or the ! 104: * ITR timer expires. ! 105: */ ! 106: #define IGB_RX_PTHRESH (hw->mac.type <= e1000_82576 ? 16 : 8) ! 107: #define IGB_RX_HTHRESH 8 ! 108: #define IGB_RX_WTHRESH 1 ! 109: #define IGB_TX_PTHRESH 8 ! 110: #define IGB_TX_HTHRESH 1 ! 111: #define IGB_TX_WTHRESH ((hw->mac.type == e1000_82576 && \ ! 112: adapter->msix_entries) ? 0 : 16) ! 113: ! 114: /* this is the size past which hardware will drop packets when setting LPE=0 */ ! 115: #define MAXIMUM_ETHERNET_VLAN_SIZE 1522 ! 116: ! 117: /* Supported Rx Buffer Sizes */ ! 118: #define IGB_RXBUFFER_128 128 /* Used for packet split */ ! 119: #define IGB_RXBUFFER_256 256 /* Used for packet split */ ! 120: #define IGB_RXBUFFER_512 512 ! 121: #define IGB_RXBUFFER_1024 1024 ! 122: #define IGB_RXBUFFER_2048 2048 ! 123: #define IGB_RXBUFFER_4096 4096 ! 124: #define IGB_RXBUFFER_8192 8192 ! 125: #define IGB_RXBUFFER_16384 16384 ! 126: ! 127: /* Packet Buffer allocations */ ! 128: #define IGB_PBA_BYTES_SHIFT 0xA ! 129: #define IGB_TX_HEAD_ADDR_SHIFT 7 ! 130: #define IGB_PBA_TX_MASK 0xFFFF0000 ! 131: ! 132: #define IGB_FC_PAUSE_TIME 0x0680 /* 858 usec */ ! 133: ! 134: /* How many Tx Descriptors do we need to call netif_wake_queue ? */ ! 135: #define IGB_TX_QUEUE_WAKE 32 ! 136: /* How many Rx Buffers do we bundle into one write to the hardware ? */ ! 137: #define IGB_RX_BUFFER_WRITE 16 /* Must be power of 2 */ ! 138: ! 139: #define AUTO_ALL_MODES 0 ! 140: #define IGB_EEPROM_APME 0x0400 ! 141: ! 142: #ifndef IGB_MASTER_SLAVE ! 143: /* Switch to override PHY master/slave setting */ ! 144: #define IGB_MASTER_SLAVE e1000_ms_hw_default ! 145: #endif ! 146: ! 147: #define IGB_MNG_VLAN_NONE -1 ! 148: ! 149: /* wrapper around a pointer to a socket buffer, ! 150: * so a DMA handle can be stored along with the buffer */ ! 151: struct igb_buffer { ! 152: struct sk_buff *skb; ! 153: dma_addr_t dma; ! 154: dma_addr_t page_dma; ! 155: union { ! 156: /* TX */ ! 157: struct { ! 158: unsigned long time_stamp; ! 159: u16 length; ! 160: u16 next_to_watch; ! 161: }; ! 162: ! 163: #ifndef CONFIG_IGB_DISABLE_PACKET_SPLIT ! 164: /* RX */ ! 165: struct { ! 166: unsigned long page_offset; ! 167: struct page *page; ! 168: }; ! 169: #endif ! 170: }; ! 171: }; ! 172: ! 173: struct igb_queue_stats { ! 174: u64 packets; ! 175: u64 bytes; ! 176: }; ! 177: ! 178: struct igb_q_vector { ! 179: struct igb_adapter *adapter; /* backlink */ ! 180: struct igb_ring *rx_ring; ! 181: struct igb_ring *tx_ring; ! 182: #if 0 ! 183: struct napi_struct napi; ! 184: #endif ! 185: u32 eims_value; ! 186: u16 cpu; ! 187: ! 188: u16 itr_val; ! 189: u8 set_itr; ! 190: u8 itr_shift; ! 191: void __iomem *itr_register; ! 192: ! 193: #if 0 ! 194: char name[IFNAMSIZ + 9]; ! 195: #endif ! 196: #ifndef HAVE_NETDEV_NAPI_LIST ! 197: struct net_device poll_dev; ! 198: #endif ! 199: }; ! 200: ! 201: struct igb_ring { ! 202: struct igb_q_vector *q_vector; /* backlink to q_vector */ ! 203: struct pci_dev *pdev; /* pci device for dma mapping */ ! 204: dma_addr_t dma; /* phys address of the ring */ ! 205: void *desc; /* descriptor ring memory */ ! 206: unsigned int size; /* length of desc. ring in bytes */ ! 207: u16 count; /* number of desc. in the ring */ ! 208: u16 next_to_use; ! 209: u16 next_to_clean; ! 210: u8 queue_index; ! 211: u8 reg_idx; ! 212: void __iomem *head; ! 213: void __iomem *tail; ! 214: struct igb_buffer *buffer_info; /* array of buffer info structs */ ! 215: ! 216: unsigned int total_bytes; ! 217: unsigned int total_packets; ! 218: ! 219: struct igb_queue_stats stats; ! 220: ! 221: union { ! 222: /* TX */ ! 223: struct { ! 224: unsigned int restart_queue; ! 225: u32 ctx_idx; ! 226: bool detect_tx_hung; ! 227: }; ! 228: /* RX */ ! 229: struct { ! 230: u64 hw_csum_err; ! 231: u64 hw_csum_good; ! 232: u32 rx_buffer_len; ! 233: u16 rx_ps_hdr_size; ! 234: bool rx_csum; ! 235: #ifdef IGB_LRO ! 236: struct net_lro_mgr lro_mgr; ! 237: bool lro_used; ! 238: #endif ! 239: }; ! 240: }; ! 241: }; ! 242: ! 243: ! 244: #define IGB_ADVTXD_DCMD (E1000_ADVTXD_DCMD_EOP | E1000_ADVTXD_DCMD_RS) ! 245: ! 246: #define IGB_DESC_UNUSED(R) \ ! 247: ((((R)->next_to_clean > (R)->next_to_use) ? 0 : (R)->count) + \ ! 248: (R)->next_to_clean - (R)->next_to_use - 1) ! 249: ! 250: #define E1000_RX_DESC_ADV(R, i) \ ! 251: (&(((union e1000_adv_rx_desc *)((R).desc))[i])) ! 252: #define E1000_TX_DESC_ADV(R, i) \ ! 253: (&(((union e1000_adv_tx_desc *)((R).desc))[i])) ! 254: #define E1000_TX_CTXTDESC_ADV(R, i) \ ! 255: (&(((struct e1000_adv_tx_context_desc *)((R).desc))[i])) ! 256: #define E1000_GET_DESC(R, i, type) (&(((struct type *)((R).desc))[i])) ! 257: #define E1000_TX_DESC(R, i) E1000_GET_DESC(R, i, e1000_tx_desc) ! 258: #define E1000_RX_DESC(R, i) E1000_GET_DESC(R, i, e1000_rx_desc) ! 259: ! 260: #define MAX_MSIX_COUNT 10 ! 261: /* board specific private data structure */ ! 262: ! 263: /* board specific private data structure */ ! 264: struct igb_adapter { ! 265: ! 266: /* OS defined structs */ ! 267: struct net_device *netdev; ! 268: struct pci_device *pdev; ! 269: struct net_device_stats net_stats; ! 270: ! 271: /* structs defined in e1000_hw.h */ ! 272: struct e1000_hw hw; ! 273: ! 274: struct e1000_phy_info phy_info; ! 275: ! 276: u32 min_frame_size; ! 277: u32 max_frame_size; ! 278: ! 279: u32 wol; ! 280: u32 pba; ! 281: u32 max_hw_frame_size; ! 282: ! 283: bool fc_autoneg; ! 284: ! 285: unsigned int flags; ! 286: unsigned int flags2; ! 287: ! 288: #define NUM_TX_DESC 8 ! 289: #define NUM_RX_DESC 8 ! 290: ! 291: struct io_buffer *tx_iobuf[NUM_TX_DESC]; ! 292: struct io_buffer *rx_iobuf[NUM_RX_DESC]; ! 293: ! 294: struct e1000_tx_desc *tx_base; ! 295: struct e1000_rx_desc *rx_base; ! 296: ! 297: uint32_t tx_ring_size; ! 298: uint32_t rx_ring_size; ! 299: ! 300: uint32_t tx_head; ! 301: uint32_t tx_tail; ! 302: uint32_t tx_fill_ctr; ! 303: ! 304: uint32_t rx_curr; ! 305: ! 306: uint32_t ioaddr; ! 307: uint32_t irqno; ! 308: ! 309: uint32_t tx_int_delay; ! 310: uint32_t tx_abs_int_delay; ! 311: uint32_t txd_cmd; ! 312: }; ! 313: ! 314: #define IGB_FLAG_HAS_MSI (1 << 0) ! 315: #define IGB_FLAG_MSI_ENABLE (1 << 1) ! 316: #define IGB_FLAG_DCA_ENABLED (1 << 3) ! 317: #define IGB_FLAG_LLI_PUSH (1 << 4) ! 318: #define IGB_FLAG_IN_NETPOLL (1 << 5) ! 319: #define IGB_FLAG_QUAD_PORT_A (1 << 6) ! 320: #define IGB_FLAG_QUEUE_PAIRS (1 << 7) ! 321: ! 322: #define IGB_82576_TSYNC_SHIFT 19 ! 323: ! 324: #endif /* _IGB_H_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.