]>
Commit | Line | Data |
---|---|---|
832b75ed | 1 | /* |
4d59bff9 | 2 | * atacmdnames.cpp |
832b75ed | 3 | * |
a86ec89e | 4 | * Home page of code is: http://www.smartmontools.org |
832b75ed | 5 | * |
34ad0c5f | 6 | * Copyright (C) 2003-8 Philip Williams |
f9e10201 | 7 | * Copyright (C) 2012 Christian Franke |
832b75ed | 8 | * |
ff28b140 | 9 | * SPDX-License-Identifier: GPL-2.0-or-later |
832b75ed GG |
10 | */ |
11 | ||
12 | #include "atacmdnames.h" | |
13 | #include <stdlib.h> | |
14 | #include <stdio.h> | |
15 | ||
ff28b140 | 16 | const char * atacmdnames_cpp_cvsid = "$Id: atacmdnames.cpp 4760 2018-08-19 18:45:53Z chrfranke $" |
ee38a438 | 17 | ATACMDNAMES_H_CVSID; |
832b75ed GG |
18 | |
19 | const char cmd_reserved[] = "[RESERVED]"; | |
20 | const char cmd_vendor_specific[] = "[VENDOR SPECIFIC]"; | |
21 | const char cmd_reserved_sa[] = "[RESERVED FOR SERIAL ATA]"; | |
22 | const char cmd_reserved_cf[] = "[RESERVED FOR COMPACTFLASH ASSOCIATION]"; | |
ee38a438 | 23 | const char cmd_reserved_mcpt[] = "[RESERVED FOR MEDIA CARD PASS THROUGH]"; // ACS-3: Reserved |
832b75ed GG |
24 | const char cmd_recalibrate_ret4[]= "RECALIBRATE [RET-4]"; |
25 | const char cmd_seek_ret4[] = "SEEK [RET-4]"; | |
26 | ||
ee38a438 GI |
27 | // Tables B.3 and B.4 of T13/2161-D (ACS-3) Revision 4, September 4, 2012 |
28 | ||
29 | const char * const command_table[] = { | |
832b75ed GG |
30 | /*-------------------------------------------------- 00h-0Fh -----*/ |
31 | "NOP", | |
32 | cmd_reserved, | |
33 | cmd_reserved, | |
ee38a438 | 34 | "CFA REQUEST EXTENDED ERROR", |
832b75ed GG |
35 | cmd_reserved, |
36 | cmd_reserved, | |
ee38a438 | 37 | "DATA SET MANAGEMENT", // ACS-2 |
832b75ed GG |
38 | cmd_reserved, |
39 | "DEVICE RESET", | |
40 | cmd_reserved, | |
41 | cmd_reserved, | |
ee38a438 | 42 | "REQUEST SENSE DATA EXT", // ACS-2 |
832b75ed GG |
43 | cmd_reserved, |
44 | cmd_reserved, | |
45 | cmd_reserved, | |
46 | cmd_reserved, | |
47 | /*-------------------------------------------------- 10h-1Fh -----*/ | |
48 | "RECALIBRATE [OBS-4]", | |
49 | cmd_recalibrate_ret4, | |
50 | cmd_recalibrate_ret4, | |
51 | cmd_recalibrate_ret4, | |
52 | cmd_recalibrate_ret4, | |
53 | cmd_recalibrate_ret4, | |
54 | cmd_recalibrate_ret4, | |
55 | cmd_recalibrate_ret4, | |
56 | cmd_recalibrate_ret4, | |
57 | cmd_recalibrate_ret4, | |
58 | cmd_recalibrate_ret4, | |
59 | cmd_recalibrate_ret4, | |
60 | cmd_recalibrate_ret4, | |
61 | cmd_recalibrate_ret4, | |
62 | cmd_recalibrate_ret4, | |
63 | cmd_recalibrate_ret4, | |
64 | /*-------------------------------------------------- 20h-2Fh -----*/ | |
65 | "READ SECTOR(S)", | |
66 | "READ SECTOR(S) [OBS-5]", | |
ee38a438 | 67 | "READ LONG [OBS-4]", |
832b75ed GG |
68 | "READ LONG (w/o retry) [OBS-4]", |
69 | "READ SECTOR(S) EXT", | |
70 | "READ DMA EXT", | |
ee38a438 GI |
71 | "READ DMA QUEUED EXT [OBS-ACS-2]", |
72 | "READ NATIVE MAX ADDRESS EXT [OBS-ACS-3]", | |
832b75ed GG |
73 | cmd_reserved, |
74 | "READ MULTIPLE EXT", | |
75 | "READ STREAM DMA", | |
ee38a438 | 76 | "READ STREAM", |
832b75ed GG |
77 | cmd_reserved, |
78 | cmd_reserved, | |
79 | cmd_reserved, | |
80 | "READ LOG EXT", | |
81 | /*-------------------------------------------------- 30h-3Fh -----*/ | |
82 | "WRITE SECTOR(S)", | |
ee38a438 GI |
83 | "WRITE SECTOR(S) (w/o retry) [OBS-5]", |
84 | "WRITE LONG [OBS-4]", | |
85 | "WRITE LONG (w/o retry) [OBS-4]", | |
832b75ed GG |
86 | "WRITE SECTORS(S) EXT", |
87 | "WRITE DMA EXT", | |
ee38a438 GI |
88 | "WRITE DMA QUEUED EXT [OBS-ACS-2]", |
89 | "SET NATIVE MAX ADDRESS EXT [OBS-ACS-3]", | |
832b75ed GG |
90 | "CFA WRITE SECTORS WITHOUT ERASE", |
91 | "WRITE MULTIPLE EXT", | |
92 | "WRITE STREAM DMA", | |
ee38a438 | 93 | "WRITE STREAM", |
832b75ed GG |
94 | "WRITE VERIFY [OBS-4]", |
95 | "WRITE DMA FUA EXT", | |
ee38a438 | 96 | "WRITE DMA QUEUED FUA EXT [OBS-ACS-2]", |
832b75ed GG |
97 | "WRITE LOG EXT", |
98 | /*-------------------------------------------------- 40h-4Fh -----*/ | |
99 | "READ VERIFY SECTOR(S)", | |
ee38a438 | 100 | "READ VERIFY SECTOR(S) (w/o retry) [OBS-5]", |
832b75ed GG |
101 | "READ VERIFY SECTOR(S) EXT", |
102 | cmd_reserved, | |
103 | cmd_reserved, | |
ee38a438 | 104 | "WRITE UNCORRECTABLE EXT", // ATA-8 |
832b75ed | 105 | cmd_reserved, |
ee38a438 | 106 | "READ LOG DMA EXT", // ATA-8 |
832b75ed GG |
107 | cmd_reserved, |
108 | cmd_reserved, | |
109 | cmd_reserved, | |
110 | cmd_reserved, | |
111 | cmd_reserved, | |
112 | cmd_reserved, | |
113 | cmd_reserved, | |
114 | cmd_reserved, | |
115 | /*-------------------------------------------------- 50h-5Fh -----*/ | |
116 | "FORMAT TRACK [OBS-4]", | |
117 | "CONFIGURE STREAM", | |
118 | cmd_reserved, | |
119 | cmd_reserved, | |
120 | cmd_reserved, | |
121 | cmd_reserved, | |
122 | cmd_reserved, | |
ee38a438 | 123 | "WRITE LOG DMA EXT", // ATA-8 |
832b75ed GG |
124 | cmd_reserved, |
125 | cmd_reserved, | |
126 | cmd_reserved, | |
ee38a438 GI |
127 | "TRUSTED NON-DATA", // ATA-8 |
128 | "TRUSTED RECEIVE", // ATA-8 | |
129 | "TRUSTED RECEIVE DMA", // ATA-8 | |
130 | "TRUSTED SEND", // ATA-8 | |
131 | "TRUSTED SEND DMA", // ATA-8 | |
832b75ed | 132 | /*-------------------------------------------------- 60h-6Fh -----*/ |
ee38a438 GI |
133 | "READ FPDMA QUEUED", // ATA-8 |
134 | "WRITE FPDMA QUEUED", // ATA-8 | |
832b75ed | 135 | cmd_reserved_sa, |
ee38a438 GI |
136 | "NCQ QUEUE MANAGEMENT", // ACS-3 |
137 | "SEND FPDMA QUEUED", // ACS-3 | |
138 | "RECEIVE FPDMA QUEUED", // ACS-3 | |
832b75ed GG |
139 | cmd_reserved_sa, |
140 | cmd_reserved_sa, | |
141 | cmd_reserved, | |
142 | cmd_reserved, | |
143 | cmd_reserved, | |
144 | cmd_reserved, | |
145 | cmd_reserved, | |
146 | cmd_reserved, | |
147 | cmd_reserved, | |
148 | cmd_reserved, | |
149 | /*-------------------------------------------------- 70h-7Fh -----*/ | |
150 | "SEEK [OBS-7]", | |
151 | cmd_seek_ret4, | |
152 | cmd_seek_ret4, | |
153 | cmd_seek_ret4, | |
154 | cmd_seek_ret4, | |
155 | cmd_seek_ret4, | |
156 | cmd_seek_ret4, | |
ee38a438 GI |
157 | "SET DATE & TIME EXT", // ACS-3 |
158 | "ACCESSIBLE MAX ADDRESS CONFIGURATION", // ACS-3 | |
832b75ed GG |
159 | cmd_seek_ret4, |
160 | cmd_seek_ret4, | |
161 | cmd_seek_ret4, | |
162 | cmd_seek_ret4, | |
163 | cmd_seek_ret4, | |
164 | cmd_seek_ret4, | |
165 | cmd_seek_ret4, | |
166 | /*-------------------------------------------------- 80h-8Fh -----*/ | |
167 | cmd_vendor_specific, | |
168 | cmd_vendor_specific, | |
169 | cmd_vendor_specific, | |
170 | cmd_vendor_specific, | |
171 | cmd_vendor_specific, | |
172 | cmd_vendor_specific, | |
173 | cmd_vendor_specific, | |
174 | "CFA TRANSLATE SECTOR [VS IF NO CFA]", | |
175 | cmd_vendor_specific, | |
176 | cmd_vendor_specific, | |
177 | cmd_vendor_specific, | |
178 | cmd_vendor_specific, | |
179 | cmd_vendor_specific, | |
180 | cmd_vendor_specific, | |
181 | cmd_vendor_specific, | |
182 | cmd_vendor_specific, | |
183 | /*-------------------------------------------------- 90h-9Fh -----*/ | |
184 | "EXECUTE DEVICE DIAGNOSTIC", | |
185 | "INITIALIZE DEVICE PARAMETERS [OBS-6]", | |
186 | "DOWNLOAD MICROCODE", | |
ee38a438 | 187 | "DOWNLOAD MICROCODE DMA", // ACS-2 |
832b75ed GG |
188 | "STANDBY IMMEDIATE [RET-4]", |
189 | "IDLE IMMEDIATE [RET-4]", | |
190 | "STANDBY [RET-4]", | |
191 | "IDLE [RET-4]", | |
192 | "CHECK POWER MODE [RET-4]", | |
193 | "SLEEP [RET-4]", | |
194 | cmd_vendor_specific, | |
195 | cmd_reserved, | |
196 | cmd_reserved, | |
197 | cmd_reserved, | |
198 | cmd_reserved, | |
199 | cmd_reserved, | |
200 | /*-------------------------------------------------- A0h-AFh -----*/ | |
201 | "PACKET", | |
202 | "IDENTIFY PACKET DEVICE", | |
ee38a438 | 203 | "SERVICE [OBS-ACS-2]", |
832b75ed GG |
204 | cmd_reserved, |
205 | cmd_reserved, | |
206 | cmd_reserved, | |
207 | cmd_reserved, | |
208 | cmd_reserved, | |
209 | cmd_reserved, | |
210 | cmd_reserved, | |
211 | cmd_reserved, | |
212 | cmd_reserved, | |
213 | cmd_reserved, | |
214 | cmd_reserved, | |
215 | cmd_reserved, | |
216 | cmd_reserved, | |
217 | /*-------------------------------------------------- B0h-BFh -----*/ | |
218 | "SMART", | |
ee38a438 | 219 | "DEVICE CONFIGURATION [OBS-ACS-3]", |
832b75ed GG |
220 | cmd_reserved, |
221 | cmd_reserved, | |
ee38a438 | 222 | "SANITIZE DEVICE", // ACS-2 |
832b75ed | 223 | cmd_reserved, |
ee38a438 | 224 | "NV CACHE [OBS-ACS-3]", // ATA-8 |
832b75ed GG |
225 | cmd_reserved_cf, |
226 | cmd_reserved_cf, | |
227 | cmd_reserved_cf, | |
228 | cmd_reserved_cf, | |
229 | cmd_reserved_cf, | |
ee38a438 GI |
230 | cmd_reserved, |
231 | cmd_reserved, | |
232 | cmd_reserved, | |
233 | cmd_reserved, | |
832b75ed GG |
234 | /*-------------------------------------------------- C0h-CFh -----*/ |
235 | "CFA ERASE SECTORS [VS IF NO CFA]", | |
236 | cmd_vendor_specific, | |
237 | cmd_vendor_specific, | |
238 | cmd_vendor_specific, | |
239 | "READ MULTIPLE", | |
240 | "WRITE MULTIPLE", | |
241 | "SET MULTIPLE MODE", | |
ee38a438 | 242 | "READ DMA QUEUED [OBS-ACS-2]", |
832b75ed | 243 | "READ DMA", |
ee38a438 | 244 | "READ DMA (w/o retry) [OBS-5]", |
832b75ed | 245 | "WRITE DMA", |
ee38a438 GI |
246 | "WRITE DMA (w/o retry) [OBS-5]", |
247 | "WRITE DMA QUEUED [OBS-ACS-2]", | |
832b75ed GG |
248 | "CFA WRITE MULTIPLE WITHOUT ERASE", |
249 | "WRITE MULTIPLE FUA EXT", | |
250 | cmd_reserved, | |
251 | /*-------------------------------------------------- D0h-DFh -----*/ | |
252 | cmd_reserved, | |
ee38a438 | 253 | "CHECK MEDIA CARD TYPE [OBS-ACS-2]", |
832b75ed GG |
254 | cmd_reserved_mcpt, |
255 | cmd_reserved_mcpt, | |
256 | cmd_reserved_mcpt, | |
257 | cmd_reserved, | |
258 | cmd_reserved, | |
259 | cmd_reserved, | |
260 | cmd_reserved, | |
261 | cmd_reserved, | |
ee38a438 | 262 | "GET MEDIA STATUS [OBS-8]", |
832b75ed GG |
263 | "ACKNOWLEDGE MEDIA CHANGE [RET-4]", |
264 | "BOOT POST-BOOT [RET-4]", | |
265 | "BOOT PRE-BOOT [RET-4]", | |
ee38a438 GI |
266 | "MEDIA LOCK [OBS-8]", |
267 | "MEDIA UNLOCK [OBS-8]", | |
832b75ed GG |
268 | /*-------------------------------------------------- E0h-EFh -----*/ |
269 | "STANDBY IMMEDIATE", | |
270 | "IDLE IMMEDIATE", | |
271 | "STANDBY", | |
272 | "IDLE", | |
273 | "READ BUFFER", | |
274 | "CHECK POWER MODE", | |
275 | "SLEEP", | |
276 | "FLUSH CACHE", | |
277 | "WRITE BUFFER", | |
ee38a438 | 278 | "READ BUFFER DMA", // ACS-2 (was: WRITE SAME [RET-4]) |
2127e193 | 279 | "FLUSH CACHE EXT", |
ee38a438 | 280 | "WRITE BUFFER DMA", // ACS-2 |
832b75ed | 281 | "IDENTIFY DEVICE", |
ee38a438 | 282 | "MEDIA EJECT [OBS-8]", |
832b75ed GG |
283 | "IDENTIFY DEVICE DMA [OBS-4]", |
284 | "SET FEATURES", | |
285 | /*-------------------------------------------------- F0h-FFh -----*/ | |
286 | cmd_vendor_specific, | |
287 | "SECURITY SET PASSWORD", | |
288 | "SECURITY UNLOCK", | |
289 | "SECURITY ERASE PREPARE", | |
290 | "SECURITY ERASE UNIT", | |
291 | "SECURITY FREEZE LOCK", | |
292 | "SECURITY DISABLE PASSWORD", | |
293 | cmd_vendor_specific, | |
ee38a438 GI |
294 | "READ NATIVE MAX ADDRESS [OBS-ACS-3]", |
295 | "SET MAX ADDRESS [OBS-ACS-3]", | |
832b75ed GG |
296 | cmd_vendor_specific, |
297 | cmd_vendor_specific, | |
298 | cmd_vendor_specific, | |
299 | cmd_vendor_specific, | |
300 | cmd_vendor_specific, | |
301 | cmd_vendor_specific | |
302 | }; | |
303 | ||
ee38a438 GI |
304 | typedef char ASSERT_command_table_size[ |
305 | sizeof(command_table)/sizeof(command_table[0]) == 256 ? 1 : -1]; | |
306 | ||
832b75ed GG |
307 | /* Returns the name of the command (and possibly sub-command) with the given |
308 | command code and feature register values. For most command codes this | |
309 | simply returns the corresponding entry in the command_table array, but for | |
310 | others the value of the feature register specifies a subcommand or | |
311 | distinguishes commands. */ | |
312 | const char *look_up_ata_command(unsigned char c_code, unsigned char f_reg) { | |
313 | ||
832b75ed GG |
314 | switch (c_code) { |
315 | case 0x00: /* NOP */ | |
316 | switch (f_reg) { | |
317 | case 0x00: | |
318 | return "NOP [Abort queued commands]"; | |
319 | case 0x01: | |
ee38a438 | 320 | return "NOP [Don't abort queued commands] [OBS-ACS-2]"; |
832b75ed | 321 | default: |
ee38a438 | 322 | return "NOP [Reserved subcommand] [OBS-ACS-2]"; |
832b75ed GG |
323 | } |
324 | case 0x92: /* DOWNLOAD MICROCODE */ | |
325 | switch (f_reg) { | |
326 | case 0x01: | |
ee38a438 GI |
327 | return "DOWNLOAD MICROCODE [Temporary] [OBS-8]"; |
328 | case 0x03: | |
329 | return "DOWNLOAD MICROCODE [Save with offsets]"; // ATA-8 | |
832b75ed GG |
330 | case 0x07: |
331 | return "DOWNLOAD MICROCODE [Save]"; | |
ee38a438 GI |
332 | case 0x0e: |
333 | return "DOWNLOAD MICROCODE [Save for future use]"; // ACS-3 | |
334 | case 0x0f: | |
335 | return "DOWNLOAD MICROCODE [Activate]"; // ACS-3 | |
832b75ed GG |
336 | default: |
337 | return "DOWNLOAD MICROCODE [Reserved subcommand]"; | |
338 | } | |
339 | case 0xB0: /* SMART */ | |
340 | switch (f_reg) { | |
341 | case 0xD0: | |
342 | return "SMART READ DATA"; | |
343 | case 0xD1: | |
344 | return "SMART READ ATTRIBUTE THRESHOLDS [OBS-4]"; | |
345 | case 0xD2: | |
346 | return "SMART ENABLE/DISABLE ATTRIBUTE AUTOSAVE"; | |
347 | case 0xD3: | |
348 | return "SMART SAVE ATTRIBUTE VALUES [OBS-6]"; | |
349 | case 0xD4: | |
350 | return "SMART EXECUTE OFF-LINE IMMEDIATE"; | |
351 | case 0xD5: | |
352 | return "SMART READ LOG"; | |
353 | case 0xD6: | |
354 | return "SMART WRITE LOG"; | |
355 | case 0xD7: | |
356 | return "SMART WRITE ATTRIBUTE THRESHOLDS [NS, OBS-4]"; | |
357 | case 0xD8: | |
358 | return "SMART ENABLE OPERATIONS"; | |
359 | case 0xD9: | |
360 | return "SMART DISABLE OPERATIONS"; | |
361 | case 0xDA: | |
362 | return "SMART RETURN STATUS"; | |
363 | case 0xDB: | |
364 | return "SMART EN/DISABLE AUTO OFFLINE [NS (SFF-8035i)]"; | |
365 | default: | |
366 | if (f_reg >= 0xE0) | |
ee38a438 | 367 | return "SMART [Vendor specific subcommand]"; |
832b75ed | 368 | else |
ee38a438 | 369 | return "SMART [Reserved subcommand]"; |
832b75ed GG |
370 | } |
371 | case 0xB1: /* DEVICE CONFIGURATION */ | |
372 | switch (f_reg) { | |
373 | case 0xC0: | |
ee38a438 | 374 | return "DEVICE CONFIGURATION RESTORE [OBS-ACS-3]"; |
832b75ed | 375 | case 0xC1: |
ee38a438 | 376 | return "DEVICE CONFIGURATION FREEZE LOCK [OBS-ACS-3]"; |
832b75ed | 377 | case 0xC2: |
ee38a438 | 378 | return "DEVICE CONFIGURATION IDENTIFY [OBS-ACS-3]"; |
832b75ed | 379 | case 0xC3: |
ee38a438 | 380 | return "DEVICE CONFIGURATION SET [OBS-ACS-3]"; |
832b75ed | 381 | default: |
ee38a438 | 382 | return "DEVICE CONFIGURATION [Reserved subcommand] [OBS-ACS-3]"; |
832b75ed | 383 | } |
832b75ed GG |
384 | case 0xEF: /* SET FEATURES */ |
385 | switch (f_reg) { | |
386 | case 0x01: | |
ee38a438 | 387 | return "SET FEATURES [Enable 8-bit PIO] [OBS-3]"; // Now CFA |
832b75ed GG |
388 | case 0x02: |
389 | return "SET FEATURES [Enable write cache]"; | |
390 | case 0x03: | |
391 | return "SET FEATURES [Set transfer mode]"; | |
392 | case 0x04: | |
393 | return "SET FEATURES [Enable auto DR] [OBS-4]"; | |
394 | case 0x05: | |
395 | return "SET FEATURES [Enable APM]"; | |
396 | case 0x06: | |
397 | return "SET FEATURES [Enable Pwr-Up In Standby]"; | |
398 | case 0x07: | |
399 | return "SET FEATURES [Set device spin-up]"; | |
400 | case 0x09: | |
ee38a438 | 401 | return "SET FEATURES [Reserved (address offset)] [OPS-ACS-3]"; |
832b75ed GG |
402 | case 0x0A: |
403 | return "SET FEATURES [Enable CFA power mode 1]"; | |
404 | case 0x10: | |
ee38a438 | 405 | return "SET FEATURES [Enable SATA feature]"; // ACS-3 |
832b75ed GG |
406 | case 0x20: |
407 | return "SET FEATURES [Set Time-ltd R/W WCT]"; | |
408 | case 0x21: | |
409 | return "SET FEATURES [Set Time-ltd R/W EH]"; | |
410 | case 0x31: | |
ee38a438 | 411 | return "SET FEATURES [Disable Media Status Notf] [OBS-8]"; |
832b75ed GG |
412 | case 0x33: |
413 | return "SET FEATURES [Disable retry] [OBS-4]"; | |
ee38a438 GI |
414 | case 0x41: |
415 | return "SET FEATURES [Enable Free-fall Control]"; // ATA-8 | |
832b75ed | 416 | case 0x42: |
ee38a438 | 417 | return "SET FEATURES [Enable AAM] [OBS-ACS-2]"; |
832b75ed GG |
418 | case 0x43: |
419 | return "SET FEATURES [Set Max Host I/F S Times]"; | |
420 | case 0x44: | |
421 | return "SET FEATURES [Length of VS data] [OBS-4]"; | |
ee38a438 GI |
422 | case 0x4a: |
423 | return "SET FEATURES [Ext. Power Conditions]"; // ACS-2 | |
832b75ed GG |
424 | case 0x54: |
425 | return "SET FEATURES [Set cache segs] [OBS-4]"; | |
426 | case 0x55: | |
427 | return "SET FEATURES [Disable read look-ahead]"; | |
428 | case 0x5D: | |
ee38a438 | 429 | return "SET FEATURES [Enable release interrupt] [OBS-ACS-2]"; |
832b75ed | 430 | case 0x5E: |
ee38a438 | 431 | return "SET FEATURES [Enable SERVICE interrupt] [OBS-ACS-2]"; |
832b75ed GG |
432 | case 0x66: |
433 | return "SET FEATURES [Disable revert defaults]"; | |
ee38a438 GI |
434 | case 0x69: |
435 | return "SET FEATURES [LPS Error Reporting Control]"; // ACS-2 | |
832b75ed GG |
436 | case 0x77: |
437 | return "SET FEATURES [Disable ECC] [OBS-4]"; | |
438 | case 0x81: | |
ee38a438 | 439 | return "SET FEATURES [Disable 8-bit PIO] [OBS-3]"; // Now CFA |
832b75ed GG |
440 | case 0x82: |
441 | return "SET FEATURES [Disable write cache]"; | |
442 | case 0x84: | |
443 | return "SET FEATURES [Disable auto DR] [OBS-4]"; | |
444 | case 0x85: | |
445 | return "SET FEATURES [Disable APM]"; | |
446 | case 0x86: | |
447 | return "SET FEATURES [Disable Pwr-Up In Standby]"; | |
448 | case 0x88: | |
449 | return "SET FEATURES [Disable ECC] [OBS-4]"; | |
450 | case 0x89: | |
451 | return "SET FEATURES [Reserved (address offset)]"; | |
452 | case 0x8A: | |
453 | return "SET FEATURES [Disable CFA power mode 1]"; | |
454 | case 0x90: | |
ee38a438 | 455 | return "SET FEATURES [Disable SATA feature]"; // ACS-3 |
832b75ed | 456 | case 0x95: |
ee38a438 | 457 | return "SET FEATURES [Enable Media Status Notf] [OBS-8]"; |
832b75ed GG |
458 | case 0x99: |
459 | return "SET FEATURES [Enable retries] [OBS-4]"; | |
460 | case 0x9A: | |
461 | return "SET FEATURES [Set max avg curr] [OBS-4]"; | |
462 | case 0xAA: | |
463 | return "SET FEATURES [Enable read look-ahead]"; | |
464 | case 0xAB: | |
465 | return "SET FEATURES [Set max prefetch] [OBS-4]"; | |
466 | case 0xBB: | |
467 | return "SET FEATURES [4 bytes VS data] [OBS-4]"; | |
ee38a438 GI |
468 | case 0xC1: |
469 | return "SET FEATURES [Disable Free-fall Control]"; // ATA-8 | |
832b75ed | 470 | case 0xC2: |
ee38a438 GI |
471 | return "SET FEATURES [Disable AAM] [OBS-ACS-2]"; |
472 | case 0xC3: | |
473 | return "SET FEATURES [Sense Data Reporting]"; // ACS-2 | |
832b75ed GG |
474 | case 0xCC: |
475 | return "SET FEATURES [Enable revert to defaults]"; | |
476 | case 0xDD: | |
ee38a438 | 477 | return "SET FEATURES [Disable release interrupt] [OBS-ACS-2]"; |
832b75ed | 478 | case 0xDE: |
ee38a438 | 479 | return "SET FEATURES [Disable SERVICE interrupt] [OBS-ACS-2]"; |
832b75ed | 480 | case 0xE0: |
ee38a438 | 481 | return "SET FEATURES [Vendor specific] [OBS-7]"; |
832b75ed GG |
482 | default: |
483 | if (f_reg >= 0xF0) | |
484 | return "SET FEATURES [Reserved for CFA]"; | |
485 | else | |
486 | return "SET FEATURES [Reserved subcommand]"; | |
487 | } | |
488 | case 0xF9: /* SET MAX */ | |
489 | switch (f_reg) { | |
490 | case 0x00: | |
491 | return "SET MAX ADDRESS [OBS-6]"; | |
492 | case 0x01: | |
ee38a438 | 493 | return "SET MAX SET PASSWORD [OBS-ACS-3]"; |
832b75ed | 494 | case 0x02: |
ee38a438 | 495 | return "SET MAX LOCK [OBS-ACS-3]"; |
832b75ed | 496 | case 0x03: |
ee38a438 | 497 | return "SET MAX UNLOCK [OBS-ACS-3]"; |
832b75ed | 498 | case 0x04: |
ee38a438 | 499 | return "SET MAX FREEZE LOCK [OBS-ACS-3]"; |
832b75ed | 500 | default: |
ee38a438 | 501 | return "SET MAX [Reserved subcommand] [OBS-ACS-3]"; |
832b75ed GG |
502 | } |
503 | default: | |
504 | return command_table[c_code]; | |
505 | } | |
506 | } |