]> git.proxmox.com Git - mirror_smartmontools-debian.git/blame - atacmdnames.cpp
Updated changelog
[mirror_smartmontools-debian.git] / atacmdnames.cpp
CommitLineData
832b75ed 1/*
4d59bff9 2 * atacmdnames.cpp
832b75ed
GG
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 *
34ad0c5f 10 * Copyright (C) 2003-8 Philip Williams
832b75ed
GG
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
2127e193 29const char *atacmdnames_c_cvsid="$Id: atacmdnames.cpp,v 1.17 2008/03/29 23:41:28 shattered Exp $" ATACMDNAMES_H_CVSID;
832b75ed
GG
30
31const char cmd_reserved[] = "[RESERVED]";
32const char cmd_vendor_specific[] = "[VENDOR SPECIFIC]";
33const char cmd_reserved_sa[] = "[RESERVED FOR SERIAL ATA]";
34const char cmd_reserved_cf[] = "[RESERVED FOR COMPACTFLASH ASSOCIATION]";
35const char cmd_reserved_mcpt[] = "[RESERVED FOR MEDIA CARD PASS THROUGH]";
36const char cmd_recalibrate_ret4[]= "RECALIBRATE [RET-4]";
37const char cmd_seek_ret4[] = "SEEK [RET-4]";
38
39const 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 -----*/
ba59cff1
GG
143 "READ FPDMA QUEUED",
144 "WRITE FPDMA QUEUED",
832b75ed
GG
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(). */
2127e193 292 "FLUSH CACHE EXT",
832b75ed
GG
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. */
322const 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}