From 79844706c278112c1e949850c11757de3fd26fc0 Mon Sep 17 00:00:00 2001 From: Marcus Overhagen Date: Sat, 10 Nov 2007 17:47:57 +0000 Subject: [PATCH] Propagate is-ATAPI restriction to the SCSI bus manager. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22874 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kernel/busses/scsi/ahci/ahci_controller.cpp | 9 +++++++++ src/add-ons/kernel/busses/scsi/ahci/ahci_controller.h | 1 + src/add-ons/kernel/busses/scsi/ahci/ahci_port.cpp | 11 +++++++++++ src/add-ons/kernel/busses/scsi/ahci/ahci_port.h | 1 + src/add-ons/kernel/busses/scsi/ahci/ahci_sim.cpp | 4 +--- 5 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/add-ons/kernel/busses/scsi/ahci/ahci_controller.cpp b/src/add-ons/kernel/busses/scsi/ahci/ahci_controller.cpp index 3fc4aeb694..99ffedc174 100644 --- a/src/add-ons/kernel/busses/scsi/ahci/ahci_controller.cpp +++ b/src/add-ons/kernel/busses/scsi/ahci/ahci_controller.cpp @@ -330,3 +330,12 @@ AHCIController::ResetDevice(uchar targetID, uchar targetLUN) return fPort[targetID]->ScsiResetDevice(); } + +void +AHCIController::GetRestrictions(uchar targetID, bool *isATAPI, bool *noAutoSense, uint32 *maxBlocks) +{ + if (!fPort[targetID]) + return; + + return fPort[targetID]->ScsiGetRestrictions(isATAPI, noAutoSense, maxBlocks); +} diff --git a/src/add-ons/kernel/busses/scsi/ahci/ahci_controller.h b/src/add-ons/kernel/busses/scsi/ahci/ahci_controller.h index 9ec950daed..9779b09635 100644 --- a/src/add-ons/kernel/busses/scsi/ahci/ahci_controller.h +++ b/src/add-ons/kernel/busses/scsi/ahci/ahci_controller.h @@ -23,6 +23,7 @@ public: uchar AbortRequest(scsi_ccb *request); uchar TerminateRequest(scsi_ccb *request); uchar ResetDevice(uchar targetID, uchar targetLUN); + void GetRestrictions(uchar targetID, bool *isATAPI, bool *noAutoSense, uint32 *maxBlocks); device_node_handle DeviceNode() { return fNode; } 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 735cbf8fb9..35e20b86b0 100644 --- a/src/add-ons/kernel/busses/scsi/ahci/ahci_port.cpp +++ b/src/add-ons/kernel/busses/scsi/ahci/ahci_port.cpp @@ -772,3 +772,14 @@ AHCIPort::ScsiResetDevice() { return SCSI_REQ_CMP; } + + +void +AHCIPort::ScsiGetRestrictions(bool *isATAPI, bool *noAutoSense, uint32 *maxBlocks) +{ + *isATAPI = !!(fRegs->cmd & PORT_CMD_ATAPI); + *noAutoSense = false; + *maxBlocks = fUse48BitCommands ? 65536 : 256; + TRACE("AHCIPort::ScsiGetRestrictions port %d: isATAPI %d, noAutoSense %d, maxBlocks %lu\n", + fIndex, *isATAPI, *noAutoSense, *maxBlocks); +} diff --git a/src/add-ons/kernel/busses/scsi/ahci/ahci_port.h b/src/add-ons/kernel/busses/scsi/ahci/ahci_port.h index 300f06ed92..cf7eb551d0 100644 --- a/src/add-ons/kernel/busses/scsi/ahci/ahci_port.h +++ b/src/add-ons/kernel/busses/scsi/ahci/ahci_port.h @@ -25,6 +25,7 @@ public: uchar ScsiAbortRequest(scsi_ccb *request); uchar ScsiTerminateRequest(scsi_ccb *request); uchar ScsiResetDevice(); + void ScsiGetRestrictions(bool *isATAPI, bool *noAutoSense, uint32 *maxBlocks); private: void ScsiTestUnitReady(scsi_ccb *request); diff --git a/src/add-ons/kernel/busses/scsi/ahci/ahci_sim.cpp b/src/add-ons/kernel/busses/scsi/ahci/ahci_sim.cpp index eca0134bca..f236454556 100644 --- a/src/add-ons/kernel/busses/scsi/ahci/ahci_sim.cpp +++ b/src/add-ons/kernel/busses/scsi/ahci/ahci_sim.cpp @@ -104,9 +104,7 @@ ahci_get_restrictions(scsi_sim_cookie cookie, uchar targetID, bool *isATAPI, { TRACE("ahci_get_restrictions, cookie %p\n", cookie); - *isATAPI = false; - *noAutoSense = false; - *maxBlocks = 256; + static_cast(cookie)->GetRestrictions(targetID, isATAPI, noAutoSense, maxBlocks); }