34 #define SRP_TAG_MAGIC 0x69505845 96 #define SRP_LOGIN_REQ 0x00 99 #define SRP_LOGIN_REQ_FMT_IDBD 0x04 102 #define SRP_LOGIN_REQ_FMT_DDBD 0x02 105 #define SRP_LOGIN_REQ_FLAG_AESOLNT 0x40 108 #define SRP_LOGIN_REQ_FLAG_CRSOLNT 0x20 111 #define SRP_LOGIN_REQ_FLAG_LOSOLNT 0x10 114 #define SRP_LOGIN_REQ_MCA_MASK 0x03 117 #define SRP_LOGIN_REQ_MCA_SINGLE_CHANNEL 0x00 120 #define SRP_LOGIN_REQ_MCA_MULTIPLE_CHANNELS 0x01 164 #define SRP_LOGIN_RSP 0xc0 167 #define SRP_LOGIN_RSP_FMT_IDBD 0x04 170 #define SRP_LOGIN_RSP_FMT_DDBD 0x02 173 #define SRP_LOGIN_RSP_FLAG_SOLNTSUP 0x10 176 #define SRP_LOGIN_RSP_MCR_MASK 0x03 179 #define SRP_LOGIN_RSP_MCR_NO_EXISTING_CHANNELS 0x00 182 #define SRP_LOGIN_RSP_MCR_EXISTING_CHANNELS_TERMINATED 0x01 185 #define SRP_LOGIN_RSP_MCR_EXISTING_CHANNELS_CONTINUE 0x02 223 #define SRP_LOGIN_REJ 0xc2 226 #define SRP_LOGIN_REJ_REASON_UNKNOWN 0x00010000UL 229 #define SRP_LOGIN_REJ_REASON_INSUFFICIENT_RESOURCES 0x00010001UL 232 #define SRP_LOGIN_REJ_REASON_BAD_MAX_I_T_IU_LEN 0x00010002UL 235 #define SRP_LOGIN_REJ_REASON_CANNOT_ASSOCIATE 0x00010003UL 238 #define SRP_LOGIN_REJ_REASON_UNSUPPORTED_BUFFER_FORMAT 0x00010004UL 241 #define SRP_LOGIN_REJ_REASON_NO_MULTIPLE_CHANNELS 0x00010005UL 244 #define SRP_LOGIN_REJ_REASON_NO_MORE_CHANNELS 0x00010006UL 247 #define SRP_LOGIN_REJ_REASON_DEFINED( reason ) \ 248 ( ( (reason) & 0xfffffff0UL ) == 0x00010000UL ) 251 #define SRP_LOGIN_REJ_FMT_IDBD 0x04 254 #define SRP_LOGIN_REJ_FMT_DDBD 0x02 277 #define SRP_I_LOGOUT 0x03 311 #define SRP_T_LOGOUT 0x80 314 #define SRP_T_LOGOUT_FLAG_SOLNT 0x01 317 #define SRP_T_LOGOUT_REASON_UNKNOWN 0x00000000UL 320 #define SRP_T_LOGOUT_REASON_INACTIVE 0x00000001UL 323 #define SRP_T_LOGOUT_REASON_INVALID_TYPE 0x00000002UL 326 #define SRP_T_LOGOUT_REASON_SPURIOUS_RESPONSE 0x00000003UL 329 #define SRP_T_LOGOUT_REASON_MCA 0x00000004UL 332 #define SRP_T_LOGOUT_UNSUPPORTED_DATA_OUT_FORMAT 0x00000005UL 335 #define SRP_T_LOGOUT_UNSUPPORTED_DATA_IN_FORMAT 0x00000006UL 338 #define SRP_T_LOGOUT_INVALID_IU_LEN 0x00000008UL 384 #define SRP_TSK_MGMT 0x01 387 #define SRP_TSK_MGMT_FLAG_UCSOLNT 0x04 390 #define SRP_TSK_MGMT_FLAG_SCSOLNT 0x02 393 #define SRP_TSK_MGMT_FUNC_ABORT_TASK 0x01 396 #define SRP_TSK_MGMT_FUNC_ABORT_TASK_SET 0x02 399 #define SRP_TSK_MGMT_FUNC_CLEAR_TASK_SET 0x04 402 #define SRP_TSK_MGMT_FUNC_LOGICAL_UNIT_RESET 0x08 405 #define SRP_TSK_MGMT_FUNC_CLEAR_ACA 0x40 464 #define SRP_CMD_FLAG_UCSOLNT 0x04 467 #define SRP_CMD_FLAG_SCSOLNT 0x02 470 #define SRP_CMD_DO_FMT_MASK 0xf0 473 #define SRP_CMD_DO_FMT_DIRECT 0x10 476 #define SRP_CMD_DO_FMT_INDIRECT 0x20 479 #define SRP_CMD_DI_FMT_MASK 0x0f 482 #define SRP_CMD_DI_FMT_DIRECT 0x01 485 #define SRP_CMD_DI_FMT_INDIRECT 0x02 488 #define SRP_CMD_TASK_ATTR_SIMPLE 0x00 491 #define SRP_CMD_TASK_ATTR_QUEUE_HEAD 0x01 494 #define SRP_CMD_TASK_ATTR_ORDERED 0x02 497 #define SRP_CMD_TASK_ATTR_AUTOMATIC_CONTINGENT_ALLEGIANCE 0x08 562 #define SRP_RSP_FLAG_SOLNT 0x01 565 #define SRP_RSP_VALID_DIUNDER 0x20 568 #define SRP_RSP_VALID_DIOVER 0x10 571 #define SRP_RSP_VALID_DOUNDER 0x08 574 #define SRP_RSP_VALID_DOOVER 0x04 577 #define SRP_RSP_VALID_SNSVALID 0x02 580 #define SRP_RSP_VALID_RSPVALID 0x01 590 ( ( (
const void * )
rsp ) + sizeof ( *
rsp ) ) :
NULL );
601 ntohl (
rsp->response_data_len ) : 0 );
612 ( ( (
const void * )
rsp ) + sizeof ( *
rsp ) +
624 ntohl (
rsp->sense_data_len ) : 0 );
656 #define SRP_CRED_REQ 0x81 659 #define SRP_CRED_REQ_FLAG_SOLNT 0x01 682 #define SRP_CRED_RSP 0x41 721 #define SRP_AER_REQ 0x82 724 #define SRP_AER_REQ_FLAG_SOLNT 0x01 734 return ( ( (
void * ) aer_req ) +
sizeof ( *aer_req ) );
769 #define SRP_AER_RSP 0x42 784 #define SBFT_SIG ACPI_SIGNATURE ( 's', 'B', 'F', 'T' )
An SRP asynchronous event response.
union srp_port_id initiator
Initiator port identifier.
static __always_inline size_t srp_aer_req_sense_data_len(struct srp_aer_req *aer_req)
Get length of sense data portion of asynchronous event request.
uint8_t type
Information unit type.
uint8_t reserved0[6]
Reserved.
uint16_t supported_buffer_formats
Supported buffer formats.
SRP information unit common fields.
An SRP login request information unit.
An SRP asynchronous event request.
uint8_t reserved1[4]
Reserved.
union srp_port_id initiator
Initiator port identifier.
uint32_t max_t_i_iu_len
Maximum target to initiator IU length.
union srp_tag managed_tag
Tag of task to be managed.
uint64_t address
Virtual address.
uint32_t data_in_residual_count
Data-in residual count.
uint32_t request_limit_delta
Request limit delta.
uint8_t reserved0[7]
Reserved.
uint8_t valid
Valid fields.
uint8_t reserved0[3]
Reserved.
uint8_t reserved0[7]
Reserved.
uint8_t type
Information unit type.
uint8_t type
Information unit type.
#define SRP_RSP_VALID_SNSVALID
Sense data list length field is valid.
static const void * srp_rsp_response_data(const struct srp_rsp *rsp)
Get response data portion of SCSI response.
union srp_port_id target
Target port identifier.
uint32_t request_limit_delta
Request limit delta.
uint8_t task_attr
Task attribute.
unsigned long long uint64_t
uint32_t sense_data_len
Sense data list length.
uint8_t reserved2[4]
Reserved.
uint8_t type
Information unit type.
An SRP target logout request.
uint8_t type
Information unit type.
An SRP initiator logout request.
uint8_t type
Information unit type.
uint8_t reserved0[7]
Reserved.
Data transfer interfaces.
uint8_t reserved3[1]
Reserved.
struct acpi_header acpi
ACPI header.
uint8_t reserved2[1]
Reserved.
uint8_t reserved[6]
Reserved.
static size_t srp_rsp_sense_data_len(const struct srp_rsp *rsp)
Get length of sense data portion of SCSI response.
struct scsi_lun lun
Logical unit number.
uint8_t reserved1[2]
Reserved.
uint8_t reserved2[6]
Reserved.
uint32_t max_i_t_iu_len
Maximum initiator to target IU length.
uint8_t reserved0[2]
Reserved.
uint8_t data_out_buffer_count
Data-out buffer descriptor count.
uint8_t lun
Logical Unit Number.
uint8_t reserved0[2]
Reserved.
uint32_t handle
Memory handle.
static size_t srp_rsp_response_data_len(const struct srp_rsp *rsp)
Get length of response data portion of SCSI response.
uint8_t reserved3[1]
Reserved.
#define __always_inline
Declare a function to be always inline.
union scsi_cdb cdb
Command data block.
static __always_inline void * srp_aer_req_sense_data(struct srp_aer_req *aer_req)
Get sense data portion of asynchronous event request.
union srp_port_id target
Target port identifier.
uint16_t required_buffer_formats
Required buffer formats.
uint8_t type
Information unit type.
sbft_off_t ib_offset
Offset to IB subtable, if present.
A SCSI Command Data Block.
int srp_open(struct interface *block, struct interface *socket, union srp_port_id *initiator, union srp_port_id *target, uint32_t memory_handle, struct scsi_lun *lun)
Open SRP device.
uint32_t response_data_len
Response data list length.
uint8_t reserved0[2]
Reserved.
uint8_t type
Information unit type.
uint8_t reserved4[8]
Reserved.
uint8_t type
Information unit type.
uint8_t type
Information unit type.
uint16_t supported_buffer_formats
Supported buffer formats.
uint8_t reserved2[2]
Reserved.
sbft_off_t scsi_offset
Offset to SCSI subtable.
uint8_t block[3][8]
DES-encrypted blocks.
uint8_t additional_cdb_len
Additional CDB length.
uint8_t reserved0[7]
Reserved.
uint8_t type
Information unit type.
uint8_t reserved1[25]
Reserved.
uint8_t reserved0[3]
Reserved.
An SRP memory descriptor.
uint32_t request_limit_delta
Request limit delta.
uint32_t data_out_residual_count
Data-out residual count.
An SRP task management request.
uint8_t reserved1[4]
Reserved.
uint32_t sense_data_len
Sense data list length.
uint8_t reserved2[5]
Reserved.
uint8_t type
Information unit type.
uint8_t reserved0[3]
Reserved.
struct scsi_lun lun
Logical unit number.
uint8_t data_buffer_formats
Data buffer descriptor formats.
uint8_t reserved1[4]
Reserved.
struct scsi_lun lun
Logical unit number.
uint8_t reserved1[8]
Reserved.
uint32_t request_limit_delta
Request limit delta.
An SRP information unit tag.
uint8_t data_in_buffer_count
Data-in buffer descriptor count.
uint32_t max_i_t_iu_len
Requested maximum initiator to target IU length.
#define NULL
NULL pointer (VOID *)
sbft_off_t srp_offset
Offset to SRP subtable.
uint8_t reserved1[4]
Reserved.
uint8_t reserved0[7]
Reserved.
#define SRP_RSP_VALID_RSPVALID
Response data list length field is valid.
uint8_t reserved0[2]
Reserved.
static const void * srp_rsp_sense_data(const struct srp_rsp *rsp)
Get sense data portion of SCSI response.
uint8_t type
Information unit type.
uint16_t sbft_off_t
An offset from the start of the sBFT.