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