| .. | .. |
|---|
| 67 | 67 | enum { |
|---|
| 68 | 68 | SRP_NO_DATA_DESC = 0, |
|---|
| 69 | 69 | SRP_DATA_DESC_DIRECT = 1, |
|---|
| 70 | | - SRP_DATA_DESC_INDIRECT = 2 |
|---|
| 70 | + SRP_DATA_DESC_INDIRECT = 2, |
|---|
| 71 | + SRP_DATA_DESC_IMM = 3, /* new in SRP2 */ |
|---|
| 71 | 72 | }; |
|---|
| 72 | 73 | |
|---|
| 73 | 74 | enum { |
|---|
| .. | .. |
|---|
| 108 | 109 | struct srp_indirect_buf { |
|---|
| 109 | 110 | struct srp_direct_buf table_desc; |
|---|
| 110 | 111 | __be32 len; |
|---|
| 111 | | - struct srp_direct_buf desc_list[0]; |
|---|
| 112 | + struct srp_direct_buf desc_list[]; |
|---|
| 112 | 113 | } __attribute__((packed)); |
|---|
| 113 | 114 | |
|---|
| 115 | +/* Immediate data buffer descriptor as defined in SRP2. */ |
|---|
| 116 | +struct srp_imm_buf { |
|---|
| 117 | + __be32 len; |
|---|
| 118 | +}; |
|---|
| 119 | + |
|---|
| 120 | +/* srp_login_req.flags */ |
|---|
| 114 | 121 | enum { |
|---|
| 115 | 122 | SRP_MULTICHAN_SINGLE = 0, |
|---|
| 116 | | - SRP_MULTICHAN_MULTI = 1 |
|---|
| 123 | + SRP_MULTICHAN_MULTI = 1, |
|---|
| 124 | + SRP_IMMED_REQUESTED = 0x80, /* new in SRP2 */ |
|---|
| 117 | 125 | }; |
|---|
| 118 | 126 | |
|---|
| 119 | 127 | struct srp_login_req { |
|---|
| .. | .. |
|---|
| 124 | 132 | u8 reserved2[4]; |
|---|
| 125 | 133 | __be16 req_buf_fmt; |
|---|
| 126 | 134 | u8 req_flags; |
|---|
| 127 | | - u8 reserved3[5]; |
|---|
| 135 | + u8 reserved3[1]; |
|---|
| 136 | + __be16 imm_data_offset; /* new in SRP2 */ |
|---|
| 137 | + u8 reserved4[2]; |
|---|
| 128 | 138 | u8 initiator_port_id[16]; |
|---|
| 129 | 139 | u8 target_port_id[16]; |
|---|
| 130 | 140 | }; |
|---|
| .. | .. |
|---|
| 144 | 154 | __be32 req_it_iu_len; |
|---|
| 145 | 155 | u8 initiator_port_id[16]; |
|---|
| 146 | 156 | u8 target_port_id[16]; |
|---|
| 157 | + __be16 imm_data_offset; |
|---|
| 158 | + u8 reserved[6]; |
|---|
| 159 | +}; |
|---|
| 160 | + |
|---|
| 161 | +/* srp_login_rsp.rsp_flags */ |
|---|
| 162 | +enum { |
|---|
| 163 | + SRP_LOGIN_RSP_MULTICHAN_NO_CHAN = 0x0, |
|---|
| 164 | + SRP_LOGIN_RSP_MULTICHAN_TERMINATED = 0x1, |
|---|
| 165 | + SRP_LOGIN_RSP_MULTICHAN_MAINTAINED = 0x2, |
|---|
| 166 | + SRP_LOGIN_RSP_IMMED_SUPP = 0x80, /* new in SRP2 */ |
|---|
| 147 | 167 | }; |
|---|
| 148 | 168 | |
|---|
| 149 | 169 | /* |
|---|
| .. | .. |
|---|
| 224 | 244 | u8 reserved4; |
|---|
| 225 | 245 | u8 add_cdb_len; |
|---|
| 226 | 246 | u8 cdb[16]; |
|---|
| 227 | | - u8 add_data[0]; |
|---|
| 247 | + u8 add_data[]; |
|---|
| 228 | 248 | }; |
|---|
| 229 | 249 | |
|---|
| 230 | 250 | enum { |
|---|
| .. | .. |
|---|
| 254 | 274 | __be32 data_in_res_cnt; |
|---|
| 255 | 275 | __be32 sense_data_len; |
|---|
| 256 | 276 | __be32 resp_data_len; |
|---|
| 257 | | - u8 data[0]; |
|---|
| 277 | + u8 data[]; |
|---|
| 258 | 278 | } __attribute__((packed)); |
|---|
| 259 | 279 | |
|---|
| 260 | 280 | struct srp_cred_req { |
|---|
| .. | .. |
|---|
| 286 | 306 | struct scsi_lun lun; |
|---|
| 287 | 307 | __be32 sense_data_len; |
|---|
| 288 | 308 | u32 reserved3; |
|---|
| 289 | | - u8 sense_data[0]; |
|---|
| 309 | + u8 sense_data[]; |
|---|
| 290 | 310 | } __attribute__((packed)); |
|---|
| 291 | 311 | |
|---|
| 292 | 312 | struct srp_aer_rsp { |
|---|