drivers/net/ethernet/huawei/hinic/hinic_hw_api_cmd.h

Source file repositories/reference/linux-study-clean/drivers/net/ethernet/huawei/hinic/hinic_hw_api_cmd.h

File Facts

System
Linux kernel
Corpus path
drivers/net/ethernet/huawei/hinic/hinic_hw_api_cmd.h
Extension
.h
Size
7067 bytes
Lines
204
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 hinic_api_cmd_chain_attr {
	struct hinic_hwif               *hwif;
	enum hinic_api_cmd_chain_type   chain_type;

	u32                             num_cells;
	u16                             cell_size;
};

struct hinic_api_cmd_status {
	u64     header;
	u32     status;
	u32     rsvd0;
	u32     rsvd1;
	u32     rsvd2;
	u64     rsvd3;
};

/* HW struct */
struct hinic_api_cmd_cell {
	u64 ctrl;

	/* address is 64 bit in HW struct */
	u64 next_cell_paddr;

	u64 desc;

	/* HW struct */
	union {
		struct {
			u64 hw_cmd_paddr;
		} write;

		struct {
			u64 hw_wb_resp_paddr;
			u64 hw_cmd_paddr;
		} read;
	};
};

struct hinic_api_cmd_cell_ctxt {
	dma_addr_t                      cell_paddr;
	struct hinic_api_cmd_cell       *cell_vaddr;

	dma_addr_t                      api_cmd_paddr;
	u8                              *api_cmd_vaddr;
};

struct hinic_api_cmd_chain {
	struct hinic_hwif               *hwif;
	enum hinic_api_cmd_chain_type   chain_type;

	u32                             num_cells;
	u16                             cell_size;

	/* HW members in 24 bit format */
	u32                             prod_idx;
	u32                             cons_idx;

	struct semaphore                sem;

	struct hinic_api_cmd_cell_ctxt  *cell_ctxt;

	dma_addr_t                      wb_status_paddr;
	struct hinic_api_cmd_status     *wb_status;

	dma_addr_t                      head_cell_paddr;
	struct hinic_api_cmd_cell       *head_node;
	struct hinic_api_cmd_cell       *curr_node;
};

int hinic_api_cmd_write(struct hinic_api_cmd_chain *chain,
			enum hinic_node_id dest, u8 *cmd, u16 size);

int hinic_api_cmd_init(struct hinic_api_cmd_chain **chain,
		       struct hinic_hwif *hwif);

void hinic_api_cmd_free(struct hinic_api_cmd_chain **chain);

#endif

Annotation

Implementation Notes