added 1 changeset to branch 'refs/remotes/axeld-github/trim' old head: b1f4172cb1c860f8b9403388d83edff95f7976aa new head: 642a0489fa360a860d6de29b7f6f0a855f2e6e38 overview: https://github.com/axeld/haiku/compare/b1f4172...642a048 ---------------------------------------------------------------------------- 642a048: ahci: Minor cleanup. * Mostly utilized ATACommands.h [ Axel Dörfler <axeld@xxxxxxxxxxxxxxxx> ] ---------------------------------------------------------------------------- Commit: 642a0489fa360a860d6de29b7f6f0a855f2e6e38 Author: Axel Dörfler <axeld@xxxxxxxxxxxxxxxx> Date: Wed Sep 18 21:04:21 2013 UTC ---------------------------------------------------------------------------- 2 files changed, 17 insertions(+), 8 deletions(-) .../kernel/busses/scsi/ahci/ahci_port.cpp | 20 +++++++++++++------- .../kernel/busses/scsi/ahci/sata_request.cpp | 5 ++++- ---------------------------------------------------------------------------- diff --git a/src/add-ons/kernel/busses/scsi/ahci/ahci_port.cpp b/src/add-ons/kernel/busses/scsi/ahci/ahci_port.cpp index f3de1bb..e0f1c39 100644 --- a/src/add-ons/kernel/busses/scsi/ahci/ahci_port.cpp +++ b/src/add-ons/kernel/busses/scsi/ahci/ahci_port.cpp @@ -13,6 +13,7 @@ #include <ByteOrder.h> #include <KernelExport.h> +#include <ATACommands.h> #include <ATAInfoBlock.h> #include "ahci_controller.h" @@ -358,8 +359,8 @@ AHCIPort::InterruptErrorHandler(uint32 is) uint32 ci = fRegs->ci; if (!fTestUnitReadyActive) { - TRACE("AHCIPort::InterruptErrorHandler port %d, " - "fCommandsActive 0x%08" B_PRIx32 ", is 0x%08" B_PRIx32 ", ci 0x%08" B_PRIx32 "\n", fIndex, + TRACE("AHCIPort::InterruptErrorHandler port %d, fCommandsActive 0x%08" + B_PRIx32 ", is 0x%08" B_PRIx32 ", ci 0x%08" B_PRIx32 "\n", fIndex, fCommandsActive, is, ci); TRACE("ssts 0x%08" B_PRIx32 "\n", fRegs->ssts); @@ -563,7 +564,8 @@ AHCIPort::ScsiInquiry(scsi_ccb *request) sata_request sreq; sreq.set_data(&ataData, sizeof(ataData)); - sreq.set_ata_cmd(fIsATAPI ? 0xa1 : 0xec); // Identify (Packet) Device + sreq.set_ata_cmd(fIsATAPI + ? ATA_COMMAND_IDENTIFY_PACKET_DEVICE : ATA_COMMAND_IDENTIFY_DEVICE); ExecuteSataRequest(&sreq); sreq.wait_for_completion(); @@ -671,7 +673,8 @@ AHCIPort::ScsiSynchronizeCache(scsi_ccb *request) return; } - sreq->set_ata_cmd(fUse48BitCommands ? 0xea : 0xe7); // Flush Cache + sreq->set_ata_cmd(fUse48BitCommands + ? ATA_COMMAND_FLUSH_CACHE_EXT : ATA_COMMAND_FLUSH_CACHE); ExecuteSataRequest(sreq); } @@ -771,7 +774,9 @@ AHCIPort::ScsiReadWrite(scsi_ccb *request, uint64 lba, size_t sectorCount, } if (lba > MAX_SECTOR_LBA_48) panic("achi: ScsiReadWrite position too large for 48-bit LBA\n"); - sreq->set_ata48_cmd(isWrite ? 0x35 : 0x25, lba, sectorCount); + sreq->set_ata48_cmd( + isWrite ? ATA_COMMAND_WRITE_DMA_EXT : ATA_COMMAND_READ_DMA_EXT, + lba, sectorCount); } else { if (sectorCount > 256) { panic("ahci: ScsiReadWrite length too large, %lu sectors", @@ -779,7 +784,8 @@ AHCIPort::ScsiReadWrite(scsi_ccb *request, uint64 lba, size_t sectorCount, } if (lba > MAX_SECTOR_LBA_28) panic("achi: ScsiReadWrite position too large for normal LBA\n"); - sreq->set_ata28_cmd(isWrite ? 0xca : 0xc8, lba, sectorCount); + sreq->set_ata28_cmd(isWrite + ? ATA_COMMAND_WRITE_DMA : ATA_COMMAND_READ_DMA, lba, sectorCount); } ExecuteSataRequest(sreq, isWrite); @@ -799,6 +805,7 @@ AHCIPort::ScsiUnmap(scsi_ccb* request, scsi_unmap_parameter_list* unmapBlocks) return; } + sreq->set_ata_cmd(ATA_COMMAND_DATA_SET_MANAGEMENT); delete sreq; } @@ -1074,7 +1081,6 @@ AHCIPort::ScsiExecuteRequest(scsi_ccb *request) uchar AHCIPort::ScsiAbortRequest(scsi_ccb *request) { - return SCSI_REQ_CMP; } diff --git a/src/add-ons/kernel/busses/scsi/ahci/sata_request.cpp b/src/add-ons/kernel/busses/scsi/ahci/sata_request.cpp index 9bd871b..2f5a2d2 100644 --- a/src/add-ons/kernel/busses/scsi/ahci/sata_request.cpp +++ b/src/add-ons/kernel/busses/scsi/ahci/sata_request.cpp @@ -10,6 +10,9 @@ #include "scsi_cmds.h" +#define FIS_TYPE_REGISTER_HOST_TO_DEVICE 0x27 + + sata_request::sata_request() : fCcb(NULL), @@ -54,7 +57,7 @@ void sata_request::set_ata_cmd(uint8 command) { memset(fFis, 0, sizeof(fFis)); - fFis[0] = 0x27; + fFis[0] = FIS_TYPE_REGISTER_HOST_TO_DEVICE; fFis[1] = 0x80; fFis[2] = command; }