drivers/infiniband/ulp/iser/iscsi_iser.h

Source file repositories/reference/linux-study-clean/drivers/infiniband/ulp/iser/iscsi_iser.h

File Facts

System
Linux kernel
Corpus path
drivers/infiniband/ulp/iser/iscsi_iser.h
Extension
.h
Size
18114 bytes
Lines
570
Domain
Driver Families
Bucket
drivers/infiniband
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 iser_data_buf {
	struct scatterlist *sg;
	int                size;
	unsigned long      data_len;
	int                dma_nents;
};

/* fwd declarations */
struct iser_device;
struct iscsi_iser_task;
struct iscsi_endpoint;
struct iser_reg_resources;

/**
 * struct iser_mem_reg - iSER memory registration info
 *
 * @sge:          memory region sg element
 * @rkey:         memory region remote key
 * @desc:         pointer to fast registration context
 */
struct iser_mem_reg {
	struct ib_sge sge;
	u32 rkey;
	struct iser_fr_desc *desc;
};

enum iser_desc_type {
	ISCSI_TX_CONTROL ,
	ISCSI_TX_SCSI_COMMAND,
	ISCSI_TX_DATAOUT
};

/**
 * struct iser_tx_desc - iSER TX descriptor
 *
 * @iser_header:   iser header
 * @iscsi_header:  iscsi header
 * @type:          command/control/dataout
 * @dma_addr:      header buffer dma_address
 * @tx_sg:         sg[0] points to iser/iscsi headers
 *                 sg[1] optionally points to either of immediate data
 *                 unsolicited data-out or control
 * @num_sge:       number sges used on this TX task
 * @cqe:           completion handler
 * @mapped:        Is the task header mapped
 * @reg_wr:        registration WR
 * @send_wr:       send WR
 * @inv_wr:        invalidate WR
 */
struct iser_tx_desc {
	struct iser_ctrl             iser_header;
	struct iscsi_hdr             iscsi_header;
	enum   iser_desc_type        type;
	u64		             dma_addr;
	struct ib_sge		     tx_sg[2];
	int                          num_sge;
	struct ib_cqe		     cqe;
	bool			     mapped;
	struct ib_reg_wr	     reg_wr;
	struct ib_send_wr	     send_wr;
	struct ib_send_wr	     inv_wr;
};

#define ISER_RX_PAD_SIZE	(256 - (ISER_RX_PAYLOAD_SIZE + \
				 sizeof(u64) + sizeof(struct ib_sge) + \
				 sizeof(struct ib_cqe)))
/**
 * struct iser_rx_desc - iSER RX descriptor
 *
 * @iser_header:   iser header
 * @iscsi_header:  iscsi header
 * @data:          received data segment
 * @dma_addr:      receive buffer dma address
 * @rx_sg:         ib_sge of receive buffer
 * @cqe:           completion handler
 * @pad:           for sense data TODO: Modify to maximum sense length supported
 */
struct iser_rx_desc {
	struct iser_ctrl             iser_header;
	struct iscsi_hdr             iscsi_header;
	char		             data[ISER_RECV_DATA_SEG_LEN];
	u64		             dma_addr;
	struct ib_sge		     rx_sg;
	struct ib_cqe		     cqe;
	char		             pad[ISER_RX_PAD_SIZE];
} __packed;

/**
 * struct iser_login_desc - iSER login descriptor
 *

Annotation

Implementation Notes