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