diff options
Diffstat (limited to 'sys/dev/bce/if_bcereg.h')
-rw-r--r-- | sys/dev/bce/if_bcereg.h | 321 |
1 files changed, 162 insertions, 159 deletions
diff --git a/sys/dev/bce/if_bcereg.h b/sys/dev/bce/if_bcereg.h index cedb6b1..4bd5a62 100644 --- a/sys/dev/bce/if_bcereg.h +++ b/sys/dev/bce/if_bcereg.h @@ -302,18 +302,18 @@ #define BCE_CP_INTR 0x00000008 #define BCE_CP_UNLOAD 0x00000010 #define BCE_CP_RESET 0x00000020 -#define BCE_CP_PHY 0x00000040 +#define BCE_CP_PHY 0x00000040 #define BCE_CP_NVRAM 0x00000080 -#define BCE_CP_FIRMWARE 0x00000100 -#define BCE_CP_CTX 0x00000200 -#define BCE_CP_REG 0x00000400 +#define BCE_CP_FIRMWARE 0x00000100 +#define BCE_CP_CTX 0x00000200 +#define BCE_CP_REG 0x00000400 #define BCE_CP_MISC 0x00400000 #define BCE_CP_SPECIAL 0x00800000 -#define BCE_CP_ALL 0x00FFFFFF +#define BCE_CP_ALL 0x00FFFFFF #define BCE_CP_MASK 0x00FFFFFF -#define BCE_LEVEL_FATAL 0x00000000 +#define BCE_LEVEL_FATAL 0x00000000 #define BCE_LEVEL_WARN 0x01000000 #define BCE_LEVEL_INFO 0x02000000 #define BCE_LEVEL_VERBOSE 0x03000000 @@ -326,28 +326,28 @@ #define BCE_INFO_LOAD (BCE_CP_LOAD | BCE_LEVEL_INFO) #define BCE_VERBOSE_LOAD (BCE_CP_LOAD | BCE_LEVEL_VERBOSE) #define BCE_EXTREME_LOAD (BCE_CP_LOAD | BCE_LEVEL_EXTREME) -#define BCE_INSANE_LOAD (BCE_CP_LOAD | BCE_LEVEL_INSANE) +#define BCE_INSANE_LOAD (BCE_CP_LOAD | BCE_LEVEL_INSANE) #define BCE_WARN_SEND (BCE_CP_SEND | BCE_LEVEL_WARN) #define BCE_INFO_SEND (BCE_CP_SEND | BCE_LEVEL_INFO) #define BCE_VERBOSE_SEND (BCE_CP_SEND | BCE_LEVEL_VERBOSE) #define BCE_EXTREME_SEND (BCE_CP_SEND | BCE_LEVEL_EXTREME) -#define BCE_INSANE_SEND (BCE_CP_SEND | BCE_LEVEL_INSANE) +#define BCE_INSANE_SEND (BCE_CP_SEND | BCE_LEVEL_INSANE) #define BCE_WARN_RECV (BCE_CP_RECV | BCE_LEVEL_WARN) #define BCE_INFO_RECV (BCE_CP_RECV | BCE_LEVEL_INFO) #define BCE_VERBOSE_RECV (BCE_CP_RECV | BCE_LEVEL_VERBOSE) #define BCE_EXTREME_RECV (BCE_CP_RECV | BCE_LEVEL_EXTREME) -#define BCE_INSANE_RECV (BCE_CP_RECV | BCE_LEVEL_INSANE) +#define BCE_INSANE_RECV (BCE_CP_RECV | BCE_LEVEL_INSANE) #define BCE_WARN_INTR (BCE_CP_INTR | BCE_LEVEL_WARN) #define BCE_INFO_INTR (BCE_CP_INTR | BCE_LEVEL_INFO) #define BCE_VERBOSE_INTR (BCE_CP_INTR | BCE_LEVEL_VERBOSE) #define BCE_EXTREME_INTR (BCE_CP_INTR | BCE_LEVEL_EXTREME) -#define BCE_INSANE_INTR (BCE_CP_INTR | BCE_LEVEL_INSANE) +#define BCE_INSANE_INTR (BCE_CP_INTR | BCE_LEVEL_INSANE) -#define BCE_WARN_UNLOAD (BCE_CP_UNLOAD | BCE_LEVEL_WARN) -#define BCE_INFO_UNLOAD (BCE_CP_UNLOAD | BCE_LEVEL_INFO) +#define BCE_WARN_UNLOAD (BCE_CP_UNLOAD | BCE_LEVEL_WARN) +#define BCE_INFO_UNLOAD (BCE_CP_UNLOAD | BCE_LEVEL_INFO) #define BCE_VERBOSE_UNLOAD (BCE_CP_UNLOAD | BCE_LEVEL_VERBOSE) #define BCE_EXTREME_UNLOAD (BCE_CP_UNLOAD | BCE_LEVEL_EXTREME) #define BCE_INSANE_UNLOAD (BCE_CP_UNLOAD | BCE_LEVEL_INSANE) @@ -360,8 +360,8 @@ #define BCE_WARN_PHY (BCE_CP_PHY | BCE_LEVEL_WARN) #define BCE_INFO_PHY (BCE_CP_PHY | BCE_LEVEL_INFO) -#define BCE_VERBOSE_PHY (BCE_CP_PHY | BCE_LEVEL_VERBOSE) -#define BCE_EXTREME_PHY (BCE_CP_PHY | BCE_LEVEL_EXTREME) +#define BCE_VERBOSE_PHY (BCE_CP_PHY | BCE_LEVEL_VERBOSE) +#define BCE_EXTREME_PHY (BCE_CP_PHY | BCE_LEVEL_EXTREME) #define BCE_INSANE_PHY (BCE_CP_PHY | BCE_LEVEL_INSANE) #define BCE_WARN_NVRAM (BCE_CP_NVRAM | BCE_LEVEL_WARN) @@ -372,40 +372,40 @@ #define BCE_WARN_FIRMWARE (BCE_CP_FIRMWARE | BCE_LEVEL_WARN) #define BCE_INFO_FIRMWARE (BCE_CP_FIRMWARE | BCE_LEVEL_INFO) -#define BCE_VERBOSE_FIRMWARE (BCE_CP_FIRMWARE | BCE_LEVEL_VERBOSE) -#define BCE_EXTREME_FIRMWARE (BCE_CP_FIRMWARE | BCE_LEVEL_EXTREME) -#define BCE_INSANE_FIRMWARE (BCE_CP_FIRMWARE | BCE_LEVEL_INSANE) +#define BCE_VERBOSE_FIRMWARE (BCE_CP_FIRMWARE | BCE_LEVEL_VERBOSE) +#define BCE_EXTREME_FIRMWARE (BCE_CP_FIRMWARE | BCE_LEVEL_EXTREME) +#define BCE_INSANE_FIRMWARE (BCE_CP_FIRMWARE | BCE_LEVEL_INSANE) #define BCE_WARN_CTX (BCE_CP_CTX | BCE_LEVEL_WARN) #define BCE_INFO_CTX (BCE_CP_CTX | BCE_LEVEL_INFO) -#define BCE_VERBOSE_CTX (BCE_CP_CTX | BCE_LEVEL_VERBOSE) -#define BCE_EXTREME_CTX (BCE_CP_CTX | BCE_LEVEL_EXTREME) +#define BCE_VERBOSE_CTX (BCE_CP_CTX | BCE_LEVEL_VERBOSE) +#define BCE_EXTREME_CTX (BCE_CP_CTX | BCE_LEVEL_EXTREME) #define BCE_INSANE_CTX (BCE_CP_CTX | BCE_LEVEL_INSANE) #define BCE_WARN_REG (BCE_CP_REG | BCE_LEVEL_WARN) #define BCE_INFO_REG (BCE_CP_REG | BCE_LEVEL_INFO) -#define BCE_VERBOSE_REG (BCE_CP_REG | BCE_LEVEL_VERBOSE) -#define BCE_EXTREME_REG (BCE_CP_REG | BCE_LEVEL_EXTREME) +#define BCE_VERBOSE_REG (BCE_CP_REG | BCE_LEVEL_VERBOSE) +#define BCE_EXTREME_REG (BCE_CP_REG | BCE_LEVEL_EXTREME) #define BCE_INSANE_REG (BCE_CP_REG | BCE_LEVEL_INSANE) #define BCE_WARN_MISC (BCE_CP_MISC | BCE_LEVEL_WARN) #define BCE_INFO_MISC (BCE_CP_MISC | BCE_LEVEL_INFO) #define BCE_VERBOSE_MISC (BCE_CP_MISC | BCE_LEVEL_VERBOSE) #define BCE_EXTREME_MISC (BCE_CP_MISC | BCE_LEVEL_EXTREME) -#define BCE_INSANE_MISC (BCE_CP_MISC | BCE_LEVEL_INSANE) +#define BCE_INSANE_MISC (BCE_CP_MISC | BCE_LEVEL_INSANE) #define BCE_WARN_SPECIAL (BCE_CP_SPECIAL | BCE_LEVEL_WARN) #define BCE_INFO_SPECIAL (BCE_CP_SPECIAL | BCE_LEVEL_INFO) -#define BCE_VERBOSE_SPECIAL (BCE_CP_SPECIAL | BCE_LEVEL_VERBOSE) -#define BCE_EXTREME_SPECIAL (BCE_CP_SPECIAL | BCE_LEVEL_EXTREME) +#define BCE_VERBOSE_SPECIAL (BCE_CP_SPECIAL | BCE_LEVEL_VERBOSE) +#define BCE_EXTREME_SPECIAL (BCE_CP_SPECIAL | BCE_LEVEL_EXTREME) #define BCE_INSANE_SPECIAL (BCE_CP_SPECIAL | BCE_LEVEL_INSANE) -#define BCE_FATAL (BCE_CP_ALL | BCE_LEVEL_FATAL) -#define BCE_WARN (BCE_CP_ALL | BCE_LEVEL_WARN) -#define BCE_INFO (BCE_CP_ALL | BCE_LEVEL_INFO) +#define BCE_FATAL (BCE_CP_ALL | BCE_LEVEL_FATAL) +#define BCE_WARN (BCE_CP_ALL | BCE_LEVEL_WARN) +#define BCE_INFO (BCE_CP_ALL | BCE_LEVEL_INFO) #define BCE_VERBOSE (BCE_CP_ALL | BCE_LEVEL_VERBOSE) #define BCE_EXTREME (BCE_CP_ALL | BCE_LEVEL_EXTREME) -#define BCE_INSANE (BCE_CP_ALL | BCE_LEVEL_INSANE) +#define BCE_INSANE (BCE_CP_ALL | BCE_LEVEL_INSANE) #define BCE_CODE_PATH(cp) ((cp & BCE_CP_MASK) & bce_debug) #define BCE_MSG_LEVEL(lv) \ @@ -1155,20 +1155,19 @@ struct tx_bd { u32 tx_bd_haddr_lo; u32 tx_bd_mss_nbytes; u16 tx_bd_flags; +#define TX_BD_FLAGS_CONN_FAULT (1<<0) +#define TX_BD_FLAGS_TCP_UDP_CKSUM (1<<1) +#define TX_BD_FLAGS_IP_CKSUM (1<<2) +#define TX_BD_FLAGS_VLAN_TAG (1<<3) +#define TX_BD_FLAGS_COAL_NOW (1<<4) +#define TX_BD_FLAGS_DONT_GEN_CRC (1<<5) +#define TX_BD_FLAGS_END (1<<6) +#define TX_BD_FLAGS_START (1<<7) +#define TX_BD_FLAGS_SW_OPTION_WORD (0x1f<<8) +#define TX_BD_FLAGS_SW_FLAGS (1<<13) +#define TX_BD_FLAGS_SW_SNAP (1<<14) +#define TX_BD_FLAGS_SW_LSO (1<<15) u16 tx_bd_vlan_tag; - #define TX_BD_FLAGS_CONN_FAULT (1<<0) - #define TX_BD_FLAGS_TCP_UDP_CKSUM (1<<1) - #define TX_BD_FLAGS_IP_CKSUM (1<<2) - #define TX_BD_FLAGS_VLAN_TAG (1<<3) - #define TX_BD_FLAGS_COAL_NOW (1<<4) - #define TX_BD_FLAGS_DONT_GEN_CRC (1<<5) - #define TX_BD_FLAGS_END (1<<6) - #define TX_BD_FLAGS_START (1<<7) - #define TX_BD_FLAGS_SW_OPTION_WORD (0x1f<<8) - #define TX_BD_FLAGS_SW_FLAGS (1<<13) - #define TX_BD_FLAGS_SW_SNAP (1<<14) - #define TX_BD_FLAGS_SW_LSO (1<<15) - }; @@ -1180,11 +1179,10 @@ struct rx_bd { u32 rx_bd_haddr_lo; u32 rx_bd_len; u32 rx_bd_flags; - #define RX_BD_FLAGS_NOPUSH (1<<0) - #define RX_BD_FLAGS_DUMMY (1<<1) - #define RX_BD_FLAGS_END (1<<2) - #define RX_BD_FLAGS_START (1<<3) - +#define RX_BD_FLAGS_NOPUSH (1<<0) +#define RX_BD_FLAGS_DUMMY (1<<1) +#define RX_BD_FLAGS_END (1<<2) +#define RX_BD_FLAGS_START (1<<3) }; @@ -1387,6 +1385,7 @@ struct l2_fhdr { #define L2_FHDR_ERRORS_ALIGNMENT (1<<19) #define L2_FHDR_ERRORS_TOO_SHORT (1<<20) #define L2_FHDR_ERRORS_GIANT_FRAME (1<<21) + #define L2_FHDR_ERRORS_IPV4_BAD_LEN (1<<22) #define L2_FHDR_ERRORS_TCP_XSUM (1<<28) #define L2_FHDR_ERRORS_UDP_XSUM (1<<31) @@ -1405,36 +1404,39 @@ struct l2_fhdr { }; #define BCE_L2FHDR_PRINTFB \ - "\20" \ + "\20" \ "\40UDP_XSUM_ERR" \ - "\37b30" \ - "\36b29" \ + "\37b30" \ + "\36b29" \ "\35TCP_XSUM_ERR" \ - "\34b27" \ - "\33b26" \ - "\32b25" \ - "\31b24" \ - "\30b23" \ - "\27b22" \ + "\34b27" \ + "\33b26" \ + "\32b25" \ + "\31b24" \ + "\30b23" \ + "\27IPv4_BAL_LEN" \ "\26GIANT_ERR" \ "\25SHORT_ERR" \ "\24ALIGN_ERR" \ "\23PHY_ERR" \ "\22CRC_ERR" \ - "\21SPLIT" \ - "\20UDP" \ - "\17TCP" \ - "\16IP" \ - "\15b12" \ - "\14b11" \ - "\13b10" \ - "\12b09" \ - "\11RSS" \ - "\10SNAP" \ - "\07VLAN" \ - "\06P4" \ - "\05P3" \ - "\04P2" + "\21SPLIT" \ + "\20UDP" \ + "\17TCP" \ + "\16IP" \ + "\15SORT_b3" \ + "\14SORT_b2" \ + "\13SORT_b1" \ + "\12SORT_b0" \ + "\11RSS" \ + "\10SNAP" \ + "\07VLAN" \ + "\06P4" \ + "\05P3" \ + "\04P2" \ + "\03RULE_b2" \ + "\02RULE_b1" \ + "\01RULE_b0" /* @@ -6150,18 +6152,20 @@ struct l2_fhdr { * Page count must remain a power of 2 for all * of the math to work correctly. */ -#define TX_PAGES 2 -#define TOTAL_TX_BD_PER_PAGE (BCM_PAGE_SIZE / sizeof(struct tx_bd)) -#define USABLE_TX_BD_PER_PAGE (TOTAL_TX_BD_PER_PAGE - 1) -#define TOTAL_TX_BD (TOTAL_TX_BD_PER_PAGE * TX_PAGES) -#define USABLE_TX_BD (USABLE_TX_BD_PER_PAGE * TX_PAGES) -#define MAX_TX_BD (TOTAL_TX_BD - 1) +#define DEFAULT_TX_PAGES 2 +#define MAX_TX_PAGES 8 +#define TOTAL_TX_BD_PER_PAGE (BCM_PAGE_SIZE / sizeof(struct tx_bd)) +#define USABLE_TX_BD_PER_PAGE (TOTAL_TX_BD_PER_PAGE - 1) +#define MAX_TX_BD_AVAIL (MAX_TX_PAGES * TOTAL_TX_BD_PER_PAGE) +#define TOTAL_TX_BD_ALLOC (TOTAL_TX_BD_PER_PAGE * sc->tx_pages) +#define USABLE_TX_BD_ALLOC (USABLE_TX_BD_PER_PAGE * sc->tx_pages) +#define MAX_TX_BD_ALLOC (TOTAL_TX_BD_ALLOC - 1) /* Advance to the next tx_bd, skipping any next page pointers. */ #define NEXT_TX_BD(x) (((x) & USABLE_TX_BD_PER_PAGE) == \ (USABLE_TX_BD_PER_PAGE - 1)) ? (x) + 2 : (x) + 1 -#define TX_CHAIN_IDX(x) ((x) & MAX_TX_BD) +#define TX_CHAIN_IDX(x) ((x) & MAX_TX_BD_ALLOC) #define TX_PAGE(x) (((x) & ~USABLE_TX_BD_PER_PAGE) >> (BCM_PAGE_BITS - 4)) #define TX_IDX(x) ((x) & USABLE_TX_BD_PER_PAGE) @@ -6170,45 +6174,46 @@ struct l2_fhdr { * Page count must remain a power of 2 for all * of the math to work correctly. */ -#define RX_PAGES 2 -#define TOTAL_RX_BD_PER_PAGE (BCM_PAGE_SIZE / sizeof(struct rx_bd)) -#define USABLE_RX_BD_PER_PAGE (TOTAL_RX_BD_PER_PAGE - 1) -#define TOTAL_RX_BD (TOTAL_RX_BD_PER_PAGE * RX_PAGES) -#define USABLE_RX_BD (USABLE_RX_BD_PER_PAGE * RX_PAGES) -#define MAX_RX_BD (TOTAL_RX_BD - 1) +#define DEFAULT_RX_PAGES 2 +#define MAX_RX_PAGES 8 +#define TOTAL_RX_BD_PER_PAGE (BCM_PAGE_SIZE / sizeof(struct rx_bd)) +#define USABLE_RX_BD_PER_PAGE (TOTAL_RX_BD_PER_PAGE - 1) +#define MAX_RX_BD_AVAIL (MAX_RX_PAGES * TOTAL_RX_BD_PER_PAGE) +#define TOTAL_RX_BD_ALLOC (TOTAL_RX_BD_PER_PAGE * sc->rx_pages) +#define USABLE_RX_BD_ALLOC (USABLE_RX_BD_PER_PAGE * sc->rx_pages) +#define MAX_RX_BD_ALLOC (TOTAL_RX_BD_ALLOC - 1) /* Advance to the next rx_bd, skipping any next page pointers. */ #define NEXT_RX_BD(x) (((x) & USABLE_RX_BD_PER_PAGE) == \ (USABLE_RX_BD_PER_PAGE - 1)) ? (x) + 2 : (x) + 1 -#define RX_CHAIN_IDX(x) ((x) & MAX_RX_BD) +#define RX_CHAIN_IDX(x) ((x) & MAX_RX_BD_ALLOC) #define RX_PAGE(x) (((x) & ~USABLE_RX_BD_PER_PAGE) >> (BCM_PAGE_BITS - 4)) #define RX_IDX(x) ((x) & USABLE_RX_BD_PER_PAGE) -#ifdef BCE_JUMBO_HDRSPLIT /* * To accomodate jumbo frames, the page chain should * be 4 times larger than the receive chain. */ -#define PG_PAGES (RX_PAGES * 4) -#define TOTAL_PG_BD_PER_PAGE (BCM_PAGE_SIZE / sizeof(struct rx_bd)) -#define USABLE_PG_BD_PER_PAGE (TOTAL_PG_BD_PER_PAGE - 1) -#define TOTAL_PG_BD (TOTAL_PG_BD_PER_PAGE * PG_PAGES) -#define USABLE_PG_BD (USABLE_PG_BD_PER_PAGE * PG_PAGES) -#define MAX_PG_BD (TOTAL_PG_BD - 1) +#define DEFAULT_PG_PAGES (DEFAULT_RX_PAGES * 4) +#define MAX_PG_PAGES (MAX_RX_PAGES * 4) +#define TOTAL_PG_BD_PER_PAGE (BCM_PAGE_SIZE / sizeof(struct rx_bd)) +#define USABLE_PG_BD_PER_PAGE (TOTAL_PG_BD_PER_PAGE - 1) +#define MAX_PG_BD_AVAIL (MAX_PG_PAGES * TOTAL_PG_BD_PER_PAGE) +#define TOTAL_PG_BD_ALLOC (TOTAL_PG_BD_PER_PAGE * sc->pg_pages) +#define USABLE_PG_BD_ALLOC (USABLE_PG_BD_PER_PAGE * sc->pg_pages) +#define MAX_PG_BD_ALLOC (TOTAL_PG_BD_ALLOC - 1) /* Advance to the next pg_bd, skipping any next page pointers. */ #define NEXT_PG_BD(x) (((x) & USABLE_PG_BD_PER_PAGE) == \ (USABLE_PG_BD_PER_PAGE - 1)) ? (x) + 2 : (x) + 1 -#define PG_CHAIN_IDX(x) ((x) & MAX_PG_BD) +#define PG_CHAIN_IDX(x) ((x) & MAX_PG_BD_ALLOC) #define PG_PAGE(x) (((x) & ~USABLE_PG_BD_PER_PAGE) >> (BCM_PAGE_BITS - 4)) #define PG_IDX(x) ((x) & USABLE_PG_BD_PER_PAGE) -#endif /* BCE_JUMBO_HDRSPLIT */ - #define CTX_INIT_RETRY_COUNT 10 /* Context size. */ @@ -6236,6 +6241,15 @@ struct l2_fhdr { #define TX_CID 16 #define RX_CID 0 +#define DEFAULT_TX_QUICK_CONS_TRIP_INT 20 +#define DEFAULT_TX_QUICK_CONS_TRIP 20 +#define DEFAULT_TX_TICKS_INT 80 +#define DEFAULT_TX_TICKS 80 +#define DEFAULT_RX_QUICK_CONS_TRIP_INT 6 +#define DEFAULT_RX_QUICK_CONS_TRIP 6 +#define DEFAULT_RX_TICKS_INT 18 +#define DEFAULT_RX_TICKS 18 + /****************************************************************************/ /* BCE Processor Firmwware Load Definitions */ /****************************************************************************/ @@ -6530,26 +6544,27 @@ struct bce_softc /* The device handle for the MII bus child device. */ device_t bce_miibus; - /* Driver maintained TX chain pointers and byte counter. */ + /* Driver maintained RX chain pointers and byte counter. */ u16 rx_prod; u16 rx_cons; /* Counts the bytes used in the RX chain. */ u32 rx_prod_bseq; + + /* Driver maintained TX chain pointers and byte counter. */ u16 tx_prod; u16 tx_cons; /* Counts the bytes used in the TX chain. */ u32 tx_prod_bseq; -#ifdef BCE_JUMBO_HDRSPLIT + /* Driver maintained PG chain pointers. */ u16 pg_prod; u16 pg_cons; -#endif int bce_link_up; - struct callout bce_tick_callout; - struct callout bce_pulse_callout; + struct callout bce_tick_callout; + struct callout bce_pulse_callout; /* Ticks until chip reset */ int watchdog_timer; @@ -6559,10 +6574,7 @@ struct bce_softc int rx_bd_mbuf_alloc_size; int rx_bd_mbuf_data_len; int rx_bd_mbuf_align_pad; - -#ifdef BCE_JUMBO_HDRSPLIT int pg_bd_mbuf_alloc_size; -#endif /* Receive mode settings (i.e promiscuous, multicast, etc.). */ u32 rx_mode; @@ -6571,30 +6583,31 @@ struct bce_softc bus_dma_tag_t parent_tag; /* H/W maintained TX buffer descriptor chain structure. */ + int tx_pages; bus_dma_tag_t tx_bd_chain_tag; - bus_dmamap_t tx_bd_chain_map[TX_PAGES]; - struct tx_bd *tx_bd_chain[TX_PAGES]; - bus_addr_t tx_bd_chain_paddr[TX_PAGES]; + bus_dmamap_t tx_bd_chain_map[MAX_TX_PAGES]; + struct tx_bd *tx_bd_chain[MAX_TX_PAGES]; + bus_addr_t tx_bd_chain_paddr[MAX_TX_PAGES]; /* H/W maintained RX buffer descriptor chain structure. */ + int rx_pages; bus_dma_tag_t rx_bd_chain_tag; - bus_dmamap_t rx_bd_chain_map[RX_PAGES]; - struct rx_bd *rx_bd_chain[RX_PAGES]; - bus_addr_t rx_bd_chain_paddr[RX_PAGES]; + bus_dmamap_t rx_bd_chain_map[MAX_RX_PAGES]; + struct rx_bd *rx_bd_chain[MAX_RX_PAGES]; + bus_addr_t rx_bd_chain_paddr[MAX_RX_PAGES]; -#ifdef BCE_JUMBO_HDRSPLIT /* H/W maintained page buffer descriptor chain structure. */ + int pg_pages; bus_dma_tag_t pg_bd_chain_tag; - bus_dmamap_t pg_bd_chain_map[PG_PAGES]; - struct rx_bd *pg_bd_chain[PG_PAGES]; - bus_addr_t pg_bd_chain_paddr[PG_PAGES]; -#endif + bus_dmamap_t pg_bd_chain_map[MAX_PG_PAGES]; + struct rx_bd *pg_bd_chain[MAX_PG_PAGES]; + bus_addr_t pg_bd_chain_paddr[MAX_PG_PAGES]; /* H/W maintained status block. */ bus_dma_tag_t status_tag; bus_dmamap_t status_map; struct status_block *status_block; - bus_addr_t status_block_paddr; + bus_addr_t status_block_paddr; /* Driver maintained status block values. */ u16 last_status_idx; @@ -6605,49 +6618,41 @@ struct bce_softc bus_dma_tag_t stats_tag; bus_dmamap_t stats_map; struct statistics_block *stats_block; - bus_addr_t stats_block_paddr; + bus_addr_t stats_block_paddr; /* H/W maintained context block. */ - int ctx_pages; + int ctx_pages; bus_dma_tag_t ctx_tag; /* BCM5709/16 use host memory for context. */ bus_dmamap_t ctx_map[BCE_MAX_CONTEXT]; - void *ctx_block[BCE_MAX_CONTEXT]; - bus_addr_t ctx_paddr[BCE_MAX_CONTEXT]; + void *ctx_block[BCE_MAX_CONTEXT]; + bus_addr_t ctx_paddr[BCE_MAX_CONTEXT]; /* Bus tag for RX/TX mbufs. */ bus_dma_tag_t rx_mbuf_tag; bus_dma_tag_t tx_mbuf_tag; - -#ifdef BCE_JUMBO_HDRSPLIT bus_dma_tag_t pg_mbuf_tag; -#endif /* S/W maintained mbuf TX chain structure. */ - bus_dmamap_t tx_mbuf_map[TOTAL_TX_BD]; - struct mbuf *tx_mbuf_ptr[TOTAL_TX_BD]; + bus_dmamap_t tx_mbuf_map[MAX_TX_BD_AVAIL]; + struct mbuf *tx_mbuf_ptr[MAX_TX_BD_AVAIL]; /* S/W maintained mbuf RX chain structure. */ - bus_dmamap_t rx_mbuf_map[TOTAL_RX_BD]; - struct mbuf *rx_mbuf_ptr[TOTAL_RX_BD]; + bus_dmamap_t rx_mbuf_map[MAX_RX_BD_AVAIL]; + struct mbuf *rx_mbuf_ptr[MAX_RX_BD_AVAIL]; -#ifdef BCE_JUMBO_HDRSPLIT /* S/W maintained mbuf page chain structure. */ - bus_dmamap_t pg_mbuf_map[TOTAL_PG_BD]; - struct mbuf *pg_mbuf_ptr[TOTAL_PG_BD]; -#endif + bus_dmamap_t pg_mbuf_map[MAX_PG_BD_AVAIL]; + struct mbuf *pg_mbuf_ptr[MAX_PG_BD_AVAIL]; /* Track the number of buffer descriptors in use. */ u16 free_rx_bd; u16 max_rx_bd; u16 used_tx_bd; u16 max_tx_bd; - -#ifdef BCE_JUMBO_HDRSPLIT u16 free_pg_bd; u16 max_pg_bd; -#endif /* Provides access to hardware statistics through sysctl. */ u64 stat_IfHCInOctets; @@ -6733,63 +6738,61 @@ struct bce_softc /* Track the number of enqueued mbufs. */ int debug_tx_mbuf_alloc; int debug_rx_mbuf_alloc; - -#ifdef BCE_JUMBO_HDRSPLIT int debug_pg_mbuf_alloc; -#endif /* Track how many and what type of interrupts are generated. */ - u32 interrupts_generated; - u32 interrupts_handled; - u32 interrupts_rx; - u32 interrupts_tx; - u32 phy_interrupts; - - /* Track interrupt time (25MHz clock). */ - u64 rx_intr_time; - u64 tx_intr_time; + u64 interrupts_generated; + u64 interrupts_handled; + u64 interrupts_rx; + u64 interrupts_tx; + u64 phy_interrupts; /* Lowest number of rx_bd's free. */ - u32 rx_low_watermark; + u16 rx_low_watermark; /* Number of times the RX chain was empty. */ - u32 rx_empty_count; + u64 rx_empty_count; -#ifdef BCE_JUMBO_HDRSPLIT /* Lowest number of pages free. */ - u32 pg_low_watermark; + u16 pg_low_watermark; /* Number of times the page chain was empty. */ - u32 pg_empty_count; -#endif + u64 pg_empty_count; /* Greatest number of tx_bd's used. */ - u32 tx_hi_watermark; + u16 tx_hi_watermark; /* Number of times the TX chain was full. */ - u32 tx_full_count; + u64 tx_full_count; /* Number of TSO frames requested. */ - u32 tso_frames_requested; + u64 tso_frames_requested; /* Number of TSO frames completed. */ - u32 tso_frames_completed; + u64 tso_frames_completed; /* Number of TSO frames failed. */ - u32 tso_frames_failed; + u64 tso_frames_failed; /* Number of IP checksum offload frames.*/ - u32 csum_offload_ip; + u64 csum_offload_ip; /* Number of TCP/UDP checksum offload frames.*/ - u32 csum_offload_tcp_udp; + u64 csum_offload_tcp_udp; /* Number of VLAN tagged frames received. */ - u32 vlan_tagged_frames_rcvd; + u64 vlan_tagged_frames_rcvd; /* Number of VLAN tagged frames stripped. */ - u32 vlan_tagged_frames_stripped; -#endif + u64 vlan_tagged_frames_stripped; + + /* Number of split header frames received. */ + u64 split_header_frames_rcvd; + + /* Number of split header TCP frames received. */ + u64 split_header_tcp_frames_rcvd; +#endif /* BCE_DEBUG */ + uint8_t *nvram_buf; }; |