xref: /freebsd/sys/dev/isci/scil/sati_mode_pages.c (revision 193d9e768ba63fcfb187cfd17f461f7d41345048)
1 /*-
2  * This file is provided under a dual BSD/GPLv2 license.  When using or
3  * redistributing this file, you may do so under either license.
4  *
5  * GPL LICENSE SUMMARY
6  *
7  * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of version 2 of the GNU General Public License as
11  * published by the Free Software Foundation.
12  *
13  * This program is distributed in the hope that it will be useful, but
14  * WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
21  * The full GNU General Public License is included in this distribution
22  * in the file called LICENSE.GPL.
23  *
24  * BSD LICENSE
25  *
26  * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
27  * All rights reserved.
28  *
29  * Redistribution and use in source and binary forms, with or without
30  * modification, are permitted provided that the following conditions
31  * are met:
32  *
33  *   * Redistributions of source code must retain the above copyright
34  *     notice, this list of conditions and the following disclaimer.
35  *   * Redistributions in binary form must reproduce the above copyright
36  *     notice, this list of conditions and the following disclaimer in
37  *     the documentation and/or other materials provided with the
38  *     distribution.
39  *
40  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
41  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
42  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
43  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
44  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
45  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
46  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
47  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
48  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
49  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
50  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
51  */
52 
53 #include <sys/cdefs.h>
54 __FBSDID("$FreeBSD$");
55 
56 /**
57  * @file
58  * @brief This file contains the mode page constants and data for the mode
59  *        pages supported by this translation implementation.
60  */
61 
62 // DO NOT MOVE THIS INCLUDE STATEMENT! This include must occur before
63 // the below check for ENABLE_SATI_MODE_PAGES.
64 #include <dev/isci/scil/sati_types.h>
65 
66 #if defined(ENABLE_SATI_MODE_PAGES)
67 
68 #include <dev/isci/scil/sati_mode_pages.h>
69 #include <dev/isci/scil/intel_scsi.h>
70 
71 //******************************************************************************
72 //* C O N S T A N T S
73 //******************************************************************************
74 
75 #define SCSI_MODE_PAGE19_SAS_ID         0x6
76 #define SCSI_MODE_PAGE19_SUB1_PAGE_NUM  0x1
77 #define SCSI_MODE_PAGE19_SUB1_PC        0x59
78 
79 //******************************************************************************
80 //* M O D E   P A G E S
81 //******************************************************************************
82 
83 U8 sat_default_mode_page_01[] =
84 {
85    SCSI_MODE_PAGE_READ_WRITE_ERROR, // Byte 0 - Page Code, SPF(0), PS(0)
86    SCSI_MODE_PAGE_01_LENGTH-2,      // Byte 1 - Page Length
87    0x80, // Byte 2 - AWRE, ARRE, TB, RC, EER, PER, DTE, DCR
88    0x00, // Byte 3 - Read Retry Count
89 
90    0x00, // Byte 4 - Obsolete
91    0x00, // Byte 5 - Obsolete
92    0x00, // Byte 6 - Obsolete
93    0x00, // Byte 7 - Restricted for MMC-4
94 
95    0x00, // Byte 8 - Write Retry Count
96    0x00, // Byte 9 - Reserved
97    0x00, // Byte 10 - Recovery Time Limit
98    0x00, // Byte 11
99 };
100 
101 U8 sat_changeable_mode_page_01[] =
102 {
103    SCSI_MODE_PAGE_READ_WRITE_ERROR,
104    SCSI_MODE_PAGE_01_LENGTH-2,
105    0x00,
106    0x00,
107 
108    0x00,
109    0x00,
110    0x00,
111    0x00,
112 
113    0x00,
114    0x00,
115    0x00,
116    0x00,
117 };
118 
119 U8 sat_default_mode_page_02[] =
120 {
121    SCSI_MODE_PAGE_DISCONNECT_RECONNECT, // Byte 0 - Page Code, SPF(0), PS(0)
122    SCSI_MODE_PAGE_02_LENGTH-2,          // Byte 1 - Page Length
123    0x00, // Byte 2 - Buffer Full Ratio
124    0x00, // Byte 3 - Buffer Empty Ratio
125 
126    0x00, // Byte 4 - Bus Inactivity Limit
127    0x00, // Byte 5
128    0x00, // Byte 6 - Disconnect Time Limit
129    0x00, // Byte 7
130 
131    0x00, // Byte 8 - Connect Time Limit
132    0x00, // Byte 9
133    0x00, // Byte 10 - Maximum Burst Size
134    0x00, // Byte 11
135 
136    0x00, // Byte 12 - EMDP, FAIR_ARB, DIMM, DTDC
137    0x00, // Byte 13
138    0x00, // Byte 14 - First Burst Size
139    0x00, // Byte 15
140 };
141 
142 U8 sat_changeable_mode_page_02[] =
143 {
144    SCSI_MODE_PAGE_DISCONNECT_RECONNECT,
145    SCSI_MODE_PAGE_02_LENGTH-2,
146    0x00,
147    0x00,
148 
149    0x00,
150    0x00,
151    0x00,
152    0x00,
153 
154    0x00,
155    0x00,
156    0x00,
157    0x00,
158 
159    0x00,
160    0x00,
161    0x00,
162    0x00,
163 };
164 
165 U8 sat_default_mode_page_08[] =
166 {
167    SCSI_MODE_PAGE_CACHING,     // Byte 0 - Page Code, SPF(0), PS(0)
168    SCSI_MODE_PAGE_08_LENGTH-2, // Byte 1 - Page Length
169    0x00, // Byte 2 - IC, ABPF, CAP, DISC, SIZE, WCE(1), MF, RCD
170    0x00, // Byte 3 - Demand Read Retention Priority, Write Retention Priority
171 
172    0x00, // Byte 4 - Disable Pre-Fetch Transfer Length
173    0x00, // Byte 5
174    0x00, // Byte 6 - Minimum Pre-Fetch
175    0x00, // Byte 7
176 
177    0x00, // Byte 8 - Maximum Pre-Fetch
178    0x00, // Byte 9
179    0x00, // Byte 10 - Maximum Pre-Fetch Ceiling
180    0x00, // Byte 11
181 
182    0x00, // Byte 12 - FSW, LBCSS, DRA(0), Vendor Specific, NV_DIS
183    0x00, // Byte 13 - Number of Cache Segments
184    0x00, // Byte 14 - Cache Segment Size
185    0x00, // Byte 15
186 
187    0x00, // Byte 16 - Reserved
188    0x00, // Byte 17 - Non-Cache Segment Size
189    0x00, // Byte 18
190    0x00, // PAD
191 };
192 
193 U8 sat_changeable_mode_page_08[] =
194 {
195    SCSI_MODE_PAGE_CACHING,
196    SCSI_MODE_PAGE_08_LENGTH-2,
197    SCSI_MODE_PAGE_CACHE_PAGE_WCE_BIT,
198    0x00,
199 
200    0x00,
201    0x00,
202    0x00,
203    0x00,
204 
205    0x00,
206    0x00,
207    0x00,
208    0x00,
209 
210    SCSI_MODE_PAGE_CACHE_PAGE_DRA_BIT,
211    0x00,
212    0x00,
213    0x00,
214 
215    0x00,
216    0x00,
217    0x00,
218    0x00, // PAD
219 };
220 
221 U8 sat_default_mode_page_0A[] =
222 {
223    SCSI_MODE_PAGE_CONTROL,     // Byte 0 - Page Code, SPF(0), PS(0)
224    SCSI_MODE_PAGE_0A_LENGTH-2, // Byte 1 - Page Length
225    0x00, // Byte 2 - TST(0), TMF_ONLY(0), D_SENSE(0), GLTSD(0), RLEC(0)
226    0x10, // Byte 3 - Queue Algorithm(0), QErr(0)
227 
228    0x00, // Byte 4 - TAS(0), RAC(0), UA_(0), SWP(0)
229    0x00, // Byte 5 - ATO(0), AUTOLOAD(0)
230    0x00, // Byte 6
231    0x00, // Byte 7
232 
233    0xFF, // Byte 8 - Unlimited Busy timeout
234    0xFF, // Byte 9
235    0x00, // Byte 10 - do not support self time compl time xlation
236    0x00, // Byte 11
237 };
238 
239 U8 sat_changeable_mode_page_0A[] =
240 {
241    SCSI_MODE_PAGE_CONTROL,
242    SCSI_MODE_PAGE_0A_LENGTH-2,
243    0x00,
244    0x00,
245 
246    0x00,
247    0x00,
248    0x00,
249    0x00,
250 
251    0x00,
252    0x00,
253    0x00,
254    0x00,
255 };
256 
257 U8 sat_default_mode_page_19[] =
258 {
259    SCSI_MODE_PAGE_PROTOCOL_SPECIFIC_PORT, // Byte 0 - PS, SPF, Page Code
260    SCSI_MODE_PAGE_19_LENGTH-2,  // Byte 1 - Page Length
261    SCSI_MODE_PAGE19_SAS_ID,     // Byte 2 - Rsvd, READY_LED,  ProtoID
262    0x00, // PAD
263 
264    0xFF, // Byte 4 - IT NLT MSB, 0xFF retry forever
265    0xFF, // Byte 5 - IT NLT LSB, 0xFF retry forever
266    0x00, // Byte 6 - IRT MSB, 0x0 disable init resp timer
267    0x00, // Byte 7 - IRT LSB, 0x0 disable init resp timer
268 };
269 
270 U8 sat_changeable_mode_page_19[] =
271 {
272    SCSI_MODE_PAGE_PROTOCOL_SPECIFIC_PORT,
273    SCSI_MODE_PAGE_19_LENGTH-2,
274    0x00,
275    0x00,
276 
277    0x00,
278    0x00,
279    0x00,
280    0x00,
281 };
282 
283 U8 sat_default_mode_page_1C[] =
284 {
285    SCSI_MODE_PAGE_INFORMATIONAL_EXCP_CONTROL, // Byte 0 - Page Code,
286                                               // SPF(0), PS(0)
287    SCSI_MODE_PAGE_1C_LENGTH-2,   // Byte 1 - Page Length
288    SCSI_MODE_PAGE_DEXCPT_ENABLE, // Byte 2 - Perf, EBF, EWasc,
289                                  // DExcpt(1), Test, LogErr
290    0x06, // Byte 3 -- MRIE (6 == values only available upon request)
291 
292    0x00, // Byte 4 -- Interval Timer
293    0x00, // Byte 5
294    0x00, // Byte 6
295    0x00, // Byte 7
296 
297    0x00, // Byte 8 -- Report Count
298    0x00, // Byte 9
299    0x00, // Byte 10
300    0x00, // Byte 11
301 };
302 
303 U8 sat_changeable_mode_page_1C[] =
304 {
305    SCSI_MODE_PAGE_INFORMATIONAL_EXCP_CONTROL,
306    SCSI_MODE_PAGE_1C_LENGTH-2,
307    SCSI_MODE_PAGE_DEXCPT_ENABLE,
308    0x00,
309 
310    0x00,
311    0x00,
312    0x00,
313    0x00,
314 
315    0x00,
316    0x00,
317    0x00,
318    0x00,
319 };
320 
321 U8 sat_supported_mode_pages[] =
322 {
323    SCSI_MODE_PAGE_READ_WRITE_ERROR,
324    SCSI_MODE_PAGE_DISCONNECT_RECONNECT,
325    SCSI_MODE_PAGE_CACHING,
326    SCSI_MODE_PAGE_CONTROL,
327    SCSI_MODE_PAGE_INFORMATIONAL_EXCP_CONTROL
328 };
329 
330 U8 *sat_changeable_mode_pages[] =
331 {
332    sat_changeable_mode_page_01,
333    sat_changeable_mode_page_02,
334    sat_changeable_mode_page_08,
335    sat_changeable_mode_page_0A,
336    sat_changeable_mode_page_1C
337 };
338 
339 U8 *sat_default_mode_pages[] =
340 {
341    sat_default_mode_page_01,
342    sat_default_mode_page_02,
343    sat_default_mode_page_08,
344    sat_default_mode_page_0A,
345    sat_default_mode_page_1C
346 };
347 
348 U16 sat_mode_page_sizes[] =
349 {
350    sizeof(sat_default_mode_page_01),
351    sizeof(sat_default_mode_page_02),
352    sizeof(sat_default_mode_page_08),
353    sizeof(sat_default_mode_page_0A),
354    sizeof(sat_default_mode_page_1C)
355 };
356 
357 U16 sati_mode_page_get_page_index(
358    U8  page_code
359 )
360 {
361    U16 index;
362    for (index = 0; index < SAT_SUPPORTED_MODE_PAGES_LENGTH; index++)
363    {
364       if (sat_supported_mode_pages[index] == page_code)
365          return index;
366    }
367 
368    return SATI_MODE_PAGE_UNSUPPORTED_INDEX;
369 }
370 
371 #endif // defined(ENABLE_SATI_MODE_PAGES)
372 
373