diff mbox series

[v2,02/15] include/scsi/srp.h: Add support for immediate data

Message ID 20181217212046.71017-3-bvanassche@acm.org (mailing list archive)
State Accepted
Commit 16d14e01b7a100911804768b3ae4df083da2b53d
Delegated to: Doug Ledford
Headers show
Series Add support for immediate data to the SRP drivers | expand

Commit Message

Bart Van Assche Dec. 17, 2018, 9:20 p.m. UTC
Add constants and data structures to support immediate data. These
changes conform to SRP2r04.

Cc: Sergey Gorenko <sergeygo@mellanox.com>
Cc: Max Gurtovoy <maxg@mellanox.com>
Cc: Laurence Oberman <loberman@redhat.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/infiniband/ulp/srp/ib_srp.c |  5 +++++
 include/scsi/srp.h                  | 19 ++++++++++++++++---
 2 files changed, 21 insertions(+), 3 deletions(-)
diff mbox series

Patch

diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
index eed0eb3bb04c..cff6b69af043 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -4172,6 +4172,11 @@  static int __init srp_init_module(void)
 {
 	int ret;
 
+	BUILD_BUG_ON(sizeof(struct srp_imm_buf) != 4);
+	BUILD_BUG_ON(sizeof(struct srp_login_req) != 64);
+	BUILD_BUG_ON(sizeof(struct srp_login_req_rdma) != 56);
+	BUILD_BUG_ON(sizeof(struct srp_cmd) != 48);
+
 	if (srp_sg_tablesize) {
 		pr_warn("srp_sg_tablesize is deprecated, please use cmd_sg_entries\n");
 		if (!cmd_sg_entries)
diff --git a/include/scsi/srp.h b/include/scsi/srp.h
index 15cb8cf8a604..9220758d5087 100644
--- a/include/scsi/srp.h
+++ b/include/scsi/srp.h
@@ -67,7 +67,8 @@  enum {
 enum {
 	SRP_NO_DATA_DESC	= 0,
 	SRP_DATA_DESC_DIRECT	= 1,
-	SRP_DATA_DESC_INDIRECT	= 2
+	SRP_DATA_DESC_INDIRECT	= 2,
+	SRP_DATA_DESC_IMM	= 3,	/* new in SRP2 */
 };
 
 enum {
@@ -111,9 +112,16 @@  struct srp_indirect_buf {
 	struct srp_direct_buf	desc_list[0];
 } __attribute__((packed));
 
+/* Immediate data buffer descriptor as defined in SRP2. */
+struct srp_imm_buf {
+	__be32	len;
+};
+
+/* srp_login_req.flags */
 enum {
 	SRP_MULTICHAN_SINGLE = 0,
-	SRP_MULTICHAN_MULTI  = 1
+	SRP_MULTICHAN_MULTI  = 1,
+	SRP_IMMED_REQUESTED  = 0x80,	/* new in SRP2 */
 };
 
 struct srp_login_req {
@@ -124,7 +132,9 @@  struct srp_login_req {
 	u8	reserved2[4];
 	__be16	req_buf_fmt;
 	u8	req_flags;
-	u8	reserved3[5];
+	u8	reserved3[1];
+	__be16	imm_data_offset;	/* new in SRP2 */
+	u8	reserved4[2];
 	u8	initiator_port_id[16];
 	u8	target_port_id[16];
 };
@@ -144,6 +154,8 @@  struct srp_login_req_rdma {
 	__be32	req_it_iu_len;
 	u8	initiator_port_id[16];
 	u8	target_port_id[16];
+	__be16	imm_data_offset;
+	u8	reserved[6];
 };
 
 /* srp_login_rsp.rsp_flags */
@@ -151,6 +163,7 @@  enum {
 	SRP_LOGIN_RSP_MULTICHAN_NO_CHAN	   = 0x0,
 	SRP_LOGIN_RSP_MULTICHAN_TERMINATED = 0x1,
 	SRP_LOGIN_RSP_MULTICHAN_MAINTAINED = 0x2,
+	SRP_LOGIN_RSP_IMMED_SUPP	   = 0x80, /* new in SRP2 */
 };
 
 /*