]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - drivers/net/tg3.h
tg3: Add TSS support
[net-next-2.6.git] / drivers / net / tg3.h
index 982171f293fdf38bbe5696b713a2c50a77079f59..d1c7addd1d2d361cfbd13df58a2eddf6b892ca73 100644 (file)
 #define  SNDBDI_MODE_RESET              0x00000001
 #define  SNDBDI_MODE_ENABLE             0x00000002
 #define  SNDBDI_MODE_ATTN_ENABLE        0x00000004
+#define  SNDBDI_MODE_MULTI_TXQ_EN       0x00000020
 #define SNDBDI_STATUS                  0x00001804
 #define  SNDBDI_STATUS_ERROR_ATTN       0x00000004
 #define SNDBDI_IN_PROD_IDX_0           0x00001808
 #define  HOSTCC_MODE_CLRTICK_TXBD       0x00000400
 #define  HOSTCC_MODE_NOINT_ON_NOW       0x00000800
 #define  HOSTCC_MODE_NOINT_ON_FORCE     0x00001000
+#define  HOSTCC_MODE_COAL_VEC1_NOW      0x00002000
 #define HOSTCC_STATUS                  0x00003c04
 #define  HOSTCC_STATUS_ERROR_ATTN       0x00000004
 #define HOSTCC_RXCOL_TICKS             0x00003c08
 #define HOSTCC_SND_CON_IDX_13          0x00003cf4
 #define HOSTCC_SND_CON_IDX_14          0x00003cf8
 #define HOSTCC_SND_CON_IDX_15          0x00003cfc
-/* 0x3d00 --> 0x4000 unused */
+#define HOSTCC_STATBLCK_RING1          0x00003d00
+/* 0x3d04 --> 0x4000 unused */
 
 /* Memory arbiter control registers */
 #define MEMARB_MODE                    0x00004000
@@ -2487,6 +2490,37 @@ struct tg3_rx_prodring_set {
        dma_addr_t                      rx_jmb_mapping;
 };
 
+#define TG3_IRQ_MAX_VECS 1
+
+struct tg3_napi {
+       struct napi_struct              napi    ____cacheline_aligned;
+       struct tg3                      *tp;
+       struct tg3_hw_status            *hw_status;
+
+       u32                             last_tag;
+       u32                             last_irq_tag;
+       u32                             int_mbox;
+       u32                             coal_now;
+       u32                             tx_prod;
+       u32                             tx_cons;
+       u32                             tx_pending;
+       u32                             prodmbox;
+
+       u32                             consmbox;
+       u32                             rx_rcb_ptr;
+
+       struct tg3_rx_buffer_desc       *rx_rcb;
+       struct tg3_tx_buffer_desc       *tx_ring;
+       struct tx_ring_info             *tx_buffers;
+
+       dma_addr_t                      status_mapping;
+       dma_addr_t                      rx_rcb_mapping;
+       dma_addr_t                      tx_desc_mapping;
+
+       char                            irq_lbl[IFNAMSIZ];
+       unsigned int                    irq_vec;
+};
+
 struct tg3 {
        /* begin "general, frequently-used members" cacheline section */
 
@@ -2539,29 +2573,16 @@ struct tg3 {
        struct net_device               *dev;
        struct pci_dev                  *pdev;
 
-       struct tg3_hw_status            *hw_status;
-       dma_addr_t                      status_mapping;
-       u32                             last_tag;
-       u32                             last_irq_tag;
-
        u32                             msg_enable;
 
        /* begin "tx thread" cacheline section */
        void                            (*write32_tx_mbox) (struct tg3 *, u32,
                                                            u32);
-       u32                             tx_prod;
-       u32                             tx_cons;
-       u32                             tx_pending;
-
-       struct tg3_tx_buffer_desc       *tx_ring;
-       struct tx_ring_info             *tx_buffers;
-       dma_addr_t                      tx_desc_mapping;
 
        /* begin "rx thread" cacheline section */
-       struct napi_struct              napi;
+       struct tg3_napi                 napi[TG3_IRQ_MAX_VECS];
        void                            (*write32_rx_mbox) (struct tg3 *, u32,
                                                            u32);
-       u32                             rx_rcb_ptr;
        u32                             rx_pending;
        u32                             rx_jumbo_pending;
        u32                             rx_std_max_post;
@@ -2570,9 +2591,6 @@ struct tg3 {
        struct vlan_group               *vlgrp;
 #endif
 
-       struct tg3_rx_buffer_desc       *rx_rcb;
-       dma_addr_t                      rx_rcb_mapping;
-
        struct tg3_rx_prodring_set      prodring[1];
 
 
@@ -2605,6 +2623,9 @@ struct tg3 {
 #define TG3_FLAG_NVRAM                 0x00002000
 #define TG3_FLAG_NVRAM_BUFFERED                0x00004000
 #define TG3_FLAG_SUPPORT_MSI           0x00008000
+#define TG3_FLAG_SUPPORT_MSIX          0x00010000
+#define TG3_FLAG_SUPPORT_MSI_OR_MSIX   (TG3_FLAG_SUPPORT_MSI | \
+                                        TG3_FLAG_SUPPORT_MSIX)
 #define TG3_FLAG_PCIX_MODE             0x00020000
 #define TG3_FLAG_PCI_HIGH_SPEED                0x00040000
 #define TG3_FLAG_PCI_32BIT             0x00080000
@@ -2643,6 +2664,9 @@ struct tg3 {
 #define TG3_FLG2_5750_PLUS             0x00080000
 #define TG3_FLG2_PROTECTED_NVRAM       0x00100000
 #define TG3_FLG2_USING_MSI             0x00200000
+#define TG3_FLG2_USING_MSIX            0x00400000
+#define TG3_FLG2_USING_MSI_OR_MSIX     (TG3_FLG2_USING_MSI | \
+                                       TG3_FLG2_USING_MSIX)
 #define TG3_FLG2_MII_SERDES            0x00800000
 #define TG3_FLG2_ANY_SERDES            (TG3_FLG2_PHY_SERDES |  \
                                        TG3_FLG2_MII_SERDES)
@@ -2816,6 +2840,9 @@ struct tg3 {
 
 #define SST_25VF0X0_PAGE_SIZE          4098
 
+       unsigned int                    irq_max;
+       unsigned int                    irq_cnt;
+
        struct ethtool_coalesce         coal;
 
        /* firmware info */