Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 | /* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright(c) 2007 Intel Corporation. All rights reserved. * * Maintained at www.Open-FCoE.org */ #ifndef _FC_FCP_H_ #define _FC_FCP_H_ #include <scsi/scsi.h> /* * Fibre Channel Protocol for SCSI. * From T10 FCP-3, T10 project 1560-D Rev 4, Sept. 13, 2005. */ /* * fc/fs.h defines FC_TYPE_FCP. */ /* * Service parameter page parameters (word 3 bits) for Process Login. */ #define FCP_SPPF_TASK_RETRY_ID 0x0200 /* task retry ID requested */ #define FCP_SPPF_RETRY 0x0100 /* retry supported */ #define FCP_SPPF_CONF_COMPL 0x0080 /* confirmed completion allowed */ #define FCP_SPPF_OVLY_ALLOW 0x0040 /* data overlay allowed */ #define FCP_SPPF_INIT_FCN 0x0020 /* initiator function */ #define FCP_SPPF_TARG_FCN 0x0010 /* target function */ #define FCP_SPPF_RD_XRDY_DIS 0x0002 /* disable XFER_RDY for reads */ #define FCP_SPPF_WR_XRDY_DIS 0x0001 /* disable XFER_RDY for writes */ /* * FCP_CMND IU Payload. */ struct fcp_cmnd { struct scsi_lun fc_lun; /* logical unit number */ __u8 fc_cmdref; /* command reference number */ __u8 fc_pri_ta; /* priority and task attribute */ __u8 fc_tm_flags; /* task management flags */ __u8 fc_flags; /* additional len & flags */ __u8 fc_cdb[16]; /* base CDB */ __be32 fc_dl; /* data length (must follow fc_cdb) */ }; #define FCP_CMND_LEN 32 /* expected length of structure */ struct fcp_cmnd32 { struct scsi_lun fc_lun; /* logical unit number */ __u8 fc_cmdref; /* command reference number */ __u8 fc_pri_ta; /* priority and task attribute */ __u8 fc_tm_flags; /* task management flags */ __u8 fc_flags; /* additional len & flags */ __u8 fc_cdb[32]; /* base CDB */ __be32 fc_dl; /* data length (must follow fc_cdb) */ }; #define FCP_CMND32_LEN 48 /* expected length of structure */ #define FCP_CMND32_ADD_LEN (16 / 4) /* Additional cdb length */ /* * fc_pri_ta. */ #define FCP_PTA_SIMPLE 0 /* simple task attribute */ #define FCP_PTA_HEADQ 1 /* head of queue task attribute */ #define FCP_PTA_ORDERED 2 /* ordered task attribute */ #define FCP_PTA_ACA 4 /* auto. contingent allegiance */ #define FCP_PTA_MASK 7 /* mask for task attribute field */ #define FCP_PRI_SHIFT 3 /* priority field starts in bit 3 */ #define FCP_PRI_RESVD_MASK 0x80 /* reserved bits in priority field */ /* * fc_tm_flags - task management flags field. */ #define FCP_TMF_CLR_ACA 0x40 /* clear ACA condition */ #define FCP_TMF_TGT_RESET 0x20 /* target reset task management, deprecated as of FCP-3 */ #define FCP_TMF_LUN_RESET 0x10 /* logical unit reset task management */ #define FCP_TMF_CLR_TASK_SET 0x04 /* clear task set */ #define FCP_TMF_ABT_TASK_SET 0x02 /* abort task set */ /* * fc_flags. * Bits 7:2 are the additional FCP_CDB length / 4. */ #define FCP_CFL_LEN_MASK 0xfc /* mask for additional length */ #define FCP_CFL_LEN_SHIFT 2 /* shift bits for additional length */ #define FCP_CFL_RDDATA 0x02 /* read data */ #define FCP_CFL_WRDATA 0x01 /* write data */ /* * FCP_TXRDY IU - transfer ready payload. */ struct fcp_txrdy { __be32 ft_data_ro; /* data relative offset */ __be32 ft_burst_len; /* burst length */ __u8 _ft_resvd[4]; /* reserved */ }; #define FCP_TXRDY_LEN 12 /* expected length of structure */ /* * FCP_RESP IU - response payload. * * The response payload comes in three parts: the flags/status, the * sense/response lengths and the sense data/response info section. * * From FCP3r04, note 6 of section 9.5.13: * * Some early implementations presented the FCP_RSP IU without the FCP_RESID, * FCP_SNS_LEN, and FCP_RSP_LEN fields if the FCP_RESID_UNDER, FCP_RESID_OVER, * FCP_SNS_LEN_VALID, and FCP_RSP_LEN_VALID bits were all set to zero. This * non-standard behavior should be tolerated. * * All response frames will always contain the fcp_resp template. Some * will also include the fcp_resp_len template. * * From Table 23, the FCP_RSP_INFO can either be 4 bytes or 8 bytes, both * are valid length. */ struct fcp_resp { __u8 _fr_resvd[8]; /* reserved */ __be16 fr_retry_delay; /* retry delay timer */ __u8 fr_flags; /* flags */ __u8 fr_status; /* SCSI status code */ }; #define FCP_RESP_LEN 12 /* expected length of structure */ struct fcp_resp_ext { __be32 fr_resid; /* Residual value */ __be32 fr_sns_len; /* SCSI Sense length */ __be32 fr_rsp_len; /* Response Info length */ /* * Optionally followed by RSP info and/or SNS info and/or * bidirectional read residual length, if any. */ }; #define FCP_RESP_EXT_LEN 12 /* expected length of the structure */ struct fcp_resp_rsp_info { __u8 _fr_resvd[3]; /* reserved */ __u8 rsp_code; /* Response Info Code */ __u8 _fr_resvd2[4]; /* reserved */ }; #define FCP_RESP_RSP_INFO_LEN4 4 /* without reserved field */ #define FCP_RESP_RSP_INFO_LEN8 8 /* with reserved field */ struct fcp_resp_with_ext { struct fcp_resp resp; struct fcp_resp_ext ext; }; #define FCP_RESP_WITH_EXT (FCP_RESP_LEN + FCP_RESP_EXT_LEN) /* * fr_flags. */ #define FCP_BIDI_RSP 0x80 /* bidirectional read response */ #define FCP_BIDI_READ_UNDER 0x40 /* bidir. read less than requested */ #define FCP_BIDI_READ_OVER 0x20 /* DL insufficient for full transfer */ #define FCP_CONF_REQ 0x10 /* confirmation requested */ #define FCP_RESID_UNDER 0x08 /* transfer shorter than expected */ #define FCP_RESID_OVER 0x04 /* DL insufficient for full transfer */ #define FCP_SNS_LEN_VAL 0x02 /* SNS_LEN field is valid */ #define FCP_RSP_LEN_VAL 0x01 /* RSP_LEN field is valid */ /* * rsp_codes */ enum fcp_resp_rsp_codes { FCP_TMF_CMPL = 0, FCP_DATA_LEN_INVALID = 1, FCP_CMND_FIELDS_INVALID = 2, FCP_DATA_PARAM_MISMATCH = 3, FCP_TMF_REJECTED = 4, FCP_TMF_FAILED = 5, FCP_TMF_INVALID_LUN = 9, }; /* * FCP SRR Link Service request - Sequence Retransmission Request. */ struct fcp_srr { __u8 srr_op; /* opcode ELS_SRR */ __u8 srr_resvd[3]; /* opcode / reserved - must be zero */ __be16 srr_ox_id; /* OX_ID of failed command */ __be16 srr_rx_id; /* RX_ID of failed command */ __be32 srr_rel_off; /* relative offset */ __u8 srr_r_ctl; /* r_ctl for the information unit */ __u8 srr_resvd2[3]; /* reserved */ }; /* * Feature bits in name server FC-4 Features object. */ #define FCP_FEAT_TARG (1 << 0) /* target function supported */ #define FCP_FEAT_INIT (1 << 1) /* initiator function supported */ #endif /* _FC_FCP_H_ */ |