xref: /dragonfly/sys/dev/disk/isp/isp_stds.h (revision 191d7ec1f1aadafa7feda00a69a351e6a683a8cc)
1 /* $FreeBSD: src/sys/dev/isp/isp_stds.h,v 1.7 2009/09/21 01:41:19 mjacob Exp $ */
2 /*-
3  *  Copyright (c) 1997-2009 by Matthew Jacob
4  *  All rights reserved.
5  *
6  *  Redistribution and use in source and binary forms, with or without
7  *  modification, are permitted provided that the following conditions
8  *  are met:
9  *
10  *  1. Redistributions of source code must retain the above copyright
11  *     notice, this list of conditions and the following disclaimer.
12  *  2. Redistributions in binary form must reproduce the above copyright
13  *     notice, this list of conditions and the following disclaimer in the
14  *     documentation and/or other materials provided with the distribution.
15  *
16  *  THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17  *  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  *  ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
20  *  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21  *  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22  *  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23  *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24  *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25  *  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26  *  SUCH DAMAGE.
27  *
28  */
29 /*
30  * Structures that derive directly from public standards.
31  */
32 #ifndef   _ISP_STDS_H
33 #define   _ISP_STDS_H
34 /*
35  * FC Frame Header
36  *
37  * Source: dpANS-X3.xxx-199x, section 18 (AKA FC-PH-2)
38  *
39  */
40 typedef struct {
41           uint8_t             r_ctl;
42           uint8_t             d_id[3];
43           uint8_t             cs_ctl;
44           uint8_t             s_id[3];
45           uint8_t             type;
46           uint8_t             f_ctl[3];
47           uint8_t             seq_id;
48           uint8_t             df_ctl;
49           uint16_t  seq_cnt;
50           uint16_t  ox_id;
51           uint16_t  rx_id;
52           uint32_t  parameter;
53 } fc_hdr_t;
54 
55 /*
56  * FCP_CMND_IU Payload
57  *
58  * Source: NICTS T10, Project 1144D, Revision 07a, Section 9 (AKA fcp2-r07a)
59  *
60  * Notes:
61  *        When additional cdb length is defined in fcp_cmnd_alen_datadir,
62  *        bits 2..7, the actual cdb length is 16 + ((fcp_cmnd_alen_datadir>>2)*4),
63  *        with the datalength following in MSB format just after.
64  */
65 typedef struct {
66           uint8_t             fcp_cmnd_lun[8];
67           uint8_t             fcp_cmnd_crn;
68           uint8_t             fcp_cmnd_task_attribute;
69           uint8_t             fcp_cmnd_task_management;
70           uint8_t             fcp_cmnd_alen_datadir;
71           union {
72                     struct {
73                               uint8_t             fcp_cmnd_cdb[16];
74                               uint32_t  fcp_cmnd_dl;
75                     } sf;
76                     struct {
77                               uint8_t             fcp_cmnd_cdb[1];
78                     } lf;
79           } cdb_dl;
80 } fcp_cmnd_iu_t;
81 
82 
83 #define   FCP_CMND_TASK_ATTR_SIMPLE     0x00
84 #define   FCP_CMND_TASK_ATTR_HEAD                 0x01
85 #define   FCP_CMND_TASK_ATTR_ORDERED    0x02
86 #define   FCP_CMND_TASK_ATTR_ACA                  0x04
87 #define   FCP_CMND_TASK_ATTR_UNTAGGED   0x05
88 #define   FCP_CMND_TASK_ATTR_MASK                 0x07
89 
90 #define   FCP_CMND_ADDTL_CDBLEN_SHIFT   2
91 
92 #define   FCP_CMND_DATA_WRITE           0x01
93 #define   FCP_CMND_DATA_READ            0x02
94 
95 #define   FCP_CMND_DATA_DIR_MASK                  0x03
96 
97 #define   FCP_CMND_TMF_CLEAR_ACA                  0x40
98 #define   FCP_CMND_TMF_TGT_RESET                  0x20
99 #define   FCP_CMND_TMF_LUN_RESET                  0x10
100 #define   FCP_CMND_TMF_CLEAR_TASK_SET   0x04
101 #define   FCP_CMND_TMF_ABORT_TASK_SET   0x02
102 
103 /*
104  * Basic CT IU Header
105  *
106  * Source: X3.288-199x Generic Services 2 Rev 5.3 (FC-GS-2) Section 4.3.1
107  */
108 
109 typedef struct {
110           uint8_t             ct_revision;
111           uint8_t             ct_in_id[3];
112           uint8_t             ct_fcs_type;
113           uint8_t             ct_fcs_subtype;
114           uint8_t             ct_options;
115           uint8_t             ct_reserved0;
116           uint16_t  ct_cmd_resp;
117           uint16_t  ct_bcnt_resid;
118           uint8_t             ct_reserved1;
119           uint8_t             ct_reason;
120           uint8_t             ct_explanation;
121           uint8_t             ct_vunique;
122 } ct_hdr_t;
123 #define   CT_REVISION                   1
124 #define   CT_FC_TYPE_FC                 0xFC
125 #define CT_FC_SUBTYPE_NS      0x02
126 
127 /*
128  * RFT_ID Requet CT_IU
129  *
130  * Source: NCITS xxx-200x Generic Services- 5 Rev 8.5 Section 5.2.5.30
131  */
132 typedef struct {
133           ct_hdr_t  rftid_hdr;
134           uint8_t             rftid_reserved;
135           uint8_t             rftid_portid[3];
136           uint32_t  rftid_fc4types[8];
137 } rft_id_t;
138 
139 /*
140  * FCP Response IU Bits of interest
141  * Source: NCITS T10, Project 1144D, Revision 08 (aka FCP2r08)
142  */
143 #define   FCP_CONF_REQ                            0x10
144 #define   FCP_RESID_UNDERFLOW           0x08
145 #define   FCP_RESID_OVERFLOW            0x04
146 #define   FCP_SNSLEN_VALID              0x02
147 #define   FCP_RSPLEN_VALID              0x01
148 
149 #define FCP_MAX_RSPLEN                            0x08
150 /*
151  * FCP Response Code Definitions
152  * Source: NCITS T10, Project 1144D, Revision 08 (aka FCP2r08)
153  */
154 #define   FCP_RSPNS_CODE_OFFSET                   3
155 
156 #define   FCP_RSPNS_TMF_DONE            0
157 #define   FCP_RSPNS_DLBRSTX             1
158 #define   FCP_RSPNS_BADCMND             2
159 #define   FCP_RSPNS_EROFS                         3
160 #define   FCP_RSPNS_TMF_REJECT                    4
161 #define   FCP_RSPNS_TMF_FAILED                    5
162 #define   FCP_RSPNS_TMF_SUCCEEDED                 8
163 #define   FCP_RSPNS_TMF_INCORRECT_LUN   9
164 
165 
166 /* unconverted miscellany */
167 /*
168  * Basic FC Link Service defines
169  */
170 /*
171  * These are in the R_CTL field.
172  */
173 #define   ABTS                          0x81
174 #define   BA_ACC                        0x84      /* of ABORT SEQUENCE */
175 #define   BA_RJT                        0x85      /* of ABORT SEQUENCE */
176 
177 /*
178  * Link Service Accept/Reject
179  */
180 #define   LS_ACC                        0x8002
181 #define   LS_RJT                        0x8001
182 
183 /*
184  * FC ELS Codes- bits 31-24 of the first payload word of an ELS frame.
185  */
186 #define   PLOGI                         0x03
187 #define   FLOGI                         0x04
188 #define   LOGO                          0x05
189 #define   ABTX                          0x06
190 #define   PRLI                          0x20
191 #define   PRLO                          0x21
192 #define   SCN                           0x22
193 #define   TPRLO                         0x24
194 #define   PDISC                         0x50
195 #define   ADISC                         0x52
196 #define   RNC                           0x53
197 
198 /*
199  * FC4 defines
200  */
201 #define   FC4_IP              5         /* ISO/EEC 8802-2 LLC/SNAP */
202 #define   FC4_SCSI  8         /* SCSI-3 via Fibre Channel Protocol (FCP) */
203 #define   FC4_FC_SVC          0x20      /* Fibre Channel Services */
204 
205 #ifndef   MSG_ABORT
206 #define   MSG_ABORT           0x06
207 #endif
208 #ifndef   MSG_BUS_DEV_RESET
209 #define   MSG_BUS_DEV_RESET   0x0c
210 #endif
211 #ifndef   MSG_ABORT_TAG
212 #define   MSG_ABORT_TAG                 0x0d
213 #endif
214 #ifndef   MSG_CLEAR_QUEUE
215 #define   MSG_CLEAR_QUEUE               0x0e
216 #endif
217 #ifndef   MSG_REL_RECOVERY
218 #define   MSG_REL_RECOVERY    0x10
219 #endif
220 #ifndef   MSG_TERM_IO_PROC
221 #define   MSG_TERM_IO_PROC    0x11
222 #endif
223 #ifndef   MSG_LUN_RESET
224 #define   MSG_LUN_RESET                 0x17
225 #endif
226 
227 #endif    /* _ISP_STDS_H */
228