drivers/scsi/elx/efct/efct_lio.h

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

File Facts

System
Linux kernel
Corpus path
drivers/scsi/elx/efct/efct_lio.h
Extension
.h
Size
4784 bytes
Lines
190
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_lio_wq_data {
	struct efct		*efct;
	void			*ptr;
	struct work_struct	work;
};

/* Target private efct structure */
struct efct_scsi_tgt {
	u32			max_sge;
	u32			max_sgl;

	/*
	 * Variables used to send task set full. We are using a high watermark
	 * method to send task set full. We will reserve a fixed number of IOs
	 * per initiator plus a fudge factor. Once we reach this number,
	 * then the target will start sending task set full/busy responses.
	 */
	atomic_t		initiator_count;
	atomic_t		ios_in_use;
	atomic_t		io_high_watermark;

	atomic_t		watermark_hit;
	int			watermark_min;
	int			watermark_max;

	struct efct_lio_nport	*lio_nport;
	struct efct_lio_tpg	*tpg;

	struct list_head	vport_list;
	/* Protects vport list*/
	spinlock_t		efct_lio_lock;

	u64			wwnn;
};

struct efct_scsi_tgt_nport {
	struct efct_lio_nport	*lio_nport;
};

struct efct_node {
	struct list_head	list_entry;
	struct kref		ref;
	void			(*release)(struct kref *arg);
	struct efct		*efct;
	struct efc_node		*node;
	struct se_session	*session;
	spinlock_t		active_ios_lock;
	struct list_head	active_ios;
	char			display_name[EFC_NAME_LENGTH];
	u32			port_fc_id;
	u32			node_fc_id;
	u32			vpi;
	u32			rpi;
	u32			abort_cnt;
};

#define EFCT_LIO_STATE_SCSI_RECV_CMD		(1 << 0)
#define EFCT_LIO_STATE_TGT_SUBMIT_CMD		(1 << 1)
#define EFCT_LIO_STATE_TFO_QUEUE_DATA_IN	(1 << 2)
#define EFCT_LIO_STATE_TFO_WRITE_PENDING	(1 << 3)
#define EFCT_LIO_STATE_TGT_EXECUTE_CMD		(1 << 4)
#define EFCT_LIO_STATE_SCSI_SEND_RD_DATA	(1 << 5)
#define EFCT_LIO_STATE_TFO_CHK_STOP_FREE	(1 << 6)
#define EFCT_LIO_STATE_SCSI_DATA_DONE		(1 << 7)
#define EFCT_LIO_STATE_TFO_QUEUE_STATUS		(1 << 8)
#define EFCT_LIO_STATE_SCSI_SEND_RSP		(1 << 9)
#define EFCT_LIO_STATE_SCSI_RSP_DONE		(1 << 10)
#define EFCT_LIO_STATE_TGT_GENERIC_FREE		(1 << 11)
#define EFCT_LIO_STATE_SCSI_RECV_TMF		(1 << 12)
#define EFCT_LIO_STATE_TGT_SUBMIT_TMR		(1 << 13)
#define EFCT_LIO_STATE_TFO_WRITE_PEND_STATUS	(1 << 14)
#define EFCT_LIO_STATE_TGT_GENERIC_REQ_FAILURE  (1 << 15)

#define EFCT_LIO_STATE_TFO_ABORTED_TASK		(1 << 29)
#define EFCT_LIO_STATE_TFO_RELEASE_CMD		(1 << 30)
#define EFCT_LIO_STATE_SCSI_CMPL_CMD		(1u << 31)

struct efct_scsi_tgt_io {
	struct se_cmd		cmd;
	unsigned char		sense_buffer[TRANSPORT_SENSE_BUFFER];
	enum dma_data_direction	ddir;
	int			task_attr;
	u64			lun;

	u32			state;
	u8			tmf;
	struct efct_io		*io_to_abort;
	u32			seg_map_cnt;
	u32			seg_cnt;
	u32			cur_seg;

Annotation

Implementation Notes