version 1.1.1.1, 2012/02/21 16:32:16
|
version 1.1.1.2, 2013/07/22 01:17:35
|
Line 1
|
Line 1
|
/* |
/* |
* atacmdnames.cpp |
* atacmdnames.cpp |
* |
* |
* This module is based on the T13/1532D Volume 1 Revision 3 (ATA/ATAPI-7) |
|
* specification, which is available from http://www.t13.org/#FTP_site |
|
* |
|
* Home page of code is: http://smartmontools.sourceforge.net |
* Home page of code is: http://smartmontools.sourceforge.net |
* Address of support mailing list: smartmontools-support@lists.sourceforge.net |
|
* |
* |
* Copyright (C) 2003-8 Philip Williams |
* Copyright (C) 2003-8 Philip Williams |
|
* Copyright (C) 2012 Christian Franke <smartmontools-support@lists.sourceforge.net> |
* |
* |
* This program is free software; you can redistribute it and/or modify |
* This program is free software; you can redistribute it and/or modify |
* it under the terms of the GNU General Public License as published by |
* it under the terms of the GNU General Public License as published by |
Line 15
|
Line 12
|
* any later version. |
* any later version. |
* |
* |
* You should have received a copy of the GNU General Public License |
* You should have received a copy of the GNU General Public License |
* (for example COPYING); if not, write to the Free | * (for example COPYING); If not, see <http://www.gnu.org/licenses/>. |
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |
* |
* |
*/ |
*/ |
|
|
Line 24
|
Line 20
|
#include <stdlib.h> |
#include <stdlib.h> |
#include <stdio.h> |
#include <stdio.h> |
|
|
#define COMMAND_TABLE_SIZE 256 | const char * atacmdnames_cpp_cvsid = "$Id$" |
| ATACMDNAMES_H_CVSID; |
|
|
const char *atacmdnames_c_cvsid="$Id$" ATACMDNAMES_H_CVSID; |
|
|
|
const char cmd_reserved[] = "[RESERVED]"; |
const char cmd_reserved[] = "[RESERVED]"; |
const char cmd_vendor_specific[] = "[VENDOR SPECIFIC]"; |
const char cmd_vendor_specific[] = "[VENDOR SPECIFIC]"; |
const char cmd_reserved_sa[] = "[RESERVED FOR SERIAL ATA]"; |
const char cmd_reserved_sa[] = "[RESERVED FOR SERIAL ATA]"; |
const char cmd_reserved_cf[] = "[RESERVED FOR COMPACTFLASH ASSOCIATION]"; |
const char cmd_reserved_cf[] = "[RESERVED FOR COMPACTFLASH ASSOCIATION]"; |
const char cmd_reserved_mcpt[] = "[RESERVED FOR MEDIA CARD PASS THROUGH]"; | const char cmd_reserved_mcpt[] = "[RESERVED FOR MEDIA CARD PASS THROUGH]"; // ACS-3: Reserved |
const char cmd_recalibrate_ret4[]= "RECALIBRATE [RET-4]"; |
const char cmd_recalibrate_ret4[]= "RECALIBRATE [RET-4]"; |
const char cmd_seek_ret4[] = "SEEK [RET-4]"; |
const char cmd_seek_ret4[] = "SEEK [RET-4]"; |
|
|
const char *command_table[COMMAND_TABLE_SIZE] = { | // Tables B.3 and B.4 of T13/2161-D (ACS-3) Revision 4, September 4, 2012 |
| |
| const char * const command_table[] = { |
/*-------------------------------------------------- 00h-0Fh -----*/ |
/*-------------------------------------------------- 00h-0Fh -----*/ |
"NOP", |
"NOP", |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
"CFA REQUEST EXTENDED ERROR CODE", | "CFA REQUEST EXTENDED ERROR", |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
|
"DATA SET MANAGEMENT", // ACS-2 |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
|
"DEVICE RESET", |
"DEVICE RESET", |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
|
"REQUEST SENSE DATA EXT", // ACS-2 |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
|
/*-------------------------------------------------- 10h-1Fh -----*/ |
/*-------------------------------------------------- 10h-1Fh -----*/ |
"RECALIBRATE [OBS-4]", |
"RECALIBRATE [OBS-4]", |
cmd_recalibrate_ret4, |
cmd_recalibrate_ret4, |
Line 74 const char *command_table[COMMAND_TABLE_SIZE] = {
|
Line 71 const char *command_table[COMMAND_TABLE_SIZE] = {
|
/*-------------------------------------------------- 20h-2Fh -----*/ |
/*-------------------------------------------------- 20h-2Fh -----*/ |
"READ SECTOR(S)", |
"READ SECTOR(S)", |
"READ SECTOR(S) [OBS-5]", |
"READ SECTOR(S) [OBS-5]", |
"READ LONG (w/ retry) [OBS-4]", | "READ LONG [OBS-4]", |
"READ LONG (w/o retry) [OBS-4]", |
"READ LONG (w/o retry) [OBS-4]", |
"READ SECTOR(S) EXT", |
"READ SECTOR(S) EXT", |
"READ DMA EXT", |
"READ DMA EXT", |
"READ DMA QUEUED EXT", | "READ DMA QUEUED EXT [OBS-ACS-2]", |
"READ NATIVE MAX ADDRESS EXT", | "READ NATIVE MAX ADDRESS EXT [OBS-ACS-3]", |
cmd_reserved, |
cmd_reserved, |
"READ MULTIPLE EXT", |
"READ MULTIPLE EXT", |
"READ STREAM DMA", |
"READ STREAM DMA", |
"READ STREAM PIO", | "READ STREAM", |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
"READ LOG EXT", |
"READ LOG EXT", |
/*-------------------------------------------------- 30h-3Fh -----*/ |
/*-------------------------------------------------- 30h-3Fh -----*/ |
"WRITE SECTOR(S)", |
"WRITE SECTOR(S)", |
"WRITE SECTOR(S) [OBS-5]", | "WRITE SECTOR(S) (w/o retry) [OBS-5]", |
"WRITE LONG(w/ retry) [OBS-4]", | "WRITE LONG [OBS-4]", |
"WRITE LONG(w/o retry) [OBS-4]", | "WRITE LONG (w/o retry) [OBS-4]", |
"WRITE SECTORS(S) EXT", |
"WRITE SECTORS(S) EXT", |
"WRITE DMA EXT", |
"WRITE DMA EXT", |
"WRITE DMA QUEUED EXT", | "WRITE DMA QUEUED EXT [OBS-ACS-2]", |
"SET MAX ADDRESS EXT", | "SET NATIVE MAX ADDRESS EXT [OBS-ACS-3]", |
"CFA WRITE SECTORS WITHOUT ERASE", |
"CFA WRITE SECTORS WITHOUT ERASE", |
"WRITE MULTIPLE EXT", |
"WRITE MULTIPLE EXT", |
"WRITE STREAM DMA", |
"WRITE STREAM DMA", |
"WRITE STREAM PIO", | "WRITE STREAM", |
"WRITE VERIFY [OBS-4]", |
"WRITE VERIFY [OBS-4]", |
"WRITE DMA FUA EXT", |
"WRITE DMA FUA EXT", |
"WRITE DMA QUEUED FUA EXT", | "WRITE DMA QUEUED FUA EXT [OBS-ACS-2]", |
"WRITE LOG EXT", |
"WRITE LOG EXT", |
/*-------------------------------------------------- 40h-4Fh -----*/ |
/*-------------------------------------------------- 40h-4Fh -----*/ |
"READ VERIFY SECTOR(S)", |
"READ VERIFY SECTOR(S)", |
"READ VERIFY SECTOR(S) [OBS-5]", | "READ VERIFY SECTOR(S) (w/o retry) [OBS-5]", |
"READ VERIFY SECTOR(S) EXT", |
"READ VERIFY SECTOR(S) EXT", |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
|
"WRITE UNCORRECTABLE EXT", // ATA-8 |
cmd_reserved, |
cmd_reserved, |
|
"READ LOG DMA EXT", // ATA-8 |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
Line 120 const char *command_table[COMMAND_TABLE_SIZE] = {
|
Line 119 const char *command_table[COMMAND_TABLE_SIZE] = {
|
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
|
cmd_reserved, |
|
/*-------------------------------------------------- 50h-5Fh -----*/ |
/*-------------------------------------------------- 50h-5Fh -----*/ |
"FORMAT TRACK [OBS-4]", |
"FORMAT TRACK [OBS-4]", |
"CONFIGURE STREAM", |
"CONFIGURE STREAM", |
Line 130 const char *command_table[COMMAND_TABLE_SIZE] = {
|
Line 127 const char *command_table[COMMAND_TABLE_SIZE] = {
|
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
|
"WRITE LOG DMA EXT", // ATA-8 |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, | "TRUSTED NON-DATA", // ATA-8 |
cmd_reserved, | "TRUSTED RECEIVE", // ATA-8 |
cmd_reserved, | "TRUSTED RECEIVE DMA", // ATA-8 |
cmd_reserved, | "TRUSTED SEND", // ATA-8 |
cmd_reserved, | "TRUSTED SEND DMA", // ATA-8 |
cmd_reserved, | |
/*-------------------------------------------------- 60h-6Fh -----*/ |
/*-------------------------------------------------- 60h-6Fh -----*/ |
"READ FPDMA QUEUED", | "READ FPDMA QUEUED", // ATA-8 |
"WRITE FPDMA QUEUED", | "WRITE FPDMA QUEUED", // ATA-8 |
cmd_reserved_sa, |
cmd_reserved_sa, |
|
"NCQ QUEUE MANAGEMENT", // ACS-3 |
|
"SEND FPDMA QUEUED", // ACS-3 |
|
"RECEIVE FPDMA QUEUED", // ACS-3 |
cmd_reserved_sa, |
cmd_reserved_sa, |
cmd_reserved_sa, |
cmd_reserved_sa, |
cmd_reserved_sa, |
|
cmd_reserved_sa, |
|
cmd_reserved_sa, |
|
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
Line 164 const char *command_table[COMMAND_TABLE_SIZE] = {
|
Line 161 const char *command_table[COMMAND_TABLE_SIZE] = {
|
cmd_seek_ret4, |
cmd_seek_ret4, |
cmd_seek_ret4, |
cmd_seek_ret4, |
cmd_seek_ret4, |
cmd_seek_ret4, |
|
"SET DATE & TIME EXT", // ACS-3 |
|
"ACCESSIBLE MAX ADDRESS CONFIGURATION", // ACS-3 |
cmd_seek_ret4, |
cmd_seek_ret4, |
cmd_seek_ret4, |
cmd_seek_ret4, |
cmd_seek_ret4, |
cmd_seek_ret4, |
Line 171 const char *command_table[COMMAND_TABLE_SIZE] = {
|
Line 170 const char *command_table[COMMAND_TABLE_SIZE] = {
|
cmd_seek_ret4, |
cmd_seek_ret4, |
cmd_seek_ret4, |
cmd_seek_ret4, |
cmd_seek_ret4, |
cmd_seek_ret4, |
cmd_seek_ret4, |
|
cmd_seek_ret4, |
|
/*-------------------------------------------------- 80h-8Fh -----*/ |
/*-------------------------------------------------- 80h-8Fh -----*/ |
cmd_vendor_specific, |
cmd_vendor_specific, |
cmd_vendor_specific, |
cmd_vendor_specific, |
Line 194 const char *command_table[COMMAND_TABLE_SIZE] = {
|
Line 191 const char *command_table[COMMAND_TABLE_SIZE] = {
|
"EXECUTE DEVICE DIAGNOSTIC", |
"EXECUTE DEVICE DIAGNOSTIC", |
"INITIALIZE DEVICE PARAMETERS [OBS-6]", |
"INITIALIZE DEVICE PARAMETERS [OBS-6]", |
"DOWNLOAD MICROCODE", |
"DOWNLOAD MICROCODE", |
cmd_reserved, | "DOWNLOAD MICROCODE DMA", // ACS-2 |
"STANDBY IMMEDIATE [RET-4]", |
"STANDBY IMMEDIATE [RET-4]", |
"IDLE IMMEDIATE [RET-4]", |
"IDLE IMMEDIATE [RET-4]", |
"STANDBY [RET-4]", |
"STANDBY [RET-4]", |
Line 210 const char *command_table[COMMAND_TABLE_SIZE] = {
|
Line 207 const char *command_table[COMMAND_TABLE_SIZE] = {
|
/*-------------------------------------------------- A0h-AFh -----*/ |
/*-------------------------------------------------- A0h-AFh -----*/ |
"PACKET", |
"PACKET", |
"IDENTIFY PACKET DEVICE", |
"IDENTIFY PACKET DEVICE", |
"SERVICE", | "SERVICE [OBS-ACS-2]", |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
Line 226 const char *command_table[COMMAND_TABLE_SIZE] = {
|
Line 223 const char *command_table[COMMAND_TABLE_SIZE] = {
|
cmd_reserved, |
cmd_reserved, |
/*-------------------------------------------------- B0h-BFh -----*/ |
/*-------------------------------------------------- B0h-BFh -----*/ |
"SMART", |
"SMART", |
"DEVICE CONFIGURATION", | "DEVICE CONFIGURATION [OBS-ACS-3]", |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
|
"SANITIZE DEVICE", // ACS-2 |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, | "NV CACHE [OBS-ACS-3]", // ATA-8 |
cmd_reserved, | |
cmd_reserved, | |
cmd_reserved_cf, |
cmd_reserved_cf, |
cmd_reserved_cf, |
cmd_reserved_cf, |
cmd_reserved_cf, |
cmd_reserved_cf, |
cmd_reserved_cf, |
cmd_reserved_cf, |
cmd_reserved_cf, |
cmd_reserved_cf, |
cmd_reserved_cf, | cmd_reserved, |
cmd_reserved_cf, | cmd_reserved, |
cmd_reserved_cf, | cmd_reserved, |
| cmd_reserved, |
/*-------------------------------------------------- C0h-CFh -----*/ |
/*-------------------------------------------------- C0h-CFh -----*/ |
"CFA ERASE SECTORS [VS IF NO CFA]", |
"CFA ERASE SECTORS [VS IF NO CFA]", |
cmd_vendor_specific, |
cmd_vendor_specific, |
Line 249 const char *command_table[COMMAND_TABLE_SIZE] = {
|
Line 246 const char *command_table[COMMAND_TABLE_SIZE] = {
|
"READ MULTIPLE", |
"READ MULTIPLE", |
"WRITE MULTIPLE", |
"WRITE MULTIPLE", |
"SET MULTIPLE MODE", |
"SET MULTIPLE MODE", |
"READ DMA QUEUED", | "READ DMA QUEUED [OBS-ACS-2]", |
"READ DMA", |
"READ DMA", |
"READ DMA [OBS-5]", | "READ DMA (w/o retry) [OBS-5]", |
"WRITE DMA", |
"WRITE DMA", |
"WRITE DMA [OBS-5]", | "WRITE DMA (w/o retry) [OBS-5]", |
"WRITE DMA QUEUED", | "WRITE DMA QUEUED [OBS-ACS-2]", |
"CFA WRITE MULTIPLE WITHOUT ERASE", |
"CFA WRITE MULTIPLE WITHOUT ERASE", |
"WRITE MULTIPLE FUA EXT", |
"WRITE MULTIPLE FUA EXT", |
cmd_reserved, |
cmd_reserved, |
/*-------------------------------------------------- D0h-DFh -----*/ |
/*-------------------------------------------------- D0h-DFh -----*/ |
cmd_reserved, |
cmd_reserved, |
"CHECK MEDIA CARD TYPE", | "CHECK MEDIA CARD TYPE [OBS-ACS-2]", |
cmd_reserved_mcpt, |
cmd_reserved_mcpt, |
cmd_reserved_mcpt, |
cmd_reserved_mcpt, |
cmd_reserved_mcpt, |
cmd_reserved_mcpt, |
Line 269 const char *command_table[COMMAND_TABLE_SIZE] = {
|
Line 266 const char *command_table[COMMAND_TABLE_SIZE] = {
|
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
cmd_reserved, |
"GET MEDIA STATUS", | "GET MEDIA STATUS [OBS-8]", |
"ACKNOWLEDGE MEDIA CHANGE [RET-4]", |
"ACKNOWLEDGE MEDIA CHANGE [RET-4]", |
"BOOT POST-BOOT [RET-4]", |
"BOOT POST-BOOT [RET-4]", |
"BOOT PRE-BOOT [RET-4]", |
"BOOT PRE-BOOT [RET-4]", |
"MEDIA LOCK", | "MEDIA LOCK [OBS-8]", |
"MEDIA UNLOCK", | "MEDIA UNLOCK [OBS-8]", |
/*-------------------------------------------------- E0h-EFh -----*/ |
/*-------------------------------------------------- E0h-EFh -----*/ |
"STANDBY IMMEDIATE", |
"STANDBY IMMEDIATE", |
"IDLE IMMEDIATE", |
"IDLE IMMEDIATE", |
Line 285 const char *command_table[COMMAND_TABLE_SIZE] = {
|
Line 282 const char *command_table[COMMAND_TABLE_SIZE] = {
|
"SLEEP", |
"SLEEP", |
"FLUSH CACHE", |
"FLUSH CACHE", |
"WRITE BUFFER", |
"WRITE BUFFER", |
"WRITE SAME [RET-4]", /* Warning! This command is retired but the value of | "READ BUFFER DMA", // ACS-2 (was: WRITE SAME [RET-4]) |
f_reg is used in look_up_ata_command(). If this | |
command code is reclaimed in a future standard then | |
be sure to update look_up_ata_command(). */ | |
"FLUSH CACHE EXT", |
"FLUSH CACHE EXT", |
cmd_reserved, | "WRITE BUFFER DMA", // ACS-2 |
"IDENTIFY DEVICE", |
"IDENTIFY DEVICE", |
"MEDIA EJECT", | "MEDIA EJECT [OBS-8]", |
"IDENTIFY DEVICE DMA [OBS-4]", |
"IDENTIFY DEVICE DMA [OBS-4]", |
"SET FEATURES", |
"SET FEATURES", |
/*-------------------------------------------------- F0h-FFh -----*/ |
/*-------------------------------------------------- F0h-FFh -----*/ |
Line 304 const char *command_table[COMMAND_TABLE_SIZE] = {
|
Line 298 const char *command_table[COMMAND_TABLE_SIZE] = {
|
"SECURITY FREEZE LOCK", |
"SECURITY FREEZE LOCK", |
"SECURITY DISABLE PASSWORD", |
"SECURITY DISABLE PASSWORD", |
cmd_vendor_specific, |
cmd_vendor_specific, |
"READ NATIVE MAX ADDRESS", | "READ NATIVE MAX ADDRESS [OBS-ACS-3]", |
"SET MAX", | "SET MAX ADDRESS [OBS-ACS-3]", |
cmd_vendor_specific, |
cmd_vendor_specific, |
cmd_vendor_specific, |
cmd_vendor_specific, |
cmd_vendor_specific, |
cmd_vendor_specific, |
Line 314 const char *command_table[COMMAND_TABLE_SIZE] = {
|
Line 308 const char *command_table[COMMAND_TABLE_SIZE] = {
|
cmd_vendor_specific |
cmd_vendor_specific |
}; |
}; |
|
|
|
typedef char ASSERT_command_table_size[ |
|
sizeof(command_table)/sizeof(command_table[0]) == 256 ? 1 : -1]; |
|
|
/* Returns the name of the command (and possibly sub-command) with the given |
/* Returns the name of the command (and possibly sub-command) with the given |
command code and feature register values. For most command codes this |
command code and feature register values. For most command codes this |
simply returns the corresponding entry in the command_table array, but for |
simply returns the corresponding entry in the command_table array, but for |
Line 321 const char *command_table[COMMAND_TABLE_SIZE] = {
|
Line 318 const char *command_table[COMMAND_TABLE_SIZE] = {
|
distinguishes commands. */ |
distinguishes commands. */ |
const char *look_up_ata_command(unsigned char c_code, unsigned char f_reg) { |
const char *look_up_ata_command(unsigned char c_code, unsigned char f_reg) { |
|
|
// check that command table not messed up. The compiler will issue |
|
// warnings if there are too many array elements, but won't issue |
|
// warnings if there are not enough of them. |
|
if (sizeof(command_table) != sizeof(char *)*COMMAND_TABLE_SIZE){ |
|
fprintf(stderr, |
|
"Problem in atacmdnames.c. Command Table command_table[] does\n" |
|
"not have %d entries! It has %d entries. Please fix it.\n", |
|
COMMAND_TABLE_SIZE, (int)(sizeof(command_table)/sizeof(char *))); |
|
abort(); |
|
} |
|
|
|
switch (c_code) { |
switch (c_code) { |
case 0x00: /* NOP */ |
case 0x00: /* NOP */ |
switch (f_reg) { |
switch (f_reg) { |
case 0x00: |
case 0x00: |
return "NOP [Abort queued commands]"; |
return "NOP [Abort queued commands]"; |
case 0x01: |
case 0x01: |
return "NOP [Don't abort queued commands]"; | return "NOP [Don't abort queued commands] [OBS-ACS-2]"; |
default: |
default: |
return "NOP [Reserved subcommand]"; | return "NOP [Reserved subcommand] [OBS-ACS-2]"; |
} |
} |
case 0x92: /* DOWNLOAD MICROCODE */ |
case 0x92: /* DOWNLOAD MICROCODE */ |
switch (f_reg) { |
switch (f_reg) { |
case 0x01: |
case 0x01: |
return "DOWNLOAD MICROCODE [Temporary]"; | return "DOWNLOAD MICROCODE [Temporary] [OBS-8]"; |
| case 0x03: |
| return "DOWNLOAD MICROCODE [Save with offsets]"; // ATA-8 |
case 0x07: |
case 0x07: |
return "DOWNLOAD MICROCODE [Save]"; |
return "DOWNLOAD MICROCODE [Save]"; |
|
case 0x0e: |
|
return "DOWNLOAD MICROCODE [Save for future use]"; // ACS-3 |
|
case 0x0f: |
|
return "DOWNLOAD MICROCODE [Activate]"; // ACS-3 |
default: |
default: |
return "DOWNLOAD MICROCODE [Reserved subcommand]"; |
return "DOWNLOAD MICROCODE [Reserved subcommand]"; |
} |
} |
Line 379 const char *look_up_ata_command(unsigned char c_code,
|
Line 371 const char *look_up_ata_command(unsigned char c_code,
|
return "SMART EN/DISABLE AUTO OFFLINE [NS (SFF-8035i)]"; |
return "SMART EN/DISABLE AUTO OFFLINE [NS (SFF-8035i)]"; |
default: |
default: |
if (f_reg >= 0xE0) |
if (f_reg >= 0xE0) |
return "[Vendor specific SMART command]"; | return "SMART [Vendor specific subcommand]"; |
else |
else |
return "[Reserved SMART command]"; | return "SMART [Reserved subcommand]"; |
} |
} |
case 0xB1: /* DEVICE CONFIGURATION */ |
case 0xB1: /* DEVICE CONFIGURATION */ |
switch (f_reg) { |
switch (f_reg) { |
case 0xC0: |
case 0xC0: |
return "DEVICE CONFIGURATION RESTORE"; | return "DEVICE CONFIGURATION RESTORE [OBS-ACS-3]"; |
case 0xC1: |
case 0xC1: |
return "DEVICE CONFIGURATION FREEZE LOCK"; | return "DEVICE CONFIGURATION FREEZE LOCK [OBS-ACS-3]"; |
case 0xC2: |
case 0xC2: |
return "DEVICE CONFIGURATION IDENTIFY"; | return "DEVICE CONFIGURATION IDENTIFY [OBS-ACS-3]"; |
case 0xC3: |
case 0xC3: |
return "DEVICE CONFIGURATION SET"; | return "DEVICE CONFIGURATION SET [OBS-ACS-3]"; |
default: |
default: |
return "DEVICE CONFIGURATION [Reserved command]"; | return "DEVICE CONFIGURATION [Reserved subcommand] [OBS-ACS-3]"; |
} |
} |
case 0xE9: /* WRITE SAME */ |
|
switch (f_reg) { |
|
case 0x22: |
|
return "WRITE SAME [Start specified] [RET-4]"; |
|
case 0xDD: |
|
return "WRITE SAME [Start unspecified] [RET-4]"; |
|
default: |
|
return "WRITE SAME [Invalid subcommand] [RET-4]"; |
|
} |
|
case 0xEF: /* SET FEATURES */ |
case 0xEF: /* SET FEATURES */ |
switch (f_reg) { |
switch (f_reg) { |
case 0x01: |
case 0x01: |
return "SET FEATURES [Enable 8-bit PIO]"; | return "SET FEATURES [Enable 8-bit PIO] [OBS-3]"; // Now CFA |
case 0x02: |
case 0x02: |
return "SET FEATURES [Enable write cache]"; |
return "SET FEATURES [Enable write cache]"; |
case 0x03: |
case 0x03: |
Line 422 const char *look_up_ata_command(unsigned char c_code,
|
Line 405 const char *look_up_ata_command(unsigned char c_code,
|
case 0x07: |
case 0x07: |
return "SET FEATURES [Set device spin-up]"; |
return "SET FEATURES [Set device spin-up]"; |
case 0x09: |
case 0x09: |
return "SET FEATURES [Reserved (address offset)]"; | return "SET FEATURES [Reserved (address offset)] [OPS-ACS-3]"; |
case 0x0A: |
case 0x0A: |
return "SET FEATURES [Enable CFA power mode 1]"; |
return "SET FEATURES [Enable CFA power mode 1]"; |
case 0x10: |
case 0x10: |
return "SET FEATURES [Reserved for Serial ATA]"; | return "SET FEATURES [Enable SATA feature]"; // ACS-3 |
case 0x20: |
case 0x20: |
return "SET FEATURES [Set Time-ltd R/W WCT]"; |
return "SET FEATURES [Set Time-ltd R/W WCT]"; |
case 0x21: |
case 0x21: |
return "SET FEATURES [Set Time-ltd R/W EH]"; |
return "SET FEATURES [Set Time-ltd R/W EH]"; |
case 0x31: |
case 0x31: |
return "SET FEATURES [Disable Media Status Notf]"; | return "SET FEATURES [Disable Media Status Notf] [OBS-8]"; |
case 0x33: |
case 0x33: |
return "SET FEATURES [Disable retry] [OBS-4]"; |
return "SET FEATURES [Disable retry] [OBS-4]"; |
|
case 0x41: |
|
return "SET FEATURES [Enable Free-fall Control]"; // ATA-8 |
case 0x42: |
case 0x42: |
return "SET FEATURES [Enable AAM]"; | return "SET FEATURES [Enable AAM] [OBS-ACS-2]"; |
case 0x43: |
case 0x43: |
return "SET FEATURES [Set Max Host I/F S Times]"; |
return "SET FEATURES [Set Max Host I/F S Times]"; |
case 0x44: |
case 0x44: |
return "SET FEATURES [Length of VS data] [OBS-4]"; |
return "SET FEATURES [Length of VS data] [OBS-4]"; |
|
case 0x4a: |
|
return "SET FEATURES [Ext. Power Conditions]"; // ACS-2 |
case 0x54: |
case 0x54: |
return "SET FEATURES [Set cache segs] [OBS-4]"; |
return "SET FEATURES [Set cache segs] [OBS-4]"; |
case 0x55: |
case 0x55: |
return "SET FEATURES [Disable read look-ahead]"; |
return "SET FEATURES [Disable read look-ahead]"; |
case 0x5D: |
case 0x5D: |
return "SET FEATURES [Enable release interrupt]"; | return "SET FEATURES [Enable release interrupt] [OBS-ACS-2]"; |
case 0x5E: |
case 0x5E: |
return "SET FEATURES [Enable SERVICE interrupt]"; | return "SET FEATURES [Enable SERVICE interrupt] [OBS-ACS-2]"; |
case 0x66: |
case 0x66: |
return "SET FEATURES [Disable revert defaults]"; |
return "SET FEATURES [Disable revert defaults]"; |
|
case 0x69: |
|
return "SET FEATURES [LPS Error Reporting Control]"; // ACS-2 |
case 0x77: |
case 0x77: |
return "SET FEATURES [Disable ECC] [OBS-4]"; |
return "SET FEATURES [Disable ECC] [OBS-4]"; |
case 0x81: |
case 0x81: |
return "SET FEATURES [Disable 8-bit PIO]"; | return "SET FEATURES [Disable 8-bit PIO] [OBS-3]"; // Now CFA |
case 0x82: |
case 0x82: |
return "SET FEATURES [Disable write cache]"; |
return "SET FEATURES [Disable write cache]"; |
case 0x84: |
case 0x84: |
Line 470 const char *look_up_ata_command(unsigned char c_code,
|
Line 459 const char *look_up_ata_command(unsigned char c_code,
|
case 0x8A: |
case 0x8A: |
return "SET FEATURES [Disable CFA power mode 1]"; |
return "SET FEATURES [Disable CFA power mode 1]"; |
case 0x90: |
case 0x90: |
return "SET FEATURES [Reserved for Serial ATA]"; | return "SET FEATURES [Disable SATA feature]"; // ACS-3 |
case 0x95: |
case 0x95: |
return "SET FEATURES [Enable Media Status Notf]"; | return "SET FEATURES [Enable Media Status Notf] [OBS-8]"; |
case 0x99: |
case 0x99: |
return "SET FEATURES [Enable retries] [OBS-4]"; |
return "SET FEATURES [Enable retries] [OBS-4]"; |
case 0x9A: |
case 0x9A: |
Line 483 const char *look_up_ata_command(unsigned char c_code,
|
Line 472 const char *look_up_ata_command(unsigned char c_code,
|
return "SET FEATURES [Set max prefetch] [OBS-4]"; |
return "SET FEATURES [Set max prefetch] [OBS-4]"; |
case 0xBB: |
case 0xBB: |
return "SET FEATURES [4 bytes VS data] [OBS-4]"; |
return "SET FEATURES [4 bytes VS data] [OBS-4]"; |
|
case 0xC1: |
|
return "SET FEATURES [Disable Free-fall Control]"; // ATA-8 |
case 0xC2: |
case 0xC2: |
return "SET FEATURES [Disable AAM]"; | return "SET FEATURES [Disable AAM] [OBS-ACS-2]"; |
| case 0xC3: |
| return "SET FEATURES [Sense Data Reporting]"; // ACS-2 |
case 0xCC: |
case 0xCC: |
return "SET FEATURES [Enable revert to defaults]"; |
return "SET FEATURES [Enable revert to defaults]"; |
case 0xDD: |
case 0xDD: |
return "SET FEATURES [Disable release interrupt]"; | return "SET FEATURES [Disable release interrupt] [OBS-ACS-2]"; |
case 0xDE: |
case 0xDE: |
return "SET FEATURES [Disable SERVICE interrupt]"; | return "SET FEATURES [Disable SERVICE interrupt] [OBS-ACS-2]"; |
case 0xE0: |
case 0xE0: |
return "SET FEATURES [Obsolete subcommand]"; | return "SET FEATURES [Vendor specific] [OBS-7]"; |
default: |
default: |
if (f_reg >= 0xF0) |
if (f_reg >= 0xF0) |
return "SET FEATURES [Reserved for CFA]"; |
return "SET FEATURES [Reserved for CFA]"; |
Line 504 const char *look_up_ata_command(unsigned char c_code,
|
Line 497 const char *look_up_ata_command(unsigned char c_code,
|
case 0x00: |
case 0x00: |
return "SET MAX ADDRESS [OBS-6]"; |
return "SET MAX ADDRESS [OBS-6]"; |
case 0x01: |
case 0x01: |
return "SET MAX SET PASSWORD"; | return "SET MAX SET PASSWORD [OBS-ACS-3]"; |
case 0x02: |
case 0x02: |
return "SET MAX LOCK"; | return "SET MAX LOCK [OBS-ACS-3]"; |
case 0x03: |
case 0x03: |
return "SET MAX UNLOCK"; | return "SET MAX UNLOCK [OBS-ACS-3]"; |
case 0x04: |
case 0x04: |
return "SET MAX FREEZE LOCK"; | return "SET MAX FREEZE LOCK [OBS-ACS-3]"; |
default: |
default: |
return "[Reserved SET MAX command]"; | return "SET MAX [Reserved subcommand] [OBS-ACS-3]"; |
} |
} |
default: |
default: |
return command_table[c_code]; |
return command_table[c_code]; |