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 __FBSDID("$FreeBSD$"); 57 58 /** 59 * @file 60 * @brief This file contains the mode page constants and data for the mode 61 * pages supported by this translation implementation. 62 */ 63 64 // DO NOT MOVE THIS INCLUDE STATEMENT! This include must occur before 65 // the below check for ENABLE_SATI_MODE_PAGES. 66 #include <dev/isci/scil/sati_types.h> 67 68 #if defined(ENABLE_SATI_MODE_PAGES) 69 70 #include <dev/isci/scil/sati_mode_pages.h> 71 #include <dev/isci/scil/intel_scsi.h> 72 73 //****************************************************************************** 74 //* C O N S T A N T S 75 //****************************************************************************** 76 77 #define SCSI_MODE_PAGE19_SAS_ID 0x6 78 #define SCSI_MODE_PAGE19_SUB1_PAGE_NUM 0x1 79 #define SCSI_MODE_PAGE19_SUB1_PC 0x59 80 81 //****************************************************************************** 82 //* M O D E P A G E S 83 //****************************************************************************** 84 85 U8 sat_default_mode_page_01[] = 86 { 87 SCSI_MODE_PAGE_READ_WRITE_ERROR, // Byte 0 - Page Code, SPF(0), PS(0) 88 SCSI_MODE_PAGE_01_LENGTH-2, // Byte 1 - Page Length 89 0x80, // Byte 2 - AWRE, ARRE, TB, RC, EER, PER, DTE, DCR 90 0x00, // Byte 3 - Read Retry Count 91 92 0x00, // Byte 4 - Obsolete 93 0x00, // Byte 5 - Obsolete 94 0x00, // Byte 6 - Obsolete 95 0x00, // Byte 7 - Restricted for MMC-4 96 97 0x00, // Byte 8 - Write Retry Count 98 0x00, // Byte 9 - Reserved 99 0x00, // Byte 10 - Recovery Time Limit 100 0x00, // Byte 11 101 }; 102 103 U8 sat_changeable_mode_page_01[] = 104 { 105 SCSI_MODE_PAGE_READ_WRITE_ERROR, 106 SCSI_MODE_PAGE_01_LENGTH-2, 107 0x00, 108 0x00, 109 110 0x00, 111 0x00, 112 0x00, 113 0x00, 114 115 0x00, 116 0x00, 117 0x00, 118 0x00, 119 }; 120 121 U8 sat_default_mode_page_02[] = 122 { 123 SCSI_MODE_PAGE_DISCONNECT_RECONNECT, // Byte 0 - Page Code, SPF(0), PS(0) 124 SCSI_MODE_PAGE_02_LENGTH-2, // Byte 1 - Page Length 125 0x00, // Byte 2 - Buffer Full Ratio 126 0x00, // Byte 3 - Buffer Empty Ratio 127 128 0x00, // Byte 4 - Bus Inactivity Limit 129 0x00, // Byte 5 130 0x00, // Byte 6 - Disconnect Time Limit 131 0x00, // Byte 7 132 133 0x00, // Byte 8 - Connect Time Limit 134 0x00, // Byte 9 135 0x00, // Byte 10 - Maximum Burst Size 136 0x00, // Byte 11 137 138 0x00, // Byte 12 - EMDP, FAIR_ARB, DIMM, DTDC 139 0x00, // Byte 13 140 0x00, // Byte 14 - First Burst Size 141 0x00, // Byte 15 142 }; 143 144 U8 sat_changeable_mode_page_02[] = 145 { 146 SCSI_MODE_PAGE_DISCONNECT_RECONNECT, 147 SCSI_MODE_PAGE_02_LENGTH-2, 148 0x00, 149 0x00, 150 151 0x00, 152 0x00, 153 0x00, 154 0x00, 155 156 0x00, 157 0x00, 158 0x00, 159 0x00, 160 161 0x00, 162 0x00, 163 0x00, 164 0x00, 165 }; 166 167 U8 sat_default_mode_page_08[] = 168 { 169 SCSI_MODE_PAGE_CACHING, // Byte 0 - Page Code, SPF(0), PS(0) 170 SCSI_MODE_PAGE_08_LENGTH-2, // Byte 1 - Page Length 171 0x00, // Byte 2 - IC, ABPF, CAP, DISC, SIZE, WCE(1), MF, RCD 172 0x00, // Byte 3 - Demand Read Retention Priority, Write Retention Priority 173 174 0x00, // Byte 4 - Disable Pre-Fetch Transfer Length 175 0x00, // Byte 5 176 0x00, // Byte 6 - Minimum Pre-Fetch 177 0x00, // Byte 7 178 179 0x00, // Byte 8 - Maximum Pre-Fetch 180 0x00, // Byte 9 181 0x00, // Byte 10 - Maximum Pre-Fetch Ceiling 182 0x00, // Byte 11 183 184 0x00, // Byte 12 - FSW, LBCSS, DRA(0), Vendor Specific, NV_DIS 185 0x00, // Byte 13 - Number of Cache Segments 186 0x00, // Byte 14 - Cache Segment Size 187 0x00, // Byte 15 188 189 0x00, // Byte 16 - Reserved 190 0x00, // Byte 17 - Non-Cache Segment Size 191 0x00, // Byte 18 192 0x00, // PAD 193 }; 194 195 U8 sat_changeable_mode_page_08[] = 196 { 197 SCSI_MODE_PAGE_CACHING, 198 SCSI_MODE_PAGE_08_LENGTH-2, 199 SCSI_MODE_PAGE_CACHE_PAGE_WCE_BIT, 200 0x00, 201 202 0x00, 203 0x00, 204 0x00, 205 0x00, 206 207 0x00, 208 0x00, 209 0x00, 210 0x00, 211 212 SCSI_MODE_PAGE_CACHE_PAGE_DRA_BIT, 213 0x00, 214 0x00, 215 0x00, 216 217 0x00, 218 0x00, 219 0x00, 220 0x00, // PAD 221 }; 222 223 U8 sat_default_mode_page_0A[] = 224 { 225 SCSI_MODE_PAGE_CONTROL, // Byte 0 - Page Code, SPF(0), PS(0) 226 SCSI_MODE_PAGE_0A_LENGTH-2, // Byte 1 - Page Length 227 0x00, // Byte 2 - TST(0), TMF_ONLY(0), D_SENSE(0), GLTSD(0), RLEC(0) 228 0x10, // Byte 3 - Queue Algorithm(0), QErr(0) 229 230 0x00, // Byte 4 - TAS(0), RAC(0), UA_(0), SWP(0) 231 0x00, // Byte 5 - ATO(0), AUTOLOAD(0) 232 0x00, // Byte 6 233 0x00, // Byte 7 234 235 0xFF, // Byte 8 - Unlimited Busy timeout 236 0xFF, // Byte 9 237 0x00, // Byte 10 - do not support self time compl time xlation 238 0x00, // Byte 11 239 }; 240 241 U8 sat_changeable_mode_page_0A[] = 242 { 243 SCSI_MODE_PAGE_CONTROL, 244 SCSI_MODE_PAGE_0A_LENGTH-2, 245 0x00, 246 0x00, 247 248 0x00, 249 0x00, 250 0x00, 251 0x00, 252 253 0x00, 254 0x00, 255 0x00, 256 0x00, 257 }; 258 259 U8 sat_default_mode_page_19[] = 260 { 261 SCSI_MODE_PAGE_PROTOCOL_SPECIFIC_PORT, // Byte 0 - PS, SPF, Page Code 262 SCSI_MODE_PAGE_19_LENGTH-2, // Byte 1 - Page Length 263 SCSI_MODE_PAGE19_SAS_ID, // Byte 2 - Rsvd, READY_LED, ProtoID 264 0x00, // PAD 265 266 0xFF, // Byte 4 - IT NLT MSB, 0xFF retry forever 267 0xFF, // Byte 5 - IT NLT LSB, 0xFF retry forever 268 0x00, // Byte 6 - IRT MSB, 0x0 disable init resp timer 269 0x00, // Byte 7 - IRT LSB, 0x0 disable init resp timer 270 }; 271 272 U8 sat_changeable_mode_page_19[] = 273 { 274 SCSI_MODE_PAGE_PROTOCOL_SPECIFIC_PORT, 275 SCSI_MODE_PAGE_19_LENGTH-2, 276 0x00, 277 0x00, 278 279 0x00, 280 0x00, 281 0x00, 282 0x00, 283 }; 284 285 U8 sat_default_mode_page_1C[] = 286 { 287 SCSI_MODE_PAGE_INFORMATIONAL_EXCP_CONTROL, // Byte 0 - Page Code, 288 // SPF(0), PS(0) 289 SCSI_MODE_PAGE_1C_LENGTH-2, // Byte 1 - Page Length 290 SCSI_MODE_PAGE_DEXCPT_ENABLE, // Byte 2 - Perf, EBF, EWasc, 291 // DExcpt(1), Test, LogErr 292 0x06, // Byte 3 -- MRIE (6 == values only available upon request) 293 294 0x00, // Byte 4 -- Interval Timer 295 0x00, // Byte 5 296 0x00, // Byte 6 297 0x00, // Byte 7 298 299 0x00, // Byte 8 -- Report Count 300 0x00, // Byte 9 301 0x00, // Byte 10 302 0x00, // Byte 11 303 }; 304 305 U8 sat_changeable_mode_page_1C[] = 306 { 307 SCSI_MODE_PAGE_INFORMATIONAL_EXCP_CONTROL, 308 SCSI_MODE_PAGE_1C_LENGTH-2, 309 SCSI_MODE_PAGE_DEXCPT_ENABLE, 310 0x00, 311 312 0x00, 313 0x00, 314 0x00, 315 0x00, 316 317 0x00, 318 0x00, 319 0x00, 320 0x00, 321 }; 322 323 U8 sat_supported_mode_pages[] = 324 { 325 SCSI_MODE_PAGE_READ_WRITE_ERROR, 326 SCSI_MODE_PAGE_DISCONNECT_RECONNECT, 327 SCSI_MODE_PAGE_CACHING, 328 SCSI_MODE_PAGE_CONTROL, 329 SCSI_MODE_PAGE_INFORMATIONAL_EXCP_CONTROL 330 }; 331 332 U8 *sat_changeable_mode_pages[] = 333 { 334 sat_changeable_mode_page_01, 335 sat_changeable_mode_page_02, 336 sat_changeable_mode_page_08, 337 sat_changeable_mode_page_0A, 338 sat_changeable_mode_page_1C 339 }; 340 341 U8 *sat_default_mode_pages[] = 342 { 343 sat_default_mode_page_01, 344 sat_default_mode_page_02, 345 sat_default_mode_page_08, 346 sat_default_mode_page_0A, 347 sat_default_mode_page_1C 348 }; 349 350 U16 sat_mode_page_sizes[] = 351 { 352 sizeof(sat_default_mode_page_01), 353 sizeof(sat_default_mode_page_02), 354 sizeof(sat_default_mode_page_08), 355 sizeof(sat_default_mode_page_0A), 356 sizeof(sat_default_mode_page_1C) 357 }; 358 359 U16 sati_mode_page_get_page_index( 360 U8 page_code 361 ) 362 { 363 U16 index; 364 for (index = 0; index < SAT_SUPPORTED_MODE_PAGES_LENGTH; index++) 365 { 366 if (sat_supported_mode_pages[index] == page_code) 367 return index; 368 } 369 370 return SATI_MODE_PAGE_UNSUPPORTED_INDEX; 371 } 372 373 #endif // defined(ENABLE_SATI_MODE_PAGES) 374 375