drivers/net/ethernet/brocade/bna/bna_enet.c
Source file repositories/reference/linux-study-clean/drivers/net/ethernet/brocade/bna/bna_enet.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/ethernet/brocade/bna/bna_enet.c- Extension
.c- Size
- 51869 bytes
- Lines
- 2095
- Domain
- Driver Families
- Bucket
- drivers/net
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
bna.h
Detected Declarations
enum bna_ethport_eventenum bna_enet_eventenum bna_ioceth_eventfunction Copyrightfunction bna_bfi_ethport_enable_aenfunction bna_bfi_ethport_disable_aenfunction bna_bfi_ethport_admin_rspfunction bna_bfi_ethport_lpbk_rspfunction bna_bfi_pause_set_rspfunction bna_bfi_attr_get_rspfunction bna_bfi_stats_get_rspfunction bna_bfi_ethport_linkup_aenfunction bna_bfi_ethport_linkdown_aenfunction bna_err_handlerfunction bna_mbox_handlerfunction bna_msgq_rsp_handlerfunction bna_bfi_ethport_admin_upfunction bna_bfi_ethport_admin_downfunction bna_bfi_ethport_lpbk_upfunction bna_bfi_ethport_lpbk_downfunction bna_bfi_ethport_upfunction bna_bfi_ethport_downfunction bna_ethport_sm_stopped_entryfunction bna_ethport_sm_stoppedfunction bna_ethport_sm_down_entryfunction bna_ethport_sm_up_resp_wait_entryfunction bna_ethport_sm_down_resp_wait_entryfunction bna_ethport_sm_up_entryfunction bna_ethport_sm_last_resp_wait_entryfunction bna_ethport_initfunction bna_ethport_uninitfunction bna_ethport_startfunction bna_enet_cb_ethport_stoppedfunction bna_ethport_stopfunction bna_ethport_failfunction bna_ethport_cb_rx_startedfunction bna_ethport_cb_rx_stoppedfunction bna_enet_sm_stopped_entryfunction bna_enet_sm_stoppedfunction bna_enet_sm_pause_init_wait_entryfunction bna_enet_sm_pause_init_waitfunction bna_enet_sm_last_resp_wait_entryfunction bna_enet_sm_last_resp_waitfunction bna_enet_sm_started_entryfunction bna_enet_sm_startedfunction bna_enet_sm_cfg_wait_entryfunction bna_enet_sm_cfg_stop_wait_entryfunction bna_enet_sm_cfg_stop_wait
Annotated Snippet
if (rx_enet_mask & BIT(i)) {
int k;
count = sizeof(struct bfi_enet_stats_rxf) /
sizeof(u64);
for (k = 0; k < count; k++) {
stats_dst[k] = be64_to_cpu(*stats_src);
stats_src++;
}
}
}
/* Copy Txf stats to SW area, scatter them while copying */
for (i = 0; i < BFI_ENET_CFG_MAX; i++) {
stats_dst = (u64 *)&(bna->stats.hw_stats.txf_stats[i]);
memset(stats_dst, 0, sizeof(struct bfi_enet_stats_txf));
if (tx_enet_mask & BIT(i)) {
int k;
count = sizeof(struct bfi_enet_stats_txf) /
sizeof(u64);
for (k = 0; k < count; k++) {
stats_dst[k] = be64_to_cpu(*stats_src);
stats_src++;
}
}
}
bna->stats_mod.stats_get_busy = false;
bnad_cb_stats_get(bna->bnad, BNA_CB_SUCCESS, &bna->stats);
}
static void
bna_bfi_ethport_linkup_aen(struct bna_ethport *ethport,
struct bfi_msgq_mhdr *msghdr)
{
ethport->link_status = BNA_LINK_UP;
/* Dispatch events */
ethport->link_cbfn(ethport->bna->bnad, ethport->link_status);
}
static void
bna_bfi_ethport_linkdown_aen(struct bna_ethport *ethport,
struct bfi_msgq_mhdr *msghdr)
{
ethport->link_status = BNA_LINK_DOWN;
/* Dispatch events */
ethport->link_cbfn(ethport->bna->bnad, BNA_LINK_DOWN);
}
static void
bna_err_handler(struct bna *bna, u32 intr_status)
{
if (BNA_IS_HALT_INTR(bna, intr_status))
bna_halt_clear(bna);
bfa_nw_ioc_error_isr(&bna->ioceth.ioc);
}
void
bna_mbox_handler(struct bna *bna, u32 intr_status)
{
if (BNA_IS_ERR_INTR(bna, intr_status)) {
bna_err_handler(bna, intr_status);
return;
}
if (BNA_IS_MBOX_INTR(bna, intr_status))
bfa_nw_ioc_mbox_isr(&bna->ioceth.ioc);
}
static void
bna_msgq_rsp_handler(void *arg, struct bfi_msgq_mhdr *msghdr)
{
struct bna *bna = (struct bna *)arg;
struct bna_tx *tx;
struct bna_rx *rx;
switch (msghdr->msg_id) {
case BFI_ENET_I2H_RX_CFG_SET_RSP:
bna_rx_from_rid(bna, msghdr->enet_id, rx);
if (rx)
bna_bfi_rx_enet_start_rsp(rx, msghdr);
break;
case BFI_ENET_I2H_RX_CFG_CLR_RSP:
bna_rx_from_rid(bna, msghdr->enet_id, rx);
if (rx)
bna_bfi_rx_enet_stop_rsp(rx, msghdr);
break;
Annotation
- Immediate include surface: `bna.h`.
- Detected declarations: `enum bna_ethport_event`, `enum bna_enet_event`, `enum bna_ioceth_event`, `function Copyright`, `function bna_bfi_ethport_enable_aen`, `function bna_bfi_ethport_disable_aen`, `function bna_bfi_ethport_admin_rsp`, `function bna_bfi_ethport_lpbk_rsp`, `function bna_bfi_pause_set_rsp`, `function bna_bfi_attr_get_rsp`.
- Atlas domain: Driver Families / drivers/net.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.