- Enable flow control.

- Print device details only when verbose boot is enabled.
- Add debug output for shared memory access.
- Add debug statistics (checksum offload & VLAN frame counters).
- Modify TX path to update consumer index for each frame completed
  rather than updating the consumer index only once for a group of
  frames to improve small packet performance.
- Print driver/firmware pulse messages only when verbose boot
  is enabled.
- Add debug sysctl to clear statistics.
- Fix more style(9) violations.

MFC after:	2 weeks
This commit is contained in:
David Christensen 2010-04-30 02:35:46 +00:00
parent 2965a45315
commit 7c409214bf
2 changed files with 955 additions and 784 deletions

File diff suppressed because it is too large Load Diff

View File

@ -284,8 +284,8 @@
"\02EnaPauseRcv" \
"\01EnaPausXmit"
/*
* Remove before release:
/*
* Remove before release:
*
* #define BCE_DEBUG
* #define BCE_NVRAM_WRITE_SUPPORT
@ -439,7 +439,7 @@
}
/* Runs a particular command based on the code path. */
#define DBRUNCP(cp, args...) \
#define DBRUNCP(cp, args...) \
if (BCE_CODE_PATH(cp)) { \
args; \
}
@ -4116,7 +4116,7 @@ struct l2_fhdr {
#define BCE_RDMA_FTQ_CTL_CUR_DEPTH (0x3ffL<<22)
/*
* timer_reg definition
* offset: 0x4400
@ -4476,107 +4476,107 @@ struct l2_fhdr {
* csch_reg definition
* offset: 0x4000
*/
#define BCE_CSCH_COMMAND 0x00004000
#define BCE_CSCH_CH_FTQ_CMD 0x000043f8
#define BCE_CSCH_CH_FTQ_CTL 0x000043fc
#define BCE_CSCH_CH_FTQ_CTL_MAX_DEPTH (0x3ffL<<12)
#define BCE_CSCH_CH_FTQ_CTL_CUR_DEPTH (0x3ffL<<22)
#define BCE_CSCH_COMMAND 0x00004000
#define BCE_CSCH_CH_FTQ_CMD 0x000043f8
#define BCE_CSCH_CH_FTQ_CTL 0x000043fc
#define BCE_CSCH_CH_FTQ_CTL_MAX_DEPTH (0x3ffL<<12)
#define BCE_CSCH_CH_FTQ_CTL_CUR_DEPTH (0x3ffL<<22)
/*
* tbdr_reg definition
* offset: 0x5000
*/
#define BCE_TBDR_COMMAND 0x00005000
#define BCE_TBDR_COMMAND_ENABLE (1L<<0)
#define BCE_TBDR_COMMAND_SOFT_RST (1L<<1)
#define BCE_TBDR_COMMAND_MSTR_ABORT (1L<<4)
#define BCE_TBDR_COMMAND 0x00005000
#define BCE_TBDR_COMMAND_ENABLE (1L<<0)
#define BCE_TBDR_COMMAND_SOFT_RST (1L<<1)
#define BCE_TBDR_COMMAND_MSTR_ABORT (1L<<4)
#define BCE_TBDR_STATUS 0x00005004
#define BCE_TBDR_STATUS_DMA_WAIT (1L<<0)
#define BCE_TBDR_STATUS_FTQ_WAIT (1L<<1)
#define BCE_TBDR_STATUS_FIFO_OVERFLOW (1L<<2)
#define BCE_TBDR_STATUS_FIFO_UNDERFLOW (1L<<3)
#define BCE_TBDR_STATUS_SEARCHMISS_ERROR (1L<<4)
#define BCE_TBDR_STATUS_FTQ_ENTRY_CNT (1L<<5)
#define BCE_TBDR_STATUS_BURST_CNT (1L<<6)
#define BCE_TBDR_STATUS 0x00005004
#define BCE_TBDR_STATUS_DMA_WAIT (1L<<0)
#define BCE_TBDR_STATUS_FTQ_WAIT (1L<<1)
#define BCE_TBDR_STATUS_FIFO_OVERFLOW (1L<<2)
#define BCE_TBDR_STATUS_FIFO_UNDERFLOW (1L<<3)
#define BCE_TBDR_STATUS_SEARCHMISS_ERROR (1L<<4)
#define BCE_TBDR_STATUS_FTQ_ENTRY_CNT (1L<<5)
#define BCE_TBDR_STATUS_BURST_CNT (1L<<6)
#define BCE_TBDR_CONFIG 0x00005008
#define BCE_TBDR_CONFIG_MAX_BDS (0xffL<<0)
#define BCE_TBDR_CONFIG_SWAP_MODE (1L<<8)
#define BCE_TBDR_CONFIG_PRIORITY (1L<<9)
#define BCE_TBDR_CONFIG 0x00005008
#define BCE_TBDR_CONFIG_MAX_BDS (0xffL<<0)
#define BCE_TBDR_CONFIG_SWAP_MODE (1L<<8)
#define BCE_TBDR_CONFIG_PRIORITY (1L<<9)
#define BCE_TBDR_CONFIG_CACHE_NEXT_PAGE_PTRS (1L<<10)
#define BCE_TBDR_CONFIG_PAGE_SIZE (0xfL<<24)
#define BCE_TBDR_CONFIG_PAGE_SIZE_256 (0L<<24)
#define BCE_TBDR_CONFIG_PAGE_SIZE_512 (1L<<24)
#define BCE_TBDR_CONFIG_PAGE_SIZE_1K (2L<<24)
#define BCE_TBDR_CONFIG_PAGE_SIZE_2K (3L<<24)
#define BCE_TBDR_CONFIG_PAGE_SIZE_4K (4L<<24)
#define BCE_TBDR_CONFIG_PAGE_SIZE_8K (5L<<24)
#define BCE_TBDR_CONFIG_PAGE_SIZE_16K (6L<<24)
#define BCE_TBDR_CONFIG_PAGE_SIZE_32K (7L<<24)
#define BCE_TBDR_CONFIG_PAGE_SIZE_64K (8L<<24)
#define BCE_TBDR_CONFIG_PAGE_SIZE_128K (9L<<24)
#define BCE_TBDR_CONFIG_PAGE_SIZE_256K (10L<<24)
#define BCE_TBDR_CONFIG_PAGE_SIZE_512K (11L<<24)
#define BCE_TBDR_CONFIG_PAGE_SIZE_1M (12L<<24)
#define BCE_TBDR_CONFIG_PAGE_SIZE (0xfL<<24)
#define BCE_TBDR_CONFIG_PAGE_SIZE_256 (0L<<24)
#define BCE_TBDR_CONFIG_PAGE_SIZE_512 (1L<<24)
#define BCE_TBDR_CONFIG_PAGE_SIZE_1K (2L<<24)
#define BCE_TBDR_CONFIG_PAGE_SIZE_2K (3L<<24)
#define BCE_TBDR_CONFIG_PAGE_SIZE_4K (4L<<24)
#define BCE_TBDR_CONFIG_PAGE_SIZE_8K (5L<<24)
#define BCE_TBDR_CONFIG_PAGE_SIZE_16K (6L<<24)
#define BCE_TBDR_CONFIG_PAGE_SIZE_32K (7L<<24)
#define BCE_TBDR_CONFIG_PAGE_SIZE_64K (8L<<24)
#define BCE_TBDR_CONFIG_PAGE_SIZE_128K (9L<<24)
#define BCE_TBDR_CONFIG_PAGE_SIZE_256K (10L<<24)
#define BCE_TBDR_CONFIG_PAGE_SIZE_512K (11L<<24)
#define BCE_TBDR_CONFIG_PAGE_SIZE_1M (12L<<24)
#define BCE_TBDR_DEBUG_VECT_PEEK 0x0000500c
#define BCE_TBDR_DEBUG_VECT_PEEK_1_VALUE (0x7ffL<<0)
#define BCE_TBDR_DEBUG_VECT_PEEK_1_PEEK_EN (1L<<11)
#define BCE_TBDR_DEBUG_VECT_PEEK_1_SEL (0xfL<<12)
#define BCE_TBDR_DEBUG_VECT_PEEK_2_VALUE (0x7ffL<<16)
#define BCE_TBDR_DEBUG_VECT_PEEK_2_PEEK_EN (1L<<27)
#define BCE_TBDR_DEBUG_VECT_PEEK_2_SEL (0xfL<<28)
#define BCE_TBDR_DEBUG_VECT_PEEK 0x0000500c
#define BCE_TBDR_DEBUG_VECT_PEEK_1_VALUE (0x7ffL<<0)
#define BCE_TBDR_DEBUG_VECT_PEEK_1_PEEK_EN (1L<<11)
#define BCE_TBDR_DEBUG_VECT_PEEK_1_SEL (0xfL<<12)
#define BCE_TBDR_DEBUG_VECT_PEEK_2_VALUE (0x7ffL<<16)
#define BCE_TBDR_DEBUG_VECT_PEEK_2_PEEK_EN (1L<<27)
#define BCE_TBDR_DEBUG_VECT_PEEK_2_SEL (0xfL<<28)
#define BCE_TBDR_FTQ_DATA 0x000053c0
#define BCE_TBDR_FTQ_CMD 0x000053f8
#define BCE_TBDR_FTQ_CMD_OFFSET (0x3ffL<<0)
#define BCE_TBDR_FTQ_CMD_WR_TOP (1L<<10)
#define BCE_TBDR_FTQ_CMD_WR_TOP_0 (0L<<10)
#define BCE_TBDR_FTQ_CMD_WR_TOP_1 (1L<<10)
#define BCE_TBDR_FTQ_CMD_SFT_RESET (1L<<25)
#define BCE_TBDR_FTQ_CMD_RD_DATA (1L<<26)
#define BCE_TBDR_FTQ_CMD_ADD_INTERVEN (1L<<27)
#define BCE_TBDR_FTQ_CMD_ADD_DATA (1L<<28)
#define BCE_TBDR_FTQ_CMD_INTERVENE_CLR (1L<<29)
#define BCE_TBDR_FTQ_CMD_POP (1L<<30)
#define BCE_TBDR_FTQ_CMD_BUSY (1L<<31)
#define BCE_TBDR_FTQ_DATA 0x000053c0
#define BCE_TBDR_FTQ_CMD 0x000053f8
#define BCE_TBDR_FTQ_CMD_OFFSET (0x3ffL<<0)
#define BCE_TBDR_FTQ_CMD_WR_TOP (1L<<10)
#define BCE_TBDR_FTQ_CMD_WR_TOP_0 (0L<<10)
#define BCE_TBDR_FTQ_CMD_WR_TOP_1 (1L<<10)
#define BCE_TBDR_FTQ_CMD_SFT_RESET (1L<<25)
#define BCE_TBDR_FTQ_CMD_RD_DATA (1L<<26)
#define BCE_TBDR_FTQ_CMD_ADD_INTERVEN (1L<<27)
#define BCE_TBDR_FTQ_CMD_ADD_DATA (1L<<28)
#define BCE_TBDR_FTQ_CMD_INTERVENE_CLR (1L<<29)
#define BCE_TBDR_FTQ_CMD_POP (1L<<30)
#define BCE_TBDR_FTQ_CMD_BUSY (1L<<31)
#define BCE_TBDR_FTQ_CTL 0x000053fc
#define BCE_TBDR_FTQ_CTL_INTERVENE (1L<<0)
#define BCE_TBDR_FTQ_CTL_OVERFLOW (1L<<1)
#define BCE_TBDR_FTQ_CTL_FORCE_INTERVENE (1L<<2)
#define BCE_TBDR_FTQ_CTL_MAX_DEPTH (0x3ffL<<12)
#define BCE_TBDR_FTQ_CTL_CUR_DEPTH (0x3ffL<<22)
#define BCE_TBDR_FTQ_CTL 0x000053fc
#define BCE_TBDR_FTQ_CTL_INTERVENE (1L<<0)
#define BCE_TBDR_FTQ_CTL_OVERFLOW (1L<<1)
#define BCE_TBDR_FTQ_CTL_FORCE_INTERVENE (1L<<2)
#define BCE_TBDR_FTQ_CTL_MAX_DEPTH (0x3ffL<<12)
#define BCE_TBDR_FTQ_CTL_CUR_DEPTH (0x3ffL<<22)
/*
* tdma_reg definition
* offset: 0x5c00
*/
#define BCE_TDMA_COMMAND 0x00005c00
#define BCE_TDMA_COMMAND_ENABLED (1L<<0)
#define BCE_TDMA_COMMAND_MASTER_ABORT (1L<<4)
#define BCE_TDMA_COMMAND_BAD_L2_LENGTH_ABORT (1L<<7)
#define BCE_TDMA_COMMAND 0x00005c00
#define BCE_TDMA_COMMAND_ENABLED (1L<<0)
#define BCE_TDMA_COMMAND_MASTER_ABORT (1L<<4)
#define BCE_TDMA_COMMAND_BAD_L2_LENGTH_ABORT (1L<<7)
#define BCE_TDMA_STATUS 0x00005c04
#define BCE_TDMA_STATUS_DMA_WAIT (1L<<0)
#define BCE_TDMA_STATUS_PAYLOAD_WAIT (1L<<1)
#define BCE_TDMA_STATUS_PATCH_FTQ_WAIT (1L<<2)
#define BCE_TDMA_STATUS 0x00005c04
#define BCE_TDMA_STATUS_DMA_WAIT (1L<<0)
#define BCE_TDMA_STATUS_PAYLOAD_WAIT (1L<<1)
#define BCE_TDMA_STATUS_PATCH_FTQ_WAIT (1L<<2)
#define BCE_TDMA_STATUS_LOCK_WAIT (1L<<3)
#define BCE_TDMA_STATUS_FTQ_ENTRY_CNT (1L<<16)
#define BCE_TDMA_STATUS_BURST_CNT (1L<<17)
#define BCE_TDMA_CONFIG 0x00005c08
#define BCE_TDMA_CONFIG_ONE_DMA (1L<<0)
#define BCE_TDMA_CONFIG 0x00005c08
#define BCE_TDMA_CONFIG_ONE_DMA (1L<<0)
#define BCE_TDMA_CONFIG_ONE_RECORD (1L<<1)
#define BCE_TDMA_CONFIG_LIMIT_SZ (0xfL<<4)
#define BCE_TDMA_CONFIG_LIMIT_SZ_64 (0L<<4)
#define BCE_TDMA_CONFIG_LIMIT_SZ_128 (0x4L<<4)
#define BCE_TDMA_CONFIG_LIMIT_SZ_256 (0x6L<<4)
#define BCE_TDMA_CONFIG_LIMIT_SZ_512 (0x8L<<4)
#define BCE_TDMA_CONFIG_LINE_SZ (0xfL<<8)
#define BCE_TDMA_CONFIG_LINE_SZ (0xfL<<8)
#define BCE_TDMA_CONFIG_LINE_SZ_64 (0L<<8)
#define BCE_TDMA_CONFIG_LINE_SZ_128 (4L<<8)
#define BCE_TDMA_CONFIG_LINE_SZ_256 (6L<<8)
@ -4612,7 +4612,7 @@ struct l2_fhdr {
#define BCE_TDMA_DR_INTF_FSM_DR_BUF (0x7L<<12)
#define BCE_TDMA_DR_INTF_FSM_DMAD (0x7L<<16)
#define BCE_TDMA_DR_INTF_STATUS 0x00005c8c
#define BCE_TDMA_DR_INTF_STATUS 0x00005c8c
#define BCE_TDMA_DR_INTF_STATUS_HOLE_PHASE (0x7L<<0)
#define BCE_TDMA_DR_INTF_STATUS_DATA_AVAIL (0x3L<<4)
#define BCE_TDMA_DR_INTF_STATUS_SHIFT_ADDR (0x7L<<8)
@ -4621,8 +4621,8 @@ struct l2_fhdr {
#define BCE_TDMA_FTQ_DATA 0x00005fc0
#define BCE_TDMA_FTQ_CMD 0x00005ff8
#define BCE_TDMA_FTQ_CMD_OFFSET (0x3ffL<<0)
#define BCE_TDMA_FTQ_CMD_WR_TOP (1L<<10)
#define BCE_TDMA_FTQ_CMD_OFFSET (0x3ffL<<0)
#define BCE_TDMA_FTQ_CMD_WR_TOP (1L<<10)
#define BCE_TDMA_FTQ_CMD_WR_TOP_0 (0L<<10)
#define BCE_TDMA_FTQ_CMD_WR_TOP_1 (1L<<10)
#define BCE_TDMA_FTQ_CMD_SFT_RESET (1L<<25)
@ -4645,7 +4645,7 @@ struct l2_fhdr {
* nvm_reg definition
* offset: 0x6400
*/
#define BCE_NVM_COMMAND 0x00006400
#define BCE_NVM_COMMAND 0x00006400
#define BCE_NVM_COMMAND_RST (1L<<0)
#define BCE_NVM_COMMAND_DONE (1L<<3)
#define BCE_NVM_COMMAND_DOIT (1L<<4)
@ -4694,23 +4694,23 @@ struct l2_fhdr {
#define BCE_NVM_READ_NVM_READ_VALUE_SI (32L<<0)
#define BCE_NVM_CFG1 0x00006414
#define BCE_NVM_CFG1_FLASH_MODE (1L<<0)
#define BCE_NVM_CFG1_FLASH_MODE (1L<<0)
#define BCE_NVM_CFG1_BUFFER_MODE (1L<<1)
#define BCE_NVM_CFG1_PASS_MODE (1L<<2)
#define BCE_NVM_CFG1_BITBANG_MODE (1L<<3)
#define BCE_NVM_CFG1_STATUS_BIT (0x7L<<4)
#define BCE_NVM_CFG1_STATUS_BIT (0x7L<<4)
#define BCE_NVM_CFG1_STATUS_BIT_FLASH_RDY (0L<<4)
#define BCE_NVM_CFG1_STATUS_BIT_BUFFER_RDY (7L<<4)
#define BCE_NVM_CFG1_SPI_CLK_DIV (0xfL<<7)
#define BCE_NVM_CFG1_SEE_CLK_DIV (0x7ffL<<11)
#define BCE_NVM_CFG1_PROTECT_MODE (1L<<24)
#define BCE_NVM_CFG1_FLASH_SIZE (1L<<25)
#define BCE_NVM_CFG1_FLASH_SIZE (1L<<25)
#define BCE_NVM_CFG1_COMPAT_BYPASSS (1L<<31)
#define BCE_NVM_CFG2 0x00006418
#define BCE_NVM_CFG2_ERASE_CMD (0xffL<<0)
#define BCE_NVM_CFG2_DUMMY (0xffL<<8)
#define BCE_NVM_CFG2_STATUS_CMD (0xffL<<16)
#define BCE_NVM_CFG2_STATUS_CMD (0xffL<<16)
#define BCE_NVM_CFG3 0x0000641c
#define BCE_NVM_CFG3_BUFFER_RD_CMD (0xffL<<0)
@ -4727,10 +4727,10 @@ struct l2_fhdr {
#define BCE_NVM_SW_ARB_ARB_REQ_CLR1 (1L<<5)
#define BCE_NVM_SW_ARB_ARB_REQ_CLR2 (1L<<6)
#define BCE_NVM_SW_ARB_ARB_REQ_CLR3 (1L<<7)
#define BCE_NVM_SW_ARB_ARB_ARB0 (1L<<8)
#define BCE_NVM_SW_ARB_ARB_ARB1 (1L<<9)
#define BCE_NVM_SW_ARB_ARB_ARB2 (1L<<10)
#define BCE_NVM_SW_ARB_ARB_ARB3 (1L<<11)
#define BCE_NVM_SW_ARB_ARB_ARB0 (1L<<8)
#define BCE_NVM_SW_ARB_ARB_ARB1 (1L<<9)
#define BCE_NVM_SW_ARB_ARB_ARB2 (1L<<10)
#define BCE_NVM_SW_ARB_ARB_ARB3 (1L<<11)
#define BCE_NVM_SW_ARB_REQ0 (1L<<12)
#define BCE_NVM_SW_ARB_REQ1 (1L<<13)
#define BCE_NVM_SW_ARB_REQ2 (1L<<14)
@ -4741,8 +4741,8 @@ struct l2_fhdr {
#define BCE_NVM_ACCESS_ENABLE_WR_EN (1L<<1)
#define BCE_NVM_WRITE1 0x00006428
#define BCE_NVM_WRITE1_WREN_CMD (0xffL<<0)
#define BCE_NVM_WRITE1_WRDI_CMD (0xffL<<8)
#define BCE_NVM_WRITE1_WREN_CMD (0xffL<<0)
#define BCE_NVM_WRITE1_WRDI_CMD (0xffL<<8)
#define BCE_NVM_WRITE1_SR_DATA (0xffL<<16)
@ -4753,7 +4753,7 @@ struct l2_fhdr {
#define BCE_HC_COMMAND 0x00006800
#define BCE_HC_COMMAND_ENABLE (1L<<0)
#define BCE_HC_COMMAND_SKIP_ABORT (1L<<4)
#define BCE_HC_COMMAND_COAL_NOW (1L<<16)
#define BCE_HC_COMMAND_COAL_NOW (1L<<16)
#define BCE_HC_COMMAND_COAL_NOW_WO_INT (1L<<17)
#define BCE_HC_COMMAND_STATS_NOW (1L<<18)
#define BCE_HC_COMMAND_FORCE_INT (0x3L<<19)
@ -4769,7 +4769,7 @@ struct l2_fhdr {
#define BCE_HC_STATUS_MASTER_ABORT (1L<<0)
#define BCE_HC_STATUS_PARITY_ERROR_STATE (1L<<1)
#define BCE_HC_STATUS_PCI_CLK_CNT_STAT (1L<<16)
#define BCE_HC_STATUS_CORE_CLK_CNT_STAT (1L<<17)
#define BCE_HC_STATUS_CORE_CLK_CNT_STAT (1L<<17)
#define BCE_HC_STATUS_NUM_STATUS_BLOCKS_STAT (1L<<18)
#define BCE_HC_STATUS_NUM_INT_GEN_STAT (1L<<19)
#define BCE_HC_STATUS_NUM_INT_MBOX_WR_STAT (1L<<20)
@ -4790,27 +4790,27 @@ struct l2_fhdr {
#define BCE_HC_CONFIG_ONE_SHOT (1L<<17)
#define BCE_HC_CONFIG_USE_INT_PARAM (1L<<18)
#define BCE_HC_CONFIG_SET_MASK_AT_RD (1L<<19)
#define BCE_HC_CONFIG_PER_COLLECT_LIMIT (0xfL<<20)
#define BCE_HC_CONFIG_PER_COLLECT_LIMIT (0xfL<<20)
#define BCE_HC_CONFIG_SB_ADDR_INC (0x7L<<24)
#define BCE_HC_CONFIG_SB_ADDR_INC_64B (0L<<24)
#define BCE_HC_CONFIG_SB_ADDR_INC_128B (1L<<24)
#define BCE_HC_CONFIG_SB_ADDR_INC_256B (2L<<24)
#define BCE_HC_CONFIG_SB_ADDR_INC_512B (3L<<24)
#define BCE_HC_CONFIG_SB_ADDR_INC_1024B (4L<<24)
#define BCE_HC_CONFIG_SB_ADDR_INC_2048B (5L<<24)
#define BCE_HC_CONFIG_SB_ADDR_INC_4096B (6L<<24)
#define BCE_HC_CONFIG_SB_ADDR_INC_8192B (7L<<24)
#define BCE_HC_CONFIG_GEN_STAT_AVG_INTR (1L<<29)
#define BCE_HC_CONFIG_SB_ADDR_INC_1024B (4L<<24)
#define BCE_HC_CONFIG_SB_ADDR_INC_2048B (5L<<24)
#define BCE_HC_CONFIG_SB_ADDR_INC_4096B (6L<<24)
#define BCE_HC_CONFIG_SB_ADDR_INC_8192B (7L<<24)
#define BCE_HC_CONFIG_GEN_STAT_AVG_INTR (1L<<29)
#define BCE_HC_CONFIG_UNMASK_ALL (1L<<30)
#define BCE_HC_CONFIG_TX_SEL (1L<<31)
#define BCE_HC_ATTN_BITS_ENABLE 0x0000680c
#define BCE_HC_ATTN_BITS_ENABLE 0x0000680c
#define BCE_HC_STATUS_ADDR_L 0x00006810
#define BCE_HC_STATUS_ADDR_H 0x00006814
#define BCE_HC_STATISTICS_ADDR_L 0x00006818
#define BCE_HC_STATISTICS_ADDR_H 0x0000681c
#define BCE_HC_TX_QUICK_CONS_TRIP 0x00006820
#define BCE_HC_TX_QUICK_CONS_TRIP_VALUE (0xffL<<0)
#define BCE_HC_TX_QUICK_CONS_TRIP_VALUE (0xffL<<0)
#define BCE_HC_TX_QUICK_CONS_TRIP_INT (0xffL<<16)
#define BCE_HC_COMP_PROD_TRIP 0x00006824
@ -4818,14 +4818,14 @@ struct l2_fhdr {
#define BCE_HC_COMP_PROD_TRIP_INT (0xffL<<16)
#define BCE_HC_RX_QUICK_CONS_TRIP 0x00006828
#define BCE_HC_RX_QUICK_CONS_TRIP_VALUE (0xffL<<0)
#define BCE_HC_RX_QUICK_CONS_TRIP_VALUE (0xffL<<0)
#define BCE_HC_RX_QUICK_CONS_TRIP_INT (0xffL<<16)
#define BCE_HC_RX_TICKS 0x0000682c
#define BCE_HC_RX_TICKS 0x0000682c
#define BCE_HC_RX_TICKS_VALUE (0x3ffL<<0)
#define BCE_HC_RX_TICKS_INT (0x3ffL<<16)
#define BCE_HC_TX_TICKS 0x00006830
#define BCE_HC_TX_TICKS 0x00006830
#define BCE_HC_TX_TICKS_VALUE (0x3ffL<<0)
#define BCE_HC_TX_TICKS_INT (0x3ffL<<16)
@ -4838,7 +4838,7 @@ struct l2_fhdr {
#define BCE_HC_CMD_TICKS_INT (0x3ffL<<16)
#define BCE_HC_PERIODIC_TICKS 0x0000683c
#define BCE_HC_PERIODIC_TICKS_HC_PERIODIC_TICKS (0xffffL<<0)
#define BCE_HC_PERIODIC_TICKS_HC_PERIODIC_TICKS (0xffffL<<0)
#define BCE_HC_PERIODIC_TICKS_HC_INT_PERIODIC_TICKS (0xffffL<<16)
#define BCE_HC_STAT_COLLECT_TICKS 0x00006840
@ -4848,12 +4848,12 @@ struct l2_fhdr {
#define BCE_HC_STATS_TICKS_HC_STAT_TICKS (0xffffL<<8)
#define BCE_HC_STATS_INTERRUPT_STATUS 0x00006848
#define BCE_HC_STATS_INTERRUPT_STATUS_SB_STATUS (0x1ffL<<0)
#define BCE_HC_STATS_INTERRUPT_STATUS_SB_STATUS (0x1ffL<<0)
#define BCE_HC_STATS_INTERRUPT_STATUS_INT_STATUS (0x1ffL<<16)
#define BCE_HC_STAT_MEM_DATA 0x0000684c
#define BCE_HC_STAT_GEN_SEL_0 0x00006850
#define BCE_HC_STAT_GEN_SEL_0_GEN_SEL_0 (0x7fL<<0)
#define BCE_HC_STAT_GEN_SEL_0_GEN_SEL_0 (0x7fL<<0)
#define BCE_HC_STAT_GEN_SEL_0_GEN_SEL_0_RXP_STAT0 (0L<<0)
#define BCE_HC_STAT_GEN_SEL_0_GEN_SEL_0_RXP_STAT1 (1L<<0)
#define BCE_HC_STAT_GEN_SEL_0_GEN_SEL_0_RXP_STAT2 (2L<<0)
@ -4921,9 +4921,9 @@ struct l2_fhdr {
#define BCE_HC_STAT_GEN_SEL_0_GEN_SEL_0_RLUPQ_VALID_CNT (66L<<0)
#define BCE_HC_STAT_GEN_SEL_0_GEN_SEL_0_RXPQ_VALID_CNT (67L<<0)
#define BCE_HC_STAT_GEN_SEL_0_GEN_SEL_0_RXPCQ_VALID_CNT (68L<<0)
#define BCE_HC_STAT_GEN_SEL_0_GEN_SEL_0_RV2PPQ_VALID_CNT (69L<<0)
#define BCE_HC_STAT_GEN_SEL_0_GEN_SEL_0_RV2PMQ_VALID_CNT (70L<<0)
#define BCE_HC_STAT_GEN_SEL_0_GEN_SEL_0_RV2PTQ_VALID_CNT (71L<<0)
#define BCE_HC_STAT_GEN_SEL_0_GEN_SEL_0_RV2PPQ_VALID_CNT (69L<<0)
#define BCE_HC_STAT_GEN_SEL_0_GEN_SEL_0_RV2PMQ_VALID_CNT (70L<<0)
#define BCE_HC_STAT_GEN_SEL_0_GEN_SEL_0_RV2PTQ_VALID_CNT (71L<<0)
#define BCE_HC_STAT_GEN_SEL_0_GEN_SEL_0_RDMAQ_VALID_CNT (72L<<0)
#define BCE_HC_STAT_GEN_SEL_0_GEN_SEL_0_TSCHQ_VALID_CNT (73L<<0)
#define BCE_HC_STAT_GEN_SEL_0_GEN_SEL_0_TBDRQ_VALID_CNT (74L<<0)
@ -6006,7 +6006,7 @@ struct l2_fhdr {
#define BCE_TAS_FTQ_CTL_MAX_DEPTH (0x3ffL<<12)
#define BCE_TAS_FTQ_CTL_CUR_DEPTH (0x3ffL<<22)
/*
* mcp_reg definition
* offset: 0x140000
@ -6372,7 +6372,7 @@ struct fw_info {
struct bce_softc
{
/* Interface info */
/* Interface info. Must be first!! */
struct ifnet *bce_ifp;
/* Parent device handle */
@ -6403,167 +6403,168 @@ struct bce_softc
/* Interrupt handler. */
driver_intr_t *bce_intr;
void *bce_intrhand;
int bce_irq_rid;
int bce_msi_count;
void *bce_intrhand;
int bce_irq_rid;
int bce_msi_count;
/* ASIC Chip ID. */
u32 bce_chipid;
u32 bce_chipid;
/* General controller flags. */
u32 bce_flags;
#define BCE_PCIX_FLAG 0x00000001
#define BCE_PCI_32BIT_FLAG 0x00000002
#define BCE_RESERVED_FLAG 0x00000004
#define BCE_NO_WOL_FLAG 0x00000008
#define BCE_USING_DAC_FLAG 0x00000010
#define BCE_USING_MSI_FLAG 0x00000020
#define BCE_MFW_ENABLE_FLAG 0x00000040
#define BCE_ONE_SHOT_MSI_FLAG 0x00000080
#define BCE_USING_MSIX_FLAG 0x00000100
#define BCE_PCIE_FLAG 0x00000200
u32 bce_flags;
#define BCE_PCIX_FLAG 0x00000001
#define BCE_PCI_32BIT_FLAG 0x00000002
#define BCE_RESERVED_FLAG 0x00000004
#define BCE_NO_WOL_FLAG 0x00000008
#define BCE_USING_DAC_FLAG 0x00000010
#define BCE_USING_MSI_FLAG 0x00000020
#define BCE_MFW_ENABLE_FLAG 0x00000040
#define BCE_ONE_SHOT_MSI_FLAG 0x00000080
#define BCE_USING_MSIX_FLAG 0x00000100
#define BCE_PCIE_FLAG 0x00000200
#define BCE_USING_TX_FLOW_CONTROL 0x00000400
/* Controller capability flags. */
u32 bce_cap_flags;
#define BCE_MSI_CAPABLE_FLAG 0x00000001
#define BCE_MSIX_CAPABLE_FLAG 0x00000002
#define BCE_PCIE_CAPABLE_FLAG 0x00000004
#define BCE_PCIX_CAPABLE_FLAG 0x00000008
u32 bce_cap_flags;
#define BCE_MSI_CAPABLE_FLAG 0x00000001
#define BCE_MSIX_CAPABLE_FLAG 0x00000002
#define BCE_PCIE_CAPABLE_FLAG 0x00000004
#define BCE_PCIX_CAPABLE_FLAG 0x00000008
/* PHY specific flags. */
u32 bce_phy_flags;
#define BCE_PHY_SERDES_FLAG 0x00000001
#define BCE_PHY_CRC_FIX_FLAG 0x00000002
#define BCE_PHY_PARALLEL_DETECT_FLAG 0x00000004
#define BCE_PHY_2_5G_CAPABLE_FLAG 0x00000008
#define BCE_PHY_INT_MODE_MASK_FLAG 0x00000300
#define BCE_PHY_INT_MODE_AUTO_POLLING_FLAG 0x00000100
#define BCE_PHY_INT_MODE_LINK_READY_FLAG 0x00000200
#define BCE_PHY_IEEE_CLAUSE_45_FLAG 0x00000400
u32 bce_phy_flags;
#define BCE_PHY_SERDES_FLAG 0x00000001
#define BCE_PHY_CRC_FIX_FLAG 0x00000002
#define BCE_PHY_PARALLEL_DETECT_FLAG 0x00000004
#define BCE_PHY_2_5G_CAPABLE_FLAG 0x00000008
#define BCE_PHY_INT_MODE_MASK_FLAG 0x00000300
#define BCE_PHY_INT_MODE_AUTO_POLLING_FLAG 0x00000100
#define BCE_PHY_INT_MODE_LINK_READY_FLAG 0x00000200
#define BCE_PHY_IEEE_CLAUSE_45_FLAG 0x00000400
/* Values that need to be shared with the PHY driver. */
u32 bce_shared_hw_cfg;
u32 bce_port_hw_cfg;
u32 bce_shared_hw_cfg;
u32 bce_port_hw_cfg;
bus_addr_t max_bus_addr;
bus_addr_t max_bus_addr;
/* PCI bus speed */
u16 bus_speed_mhz;
u16 bus_speed_mhz;
/* PCIe link width */
u16 link_width;
u16 link_width;
/* PCIe link speed */
u16 link_speed;
u16 link_speed;
/* Flash NVRAM settings */
struct flash_spec *bce_flash_info;
struct flash_spec *bce_flash_info;
/* Flash NVRAM size */
u32 bce_flash_size;
u32 bce_flash_size;
/* Shared Memory base address */
u32 bce_shmem_base;
u32 bce_shmem_base;
/* Name string */
char * bce_name;
char *bce_name;
/* Tracks the version of bootcode firmware. */
char bce_bc_ver[32];
char bce_bc_ver[32];
/* Tracks the version of management firmware. */
char bce_mfw_ver[32];
char bce_mfw_ver[32];
/*
/*
* Tracks the state of the firmware. 0 = Running while any
* other value indicates that the firmware is not responding.
*/
u16 bce_fw_timed_out;
u16 bce_fw_timed_out;
/*
/*
* An incrementing sequence used to coordinate messages passed
* from the driver to the firmware.
*/
u16 bce_fw_wr_seq;
*/
u16 bce_fw_wr_seq;
/*
/*
* An incrementing sequence used to let the firmware know that
* the driver is still operating. Without the pulse, management
* firmware such as IPMI or UMP will operate in OS absent state.
*/
u16 bce_fw_drv_pulse_wr_seq;
*/
u16 bce_fw_drv_pulse_wr_seq;
/* Tracks whether firmware has lost the driver's pulse. */
u16 bce_drv_cardiac_arrest;
u16 bce_drv_cardiac_arrest;
/* Ethernet MAC address. */
u_char eaddr[6];
u_char eaddr[6];
/*
/*
* These setting are used by the host coalescing (HC) block to
* to control how often the status block, statistics block and
* interrupts are generated.
*/
u16 bce_tx_quick_cons_trip_int;
u16 bce_tx_quick_cons_trip;
u16 bce_rx_quick_cons_trip_int;
u16 bce_rx_quick_cons_trip;
u16 bce_tx_ticks_int;
u16 bce_tx_ticks;
u16 bce_rx_ticks_int;
u16 bce_rx_ticks;
u32 bce_stats_ticks;
*/
u16 bce_tx_quick_cons_trip_int;
u16 bce_tx_quick_cons_trip;
u16 bce_rx_quick_cons_trip_int;
u16 bce_rx_quick_cons_trip;
u16 bce_tx_ticks_int;
u16 bce_tx_ticks;
u16 bce_rx_ticks_int;
u16 bce_rx_ticks;
u32 bce_stats_ticks;
/* ToDo: Can these be removed? */
u16 bce_comp_prod_trip_int;
u16 bce_comp_prod_trip;
u16 bce_com_ticks_int;
u16 bce_com_ticks;
u16 bce_cmd_ticks_int;
u16 bce_cmd_ticks;
u16 bce_comp_prod_trip_int;
u16 bce_comp_prod_trip;
u16 bce_com_ticks_int;
u16 bce_com_ticks;
u16 bce_cmd_ticks_int;
u16 bce_cmd_ticks;
/* The address of the integrated PHY on the MII bus. */
int bce_phy_addr;
int bce_phy_addr;
/* The device handle for the MII bus child device. */
device_t bce_miibus;
device_t bce_miibus;
/* Driver maintained TX chain pointers and byte counter. */
u16 rx_prod;
u16 rx_cons;
u16 rx_prod;
u16 rx_cons;
/* Counts the bytes used in the RX chain. */
u32 rx_prod_bseq;
u16 tx_prod;
u16 tx_cons;
u32 rx_prod_bseq;
u16 tx_prod;
u16 tx_cons;
/* Counts the bytes used in the TX chain. */
u32 tx_prod_bseq;
u32 tx_prod_bseq;
#ifdef BCE_JUMBO_HDRSPLIT
u16 pg_prod;
u16 pg_cons;
u16 pg_prod;
u16 pg_cons;
#endif
int bce_link_up;
struct callout bce_tick_callout;
struct callout bce_pulse_callout;
int bce_link_up;
struct callout bce_tick_callout;
struct callout bce_pulse_callout;
/* Ticks until chip reset */
int watchdog_timer;
int watchdog_timer;
/* Frame size and mbuf allocation size for RX frames. */
u32 max_frame_size;
int rx_bd_mbuf_alloc_size;
int rx_bd_mbuf_data_len;
int rx_bd_mbuf_align_pad;
u32 max_frame_size;
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;
int pg_bd_mbuf_alloc_size;
#endif
/* Receive mode settings (i.e promiscuous, multicast, etc.). */
u32 rx_mode;
u32 rx_mode;
/* Bus tag for the bce controller. */
bus_dma_tag_t parent_tag;
@ -6595,9 +6596,9 @@ struct bce_softc
bus_addr_t status_block_paddr;
/* Driver maintained status block values. */
u16 last_status_idx;
u16 hw_rx_cons;
u16 hw_tx_cons;
u16 last_status_idx;
u16 hw_rx_cons;
u16 hw_tx_cons;
/* H/W maintained statistics block. */
bus_dma_tag_t stats_tag;
@ -6606,7 +6607,7 @@ struct bce_softc
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. */
@ -6637,139 +6638,156 @@ struct bce_softc
#endif
/* Track the number of buffer descriptors in use. */
u16 free_rx_bd;
u16 max_rx_bd;
u16 used_tx_bd;
u16 max_tx_bd;
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;
u16 free_pg_bd;
u16 max_pg_bd;
#endif
/* Provides access to hardware statistics through sysctl. */
u64 stat_IfHCInOctets;
u64 stat_IfHCInBadOctets;
u64 stat_IfHCOutOctets;
u64 stat_IfHCOutBadOctets;
u64 stat_IfHCInUcastPkts;
u64 stat_IfHCInMulticastPkts;
u64 stat_IfHCInBroadcastPkts;
u64 stat_IfHCOutUcastPkts;
u64 stat_IfHCOutMulticastPkts;
u64 stat_IfHCOutBroadcastPkts;
u64 stat_IfHCInOctets;
u64 stat_IfHCInBadOctets;
u64 stat_IfHCOutOctets;
u64 stat_IfHCOutBadOctets;
u64 stat_IfHCInUcastPkts;
u64 stat_IfHCInMulticastPkts;
u64 stat_IfHCInBroadcastPkts;
u64 stat_IfHCOutUcastPkts;
u64 stat_IfHCOutMulticastPkts;
u64 stat_IfHCOutBroadcastPkts;
u32 stat_emac_tx_stat_dot3statsinternalmactransmiterrors;
u32 stat_Dot3StatsCarrierSenseErrors;
u32 stat_Dot3StatsFCSErrors;
u32 stat_Dot3StatsAlignmentErrors;
u32 stat_Dot3StatsSingleCollisionFrames;
u32 stat_Dot3StatsMultipleCollisionFrames;
u32 stat_Dot3StatsDeferredTransmissions;
u32 stat_Dot3StatsExcessiveCollisions;
u32 stat_Dot3StatsLateCollisions;
u32 stat_EtherStatsCollisions;
u32 stat_EtherStatsFragments;
u32 stat_EtherStatsJabbers;
u32 stat_EtherStatsUndersizePkts;
u32 stat_EtherStatsOversizePkts;
u32 stat_EtherStatsPktsRx64Octets;
u32 stat_EtherStatsPktsRx65Octetsto127Octets;
u32 stat_EtherStatsPktsRx128Octetsto255Octets;
u32 stat_EtherStatsPktsRx256Octetsto511Octets;
u32 stat_EtherStatsPktsRx512Octetsto1023Octets;
u32 stat_EtherStatsPktsRx1024Octetsto1522Octets;
u32 stat_EtherStatsPktsRx1523Octetsto9022Octets;
u32 stat_EtherStatsPktsTx64Octets;
u32 stat_EtherStatsPktsTx65Octetsto127Octets;
u32 stat_EtherStatsPktsTx128Octetsto255Octets;
u32 stat_EtherStatsPktsTx256Octetsto511Octets;
u32 stat_EtherStatsPktsTx512Octetsto1023Octets;
u32 stat_EtherStatsPktsTx1024Octetsto1522Octets;
u32 stat_EtherStatsPktsTx1523Octetsto9022Octets;
u32 stat_XonPauseFramesReceived;
u32 stat_XoffPauseFramesReceived;
u32 stat_OutXonSent;
u32 stat_OutXoffSent;
u32 stat_FlowControlDone;
u32 stat_MacControlFramesReceived;
u32 stat_XoffStateEntered;
u32 stat_IfInFramesL2FilterDiscards;
u32 stat_IfInRuleCheckerDiscards;
u32 stat_IfInFTQDiscards;
u32 stat_IfInMBUFDiscards;
u32 stat_IfInRuleCheckerP4Hit;
u32 stat_CatchupInRuleCheckerDiscards;
u32 stat_CatchupInFTQDiscards;
u32 stat_CatchupInMBUFDiscards;
u32 stat_CatchupInRuleCheckerP4Hit;
u32 stat_emac_tx_stat_dot3statsinternalmactransmiterrors;
u32 stat_Dot3StatsCarrierSenseErrors;
u32 stat_Dot3StatsFCSErrors;
u32 stat_Dot3StatsAlignmentErrors;
u32 stat_Dot3StatsSingleCollisionFrames;
u32 stat_Dot3StatsMultipleCollisionFrames;
u32 stat_Dot3StatsDeferredTransmissions;
u32 stat_Dot3StatsExcessiveCollisions;
u32 stat_Dot3StatsLateCollisions;
u32 stat_EtherStatsCollisions;
u32 stat_EtherStatsFragments;
u32 stat_EtherStatsJabbers;
u32 stat_EtherStatsUndersizePkts;
u32 stat_EtherStatsOversizePkts;
u32 stat_EtherStatsPktsRx64Octets;
u32 stat_EtherStatsPktsRx65Octetsto127Octets;
u32 stat_EtherStatsPktsRx128Octetsto255Octets;
u32 stat_EtherStatsPktsRx256Octetsto511Octets;
u32 stat_EtherStatsPktsRx512Octetsto1023Octets;
u32 stat_EtherStatsPktsRx1024Octetsto1522Octets;
u32 stat_EtherStatsPktsRx1523Octetsto9022Octets;
u32 stat_EtherStatsPktsTx64Octets;
u32 stat_EtherStatsPktsTx65Octetsto127Octets;
u32 stat_EtherStatsPktsTx128Octetsto255Octets;
u32 stat_EtherStatsPktsTx256Octetsto511Octets;
u32 stat_EtherStatsPktsTx512Octetsto1023Octets;
u32 stat_EtherStatsPktsTx1024Octetsto1522Octets;
u32 stat_EtherStatsPktsTx1523Octetsto9022Octets;
u32 stat_XonPauseFramesReceived;
u32 stat_XoffPauseFramesReceived;
u32 stat_OutXonSent;
u32 stat_OutXoffSent;
u32 stat_FlowControlDone;
u32 stat_MacControlFramesReceived;
u32 stat_XoffStateEntered;
u32 stat_IfInFramesL2FilterDiscards;
u32 stat_IfInRuleCheckerDiscards;
u32 stat_IfInFTQDiscards;
u32 stat_IfInMBUFDiscards;
u32 stat_IfInRuleCheckerP4Hit;
u32 stat_CatchupInRuleCheckerDiscards;
u32 stat_CatchupInFTQDiscards;
u32 stat_CatchupInMBUFDiscards;
u32 stat_CatchupInRuleCheckerP4Hit;
/* Provides access to certain firmware statistics. */
u32 com_no_buffers;
u32 com_no_buffers;
/* Recoverable failure counters. */
u32 mbuf_alloc_failed_count;
u32 fragmented_mbuf_count;
u32 unexpected_attention_count;
u32 l2fhdr_error_count;
u32 dma_map_addr_tx_failed_count;
u32 dma_map_addr_rx_failed_count;
u32 mbuf_alloc_failed_count;
u32 mbuf_frag_count;
u32 unexpected_attention_count;
u32 l2fhdr_error_count;
u32 dma_map_addr_tx_failed_count;
u32 dma_map_addr_rx_failed_count;
/* Host coalescing block command register */
u32 hc_command;
u32 hc_command;
/* Bootcode state */
u32 bc_state;
u32 bc_state;
#ifdef BCE_DEBUG
/* Simulated recoverable failure counters. */
u32 mbuf_alloc_failed_sim_count;
u32 unexpected_attention_sim_count;
u32 l2fhdr_error_sim_count;
u32 dma_map_addr_failed_sim_count;
u32 mbuf_alloc_failed_sim_count;
u32 unexpected_attention_sim_count;
u32 l2fhdr_error_sim_count;
u32 dma_map_addr_failed_sim_count;
/* Track the number of enqueued mbufs. */
int debug_tx_mbuf_alloc;
int debug_rx_mbuf_alloc;
int debug_tx_mbuf_alloc;
int debug_rx_mbuf_alloc;
#ifdef BCE_JUMBO_HDRSPLIT
int debug_pg_mbuf_alloc;
int debug_pg_mbuf_alloc;
#endif
/* Track how many and what type of interrupts are generated. */
u32 interrupts_generated;
u32 interrupts_handled;
u32 rx_interrupts;
u32 tx_interrupts;
u32 phy_interrupts;
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 rx_intr_time;
u64 tx_intr_time;
/* Lowest number of rx_bd's free. */
u32 rx_low_watermark;
u32 rx_low_watermark;
/* Number of times the RX chain was empty. */
u32 rx_empty_count;
u32 rx_empty_count;
#ifdef BCE_JUMBO_HDRSPLIT
/* Lowest number of pages free. */
u32 pg_low_watermark;
u32 pg_low_watermark;
/* Number of times the page chain was empty. */
u32 pg_empty_count;
u32 pg_empty_count;
#endif
/* Greatest number of tx_bd's used. */
u32 tx_hi_watermark;
u32 tx_hi_watermark;
/* Number of times the TX chain was full. */
u32 tx_full_count;
u32 tx_full_count;
/* Number of TSO frames enqueued. */
u32 requested_tso_frames;
/* Number of TSO frames requested. */
u32 tso_frames_requested;
/* Number of TSO frames completed. */
u32 tso_frames_completed;
/* Number of TSO frames failed. */
u32 tso_frames_failed;
/* Number of IP checksum offload frames.*/
u32 csum_offload_ip;
/* Number of TCP/UDP checksum offload frames.*/
u32 csum_offload_tcp_udp;
/* Number of VLAN tagged frames received. */
u32 vlan_tagged_frames_rcvd;
/* Number of VLAN tagged frames stripped. */
u32 vlan_tagged_frames_stripped;
#endif
};