drivers/scsi/elx/efct/efct_io.h

Source file repositories/reference/linux-study-clean/drivers/scsi/elx/efct/efct_io.h

File Facts

System
Linux kernel
Corpus path
drivers/scsi/elx/efct/efct_io.h
Extension
.h
Size
4783 bytes
Lines
175
Domain
Driver Families
Bucket
drivers/scsi
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 efct_io {
	struct efct		*efct;
	u32			instance_index;
	const char		*display_name;
	struct efct_node	*node;

	struct list_head	list_entry;
	struct list_head	io_pending_link;
	struct kref		ref;
	void (*release)(struct kref *arg);
	u32			init_task_tag;
	u32			tgt_task_tag;
	u32			hw_tag;
	u32			tag;
	struct efct_scsi_sgl	*sgl;
	u32			sgl_allocated;
	u32			sgl_count;
	struct efct_scsi_tgt_io tgt_io;
	u32			exp_xfer_len;

	void			*hw_priv;

	enum efct_io_type	io_type;
	struct efct_hw_io	*hio;
	size_t			transferred;

	bool			auto_resp;
	bool			low_latency;
	u8			wq_steering;
	u8			wq_class;
	u64			xfer_req;
	efct_scsi_io_cb_t	scsi_tgt_cb;
	void			*scsi_tgt_cb_arg;
	efct_scsi_io_cb_t	abort_cb;
	void			*abort_cb_arg;
	efct_scsi_io_cb_t	bls_cb;
	void			*bls_cb_arg;
	enum efct_scsi_tmf_cmd	tmf_cmd;
	u16			abort_rx_id;

	bool			cmd_tgt;
	bool			send_abts;
	bool			cmd_ini;
	bool			seq_init;
	union efct_hw_io_param_u iparam;
	enum efct_hw_io_type	hio_type;
	u64			wire_len;
	void			*hw_cb;

	struct efct_io		*io_to_abort;

	struct efc_dma		rspbuf;
	u32			timeout;
	u8			cs_ctl;
	u8			io_free;
	u32			app_id;
};

struct efct_io_cb_arg {
	int status;
	int ext_status;
	void *app;
};

struct efct_io_pool *
efct_io_pool_create(struct efct *efct, u32 num_sgl);
int
efct_io_pool_free(struct efct_io_pool *io_pool);
u32
efct_io_pool_allocated(struct efct_io_pool *io_pool);

struct efct_io *
efct_io_pool_io_alloc(struct efct_io_pool *io_pool);
void
efct_io_pool_io_free(struct efct_io_pool *io_pool, struct efct_io *io);
struct efct_io *
efct_io_find_tgt_io(struct efct *efct, struct efct_node *node,
		    u16 ox_id, u16 rx_id);
#endif /* __EFCT_IO_H__ */

Annotation

Implementation Notes