.. | .. |
---|
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 { |
---|