drivers/net/ethernet/fungible/funeth/funeth_txrx.h
Source file repositories/reference/linux-study-clean/drivers/net/ethernet/fungible/funeth/funeth_txrx.h
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/ethernet/fungible/funeth/funeth_txrx.h- Extension
.h- Size
- 10403 bytes
- Lines
- 267
- 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.
- Touches IRQ or DMA behavior; this matters for the representative real-device path.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/netdevice.hlinux/u64_stats_sync.hnet/xdp.h
Detected Declarations
struct bpf_progstruct funeth_txq_statsstruct funeth_tx_infostruct funeth_txqstruct funeth_rxq_statsstruct funeth_rxbufstruct funeth_rx_cachestruct funeth_rxqstruct fun_irqfunction fun_txq_wr_dbfunction fun_irq_node
Annotated Snippet
struct funeth_txq_stats { /* per Tx queue SW counters */
u64 tx_pkts; /* # of Tx packets */
u64 tx_bytes; /* total bytes of Tx packets */
u64 tx_cso; /* # of packets with checksum offload */
u64 tx_tso; /* # of non-encapsulated TSO super-packets */
u64 tx_encap_tso; /* # of encapsulated TSO super-packets */
u64 tx_uso; /* # of non-encapsulated UDP LSO super-packets */
u64 tx_more; /* # of DBs elided due to xmit_more */
u64 tx_nstops; /* # of times the queue has stopped */
u64 tx_nrestarts; /* # of times the queue has restarted */
u64 tx_map_err; /* # of packets dropped due to DMA mapping errors */
u64 tx_xdp_full; /* # of XDP packets that could not be enqueued */
u64 tx_tls_pkts; /* # of Tx TLS packets offloaded to HW */
u64 tx_tls_bytes; /* Tx bytes of HW-handled TLS payload */
u64 tx_tls_fallback; /* attempted Tx TLS offloads punted to SW */
u64 tx_tls_drops; /* attempted Tx TLS offloads dropped */
};
struct funeth_tx_info { /* per Tx descriptor state */
union {
struct sk_buff *skb; /* associated packet (sk_buff path) */
struct xdp_frame *xdpf; /* associated XDP frame (XDP path) */
};
};
struct funeth_txq {
/* RO cacheline of frequently accessed data */
u32 mask; /* queue depth - 1 */
u32 hw_qid; /* device ID of the queue */
void *desc; /* base address of descriptor ring */
struct funeth_tx_info *info;
struct device *dma_dev; /* device for DMA mappings */
volatile __be64 *hw_wb; /* HW write-back location */
u32 __iomem *db; /* SQ doorbell register address */
struct netdev_queue *ndq;
dma_addr_t dma_addr; /* DMA address of descriptor ring */
/* producer R/W cacheline */
u16 qidx; /* queue index within net_device */
u16 ethid;
u32 prod_cnt; /* producer counter */
struct funeth_txq_stats stats;
/* shared R/W cacheline, primarily accessed by consumer */
u32 irq_db_val; /* value written to IRQ doorbell */
u32 cons_cnt; /* consumer (cleanup) counter */
struct net_device *netdev;
struct fun_irq *irq;
int numa_node;
u8 init_state; /* queue initialization state */
struct u64_stats_sync syncp;
};
struct funeth_rxq_stats { /* per Rx queue SW counters */
u64 rx_pkts; /* # of received packets, including SW drops */
u64 rx_bytes; /* total size of received packets */
u64 rx_cso; /* # of packets with checksum offload */
u64 rx_bufs; /* total # of Rx buffers provided to device */
u64 gro_pkts; /* # of GRO superpackets */
u64 gro_merged; /* # of pkts merged into existing GRO superpackets */
u64 rx_page_alloc; /* # of page allocations for Rx buffers */
u64 rx_budget; /* NAPI iterations that exhausted their budget */
u64 rx_mem_drops; /* # of packets dropped due to memory shortage */
u64 rx_map_err; /* # of page DMA mapping errors */
u64 xdp_drops; /* XDP_DROPped packets */
u64 xdp_tx; /* successful XDP transmits */
u64 xdp_redir; /* successful XDP redirects */
u64 xdp_err; /* packets dropped due to XDP errors */
};
struct funeth_rxbuf { /* per Rx buffer state */
struct page *page; /* associated page */
dma_addr_t dma_addr; /* DMA address of page start */
int pg_refs; /* page refs held by driver */
int node; /* page node, or -1 if it is PF_MEMALLOC */
};
struct funeth_rx_cache { /* cache of DMA-mapped previously used buffers */
struct funeth_rxbuf *bufs; /* base of Rx buffer state ring */
unsigned int prod_cnt; /* producer counter */
unsigned int cons_cnt; /* consumer counter */
unsigned int mask; /* depth - 1 */
};
/* An Rx queue consists of a CQ and an SQ used to provide Rx buffers. */
struct funeth_rxq {
struct net_device *netdev;
struct napi_struct *napi;
struct device *dma_dev; /* device for DMA mappings */
void *cqes; /* base of CQ descriptor ring */
const void *next_cqe_info; /* fun_cqe_info of next CQE */
u32 __iomem *cq_db; /* CQ doorbell register address */
Annotation
- Immediate include surface: `linux/netdevice.h`, `linux/u64_stats_sync.h`, `net/xdp.h`.
- Detected declarations: `struct bpf_prog`, `struct funeth_txq_stats`, `struct funeth_tx_info`, `struct funeth_txq`, `struct funeth_rxq_stats`, `struct funeth_rxbuf`, `struct funeth_rx_cache`, `struct funeth_rxq`, `struct fun_irq`, `function fun_txq_wr_db`.
- Atlas domain: Driver Families / drivers/net.
- Implementation status: source implementation candidate.
- IRQ or DMA behavior appears here, which is relevant to the selected PCIe/NVMe device path.
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.