diff --git a/src/raspberrypi/controllers/scsidev_ctrl.h b/src/raspberrypi/controllers/scsidev_ctrl.h index 8a1cd20b..d552d8c3 100644 --- a/src/raspberrypi/controllers/scsidev_ctrl.h +++ b/src/raspberrypi/controllers/scsidev_ctrl.h @@ -70,6 +70,11 @@ public: eCmdReadCapacity16_ReadLong16 = 0x9E, eCmdWriteLong16 = 0x9F, eCmdReportLuns = 0xA0 + eCmdUnknownPowerViewC8 = 0xC8, + eCmdUnknownPowerviewC9 = 0xC9, + eCmdUnknownPowerviewCA = 0xCA, + eCmdUnknownPowerviewCB = 0xCB, + eCmdUnknownPowerviewCC = 0xCC, }; // Internal data definition diff --git a/src/raspberrypi/devices/scsi_powerview.cpp b/src/raspberrypi/devices/scsi_powerview.cpp index a5a6d0b0..58ecceb6 100644 --- a/src/raspberrypi/devices/scsi_powerview.cpp +++ b/src/raspberrypi/devices/scsi_powerview.cpp @@ -62,7 +62,11 @@ SCSIPowerView::SCSIPowerView() : Disk("SCPV") // AddCommand(SCSIDEV::eCmdRetrieveStats, "RetrieveStats", &SCSIPowerView::RetrieveStatistics); // AddCommand(SCSIDEV::eCmdSetIfaceMode, "SetIfaceMode", &SCSIPowerView::SetInterfaceMode); // AddCommand(SCSIDEV::eCmdSetMcastAddr, "SetMcastAddr", &SCSIPowerView::SetMcastAddr); - // AddCommand(SCSIDEV::eCmdEnableInterface, "EnableInterface", &SCSIPowerView::EnableInterface); + AddCommand(SCSIDEV::eCmdUnknownPowerviewC8, "EnableInterface", &SCSIPowerView::UnknownCommandC8); + AddCommand(SCSIDEV::eCmdUnknownPowerviewC9, "EnableInterface", &SCSIPowerView::UnknownCommandC9); + AddCommand(SCSIDEV::eCmdUnknownPowerviewCA, "EnableInterface", &SCSIPowerView::UnknownCommandCA); + AddCommand(SCSIDEV::eCmdUnknownPowerviewCB, "EnableInterface", &SCSIPowerView::UnknownCommandCB); + AddCommand(SCSIDEV::eCmdUnknownPowerviewCC, "EnableInterface", &SCSIPowerView::UnknownCommandCC); struct fb_var_screeninfo fbinfo; struct fb_fix_screeninfo fbfixinfo; @@ -134,6 +138,134 @@ void SCSIPowerView::AddCommand(SCSIDEV::scsi_command opcode, const char* name, v commands[opcode] = new command_t(name, execute); } + + + +//--------------------------------------------------------------------------- +// +// Unknown Command C8 +// +//--------------------------------------------------------------------------- +void SCSIPowerView::UnknownCommandC8(SASIDEV *controller) +{ + + // Set transfer amount + ctrl->length = ctrl->cmd[6]; + + if (ctrl->length <= 0) { + // Failure (Error) + controller->Error(); + return; + } + + // Set next block + ctrl->blocks = 1; + ctrl->next = 1; + + controller->DataOut(); +} + + +//--------------------------------------------------------------------------- +// +// Unknown Command C9 +// +//--------------------------------------------------------------------------- +void SCSIPowerView::UnknownCommandC9(SASIDEV *controller) +{ + + // Set transfer amount + ctrl->length = ctrl->cmd[6]; + + if (ctrl->length <= 0) { + // Failure (Error) + controller->Error(); + return; + } + + // Set next block + ctrl->blocks = 1; + ctrl->next = 1; + + controller->DataOut(); +} + + + +//--------------------------------------------------------------------------- +// +// Unknown Command CA +// +//--------------------------------------------------------------------------- +void SCSIPowerView::UnknownCommandCA(SASIDEV *controller) +{ + + // Set transfer amount + ctrl->length = ctrl->cmd[6]; + + if (ctrl->length <= 0) { + // Failure (Error) + controller->Error(); + return; + } + + // Set next block + ctrl->blocks = 1; + ctrl->next = 1; + + controller->DataOut(); +} + + +//--------------------------------------------------------------------------- +// +// Unknown Command CB +// +//--------------------------------------------------------------------------- +void SCSIPowerView::UnknownCommandCB(SASIDEV *controller) +{ + + // Set transfer amount + ctrl->length = ctrl->cmd[6]; + + if (ctrl->length <= 0) { + // Failure (Error) + controller->Error(); + return; + } + + // Set next block + ctrl->blocks = 1; + ctrl->next = 1; + + controller->DataOut(); +} + + +//--------------------------------------------------------------------------- +// +// Unknown Command CC +// +//--------------------------------------------------------------------------- +void SCSIPowerView::UnknownCommandCC(SASIDEV *controller) +{ + + // Set transfer amount + ctrl->length = ctrl->cmd[6]; + + if (ctrl->length <= 0) { + // Failure (Error) + controller->Error(); + return; + } + + // Set next block + ctrl->blocks = 1; + ctrl->next = 1; + + controller->DataOut(); +} + bool SCSIPowerView::Dispatch(SCSIDEV *controller) { ctrl = controller->GetCtrl(); diff --git a/src/raspberrypi/devices/scsi_powerview.h b/src/raspberrypi/devices/scsi_powerview.h index c9070dff..276f7f69 100644 --- a/src/raspberrypi/devices/scsi_powerview.h +++ b/src/raspberrypi/devices/scsi_powerview.h @@ -65,6 +65,13 @@ public: // void SetMacAddr(const DWORD *cdb, BYTE *buffer); // Set MAC address + + void UnknownCommandC8(SASIDEV *controller); + void UnknownCommandC9(SASIDEV *controller); + void UnknownCommandCA(SASIDEV *controller); + void UnknownCommandCB(SASIDEV *controller); + void UnknownCommandCC(SASIDEV *controller); + // void TestUnitReady(SASIDEV *) override; // void Read6(SASIDEV *) override; // void Write6(SASIDEV *) override;