From f1abb66f9a1be616a2a47cb41ee8776e4a2ec14b Mon Sep 17 00:00:00 2001 From: joevt Date: Fri, 29 Mar 2024 20:47:25 -0700 Subject: [PATCH] atahd: Add STANDBY_IMMEDIATE. --- devices/common/ata/atadefs.h | 55 ++++++++++++++++++------------------ devices/common/ata/atahd.cpp | 5 ++++ 2 files changed, 33 insertions(+), 27 deletions(-) diff --git a/devices/common/ata/atadefs.h b/devices/common/ata/atadefs.h index e7e49bb..af2a55b 100644 --- a/devices/common/ata/atadefs.h +++ b/devices/common/ata/atadefs.h @@ -117,33 +117,34 @@ enum ATA_CTRL : uint8_t { /* ATA commands. */ enum ATA_Cmd : uint8_t { - NOP = 0x00, - ATAPI_SOFT_RESET = 0x08, - RECALIBRATE = 0x10, - READ_SECTOR = 0x20, - READ_SECTOR_NR = 0x21, - READ_LONG = 0x22, - READ_SECTOR_EXT = 0x24, - WRITE_SECTOR = 0x30, - WRITE_SECTOR_NR = 0x31, - WRITE_LONG = 0x32, - READ_VERIFY = 0x40, - FORMAT_TRACKS = 0x50, - IDE_SEEK = 0x70, - DIAGNOSTICS = 0x90, - INIT_DEV_PARAM = 0x91, - ATAPI_PACKET = 0xA0, - ATAPI_IDFY_DEV = 0xA1, - ATAPI_SERVICE = 0xA2, - READ_MULTIPLE = 0xC4, - WRITE_MULTIPLE = 0xC5, - READ_DMA = 0xC8, - WRITE_DMA = 0xCA, - FLUSH_CACHE = 0xE7, // ATA-5 - WRITE_BUFFER_DMA = 0xE9, - READ_BUFFER_DMA = 0xEB, - IDENTIFY_DEVICE = 0xEC, - SET_FEATURES = 0xEF, + NOP = 0x00, + ATAPI_SOFT_RESET = 0x08, + RECALIBRATE = 0x10, + READ_SECTOR = 0x20, + READ_SECTOR_NR = 0x21, + READ_LONG = 0x22, + READ_SECTOR_EXT = 0x24, + WRITE_SECTOR = 0x30, + WRITE_SECTOR_NR = 0x31, + WRITE_LONG = 0x32, + READ_VERIFY = 0x40, + FORMAT_TRACKS = 0x50, + IDE_SEEK = 0x70, + DIAGNOSTICS = 0x90, + INIT_DEV_PARAM = 0x91, + ATAPI_PACKET = 0xA0, + ATAPI_IDFY_DEV = 0xA1, + ATAPI_SERVICE = 0xA2, + READ_MULTIPLE = 0xC4, + WRITE_MULTIPLE = 0xC5, + READ_DMA = 0xC8, + WRITE_DMA = 0xCA, + STANDBY_IMMEDIATE_E0 = 0xE0, + FLUSH_CACHE = 0xE7, // ATA-5 + WRITE_BUFFER_DMA = 0xE9, + READ_BUFFER_DMA = 0xEB, + IDENTIFY_DEVICE = 0xEC, + SET_FEATURES = 0xEF, }; }; // namespace ata_interface diff --git a/devices/common/ata/atahd.cpp b/devices/common/ata/atahd.cpp index 820a57d..4f9b1d2 100644 --- a/devices/common/ata/atahd.cpp +++ b/devices/common/ata/atahd.cpp @@ -164,6 +164,11 @@ int AtaHardDisk::perform_command() { this->r_status &= ~BSY; this->update_intrq(1); break; + case STANDBY_IMMEDIATE_E0: + LOG_F(INFO, "%s: STANDBY_IMMEDIATE_E0", this->name.c_str()); + this->r_status &= ~BSY; + this->update_intrq(1); + break; default: LOG_F(ERROR, "%s: unknown ATA command 0x%x", this->name.c_str(), this->r_command); this->r_status &= ~BSY;