drivers/net/ethernet/alibaba/eea/eea_ring.h

Source file repositories/reference/linux-study-clean/drivers/net/ethernet/alibaba/eea/eea_ring.h

File Facts

System
Linux kernel
Corpus path
drivers/net/ethernet/alibaba/eea/eea_ring.h
Extension
.h
Size
2102 bytes
Lines
100
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.

Dependency Surface

Detected Declarations

Annotated Snippet

struct eea_common_desc {
	__le16 flags;
	__le16 id;
};

struct eea_device;

struct eea_ring_sq {
	void *desc;

	u16 head;
	u16 hw_idx;

	u16 shadow_idx;
	__le16 shadow_id;
	u16 shadow_num;

	u8 desc_size;
	u8 desc_size_shift;

	dma_addr_t dma_addr;
	u32 dma_size;
};

struct eea_ring_cq {
	void *desc;

	u16 head;
	u16 hw_idx;

	u8 phase;
	u8 desc_size_shift;
	u8 desc_size;

	dma_addr_t dma_addr;
	u32 dma_size;
};

struct eea_ring {
	const char *name;
	struct eea_device *edev;
	u32 index;
	void __iomem *db;
	u16 msix_vec;

	u32 num;

	u32 num_free;

	struct eea_ring_sq sq;
	struct eea_ring_cq cq;
};

struct eea_ring *eea_ering_alloc(u32 index, u32 num, struct eea_device *edev,
				 u8 sq_desc_size, u8 cq_desc_size,
				 const char *name);
void eea_ering_free(struct eea_ring *ering);
void eea_ering_kick(struct eea_ring *ering);

void *eea_ering_sq_alloc_desc(struct eea_ring *ering, u16 id,
			      bool is_last, u16 flags);
void *eea_ering_aq_alloc_desc(struct eea_ring *ering);
void eea_ering_sq_commit_desc(struct eea_ring *ering);
void eea_ering_sq_cancel(struct eea_ring *ering);

void eea_ering_cq_ack_desc(struct eea_ring *ering, u32 num);

void eea_ering_irq_active(struct eea_ring *ering, struct eea_ring *tx_ering);
void *eea_ering_cq_get_desc(const struct eea_ring *ering);
#endif

Annotation

Implementation Notes