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