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
This commit is contained in:
Marcus Overhagen
2007-11-10 17:47:57 +00:00
parent a097d8c8ee
commit 79844706c2
5 changed files with 23 additions and 3 deletions
@@ -330,3 +330,12 @@ AHCIController::ResetDevice(uchar targetID, uchar targetLUN)
return fPort[targetID]->ScsiResetDevice(); 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);
}
@@ -23,6 +23,7 @@ public:
uchar AbortRequest(scsi_ccb *request); uchar AbortRequest(scsi_ccb *request);
uchar TerminateRequest(scsi_ccb *request); uchar TerminateRequest(scsi_ccb *request);
uchar ResetDevice(uchar targetID, uchar targetLUN); uchar ResetDevice(uchar targetID, uchar targetLUN);
void GetRestrictions(uchar targetID, bool *isATAPI, bool *noAutoSense, uint32 *maxBlocks);
device_node_handle DeviceNode() { return fNode; } device_node_handle DeviceNode() { return fNode; }
@@ -772,3 +772,14 @@ AHCIPort::ScsiResetDevice()
{ {
return SCSI_REQ_CMP; 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);
}
@@ -25,6 +25,7 @@ public:
uchar ScsiAbortRequest(scsi_ccb *request); uchar ScsiAbortRequest(scsi_ccb *request);
uchar ScsiTerminateRequest(scsi_ccb *request); uchar ScsiTerminateRequest(scsi_ccb *request);
uchar ScsiResetDevice(); uchar ScsiResetDevice();
void ScsiGetRestrictions(bool *isATAPI, bool *noAutoSense, uint32 *maxBlocks);
private: private:
void ScsiTestUnitReady(scsi_ccb *request); void ScsiTestUnitReady(scsi_ccb *request);
@@ -104,9 +104,7 @@ ahci_get_restrictions(scsi_sim_cookie cookie, uchar targetID, bool *isATAPI,
{ {
TRACE("ahci_get_restrictions, cookie %p\n", cookie); TRACE("ahci_get_restrictions, cookie %p\n", cookie);
*isATAPI = false; static_cast<AHCIController *>(cookie)->GetRestrictions(targetID, isATAPI, noAutoSense, maxBlocks);
*noAutoSense = false;
*maxBlocks = 256;
} }