1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause OR GPL-2.0
3 *
4 * This file is provided under a dual BSD/GPLv2 license. When using or
5 * redistributing this file, you may do so under either license.
6 *
7 * GPL LICENSE SUMMARY
8 *
9 * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of version 2 of the GNU General Public License as
13 * published by the Free Software Foundation.
14 *
15 * This program is distributed in the hope that it will be useful, but
16 * WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
23 * The full GNU General Public License is included in this distribution
24 * in the file called LICENSE.GPL.
25 *
26 * BSD LICENSE
27 *
28 * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
29 * All rights reserved.
30 *
31 * Redistribution and use in source and binary forms, with or without
32 * modification, are permitted provided that the following conditions
33 * are met:
34 *
35 * * Redistributions of source code must retain the above copyright
36 * notice, this list of conditions and the following disclaimer.
37 * * Redistributions in binary form must reproduce the above copyright
38 * notice, this list of conditions and the following disclaimer in
39 * the documentation and/or other materials provided with the
40 * distribution.
41 *
42 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
43 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
44 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
45 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
46 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
47 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
48 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
49 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
50 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
51 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
52 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
53 */
54
55 #include <sys/cdefs.h>
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
sati_mode_page_get_page_index(U8 page_code)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