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); }