include/scsi/srp.h: Add support for immediate data
authorBart Van Assche <bvanassche@acm.org>
Mon, 17 Dec 2018 21:20:33 +0000 (13:20 -0800)
committerDoug Ledford <dledford@redhat.com>
Wed, 19 Dec 2018 20:07:25 +0000 (15:07 -0500)
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>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/ulp/srp/ib_srp.c
include/scsi/srp.h

index e58146d..abc2098 100644 (file)
@@ -4174,6 +4174,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)
index 15cb8cf..9220758 100644 (file)
@@ -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 */
 };
 
 /*