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' )
#define NULL
NULL pointer (VOID *)
unsigned long long uint64_t
uint8_t lun
Logical Unit Number.
#define __always_inline
Declare a function to be always inline.
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
uint8_t block[3][8]
DES-encrypted blocks.
static __always_inline void * srp_aer_req_sense_data(struct srp_aer_req *aer_req)
Get sense data portion of asynchronous event request.
#define SRP_RSP_VALID_SNSVALID
Sense data list length field is valid.
static const void * srp_rsp_sense_data(const struct srp_rsp *rsp)
Get sense data portion of SCSI response.
uint16_t sbft_off_t
An offset from the start of the sBFT.
#define SRP_RSP_VALID_RSPVALID
Response data list length field is valid.
static size_t srp_rsp_response_data_len(const struct srp_rsp *rsp)
Get length of response data portion of SCSI response.
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.
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.
static const void * srp_rsp_response_data(const struct srp_rsp *rsp)
Get response data portion of SCSI response.
static size_t srp_rsp_sense_data_len(const struct srp_rsp *rsp)
Get length of sense data portion of SCSI response.
union srp_port_id initiator
Initiator port identifier.
union srp_port_id target
Target port identifier.
uint8_t reserved[6]
Reserved.
sbft_off_t srp_offset
Offset to SRP subtable.
sbft_off_t ib_offset
Offset to IB subtable, if present.
sbft_off_t scsi_offset
Offset to SCSI subtable.
struct acpi_header acpi
ACPI header.
An SRP asynchronous event request.
uint8_t type
Information unit type.
uint32_t sense_data_len
Sense data list length.
struct scsi_lun lun
Logical unit number.
uint32_t request_limit_delta
Request limit delta.
uint8_t reserved0[2]
Reserved.
uint8_t reserved2[4]
Reserved.
uint8_t reserved1[4]
Reserved.
An SRP asynchronous event response.
uint8_t reserved0[7]
Reserved.
uint8_t type
Information unit type.
uint8_t data_in_buffer_count
Data-in buffer descriptor count.
uint8_t reserved2[1]
Reserved.
uint8_t task_attr
Task attribute.
uint8_t data_out_buffer_count
Data-out buffer descriptor count.
uint8_t type
Information unit type.
union scsi_cdb cdb
Command data block.
uint8_t reserved3[1]
Reserved.
uint8_t additional_cdb_len
Additional CDB length.
uint8_t reserved1[4]
Reserved.
struct scsi_lun lun
Logical unit number.
uint8_t data_buffer_formats
Data buffer descriptor formats.
uint8_t reserved0[3]
Reserved.
SRP information unit common fields.
uint8_t type
Information unit type.
uint8_t reserved0[7]
Reserved.
uint8_t type
Information unit type.
uint32_t request_limit_delta
Request limit delta.
uint8_t reserved0[2]
Reserved.
uint8_t type
Information unit type.
uint8_t reserved0[7]
Reserved.
An SRP initiator logout request.
uint8_t reserved0[7]
Reserved.
uint8_t type
Information unit type.
uint8_t reserved2[6]
Reserved.
uint8_t type
Information unit type.
uint8_t reserved1[8]
Reserved.
uint16_t supported_buffer_formats
Supported buffer formats.
uint8_t reserved0[3]
Reserved.
An SRP login request information unit.
union srp_port_id target
Target port identifier.
uint16_t required_buffer_formats
Required buffer formats.
uint8_t reserved2[5]
Reserved.
union srp_port_id initiator
Initiator port identifier.
uint8_t type
Information unit type.
uint32_t max_i_t_iu_len
Requested maximum initiator to target IU length.
uint8_t reserved0[7]
Reserved.
uint8_t reserved1[4]
Reserved.
uint8_t type
Information unit type.
uint8_t reserved1[25]
Reserved.
uint8_t reserved0[3]
Reserved.
uint32_t max_t_i_iu_len
Maximum target to initiator IU length.
uint32_t max_i_t_iu_len
Maximum initiator to target IU length.
uint32_t request_limit_delta
Request limit delta.
uint16_t supported_buffer_formats
Supported buffer formats.
An SRP memory descriptor.
uint64_t address
Virtual address.
uint32_t handle
Memory handle.
uint32_t response_data_len
Response data list length.
uint32_t data_out_residual_count
Data-out residual count.
uint8_t reserved0[2]
Reserved.
uint8_t reserved1[2]
Reserved.
uint32_t sense_data_len
Sense data list length.
uint8_t type
Information unit type.
uint32_t request_limit_delta
Request limit delta.
uint32_t data_in_residual_count
Data-in residual count.
uint8_t valid
Valid fields.
An SRP target logout request.
uint8_t reserved0[2]
Reserved.
uint8_t type
Information unit type.
An SRP task management request.
union srp_tag managed_tag
Tag of task to be managed.
uint8_t reserved3[1]
Reserved.
struct scsi_lun lun
Logical unit number.
uint8_t function
Task management function.
uint8_t reserved4[8]
Reserved.
uint8_t reserved2[2]
Reserved.
uint8_t type
Information unit type.
uint8_t reserved1[4]
Reserved.
uint8_t reserved0[6]
Reserved.
A SCSI Command Data Block.
An SRP information unit tag.
Data transfer interfaces.