mirror of
https://github.com/akuker/RASCSI.git
synced 2025-02-16 19:31:09 +00:00
Use exception for unsupported LUN handling, reduces duplicate code (#111)
* Use exception for unsupported LUN handling in order to reduce duplicate code * Code improvements based on review * Added header
This commit is contained in:
parent
7e45d11215
commit
51210a7002
@ -19,6 +19,7 @@
|
||||
#include "devices/scsi_host_bridge.h"
|
||||
#include "controllers/scsidev_ctrl.h"
|
||||
#include "devices/scsi_daynaport.h"
|
||||
#include "exceptions.h"
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
@ -498,7 +499,13 @@ void FASTCALL SASIDEV::Command()
|
||||
ctrl.blocks = 0;
|
||||
|
||||
// Execution Phase
|
||||
Execute();
|
||||
try {
|
||||
Execute();
|
||||
}
|
||||
catch (lunexception& e) {
|
||||
LOGINFO("%s unsupported LUN %d", __PRETTY_FUNCTION__, (int)e.getlun());
|
||||
Error();
|
||||
}
|
||||
#else
|
||||
// Request the command
|
||||
ctrl.bus->SetREQ(TRUE);
|
||||
@ -912,19 +919,13 @@ void FASTCALL SASIDEV::Error()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SASIDEV::CmdTestUnitReady()
|
||||
{
|
||||
DWORD lun;
|
||||
BOOL status;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
LOGTRACE("%s TEST UNIT READY Command ", __PRETTY_FUNCTION__);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Command processing on drive
|
||||
status = ctrl.unit[lun]->TestUnitReady(ctrl.cmd);
|
||||
@ -945,19 +946,13 @@ void FASTCALL SASIDEV::CmdTestUnitReady()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SASIDEV::CmdRezero()
|
||||
{
|
||||
DWORD lun;
|
||||
BOOL status;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
LOGTRACE( "%s REZERO UNIT Command ", __PRETTY_FUNCTION__);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Command processing on drive
|
||||
status = ctrl.unit[lun]->Rezero(ctrl.cmd);
|
||||
@ -978,18 +973,11 @@ void FASTCALL SASIDEV::CmdRezero()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SASIDEV::CmdRequestSense()
|
||||
{
|
||||
DWORD lun;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
LOGTRACE( "%s REQUEST SENSE Command ", __PRETTY_FUNCTION__);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
ctrl.length = ctrl.unit[lun]->RequestSense(ctrl.cmd, ctrl.buffer);
|
||||
ASSERT(ctrl.length > 0);
|
||||
@ -1008,19 +996,13 @@ void FASTCALL SASIDEV::CmdRequestSense()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SASIDEV::CmdFormat()
|
||||
{
|
||||
DWORD lun;
|
||||
BOOL status;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
LOGTRACE( "%s FORMAT UNIT Command ", __PRETTY_FUNCTION__);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Command processing on drive
|
||||
status = ctrl.unit[lun]->Format(ctrl.cmd);
|
||||
@ -1041,19 +1023,13 @@ void FASTCALL SASIDEV::CmdFormat()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SASIDEV::CmdReassign()
|
||||
{
|
||||
DWORD lun;
|
||||
BOOL status;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
LOGTRACE("%s REASSIGN BLOCKS Command ", __PRETTY_FUNCTION__);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Command processing on drive
|
||||
status = ctrl.unit[lun]->Reassign(ctrl.cmd);
|
||||
@ -1112,17 +1088,11 @@ void FASTCALL SASIDEV::CmdReleaseUnit()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SASIDEV::CmdRead6()
|
||||
{
|
||||
DWORD lun;
|
||||
DWORD record;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Get record number and block number
|
||||
record = ctrl.cmd[1] & 0x1f;
|
||||
@ -1168,17 +1138,11 @@ void FASTCALL SASIDEV::CmdRead6()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SASIDEV::DaynaPortWrite()
|
||||
{
|
||||
DWORD lun;
|
||||
DWORD data_format;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Error if not a host bridge
|
||||
if (ctrl.unit[lun]->GetID() != MAKEID('S', 'C', 'D', 'P')) {
|
||||
@ -1232,17 +1196,11 @@ void FASTCALL SASIDEV::DaynaPortWrite()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SASIDEV::CmdWrite6()
|
||||
{
|
||||
DWORD lun;
|
||||
DWORD record;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Special receive function for the DaynaPort
|
||||
if (ctrl.unit[lun]->GetID() == MAKEID('S', 'C', 'D', 'P')){
|
||||
@ -1286,19 +1244,13 @@ void FASTCALL SASIDEV::CmdWrite6()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SASIDEV::CmdSeek6()
|
||||
{
|
||||
DWORD lun;
|
||||
BOOL status;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
LOGTRACE("%s SEEK(6) Command ", __PRETTY_FUNCTION__);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Command processing on drive
|
||||
status = ctrl.unit[lun]->Seek(ctrl.cmd);
|
||||
@ -1319,19 +1271,13 @@ void FASTCALL SASIDEV::CmdSeek6()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SASIDEV::CmdAssign()
|
||||
{
|
||||
DWORD lun;
|
||||
BOOL status;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
LOGTRACE("%s ASSIGN Command ", __PRETTY_FUNCTION__);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Command processing on drive
|
||||
status = ctrl.unit[lun]->Assign(ctrl.cmd);
|
||||
@ -1355,19 +1301,13 @@ void FASTCALL SASIDEV::CmdAssign()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SASIDEV::CmdSpecify()
|
||||
{
|
||||
DWORD lun;
|
||||
BOOL status;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
LOGTRACE("%s SPECIFY Command ", __PRETTY_FUNCTION__);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Command processing on drive
|
||||
status = ctrl.unit[lun]->Assign(ctrl.cmd);
|
||||
@ -1391,18 +1331,9 @@ void FASTCALL SASIDEV::CmdSpecify()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SASIDEV::CmdInvalid()
|
||||
{
|
||||
DWORD lun;
|
||||
|
||||
ASSERT(this);
|
||||
LOGWARN("%s Command not supported", __PRETTY_FUNCTION__);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (ctrl.unit[lun]) {
|
||||
// Command processing on drive
|
||||
ctrl.unit[lun]->InvalidCmd();
|
||||
}
|
||||
|
||||
// Failure (Error)
|
||||
Error();
|
||||
}
|
||||
@ -1979,3 +1910,18 @@ void SASIDEV::GetPhaseStr(char *str)
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
// Validate LUN
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
DWORD FASTCALL SASIDEV::GetLun()
|
||||
{
|
||||
DWORD lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
throw lunexception(lun);
|
||||
}
|
||||
|
||||
return lun;
|
||||
}
|
||||
|
@ -163,6 +163,8 @@ protected:
|
||||
// Special operations
|
||||
void FASTCALL FlushUnit(); // Flush the logical unit
|
||||
|
||||
DWORD FASTCALL GetLun(); // Get the validated LUN
|
||||
|
||||
protected:
|
||||
#ifndef RASCSI
|
||||
Device *host; // Host device
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include "gpiobus.h"
|
||||
#include "devices/scsi_host_bridge.h"
|
||||
#include "devices/scsi_daynaport.h"
|
||||
#include "exceptions.h"
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
@ -611,18 +612,11 @@ void FASTCALL SCSIDEV::CmdInquiry()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SCSIDEV::CmdModeSelect()
|
||||
{
|
||||
DWORD lun;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
LOGTRACE( "%s MODE SELECT Command", __PRETTY_FUNCTION__);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Command processing on drive
|
||||
ctrl.length = ctrl.unit[lun]->SelectCheck(ctrl.cmd);
|
||||
@ -720,18 +714,11 @@ void FASTCALL SCSIDEV::CmdRelease10()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SCSIDEV::CmdModeSense()
|
||||
{
|
||||
DWORD lun;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
LOGTRACE( "%s MODE SENSE Command ", __PRETTY_FUNCTION__);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Command processing on drive
|
||||
ctrl.length = ctrl.unit[lun]->ModeSense(ctrl.cmd, ctrl.buffer);
|
||||
@ -755,19 +742,13 @@ void FASTCALL SCSIDEV::CmdModeSense()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SCSIDEV::CmdStartStop()
|
||||
{
|
||||
DWORD lun;
|
||||
BOOL status;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
LOGTRACE( "%s START STOP UNIT Command ", __PRETTY_FUNCTION__);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Command processing on drive
|
||||
status = ctrl.unit[lun]->StartStop(ctrl.cmd);
|
||||
@ -788,19 +769,13 @@ void FASTCALL SCSIDEV::CmdStartStop()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SCSIDEV::CmdSendDiag()
|
||||
{
|
||||
DWORD lun;
|
||||
BOOL status;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
LOGTRACE( "%s SEND DIAGNOSTIC Command ", __PRETTY_FUNCTION__);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Command processing on drive
|
||||
status = ctrl.unit[lun]->SendDiag(ctrl.cmd);
|
||||
@ -821,19 +796,13 @@ void FASTCALL SCSIDEV::CmdSendDiag()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SCSIDEV::CmdRemoval()
|
||||
{
|
||||
DWORD lun;
|
||||
BOOL status;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
LOGTRACE( "%s PREVENT/ALLOW MEDIUM REMOVAL Command ", __PRETTY_FUNCTION__);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Command processing on drive
|
||||
status = ctrl.unit[lun]->Removal(ctrl.cmd);
|
||||
@ -854,19 +823,13 @@ void FASTCALL SCSIDEV::CmdRemoval()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SCSIDEV::CmdReadCapacity()
|
||||
{
|
||||
DWORD lun;
|
||||
int length;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
LOGTRACE( "%s READ CAPACITY Command ", __PRETTY_FUNCTION__);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Command processing on drive
|
||||
length = ctrl.unit[lun]->ReadCapacity(ctrl.cmd, ctrl.buffer);
|
||||
@ -890,17 +853,11 @@ void FASTCALL SCSIDEV::CmdReadCapacity()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SCSIDEV::CmdRead10()
|
||||
{
|
||||
DWORD lun;
|
||||
DWORD record;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Receive message if host bridge
|
||||
if (ctrl.unit[lun]->GetID() == MAKEID('S', 'C', 'B', 'R')) {
|
||||
@ -950,17 +907,11 @@ void FASTCALL SCSIDEV::CmdRead10()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SCSIDEV::CmdWrite10()
|
||||
{
|
||||
DWORD lun;
|
||||
DWORD record;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Receive message with host bridge
|
||||
if (ctrl.unit[lun]->GetID() == MAKEID('S', 'C', 'B', 'R')) {
|
||||
@ -1010,19 +961,13 @@ void FASTCALL SCSIDEV::CmdWrite10()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SCSIDEV::CmdSeek10()
|
||||
{
|
||||
DWORD lun;
|
||||
BOOL status;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
LOGTRACE( "%s SEEK(10) Command ", __PRETTY_FUNCTION__);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Command processing on drive
|
||||
status = ctrl.unit[lun]->Seek(ctrl.cmd);
|
||||
@ -1043,18 +988,12 @@ void FASTCALL SCSIDEV::CmdSeek10()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SCSIDEV::CmdVerify()
|
||||
{
|
||||
DWORD lun;
|
||||
BOOL status;
|
||||
DWORD record;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Get record number and block number
|
||||
record = ctrl.cmd[2];
|
||||
@ -1113,16 +1052,9 @@ void FASTCALL SCSIDEV::CmdVerify()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SCSIDEV::CmdSynchronizeCache()
|
||||
{
|
||||
DWORD lun;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
GetLun();
|
||||
|
||||
// Make it do something (not implemented)...
|
||||
|
||||
@ -1137,17 +1069,11 @@ void FASTCALL SCSIDEV::CmdSynchronizeCache()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SCSIDEV::CmdReadDefectData10()
|
||||
{
|
||||
DWORD lun;
|
||||
ASSERT(this);
|
||||
|
||||
LOGTRACE( "%s READ DEFECT DATA(10) Command ", __PRETTY_FUNCTION__);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Command processing on drive
|
||||
ctrl.length = ctrl.unit[lun]->ReadDefectData10(ctrl.cmd, ctrl.buffer);
|
||||
@ -1169,15 +1095,9 @@ void FASTCALL SCSIDEV::CmdReadDefectData10()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SCSIDEV::CmdReadToc()
|
||||
{
|
||||
DWORD lun;
|
||||
ASSERT(this);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Command processing on drive
|
||||
ctrl.length = ctrl.unit[lun]->ReadToc(ctrl.cmd, ctrl.buffer);
|
||||
@ -1198,17 +1118,11 @@ void FASTCALL SCSIDEV::CmdReadToc()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SCSIDEV::CmdPlayAudio10()
|
||||
{
|
||||
DWORD lun;
|
||||
BOOL status;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Command processing on drive
|
||||
status = ctrl.unit[lun]->PlayAudio(ctrl.cmd);
|
||||
@ -1229,17 +1143,11 @@ void FASTCALL SCSIDEV::CmdPlayAudio10()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SCSIDEV::CmdPlayAudioMSF()
|
||||
{
|
||||
DWORD lun;
|
||||
BOOL status;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Command processing on drive
|
||||
status = ctrl.unit[lun]->PlayAudioMSF(ctrl.cmd);
|
||||
@ -1260,17 +1168,11 @@ void FASTCALL SCSIDEV::CmdPlayAudioMSF()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SCSIDEV::CmdPlayAudioTrack()
|
||||
{
|
||||
DWORD lun;
|
||||
BOOL status;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Command processing on drive
|
||||
status = ctrl.unit[lun]->PlayAudioTrack(ctrl.cmd);
|
||||
@ -1291,18 +1193,11 @@ void FASTCALL SCSIDEV::CmdPlayAudioTrack()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SCSIDEV::CmdModeSelect10()
|
||||
{
|
||||
DWORD lun;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
LOGTRACE( "%s MODE SELECT10 Command ", __PRETTY_FUNCTION__);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Command processing on drive
|
||||
ctrl.length = ctrl.unit[lun]->SelectCheck10(ctrl.cmd);
|
||||
@ -1323,18 +1218,11 @@ void FASTCALL SCSIDEV::CmdModeSelect10()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SCSIDEV::CmdModeSense10()
|
||||
{
|
||||
DWORD lun;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
LOGTRACE( "%s MODE SENSE(10) Command ", __PRETTY_FUNCTION__);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Command processing on drive
|
||||
ctrl.length = ctrl.unit[lun]->ModeSense10(ctrl.cmd, ctrl.buffer);
|
||||
@ -1358,17 +1246,11 @@ void FASTCALL SCSIDEV::CmdModeSense10()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SCSIDEV::CmdGetMessage10()
|
||||
{
|
||||
DWORD lun;
|
||||
SCSIBR *bridge;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Error if not a host bridge
|
||||
if ((ctrl.unit[lun]->GetID() != MAKEID('S', 'C', 'B', 'R')) &&
|
||||
@ -1412,16 +1294,9 @@ void FASTCALL SCSIDEV::CmdGetMessage10()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SCSIDEV::CmdSendMessage10()
|
||||
{
|
||||
DWORD lun;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Error if not a host bridge
|
||||
if (ctrl.unit[lun]->GetID() != MAKEID('S', 'C', 'B', 'R')) {
|
||||
@ -1465,17 +1340,11 @@ void FASTCALL SCSIDEV::CmdSendMessage10()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SCSIDEV::CmdRetrieveStats()
|
||||
{
|
||||
DWORD lun;
|
||||
SCSIDaynaPort *dayna_port;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Error if not a DaynaPort SCSI Link
|
||||
if (ctrl.unit[lun]->GetID() != MAKEID('S', 'C', 'D', 'P')){
|
||||
@ -1509,20 +1378,13 @@ void FASTCALL SCSIDEV::CmdRetrieveStats()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SCSIDEV::CmdSetIfaceMode()
|
||||
{
|
||||
DWORD lun;
|
||||
// BOOL status;
|
||||
SCSIDaynaPort *dayna_port;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
LOGTRACE("%s",__PRETTY_FUNCTION__);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Error if not a DaynaPort SCSI Link
|
||||
if (ctrl.unit[lun]->GetID() != MAKEID('S', 'C', 'D', 'P')){
|
||||
@ -1560,18 +1422,11 @@ void FASTCALL SCSIDEV::CmdSetIfaceMode()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SCSIDEV::CmdSetMcastAddr()
|
||||
{
|
||||
DWORD lun;
|
||||
|
||||
ASSERT(this);
|
||||
|
||||
LOGTRACE("%s Set Multicast Address Command ", __PRETTY_FUNCTION__);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
if (ctrl.unit[lun]->GetID() != MAKEID('S', 'C', 'D', 'P')){
|
||||
LOGWARN("Received a SetMcastAddress command for a non-daynaport unit");
|
||||
@ -1601,7 +1456,6 @@ void FASTCALL SCSIDEV::CmdSetMcastAddr()
|
||||
//---------------------------------------------------------------------------
|
||||
void FASTCALL SCSIDEV::CmdEnableInterface()
|
||||
{
|
||||
DWORD lun=0;
|
||||
BOOL status;
|
||||
SCSIDaynaPort *dayna_port;
|
||||
|
||||
@ -1609,12 +1463,7 @@ void FASTCALL SCSIDEV::CmdEnableInterface()
|
||||
|
||||
LOGTRACE("%s",__PRETTY_FUNCTION__);
|
||||
|
||||
// Logical Unit
|
||||
lun = (ctrl.cmd[1] >> 5) & 0x07;
|
||||
if (!ctrl.unit[lun]) {
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
DWORD lun = GetLun();
|
||||
|
||||
// Error if not a DaynaPort SCSI Link
|
||||
if (ctrl.unit[lun]->GetID() != MAKEID('S', 'C', 'D', 'P')){
|
||||
@ -1907,7 +1756,13 @@ void FASTCALL SCSIDEV::Receive()
|
||||
}
|
||||
|
||||
// Execution Phase
|
||||
Execute();
|
||||
try {
|
||||
Execute();
|
||||
}
|
||||
catch (lunexception& e) {
|
||||
LOGINFO("%s unsupported LUN %d", __PRETTY_FUNCTION__, (int)e.getlun());
|
||||
Error();
|
||||
}
|
||||
break;
|
||||
|
||||
// Message out phase
|
||||
|
31
src/raspberrypi/exceptions.h
Normal file
31
src/raspberrypi/exceptions.h
Normal file
@ -0,0 +1,31 @@
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
// SCSI Target Emulator RaSCSI (*^..^*)
|
||||
// for Raspberry Pi
|
||||
//
|
||||
// Powered by XM6 TypeG Technology.
|
||||
// Copyright (C) 2016-2020 GIMONS
|
||||
// [ Exceptions ]
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#if !defined(exceptions_h)
|
||||
#define exceptions_h
|
||||
|
||||
class lunexception : public std::exception {
|
||||
private:
|
||||
DWORD lun;
|
||||
|
||||
public:
|
||||
lunexception(DWORD lun) {
|
||||
this->lun = lun;
|
||||
}
|
||||
|
||||
~lunexception() { }
|
||||
|
||||
DWORD getlun() {
|
||||
return lun;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user