228 lines
5.4 KiB
C
228 lines
5.4 KiB
C
/*****************************************************************************/
|
|
/* srp.h -- SCSI RDMA Protocol definitions */
|
|
/* */
|
|
/* Written By: Colin Devilbis, IBM Corporation */
|
|
/* */
|
|
/* Copyright (C) 2003 IBM Corporation */
|
|
/* */
|
|
/* This program is free software; you can redistribute it and/or modify */
|
|
/* it under the terms of the GNU General Public License as published by */
|
|
/* the Free Software Foundation; either version 2 of the License, or */
|
|
/* (at your option) any later version. */
|
|
/* */
|
|
/* This program is distributed in the hope that it will be useful, */
|
|
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
|
|
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
|
|
/* GNU General Public License for more details. */
|
|
/* */
|
|
/* You should have received a copy of the GNU General Public License */
|
|
/* along with this program; if not, write to the Free Software */
|
|
/* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
|
/* */
|
|
/* */
|
|
/* This file contains structures and definitions for the SCSI RDMA Protocol */
|
|
/* (SRP) as defined in the T10 standard available at www.t10.org. This */
|
|
/* file was based on the 16a version of the standard */
|
|
/* */
|
|
/*****************************************************************************/
|
|
#ifndef SRP_H
|
|
#define SRP_H
|
|
|
|
#define SRP_VERSION "16.a"
|
|
|
|
#define PACKED __attribute__((packed))
|
|
|
|
enum srp_types {
|
|
SRP_LOGIN_REQ_TYPE = 0x00,
|
|
SRP_LOGIN_RSP_TYPE = 0xC0,
|
|
SRP_LOGIN_REJ_TYPE = 0xC2,
|
|
SRP_I_LOGOUT_TYPE = 0x03,
|
|
SRP_T_LOGOUT_TYPE = 0x80,
|
|
SRP_TSK_MGMT_TYPE = 0x01,
|
|
SRP_CMD_TYPE = 0x02,
|
|
SRP_RSP_TYPE = 0xC1,
|
|
SRP_CRED_REQ_TYPE = 0x81,
|
|
SRP_CRED_RSP_TYPE = 0x41,
|
|
SRP_AER_REQ_TYPE = 0x82,
|
|
SRP_AER_RSP_TYPE = 0x42
|
|
};
|
|
|
|
enum srp_descriptor_formats {
|
|
SRP_NO_BUFFER = 0x00,
|
|
SRP_DIRECT_BUFFER = 0x01,
|
|
SRP_INDIRECT_BUFFER = 0x02
|
|
};
|
|
|
|
struct memory_descriptor {
|
|
u64 virtual_address;
|
|
u32 memory_handle;
|
|
u32 length;
|
|
};
|
|
|
|
struct indirect_descriptor {
|
|
struct memory_descriptor head;
|
|
u32 total_length;
|
|
struct memory_descriptor list[1] PACKED;
|
|
};
|
|
|
|
struct srp_generic {
|
|
u8 type;
|
|
u8 reserved1[7];
|
|
u64 tag;
|
|
};
|
|
|
|
struct srp_login_req {
|
|
u8 type;
|
|
u8 reserved1[7];
|
|
u64 tag;
|
|
u32 max_requested_initiator_to_target_iulen;
|
|
u32 reserved2;
|
|
u16 required_buffer_formats;
|
|
u8 reserved3:6;
|
|
u8 multi_channel_action:2;
|
|
u8 reserved4;
|
|
u32 reserved5;
|
|
u8 initiator_port_identifier[16];
|
|
u8 target_port_identifier[16];
|
|
};
|
|
|
|
struct srp_login_rsp {
|
|
u8 type;
|
|
u8 reserved1[3];
|
|
u32 request_limit_delta;
|
|
u64 tag;
|
|
u32 max_initiator_to_target_iulen;
|
|
u32 max_target_to_initiator_iulen;
|
|
u16 supported_buffer_formats;
|
|
u8 reserved2:6;
|
|
u8 multi_channel_result:2;
|
|
u8 reserved3;
|
|
u8 reserved4[24];
|
|
};
|
|
|
|
struct srp_login_rej {
|
|
u8 type;
|
|
u8 reserved1[3];
|
|
u32 reason;
|
|
u64 tag;
|
|
u64 reserved2;
|
|
u16 supported_buffer_formats;
|
|
u8 reserved3[6];
|
|
};
|
|
|
|
struct srp_i_logout {
|
|
u8 type;
|
|
u8 reserved1[7];
|
|
u64 tag;
|
|
};
|
|
|
|
struct srp_t_logout {
|
|
u8 type;
|
|
u8 reserved1[3];
|
|
u32 reason;
|
|
u64 tag;
|
|
};
|
|
|
|
struct srp_tsk_mgmt {
|
|
u8 type;
|
|
u8 reserved1[7];
|
|
u64 tag;
|
|
u32 reserved2;
|
|
u64 lun PACKED;
|
|
u8 reserved3;
|
|
u8 reserved4;
|
|
u8 task_mgmt_flags;
|
|
u8 reserved5;
|
|
u64 managed_task_tag;
|
|
u64 reserved6;
|
|
};
|
|
|
|
struct srp_cmd {
|
|
u8 type;
|
|
u32 reserved1 PACKED;
|
|
u8 data_out_format:4;
|
|
u8 data_in_format:4;
|
|
u8 data_out_count;
|
|
u8 data_in_count;
|
|
u64 tag;
|
|
u32 reserved2;
|
|
u64 lun PACKED;
|
|
u8 reserved3;
|
|
u8 reserved4:5;
|
|
u8 task_attribute:3;
|
|
u8 reserved5;
|
|
u8 additional_cdb_len;
|
|
u8 cdb[16];
|
|
u8 additional_data[0x100 - 0x30];
|
|
};
|
|
|
|
struct srp_rsp {
|
|
u8 type;
|
|
u8 reserved1[3];
|
|
u32 request_limit_delta;
|
|
u64 tag;
|
|
u16 reserved2;
|
|
u8 reserved3:2;
|
|
u8 diunder:1;
|
|
u8 diover:1;
|
|
u8 dounder:1;
|
|
u8 doover:1;
|
|
u8 snsvalid:1;
|
|
u8 rspvalid:1;
|
|
u8 status;
|
|
u32 data_in_residual_count;
|
|
u32 data_out_residual_count;
|
|
u32 sense_data_list_length;
|
|
u32 response_data_list_length;
|
|
u8 sense_and_response_data[18];
|
|
};
|
|
|
|
struct srp_cred_req {
|
|
u8 type;
|
|
u8 reserved1[3];
|
|
u32 request_limit_delta;
|
|
u64 tag;
|
|
};
|
|
|
|
struct srp_cred_rsp {
|
|
u8 type;
|
|
u8 reserved1[7];
|
|
u64 tag;
|
|
};
|
|
|
|
struct srp_aer_req {
|
|
u8 type;
|
|
u8 reserved1[3];
|
|
u32 request_limit_delta;
|
|
u64 tag;
|
|
u32 reserved2;
|
|
u64 lun;
|
|
u32 sense_data_list_length;
|
|
u32 reserved3;
|
|
u8 sense_data[20];
|
|
};
|
|
|
|
struct srp_aer_rsp {
|
|
u8 type;
|
|
u8 reserved1[7];
|
|
u64 tag;
|
|
};
|
|
|
|
union srp_iu {
|
|
struct srp_generic generic;
|
|
struct srp_login_req login_req;
|
|
struct srp_login_rsp login_rsp;
|
|
struct srp_login_rej login_rej;
|
|
struct srp_i_logout i_logout;
|
|
struct srp_t_logout t_logout;
|
|
struct srp_tsk_mgmt tsk_mgmt;
|
|
struct srp_cmd cmd;
|
|
struct srp_rsp rsp;
|
|
struct srp_cred_req cred_req;
|
|
struct srp_cred_rsp cred_rsp;
|
|
struct srp_aer_req aer_req;
|
|
struct srp_aer_rsp aer_rsp;
|
|
};
|
|
|
|
#endif
|