1 /*******************************************************************************
2 *Copyright (c) 2014 PMC-Sierra, Inc. All rights reserved.
4 *Redistribution and use in source and binary forms, with or without modification, are permitted provided
5 *that the following conditions are met:
6 *1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
8 *2. Redistributions in binary form must reproduce the above copyright notice,
9 *this list of conditions and the following disclaimer in the documentation and/or other materials provided
10 *with the distribution.
12 *THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED
13 *WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
14 *FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
15 *FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
16 *NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
17 *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
18 *LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
19 *SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
23 ********************************************************************************/
24 /*******************************************************************************/
28 * The file defines the constants, data structure, and functions defined by SAT
39 #define SAT_READ_FPDMA_QUEUED 0x60
40 #define SAT_READ_DMA_EXT 0x25
41 #define SAT_READ_DMA 0xC8
42 #define SAT_WRITE_FPDMA_QUEUED 0x61
43 #define SAT_WRITE_DMA_EXT 0x35
44 #define SAT_WRITE_DMA_FUA_EXT 0x3D
45 #define SAT_WRITE_DMA 0xCA
46 #define SAT_CHECK_POWER_MODE 0xE5
47 #define SAT_READ_LOG_EXT 0x2F
48 #define SAT_READ_VERIFY_SECTORS 0x40
49 #define SAT_READ_VERIFY_SECTORS_EXT 0x42
50 #define SAT_SMART 0xB0
51 #define SAT_SMART_EXEUTE_OFF_LINE_IMMEDIATE 0xD4
52 #define SAT_SMART_RETURN_STATUS 0xDA
53 #define SAT_SMART_READ_LOG 0xD5
54 #define SAT_SMART_ENABLE_OPERATIONS 0xD8
55 #define SAT_SMART_DISABLE_OPERATIONS 0xD9
56 #define SAT_FLUSH_CACHE 0xE7
57 #define SAT_FLUSH_CACHE_EXT 0xEA
58 #define SAT_STANDBY 0xE2
59 #define SAT_MEDIA_EJECT 0xED
60 #define SAT_WRITE_SECTORS 0x30
61 #define SAT_WRITE_SECTORS_EXT 0x34
62 #define SAT_READ_SECTORS 0x20
63 #define SAT_READ_SECTORS_EXT 0x24
64 #define SAT_GET_MEDIA_STATUS 0xDA
65 #define SAT_SET_FEATURES 0xEF
66 #define SAT_IDENTIFY_DEVICE 0xEC
67 #define SAT_READ_BUFFER 0xE4
68 #define SAT_WRITE_BUFFER 0xE8
72 #define SAT_IDENTIFY_PACKET_DEVICE 0xA1
73 #define SAT_PACKET 0xA0
74 #define SAT_DEVICE_RESET 0x08
75 #define SAT_EXECUTE_DEVICE_DIAGNOSTIC 0x90
77 * ATA Status Register Mask
79 #define ERR_ATA_STATUS_MASK 0x01 /* Error/check bit */
80 #define DRQ_ATA_STATUS_MASK 0x08 /* Data Request bit */
81 #define DF_ATA_STATUS_MASK 0x20 /* Device Fault bit */
82 #define DRDY_ATA_STATUS_MASK 0x40 /* Device Ready bit */
83 #define BSY_ATA_STATUS_MASK 0x80 /* Busy bit */
86 * ATA Error Register Mask
88 #define NM_ATA_ERROR_MASK 0x02 /* No media present bit */
89 #define ABRT_ATA_ERROR_MASK 0x04 /* Command aborted bit */
90 #define MCR_ATA_ERROR_MASK 0x08 /* Media change request bit */
91 #define IDNF_ATA_ERROR_MASK 0x10 /* Address not found bit */
92 #define MC_ATA_ERROR_MASK 0x20 /* Media has changed bit */
93 #define UNC_ATA_ERROR_MASK 0x40 /* Uncorrectable data error bit */
94 #define ICRC_ATA_ERROR_MASK 0x80 /* Interface CRC error bit */
100 * transfer length and LBA limit 2^28 See identify device data word 61:60
104 #define SAT_TR_LBA_LIMIT 0x10000000
107 * transfer length and LBA limit 2^48 See identify device data word 61:60
111 #define SAT_EXT_TR_LBA_LIMIT 0x1000000000000
115 * ATA command type. This is for setting LBA, Sector Count
117 #define SAT_NON_EXT_TYPE 0
118 #define SAT_EXT_TYPE 1
119 #define SAT_FP_TYPE 2
123 * Report LUNs response data.
125 typedef struct scsiReportLun_s
132 /* Inquiry vendor string */
133 #define AG_SAT_VENDOR_ID_STRING "ATA "
136 * Simple form of SATA Identify Device Data, similar definition is defined by
137 * LL Layer as agsaSATAIdentifyData_t.
139 typedef struct satSimpleSATAIdentifyData_s
142 } satSimpleSATAIdentifyData_t;
146 * READ LOG EXT page 10h
148 typedef struct satReadLogExtPage10h_s
151 } satReadLogExtPage10h_t;
154 * READ LOG EXT Extended Self-test log
157 typedef struct satReadLogExtSelfTest_s
160 } satReadLogExtSelfTest_t;
163 * SMART READ LOG Self-test log
166 typedef struct satSmartReadLogSelfTest_s
169 } satSmartReadLogSelfTest_t;
173 * Flag definition for satIntFlag field in satInternalIo_t.
176 /* Original NCQ I/O already completed, so at the completion of READ LOG EXT
177 * page 10h, ignore the TAG tranaltion to get the failed I/O
179 #define AG_SAT_INT_IO_FLAG_ORG_IO_COMPLETED 0x00000001
181 #define INQUIRY_SUPPORTED_VPD_PAGE 0x00
182 #define INQUIRY_UNIT_SERIAL_NUMBER_VPD_PAGE 0x80
183 #define INQUIRY_DEVICE_IDENTIFICATION_VPD_PAGE 0x83
184 #define INQUIRY_ATA_INFORMATION_VPD_PAGE 0x89
186 #define MODESENSE_CONTROL_PAGE 0x0A
187 #define MODESENSE_READ_WRITE_ERROR_RECOVERY_PAGE 0x01
188 #define MODESENSE_CACHING 0x08
189 #define MODESENSE_INFORMATION_EXCEPTION_CONTROL_PAGE 0x1C
190 #define MODESENSE_RETURN_ALL_PAGES 0x3F
191 #define MODESENSE_VENDOR_SPECIFIC_PAGE 0x00
193 #define MODESELECT_CONTROL_PAGE 0x0A
194 #define MODESELECT_READ_WRITE_ERROR_RECOVERY_PAGE 0x01
195 #define MODESELECT_CACHING 0x08
196 #define MODESELECT_INFORMATION_EXCEPTION_CONTROL_PAGE 0x1C
197 #define MODESELECT_RETURN_ALL_PAGES 0x3F
198 #define MODESELECT_VENDOR_SPECIFIC_PAGE 0x00
200 #define LOGSENSE_SUPPORTED_LOG_PAGES 0x00
201 #define LOGSENSE_SELFTEST_RESULTS_PAGE 0x10
202 #define LOGSENSE_INFORMATION_EXCEPTIONS_PAGE 0x2F
206 * Bit mask definition
208 #define SCSI_EVPD_MASK 0x01
209 #define SCSI_IMMED_MASK 0x01
210 #define SCSI_NACA_MASK 0x04
211 #define SCSI_LINK_MASK 0x01
212 #define SCSI_PF_MASK 0x10
213 #define SCSI_DEVOFFL_MASK 0x02
214 #define SCSI_UNITOFFL_MASK 0x01
215 #define SCSI_START_MASK 0x01
216 #define SCSI_LOEJ_MASK 0x02
217 #define SCSI_NM_MASK 0x02
218 #define SCSI_FLUSH_CACHE_IMMED_MASK 0x02
219 #define SCSI_FUA_NV_MASK 0x02
220 #define SCSI_VERIFY_BYTCHK_MASK 0x02
221 #define SCSI_FORMAT_UNIT_IMMED_MASK 0x02
222 #define SCSI_FORMAT_UNIT_FOV_MASK 0x80
223 #define SCSI_FORMAT_UNIT_DCRT_MASK 0x20
224 #define SCSI_FORMAT_UNIT_IP_MASK 0x08
225 #define SCSI_WRITE_SAME_LBDATA_MASK 0x02
226 #define SCSI_WRITE_SAME_PBDATA_MASK 0x04
227 #define SCSI_SYNC_CACHE_IMMED_MASK 0x02
228 #define SCSI_WRITE_N_VERIFY_BYTCHK_MASK 0x02
229 #define SCSI_SEND_DIAGNOSTIC_SELFTEST_MASK 0x04
230 #define SCSI_FORMAT_UNIT_DEFECT_LIST_FORMAT_MASK 0x07
231 #define SCSI_FORMAT_UNIT_FMTDATA_MASK 0x10
232 #define SCSI_FORMAT_UNIT_DCRT_MASK 0x20
233 #define SCSI_FORMAT_UNIT_CMPLIST_MASK 0x08
234 #define SCSI_FORMAT_UNIT_LONGLIST_MASK 0x20
235 #define SCSI_READ10_FUA_MASK 0x08
236 #define SCSI_READ12_FUA_MASK 0x08
237 #define SCSI_READ16_FUA_MASK 0x08
238 #define SCSI_WRITE10_FUA_MASK 0x08
239 #define SCSI_WRITE12_FUA_MASK 0x08
240 #define SCSI_WRITE16_FUA_MASK 0x08
241 #define SCSI_READ_CAPACITY10_PMI_MASK 0x01
242 #define SCSI_READ_CAPACITY16_PMI_MASK 0x01
243 #define SCSI_MODE_SENSE6_PC_MASK 0xC0
244 #define SCSI_MODE_SENSE6_PAGE_CODE_MASK 0x3F
245 #define SCSI_MODE_SENSE10_PC_MASK 0xC0
246 #define SCSI_MODE_SENSE10_LLBAA_MASK 0x10
247 #define SCSI_MODE_SENSE10_PAGE_CODE_MASK 0x3F
248 #define SCSI_SEND_DIAGNOSTIC_TEST_CODE_MASK 0xE0
249 #define SCSI_LOG_SENSE_PAGE_CODE_MASK 0x3F
250 #define SCSI_MODE_SELECT6_PF_MASK 0x10
251 #define SCSI_MODE_SELECT6_AWRE_MASK 0x80
252 #define SCSI_MODE_SELECT6_RC_MASK 0x10
253 #define SCSI_MODE_SELECT6_EER_MASK 0x08
254 #define SCSI_MODE_SELECT6_PER_MASK 0x04
255 #define SCSI_MODE_SELECT6_DTE_MASK 0x02
256 #define SCSI_MODE_SELECT6_DCR_MASK 0x01
257 #define SCSI_MODE_SELECT6_WCE_MASK 0x04
258 #define SCSI_MODE_SELECT6_DRA_MASK 0x20
259 #define SCSI_MODE_SELECT6_PERF_MASK 0x80
260 #define SCSI_MODE_SELECT6_TEST_MASK 0x04
261 #define SCSI_MODE_SELECT6_DEXCPT_MASK 0x08
262 #define SCSI_MODE_SELECT10_PF_MASK 0x10
263 #define SCSI_MODE_SELECT10_LONGLBA_MASK 0x01
264 #define SCSI_MODE_SELECT10_AWRE_MASK 0x80
265 #define SCSI_MODE_SELECT10_RC_MASK 0x10
266 #define SCSI_MODE_SELECT10_EER_MASK 0x08
267 #define SCSI_MODE_SELECT10_PER_MASK 0x04
268 #define SCSI_MODE_SELECT10_DTE_MASK 0x02
269 #define SCSI_MODE_SELECT10_DCR_MASK 0x01
270 #define SCSI_MODE_SELECT10_WCE_MASK 0x04
271 #define SCSI_MODE_SELECT10_DRA_MASK 0x20
272 #define SCSI_MODE_SELECT10_PERF_MASK 0x80
273 #define SCSI_MODE_SELECT10_TEST_MASK 0x04
274 #define SCSI_MODE_SELECT10_DEXCPT_MASK 0x08
275 #define SCSI_WRITE_N_VERIFY10_FUA_MASK 0x08
276 #define SCSI_REQUEST_SENSE_DESC_MASK 0x01
277 #define SCSI_READ_BUFFER_MODE_MASK 0x1F
279 #define ATA_REMOVABLE_MEDIA_DEVICE_MASK 0x80
280 #define SCSI_REASSIGN_BLOCKS_LONGLIST_MASK 0x01
281 #define SCSI_REASSIGN_BLOCKS_LONGLBA_MASK 0x02
284 #define SENSE_DATA_LENGTH 0x12 /* 18 */
285 #define SELFTEST_RESULTS_LOG_PAGE_LENGTH 404
286 #define INFORMATION_EXCEPTIONS_LOG_PAGE_LENGTH 11
287 #define ZERO_MEDIA_SERIAL_NUMBER_LENGTH 8
289 #define LOG_SENSE_0 0
290 #define LOG_SENSE_1 1
291 #define LOG_SENSE_2 2
293 #define READ_BUFFER_DATA_MODE 0x02
294 #define READ_BUFFER_DESCRIPTOR_MODE 0x03
295 #define READ_BUFFER_DESCRIPTOR_MODE_DATA_LEN 0x04
297 #define WRITE_BUFFER_DATA_MODE 0x02
298 #define WRITE_BUFFER_DL_MICROCODE_SAVE_MODE 0x05
301 #define BIT0_MASK 0x01
302 #define BIT1_MASK 0x02
303 #define BIT2_MASK 0x04
304 #define BIT3_MASK 0x08
305 #define BIT4_MASK 0x10
306 #define BIT5_MASK 0x20
307 #define BIT6_MASK 0x40
308 #define BIT7_MASK 0x80
310 #define MODE_SENSE6_RETURN_ALL_PAGES_LEN 68
311 #define MODE_SENSE6_CONTROL_PAGE_LEN 24
312 #define MODE_SENSE6_READ_WRITE_ERROR_RECOVERY_PAGE_LEN 24
313 #define MODE_SENSE6_CACHING_LEN 32
314 #define MODE_SENSE6_INFORMATION_EXCEPTION_CONTROL_PAGE_LEN 24
317 #define MODE_SENSE10_RETURN_ALL_PAGES_LEN 68 + 4
318 #define MODE_SENSE10_CONTROL_PAGE_LEN 24 + 4
319 #define MODE_SENSE10_READ_WRITE_ERROR_RECOVERY_PAGE_LEN 24 + 4
320 #define MODE_SENSE10_CACHING_LEN 32 + 4
321 #define MODE_SENSE10_INFORMATION_EXCEPTION_CONTROL_PAGE_LEN 24 + 4
323 #define MODE_SENSE10_RETURN_ALL_PAGES_LLBAA_LEN 68 + 4 + 8
324 #define MODE_SENSE10_CONTROL_PAGE_LLBAA_LEN 24 + 4 + 8
325 #define MODE_SENSE10_READ_WRITE_ERROR_RECOVERY_PAGE_LLBAA_LEN 24 + 4 + 8
326 #define MODE_SENSE10_CACHING_LLBAA_LEN 32 + 4 + 8
327 #define MODE_SENSE10_INFORMATION_EXCEPTION_CONTROL_PAGE_LLBAA_LEN 24 + 4 + 8
329 #endif /*__SAT_H__ */