- Updated firmware to latest 4.6.X release.
- Added missing firmware for 5709 A1 controllers. - Changed some debug statistic variable names to be more consistent. Submitted by: davidch MFC after: Two weeks
This commit is contained in:
parent
7acdbebd21
commit
3b8bffce08
@ -38,7 +38,7 @@ __FBSDID("$FreeBSD$");
|
||||
* BCM5708C B1, B2
|
||||
* BCM5708S B1, B2
|
||||
* BCM5709C A1, C0
|
||||
* BCM5716 C0
|
||||
* BCM5716C C0
|
||||
*
|
||||
* The following controllers are not supported by this driver:
|
||||
* BCM5706C A0, A1 (pre-production)
|
||||
@ -71,19 +71,19 @@ __FBSDID("$FreeBSD$");
|
||||
/* 1073741824 = 1 in 2 */
|
||||
|
||||
/* Controls how often the l2_fhdr frame error check will fail. */
|
||||
int bce_debug_l2fhdr_status_check = 0;
|
||||
int l2fhdr_error_sim_control = 0;
|
||||
|
||||
/* Controls how often the unexpected attention check will fail. */
|
||||
int bce_debug_unexpected_attention = 0;
|
||||
int unexpected_attention_sim_control = 0;
|
||||
|
||||
/* Controls how often to simulate an mbuf allocation failure. */
|
||||
int bce_debug_mbuf_allocation_failure = 0;
|
||||
int mbuf_alloc_failed_sim_control = 0;
|
||||
|
||||
/* Controls how often to simulate a DMA mapping failure. */
|
||||
int bce_debug_dma_map_addr_failure = 0;
|
||||
int dma_map_addr_failed_sim_control = 0;
|
||||
|
||||
/* Controls how often to simulate a bootcode failure. */
|
||||
int bce_debug_bootcode_running_failure = 0;
|
||||
int bootcode_running_failure_sim_control = 0;
|
||||
#endif
|
||||
|
||||
/****************************************************************************/
|
||||
@ -495,7 +495,8 @@ SYSCTL_UINT(_hw_bce, OID_AUTO, msi_enable, CTLFLAG_RDTUN, &bce_msi_enable, 0,
|
||||
/* ToDo: Add tunable to enable/disable strict MTU handling. */
|
||||
/* Currently allows "loose" RX MTU checking (i.e. sets the */
|
||||
/* H/W RX MTU to the size of the largest receive buffer, or */
|
||||
/* 2048 bytes). */
|
||||
/* 2048 bytes). This will cause a UNH failure but is more */
|
||||
/* desireable from a functional perspective. */
|
||||
|
||||
|
||||
/****************************************************************************/
|
||||
@ -595,7 +596,7 @@ bce_print_adapter_info(struct bce_softc *sc)
|
||||
}
|
||||
|
||||
/* Firmware version and device features. */
|
||||
printf("F/W (0x%08X); Flags( ", sc->bce_fw_ver);
|
||||
printf("B/C (0x%08X); Flags( ", sc->bce_bc_ver);
|
||||
#ifdef ZERO_COPY_SOCKETS
|
||||
printf("SPLT ");
|
||||
#endif
|
||||
@ -846,7 +847,7 @@ bce_attach(device_t dev)
|
||||
__FUNCTION__, sc->bce_shmem_base);
|
||||
|
||||
/* Fetch the bootcode revision. */
|
||||
sc->bce_fw_ver = REG_RD_IND(sc, sc->bce_shmem_base +
|
||||
sc->bce_bc_ver = REG_RD_IND(sc, sc->bce_shmem_base +
|
||||
BCE_DEV_INFO_BC_REV);
|
||||
|
||||
/* Check if any management firmware is running. */
|
||||
@ -2863,20 +2864,16 @@ bce_dma_map_addr(void *arg, bus_dma_segment_t *segs, int nseg, int error)
|
||||
bus_addr_t *busaddr = arg;
|
||||
|
||||
/* Simulate a mapping failure. */
|
||||
DBRUNIF(DB_RANDOMTRUE(bce_debug_dma_map_addr_failure),
|
||||
printf("bce: %s(%d): Simulating DMA mapping error.\n",
|
||||
__FILE__, __LINE__);
|
||||
DBRUNIF(DB_RANDOMTRUE(dma_map_addr_failed_sim_control),
|
||||
error = ENOMEM);
|
||||
|
||||
/* Check for an error and signal the caller that an error occurred. */
|
||||
if (error) {
|
||||
printf("bce %s(%d): DMA mapping error! error = %d, "
|
||||
"nseg = %d\n", __FILE__, __LINE__, error, nseg);
|
||||
*busaddr = 0;
|
||||
return;
|
||||
} else {
|
||||
*busaddr = segs->ds_addr;
|
||||
}
|
||||
|
||||
*busaddr = segs->ds_addr;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -3272,6 +3269,11 @@ bce_dma_alloc(device_t dev)
|
||||
#else
|
||||
max_size = max_seg_size = MJUM9BYTES;
|
||||
#endif
|
||||
max_segments = 1;
|
||||
|
||||
DBPRINT(sc, BCE_INFO, "%s(): Creating rx_mbuf_tag (max size = 0x%jX "
|
||||
"max segments = %d, max segment size = 0x%jX)\n", __FUNCTION__,
|
||||
(uintmax_t) max_size, max_segments, (uintmax_t) max_seg_size);
|
||||
|
||||
if (bus_dma_tag_create(sc->parent_tag,
|
||||
1,
|
||||
@ -3280,7 +3282,7 @@ bce_dma_alloc(device_t dev)
|
||||
BUS_SPACE_MAXADDR,
|
||||
NULL, NULL,
|
||||
max_size,
|
||||
1,
|
||||
max_segments,
|
||||
max_seg_size,
|
||||
0,
|
||||
NULL, NULL,
|
||||
@ -4156,15 +4158,24 @@ bce_init_cpus(struct bce_softc *sc)
|
||||
|
||||
if ((BCE_CHIP_NUM(sc) == BCE_CHIP_NUM_5709) ||
|
||||
(BCE_CHIP_NUM(sc) == BCE_CHIP_NUM_5716)) {
|
||||
bce_load_rv2p_fw(sc, bce_xi_rv2p_proc1, sizeof(bce_xi_rv2p_proc1),
|
||||
RV2P_PROC1);
|
||||
bce_load_rv2p_fw(sc, bce_xi_rv2p_proc2, sizeof(bce_xi_rv2p_proc2),
|
||||
RV2P_PROC2);
|
||||
|
||||
if ((BCE_CHIP_REV(sc) == BCE_CHIP_REV_Ax)) {
|
||||
bce_load_rv2p_fw(sc, bce_xi90_rv2p_proc1,
|
||||
sizeof(bce_xi90_rv2p_proc1), RV2P_PROC1);
|
||||
bce_load_rv2p_fw(sc, bce_xi90_rv2p_proc2,
|
||||
sizeof(bce_xi90_rv2p_proc2), RV2P_PROC2);
|
||||
} else {
|
||||
bce_load_rv2p_fw(sc, bce_xi_rv2p_proc1,
|
||||
sizeof(bce_xi_rv2p_proc1), RV2P_PROC1);
|
||||
bce_load_rv2p_fw(sc, bce_xi_rv2p_proc2,
|
||||
sizeof(bce_xi_rv2p_proc2), RV2P_PROC2);
|
||||
}
|
||||
|
||||
} else {
|
||||
bce_load_rv2p_fw(sc, bce_rv2p_proc1, sizeof(bce_rv2p_proc1),
|
||||
RV2P_PROC1);
|
||||
bce_load_rv2p_fw(sc, bce_rv2p_proc2, sizeof(bce_rv2p_proc2),
|
||||
RV2P_PROC2);
|
||||
bce_load_rv2p_fw(sc, bce_rv2p_proc1,
|
||||
sizeof(bce_rv2p_proc1), RV2P_PROC1);
|
||||
bce_load_rv2p_fw(sc, bce_rv2p_proc2,
|
||||
sizeof(bce_rv2p_proc2), RV2P_PROC2);
|
||||
}
|
||||
|
||||
bce_init_rxp_cpu(sc);
|
||||
@ -4727,7 +4738,7 @@ bce_blockinit(struct bce_softc *sc)
|
||||
/* Verify that bootcode is running. */
|
||||
reg = REG_RD_IND(sc, sc->bce_shmem_base + BCE_DEV_INFO_SIGNATURE);
|
||||
|
||||
DBRUNIF(DB_RANDOMTRUE(bce_debug_bootcode_running_failure),
|
||||
DBRUNIF(DB_RANDOMTRUE(bootcode_running_failure_sim_control),
|
||||
BCE_PRINTF("%s(%d): Simulating bootcode failure.\n",
|
||||
__FILE__, __LINE__);
|
||||
reg = 0);
|
||||
@ -4814,9 +4825,9 @@ bce_get_rx_buf(struct bce_softc *sc, struct mbuf *m, u16 *prod,
|
||||
if (m == NULL) {
|
||||
|
||||
/* Simulate an mbuf allocation failure. */
|
||||
DBRUNIF(DB_RANDOMTRUE(bce_debug_mbuf_allocation_failure),
|
||||
sc->mbuf_alloc_failed++;
|
||||
sc->debug_mbuf_sim_alloc_failed++;
|
||||
DBRUNIF(DB_RANDOMTRUE(mbuf_alloc_failed_sim_control),
|
||||
sc->mbuf_alloc_failed_count++;
|
||||
sc->mbuf_alloc_failed_sim_count++;
|
||||
rc = ENOBUFS;
|
||||
goto bce_get_rx_buf_exit);
|
||||
|
||||
@ -4831,7 +4842,7 @@ bce_get_rx_buf(struct bce_softc *sc, struct mbuf *m, u16 *prod,
|
||||
#endif
|
||||
|
||||
if (m_new == NULL) {
|
||||
sc->mbuf_alloc_failed++;
|
||||
sc->mbuf_alloc_failed_count++;
|
||||
rc = ENOBUFS;
|
||||
goto bce_get_rx_buf_exit;
|
||||
}
|
||||
@ -4861,7 +4872,9 @@ bce_get_rx_buf(struct bce_softc *sc, struct mbuf *m, u16 *prod,
|
||||
BCE_PRINTF("%s(%d): Error mapping mbuf into RX chain (%d)!\n",
|
||||
__FILE__, __LINE__, error);
|
||||
|
||||
sc->dma_map_addr_rx_failed_count++;
|
||||
m_freem(m_new);
|
||||
|
||||
DBRUN(sc->debug_rx_mbuf_alloc--);
|
||||
|
||||
rc = ENOBUFS;
|
||||
@ -4939,16 +4952,16 @@ bce_get_pg_buf(struct bce_softc *sc, struct mbuf *m, u16 *prod,
|
||||
if (m == NULL) {
|
||||
|
||||
/* Simulate an mbuf allocation failure. */
|
||||
DBRUNIF(DB_RANDOMTRUE(bce_debug_mbuf_allocation_failure),
|
||||
sc->mbuf_alloc_failed++;
|
||||
sc->debug_mbuf_sim_alloc_failed++;
|
||||
DBRUNIF(DB_RANDOMTRUE(mbuf_alloc_failed_sim_control),
|
||||
sc->mbuf_alloc_failed_count++;
|
||||
sc->mbuf_alloc_failed_sim_count++;
|
||||
rc = ENOBUFS;
|
||||
goto bce_get_pg_buf_exit);
|
||||
|
||||
/* This is a new mbuf allocation. */
|
||||
m_new = m_getcl(M_DONTWAIT, MT_DATA, 0);
|
||||
if (m_new == NULL) {
|
||||
sc->mbuf_alloc_failed++;
|
||||
sc->mbuf_alloc_failed_count++;
|
||||
rc = ENOBUFS;
|
||||
goto bce_get_pg_buf_exit;
|
||||
}
|
||||
@ -5766,20 +5779,20 @@ bce_rx_intr(struct bce_softc *sc)
|
||||
sc->free_rx_bd++;
|
||||
|
||||
/*
|
||||
* Frames received on the NetXteme II are prepended
|
||||
* with an l2_fhdr structure which provides status
|
||||
* information about the received frame (including
|
||||
* VLAN tags and checksum info). The frames are also
|
||||
* automatically adjusted to align the IP header
|
||||
* (i.e. two null bytes are inserted before the
|
||||
* Ethernet header). As a result the data DMA'd by
|
||||
* the controller into the mbuf is as follows:
|
||||
* Frames received on the NetXteme II are prepended with an
|
||||
* l2_fhdr structure which provides status information about
|
||||
* the received frame (including VLAN tags and checksum info).
|
||||
* The frames are also automatically adjusted to align the IP
|
||||
* header (i.e. two null bytes are inserted before the Ethernet
|
||||
* header). As a result the data DMA'd by the controller into
|
||||
* the mbuf is as follows:
|
||||
*
|
||||
* +---------+-----+---------------------+-----+
|
||||
* | l2_fhdr | pad | packet data | FCS |
|
||||
* +---------+-----+---------------------+-----+
|
||||
* The l2_fhdr needs to be checked and skipped and
|
||||
* the FCS needs to be stripped before sending the
|
||||
* packet up the stack.
|
||||
*
|
||||
* The l2_fhdr needs to be checked and skipped and the FCS needs
|
||||
* to be stripped before sending the packet up the stack.
|
||||
*/
|
||||
l2fhdr = mtod(m0, struct l2_fhdr *);
|
||||
|
||||
@ -5894,8 +5907,9 @@ bce_rx_intr(struct bce_softc *sc)
|
||||
BCE_PRINTF("Invalid Ethernet frame size!\n");
|
||||
m_print(m0, 128));
|
||||
|
||||
DBRUNIF(DB_RANDOMTRUE(bce_debug_l2fhdr_status_check),
|
||||
DBRUNIF(DB_RANDOMTRUE(l2fhdr_error_sim_control),
|
||||
BCE_PRINTF("Simulating l2_fhdr status error.\n");
|
||||
sc->l2fhdr_error_sim_count++;
|
||||
status = status | L2_FHDR_ERRORS_PHY_DECODE);
|
||||
|
||||
/* Check the received frame for errors. */
|
||||
@ -5905,7 +5919,7 @@ bce_rx_intr(struct bce_softc *sc)
|
||||
|
||||
/* Log the error and release the mbuf. */
|
||||
ifp->if_ierrors++;
|
||||
DBRUN(sc->l2fhdr_status_errors++);
|
||||
sc->l2fhdr_error_count++;
|
||||
|
||||
m_freem(m0);
|
||||
m0 = NULL;
|
||||
@ -5946,10 +5960,7 @@ bce_rx_intr(struct bce_softc *sc)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* If we received a packet with a vlan tag,
|
||||
* attach that information to the packet.
|
||||
*/
|
||||
/* Attach the VLAN tag. */
|
||||
if (status & L2_FHDR_STATUS_L2_VLAN_TAG) {
|
||||
#if __FreeBSD_version < 700000
|
||||
VLAN_INPUT_TAG(ifp, m0, l2fhdr->l2_fhdr_vlan_tag, continue);
|
||||
@ -5959,7 +5970,7 @@ bce_rx_intr(struct bce_softc *sc)
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Pass the mbuf off to the upper layers. */
|
||||
/* Increment received packet statistics. */
|
||||
ifp->if_ipackets++;
|
||||
|
||||
bce_rx_int_next_rx:
|
||||
@ -6273,14 +6284,17 @@ bce_init_locked(struct bce_softc *sc)
|
||||
|
||||
DBPRINT(sc, BCE_INFO_LOAD,
|
||||
"%s(): rx_bd_mbuf_alloc_size = %d, rx_bce_mbuf_data_len = %d, "
|
||||
"rx_bd_mbuf_align_pad = %d, pg_bd_mbuf_alloc_size = %d\n",
|
||||
__FUNCTION__, sc->rx_bd_mbuf_alloc_size, sc->rx_bd_mbuf_data_len,
|
||||
sc->rx_bd_mbuf_align_pad, sc->pg_bd_mbuf_alloc_size);
|
||||
"rx_bd_mbuf_align_pad = %d\n", __FUNCTION__,
|
||||
sc->rx_bd_mbuf_alloc_size, sc->rx_bd_mbuf_data_len,
|
||||
sc->rx_bd_mbuf_align_pad);
|
||||
|
||||
/* Program appropriate promiscuous/multicast filtering. */
|
||||
bce_set_rx_mode(sc);
|
||||
|
||||
#ifdef ZERO_COPY_SOCKETS
|
||||
DBPRINT(sc, BCE_INFO_LOAD, "%s(): pg_bd_mbuf_alloc_size = %d\n",
|
||||
__FUNCTION__, sc->pg_bd_mbuf_alloc_size);
|
||||
|
||||
/* Init page buffer descriptor chain. */
|
||||
bce_init_pg_chain(sc);
|
||||
#endif
|
||||
@ -6489,10 +6503,7 @@ bce_tx_encap_skip_tso:
|
||||
/* Check if the DMA mapping was successful */
|
||||
if (error == EFBIG) {
|
||||
|
||||
/* The mbuf is too fragmented for our DMA mapping. */
|
||||
DBPRINT(sc, BCE_WARN, "%s(): fragmented mbuf (%d pieces)\n",
|
||||
__FUNCTION__, nsegs);
|
||||
DBRUN(bce_dump_mbuf(sc, m0););
|
||||
sc->fragmented_mbuf_count++;
|
||||
|
||||
/* Try to defrag the mbuf. */
|
||||
m0 = m_defrag(*m_head, M_DONTWAIT);
|
||||
@ -6500,7 +6511,7 @@ bce_tx_encap_skip_tso:
|
||||
/* Defrag was unsuccessful */
|
||||
m_freem(*m_head);
|
||||
*m_head = NULL;
|
||||
sc->mbuf_alloc_failed++;
|
||||
sc->mbuf_alloc_failed_count++;
|
||||
rc = ENOBUFS;
|
||||
goto bce_tx_encap_exit;
|
||||
}
|
||||
@ -6513,7 +6524,7 @@ bce_tx_encap_skip_tso:
|
||||
/* Still getting an error after a defrag. */
|
||||
if (error == ENOMEM) {
|
||||
/* Insufficient DMA buffers available. */
|
||||
sc->tx_dma_map_failures++;
|
||||
sc->dma_map_addr_tx_failed_count++;
|
||||
rc = error;
|
||||
goto bce_tx_encap_exit;
|
||||
} else if (error != 0) {
|
||||
@ -6523,19 +6534,19 @@ bce_tx_encap_skip_tso:
|
||||
__FILE__, __LINE__);
|
||||
m_freem(m0);
|
||||
*m_head = NULL;
|
||||
sc->tx_dma_map_failures++;
|
||||
sc->dma_map_addr_tx_failed_count++;
|
||||
rc = ENOBUFS;
|
||||
goto bce_tx_encap_exit;
|
||||
}
|
||||
} else if (error == ENOMEM) {
|
||||
/* Insufficient DMA buffers available. */
|
||||
sc->tx_dma_map_failures++;
|
||||
sc->dma_map_addr_tx_failed_count++;
|
||||
rc = error;
|
||||
goto bce_tx_encap_exit;
|
||||
} else if (error != 0) {
|
||||
m_freem(m0);
|
||||
*m_head = NULL;
|
||||
sc->tx_dma_map_failures++;
|
||||
sc->dma_map_addr_tx_failed_count++;
|
||||
rc = error;
|
||||
goto bce_tx_encap_exit;
|
||||
}
|
||||
@ -7040,9 +7051,10 @@ bce_intr(void *xsc)
|
||||
|
||||
status_attn_bits = sc->status_block->status_attn_bits;
|
||||
|
||||
DBRUNIF(DB_RANDOMTRUE(bce_debug_unexpected_attention),
|
||||
BCE_PRINTF("Simulating unexpected status attention bit set.");
|
||||
status_attn_bits = status_attn_bits | STATUS_ATTN_BITS_PARITY_ERROR);
|
||||
DBRUNIF(DB_RANDOMTRUE(unexpected_attention_sim_control),
|
||||
BCE_PRINTF("Simulating unexpected status attention bit set.");
|
||||
sc->unexpected_attention_sim_count++;
|
||||
status_attn_bits = status_attn_bits | STATUS_ATTN_BITS_PARITY_ERROR);
|
||||
|
||||
/* Was it a link change interrupt? */
|
||||
if ((status_attn_bits & STATUS_ATTN_BITS_LINK_STATE) !=
|
||||
@ -7060,13 +7072,13 @@ bce_intr(void *xsc)
|
||||
(sc->status_block->status_attn_bits_ack &
|
||||
~STATUS_ATTN_BITS_LINK_STATE))) {
|
||||
|
||||
DBRUN(sc->unexpected_attentions++);
|
||||
sc->unexpected_attention_count++;
|
||||
|
||||
BCE_PRINTF("%s(%d): Fatal attention detected: 0x%08X\n",
|
||||
__FILE__, __LINE__, sc->status_block->status_attn_bits);
|
||||
|
||||
DBRUNMSG(BCE_FATAL,
|
||||
if (bce_debug_unexpected_attention == 0)
|
||||
if (unexpected_attention_sim_control == 0)
|
||||
bce_breakpoint(sc));
|
||||
|
||||
bce_init_locked(sc);
|
||||
@ -7315,8 +7327,8 @@ bce_stats_update(struct bce_softc *sc)
|
||||
sc->stat_EtherStatsUndersizePkts =
|
||||
stats->stat_EtherStatsUndersizePkts;
|
||||
|
||||
sc->stat_EtherStatsOverrsizePkts =
|
||||
stats->stat_EtherStatsOverrsizePkts;
|
||||
sc->stat_EtherStatsOversizePkts =
|
||||
stats->stat_EtherStatsOversizePkts;
|
||||
|
||||
sc->stat_EtherStatsPktsRx64Octets =
|
||||
stats->stat_EtherStatsPktsRx64Octets;
|
||||
@ -7420,7 +7432,7 @@ bce_stats_update(struct bce_softc *sc)
|
||||
/* ToDo: This method loses soft errors. */
|
||||
ifp->if_ierrors =
|
||||
(u_long) sc->stat_EtherStatsUndersizePkts +
|
||||
(u_long) sc->stat_EtherStatsOverrsizePkts +
|
||||
(u_long) sc->stat_EtherStatsOversizePkts +
|
||||
(u_long) sc->stat_IfInMBUFDiscards +
|
||||
(u_long) sc->stat_Dot3StatsAlignmentErrors +
|
||||
(u_long) sc->stat_Dot3StatsFCSErrors +
|
||||
@ -7870,6 +7882,91 @@ bce_add_sysctls(struct bce_softc *sc)
|
||||
children = SYSCTL_CHILDREN(device_get_sysctl_tree(sc->bce_dev));
|
||||
|
||||
#ifdef BCE_DEBUG
|
||||
SYSCTL_ADD_INT(ctx, children, OID_AUTO,
|
||||
"l2fhdr_error_sim_control",
|
||||
CTLFLAG_RW, &l2fhdr_error_sim_control,
|
||||
0, "Debug control to force l2fhdr errors");
|
||||
|
||||
SYSCTL_ADD_INT(ctx, children, OID_AUTO,
|
||||
"l2fhdr_error_sim_count",
|
||||
CTLFLAG_RD, &sc->l2fhdr_error_sim_count,
|
||||
0, "Number of simulated l2_fhdr errors");
|
||||
#endif
|
||||
|
||||
SYSCTL_ADD_INT(ctx, children, OID_AUTO,
|
||||
"l2fhdr_error_count",
|
||||
CTLFLAG_RD, &sc->l2fhdr_error_count,
|
||||
0, "Number of l2_fhdr errors");
|
||||
|
||||
#ifdef BCE_DEBUG
|
||||
SYSCTL_ADD_INT(ctx, children, OID_AUTO,
|
||||
"mbuf_alloc_failed_sim_control",
|
||||
CTLFLAG_RW, &mbuf_alloc_failed_sim_control,
|
||||
0, "Debug control to force mbuf allocation failures");
|
||||
|
||||
SYSCTL_ADD_INT(ctx, children, OID_AUTO,
|
||||
"mbuf_alloc_failed_sim_count",
|
||||
CTLFLAG_RD, &sc->mbuf_alloc_failed_sim_count,
|
||||
0, "Number of simulated mbuf cluster allocation failures");
|
||||
#endif
|
||||
|
||||
SYSCTL_ADD_INT(ctx, children, OID_AUTO,
|
||||
"mbuf_alloc_failed_count",
|
||||
CTLFLAG_RD, &sc->mbuf_alloc_failed_count,
|
||||
0, "Number of mbuf allocation failures");
|
||||
|
||||
SYSCTL_ADD_INT(ctx, children, OID_AUTO,
|
||||
"fragmented_mbuf_count",
|
||||
CTLFLAG_RD, &sc->fragmented_mbuf_count,
|
||||
0, "Number of fragmented mbufs");
|
||||
|
||||
#ifdef BCE_DEBUG
|
||||
SYSCTL_ADD_INT(ctx, children, OID_AUTO,
|
||||
"dma_map_addr_failed_sim_control",
|
||||
CTLFLAG_RW, &dma_map_addr_failed_sim_control,
|
||||
0, "Debug control to force DMA mapping failures");
|
||||
|
||||
/* ToDo: Figure out how to update this value in bce_dma_map_addr(). */
|
||||
SYSCTL_ADD_INT(ctx, children, OID_AUTO,
|
||||
"dma_map_addr_failed_sim_count",
|
||||
CTLFLAG_RD, &sc->dma_map_addr_failed_sim_count,
|
||||
0, "Number of simulated DMA mapping failures");
|
||||
|
||||
#endif
|
||||
|
||||
SYSCTL_ADD_INT(ctx, children, OID_AUTO,
|
||||
"dma_map_addr_rx_failed_count",
|
||||
CTLFLAG_RD, &sc->dma_map_addr_rx_failed_count,
|
||||
0, "Number of RX DMA mapping failures");
|
||||
|
||||
SYSCTL_ADD_INT(ctx, children, OID_AUTO,
|
||||
"dma_map_addr_tx_failed_count",
|
||||
CTLFLAG_RD, &sc->dma_map_addr_tx_failed_count,
|
||||
0, "Number of TX DMA mapping failures");
|
||||
|
||||
#ifdef BCE_DEBUG
|
||||
SYSCTL_ADD_INT(ctx, children, OID_AUTO,
|
||||
"unexpected_attention_sim_control",
|
||||
CTLFLAG_RW, &unexpected_attention_sim_control,
|
||||
0, "Debug control to simulate unexpected attentions");
|
||||
|
||||
SYSCTL_ADD_INT(ctx, children, OID_AUTO,
|
||||
"unexpected_attention_sim_count",
|
||||
CTLFLAG_RW, &sc->unexpected_attention_sim_count,
|
||||
0, "Number of simulated unexpected attentions");
|
||||
#endif
|
||||
|
||||
SYSCTL_ADD_INT(ctx, children, OID_AUTO,
|
||||
"unexpected_attention_count",
|
||||
CTLFLAG_RW, &sc->unexpected_attention_count,
|
||||
0, "Number of unexpected attentions");
|
||||
|
||||
#ifdef BCE_DEBUG
|
||||
SYSCTL_ADD_INT(ctx, children, OID_AUTO,
|
||||
"debug_bootcode_running_failure",
|
||||
CTLFLAG_RW, &bootcode_running_failure_sim_control,
|
||||
0, "Debug control to force bootcode running failures");
|
||||
|
||||
SYSCTL_ADD_INT(ctx, children, OID_AUTO,
|
||||
"rx_low_watermark",
|
||||
CTLFLAG_RD, &sc->rx_low_watermark,
|
||||
@ -7890,26 +7987,6 @@ bce_add_sysctls(struct bce_softc *sc)
|
||||
CTLFLAG_RD, &sc->tx_full_count,
|
||||
0, "Number of times the TX chain was full");
|
||||
|
||||
SYSCTL_ADD_INT(ctx, children, OID_AUTO,
|
||||
"l2fhdr_status_errors",
|
||||
CTLFLAG_RD, &sc->l2fhdr_status_errors,
|
||||
0, "l2_fhdr status errors");
|
||||
|
||||
SYSCTL_ADD_INT(ctx, children, OID_AUTO,
|
||||
"unexpected_attentions",
|
||||
CTLFLAG_RD, &sc->unexpected_attentions,
|
||||
0, "Unexpected attentions");
|
||||
|
||||
SYSCTL_ADD_INT(ctx, children, OID_AUTO,
|
||||
"lost_status_block_updates",
|
||||
CTLFLAG_RD, &sc->lost_status_block_updates,
|
||||
0, "Lost status block updates");
|
||||
|
||||
SYSCTL_ADD_INT(ctx, children, OID_AUTO,
|
||||
"debug_mbuf_sim_alloc_failed",
|
||||
CTLFLAG_RD, &sc->debug_mbuf_sim_alloc_failed,
|
||||
0, "Simulated mbuf cluster allocation failures");
|
||||
|
||||
SYSCTL_ADD_INT(ctx, children, OID_AUTO,
|
||||
"requested_tso_frames",
|
||||
CTLFLAG_RD, &sc->requested_tso_frames,
|
||||
@ -7936,16 +8013,6 @@ bce_add_sysctls(struct bce_softc *sc)
|
||||
"TX interrupt time");
|
||||
#endif
|
||||
|
||||
SYSCTL_ADD_INT(ctx, children, OID_AUTO,
|
||||
"mbuf_alloc_failed",
|
||||
CTLFLAG_RD, &sc->mbuf_alloc_failed,
|
||||
0, "mbuf cluster allocation failures");
|
||||
|
||||
SYSCTL_ADD_INT(ctx, children, OID_AUTO,
|
||||
"tx_dma_map_failures",
|
||||
CTLFLAG_RD, &sc->tx_dma_map_failures,
|
||||
0, "tx dma mapping failures");
|
||||
|
||||
SYSCTL_ADD_ULONG(ctx, children, OID_AUTO,
|
||||
"stat_IfHcInOctets",
|
||||
CTLFLAG_RD, &sc->stat_IfHCInOctets,
|
||||
@ -8062,9 +8129,9 @@ bce_add_sysctls(struct bce_softc *sc)
|
||||
0, "Undersize packets");
|
||||
|
||||
SYSCTL_ADD_UINT(ctx, children, OID_AUTO,
|
||||
"stat_EtherStatsOverrsizePkts",
|
||||
CTLFLAG_RD, &sc->stat_EtherStatsOverrsizePkts,
|
||||
0, "stat_EtherStatsOverrsizePkts");
|
||||
"stat_EtherStatsOversizePkts",
|
||||
CTLFLAG_RD, &sc->stat_EtherStatsOversizePkts,
|
||||
0, "stat_EtherStatsOversizePkts");
|
||||
|
||||
SYSCTL_ADD_UINT(ctx, children, OID_AUTO,
|
||||
"stat_EtherStatsPktsRx64Octets",
|
||||
@ -9455,9 +9522,9 @@ bce_dump_stats_block(struct bce_softc *sc)
|
||||
BCE_PRINTF(" 0x%08X : EtherStatsUndersizePkts\n",
|
||||
sblk->stat_EtherStatsUndersizePkts);
|
||||
|
||||
if (sblk->stat_EtherStatsOverrsizePkts)
|
||||
if (sblk->stat_EtherStatsOversizePkts)
|
||||
BCE_PRINTF(" 0x%08X : EtherStatsOverrsizePkts\n",
|
||||
sblk->stat_EtherStatsOverrsizePkts);
|
||||
sblk->stat_EtherStatsOversizePkts);
|
||||
|
||||
if (sblk->stat_EtherStatsPktsRx64Octets)
|
||||
BCE_PRINTF(" 0x%08X : EtherStatsPktsRx64Octets\n",
|
||||
@ -9724,13 +9791,9 @@ bce_dump_driver_state(struct bce_softc *sc)
|
||||
sc->pg_low_watermark, sc->max_pg_bd);
|
||||
#endif
|
||||
|
||||
BCE_PRINTF(" 0x%08X - (sc->mbuf_alloc_failed) "
|
||||
BCE_PRINTF(" 0x%08X - (sc->mbuf_alloc_failed_count) "
|
||||
"mbuf alloc failures\n",
|
||||
sc->mbuf_alloc_failed);
|
||||
|
||||
BCE_PRINTF(" 0x%08X - (sc->debug_mbuf_sim_alloc_failed) "
|
||||
"simulated mbuf alloc failures\n",
|
||||
sc->debug_mbuf_sim_alloc_failed);
|
||||
sc->mbuf_alloc_failed_count);
|
||||
|
||||
BCE_PRINTF(" 0x%08X - (sc->bce_flags) bce mac flags\n",
|
||||
sc->bce_flags);
|
||||
@ -9762,7 +9825,7 @@ bce_dump_hw_state(struct bce_softc *sc)
|
||||
" Hardware State "
|
||||
"----------------------------\n");
|
||||
|
||||
BCE_PRINTF("0x%08X - bootcode version\n", sc->bce_fw_ver);
|
||||
BCE_PRINTF("0x%08X - bootcode version\n", sc->bce_bc_ver);
|
||||
|
||||
val = REG_RD(sc, BCE_MISC_ENABLE_STATUS_BITS);
|
||||
BCE_PRINTF("0x%08X - (0x%06X) misc_enable_status_bits\n",
|
||||
@ -9887,7 +9950,7 @@ bce_dump_bc_state(struct bce_softc *sc)
|
||||
" Bootcode State "
|
||||
"----------------------------\n");
|
||||
|
||||
BCE_PRINTF("0x%08X - bootcode version\n", sc->bce_fw_ver);
|
||||
BCE_PRINTF("0x%08X - bootcode version\n", sc->bce_bc_ver);
|
||||
|
||||
val = REG_RD_IND(sc, sc->bce_shmem_base + BCE_BC_RESET_TYPE);
|
||||
BCE_PRINTF("0x%08X - (0x%06X) reset_type\n",
|
||||
|
27243
sys/dev/bce/if_bcefw.h
27243
sys/dev/bce/if_bcefw.h
File diff suppressed because it is too large
Load Diff
@ -29,8 +29,8 @@
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _BCE_H_DEFINED
|
||||
#define _BCE_H_DEFINED
|
||||
#ifndef _BCEREG_H_DEFINED
|
||||
#define _BCEREG_H_DEFINED
|
||||
|
||||
#ifdef HAVE_KERNEL_OPTION_HEADERS
|
||||
#include "opt_device_polling.h"
|
||||
@ -1285,7 +1285,7 @@ struct statistics_block {
|
||||
u32 stat_EtherStatsFragments;
|
||||
u32 stat_EtherStatsJabbers;
|
||||
u32 stat_EtherStatsUndersizePkts;
|
||||
u32 stat_EtherStatsOverrsizePkts;
|
||||
u32 stat_EtherStatsOversizePkts;
|
||||
u32 stat_EtherStatsPktsRx64Octets;
|
||||
u32 stat_EtherStatsPktsRx65Octetsto127Octets;
|
||||
u32 stat_EtherStatsPktsRx128Octetsto255Octets;
|
||||
@ -6177,6 +6177,7 @@ struct l2_fhdr {
|
||||
#define USABLE_TX_BD (USABLE_TX_BD_PER_PAGE * TX_PAGES)
|
||||
#define MAX_TX_BD (TOTAL_TX_BD - 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
|
||||
@ -6197,6 +6198,7 @@ struct l2_fhdr {
|
||||
#define USABLE_RX_BD (USABLE_RX_BD_PER_PAGE * RX_PAGES)
|
||||
#define MAX_RX_BD (TOTAL_RX_BD - 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
|
||||
@ -6218,6 +6220,7 @@ struct l2_fhdr {
|
||||
#define USABLE_PG_BD (USABLE_PG_BD_PER_PAGE * PG_PAGES)
|
||||
#define MAX_PG_BD (TOTAL_PG_BD - 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
|
||||
@ -6452,7 +6455,7 @@ struct bce_softc
|
||||
char * bce_name; /* Name string */
|
||||
|
||||
/* Tracks the version of bootcode firmware. */
|
||||
u32 bce_fw_ver;
|
||||
u32 bce_bc_ver;
|
||||
|
||||
/* Tracks the state of the firmware. 0 = Running while any */
|
||||
/* other value indicates that the firmware is not responding. */
|
||||
@ -6633,7 +6636,7 @@ struct bce_softc
|
||||
u32 stat_EtherStatsFragments;
|
||||
u32 stat_EtherStatsJabbers;
|
||||
u32 stat_EtherStatsUndersizePkts;
|
||||
u32 stat_EtherStatsOverrsizePkts;
|
||||
u32 stat_EtherStatsOversizePkts;
|
||||
u32 stat_EtherStatsPktsRx64Octets;
|
||||
u32 stat_EtherStatsPktsRx65Octetsto127Octets;
|
||||
u32 stat_EtherStatsPktsRx128Octetsto255Octets;
|
||||
@ -6668,11 +6671,21 @@ struct bce_softc
|
||||
/* Provides access to certain firmware statistics. */
|
||||
u32 com_no_buffers;
|
||||
|
||||
/* Mbuf allocation failure counter. */
|
||||
u32 mbuf_alloc_failed;
|
||||
/* 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;
|
||||
|
||||
/* TX DMA mapping failure counter. */
|
||||
u32 tx_dma_map_failures;
|
||||
#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;
|
||||
#endif
|
||||
|
||||
u32 hc_command;
|
||||
|
||||
@ -6706,13 +6719,6 @@ struct bce_softc
|
||||
u32 tx_hi_watermark; /* Greatest number of tx_bd's used. */
|
||||
u32 tx_full_count; /* Number of times the TX chain was full. */
|
||||
|
||||
/* Simulated mbuf allocation failure counter. */
|
||||
u32 debug_mbuf_sim_alloc_failed;
|
||||
|
||||
u32 l2fhdr_status_errors;
|
||||
u32 unexpected_attentions;
|
||||
u32 lost_status_block_updates;
|
||||
|
||||
u32 requested_tso_frames; /* Number of TSO frames enqueued. */
|
||||
#endif
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user