diff --git a/src/raspberrypi/controllers/sasidev_ctrl.cpp b/src/raspberrypi/controllers/sasidev_ctrl.cpp index 01fd6fd7..243a2cc3 100644 --- a/src/raspberrypi/controllers/sasidev_ctrl.cpp +++ b/src/raspberrypi/controllers/sasidev_ctrl.cpp @@ -578,7 +578,7 @@ void SASIDEV::DataIn() //--------------------------------------------------------------------------- void SASIDEV::DataOut() { - ASSERT(ctrl.length >= 0); + // ASSERT(ctrl.length >= 0); // Phase change if (ctrl.phase != BUS::dataout) { @@ -609,8 +609,8 @@ void SASIDEV::DataOut() ctrl.bus->SetIO(FALSE); // length, blocks are already calculated - ASSERT(ctrl.length > 0); - ASSERT(ctrl.blocks > 0); + // ASSERT(ctrl.length > 0); + // ASSERT(ctrl.blocks > 0); ctrl.offset = 0; return; } @@ -1193,6 +1193,13 @@ bool SASIDEV::XferOut(bool cont) case SASIDEV::eCmdInvalid: break; + case SASIDEV::eCmdUnknownPowerViewC8: + case SASIDEV::eCmdUnknownPowerViewC9: + case SASIDEV::eCmdUnknownPowerViewCA: + case SASIDEV::eCmdUnknownPowerViewCB: + case SASIDEV::eCmdUnknownPowerViewCC: + LOGWARN("Finished receiving a Powerview Command ($%02X) in %s", (WORD)ctrl.cmd[0] , __PRETTY_FUNCTION__) + break; case SASIDEV::eCmdSetMcastAddr: LOGTRACE("%s Done with DaynaPort Set Multicast Address", __PRETTY_FUNCTION__); break; diff --git a/src/raspberrypi/controllers/sasidev_ctrl.h b/src/raspberrypi/controllers/sasidev_ctrl.h index 3abe7250..8a5f16ca 100644 --- a/src/raspberrypi/controllers/sasidev_ctrl.h +++ b/src/raspberrypi/controllers/sasidev_ctrl.h @@ -80,7 +80,12 @@ private: eCmdWriteLong10 = 0x3F, eCmdWriteLong16 = 0x9F, eCmdInvalid = 0xC2, - eCmdSasiCmdAssign = 0x0E + eCmdSasiCmdAssign = 0x0E, + eCmdUnknownPowerViewC8 = 0xC8, + eCmdUnknownPowerViewC9 = 0xC9, + eCmdUnknownPowerViewCA = 0xCA, + eCmdUnknownPowerViewCB = 0xCB, + eCmdUnknownPowerViewCC = 0xCC }; public: diff --git a/src/raspberrypi/controllers/scsidev_ctrl.h b/src/raspberrypi/controllers/scsidev_ctrl.h index d552d8c3..5a8e0ca1 100644 --- a/src/raspberrypi/controllers/scsidev_ctrl.h +++ b/src/raspberrypi/controllers/scsidev_ctrl.h @@ -69,12 +69,12 @@ public: eCmdSynchronizeCache16 = 0x91, eCmdReadCapacity16_ReadLong16 = 0x9E, eCmdWriteLong16 = 0x9F, - eCmdReportLuns = 0xA0 + eCmdReportLuns = 0xA0, eCmdUnknownPowerViewC8 = 0xC8, - eCmdUnknownPowerviewC9 = 0xC9, - eCmdUnknownPowerviewCA = 0xCA, - eCmdUnknownPowerviewCB = 0xCB, - eCmdUnknownPowerviewCC = 0xCC, + 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 58ecceb6..685e0fc4 100644 --- a/src/raspberrypi/devices/scsi_powerview.cpp +++ b/src/raspberrypi/devices/scsi_powerview.cpp @@ -37,6 +37,7 @@ #include "os.h" #include "disk.h" #include +#include "log.h" static unsigned char reverse_table[256]; @@ -53,20 +54,11 @@ const BYTE SCSIPowerView::m_inquiry_response[] = { SCSIPowerView::SCSIPowerView() : Disk("SCPV") { - // m_tap = NULL; - // m_bTapEnable = false; - - // AddCommand(SCSIDEV::eCmdTestUnitReady, "TestUnitReady", &SCSIPowerView::TestUnitReady); - // AddCommand(SCSIDEV::eCmdRead6, "Read6", &SCSIPowerView::Read6); - // AddCommand(SCSIDEV::eCmdWrite6, "Write6", &SCSIPowerView::Write6); - // AddCommand(SCSIDEV::eCmdRetrieveStats, "RetrieveStats", &SCSIPowerView::RetrieveStatistics); - // AddCommand(SCSIDEV::eCmdSetIfaceMode, "SetIfaceMode", &SCSIPowerView::SetInterfaceMode); - // AddCommand(SCSIDEV::eCmdSetMcastAddr, "SetMcastAddr", &SCSIPowerView::SetMcastAddr); - 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); + AddCommand(SCSIDEV::eCmdUnknownPowerViewC8, "Unknown PowerViewC8", &SCSIPowerView::UnknownCommandC9); + AddCommand(SCSIDEV::eCmdUnknownPowerViewC9, "Unknown PowerViewC9", &SCSIPowerView::UnknownCommandC9); + AddCommand(SCSIDEV::eCmdUnknownPowerViewCA, "Unknown PowerViewCA", &SCSIPowerView::UnknownCommandC9); + AddCommand(SCSIDEV::eCmdUnknownPowerViewCB, "Unknown PowerViewCB", &SCSIPowerView::UnknownCommandC9); + AddCommand(SCSIDEV::eCmdUnknownPowerViewCC, "Unknown PowerViewCC", &SCSIPowerView::UnknownCommandC9); struct fb_var_screeninfo fbinfo; struct fb_fix_screeninfo fbfixinfo; @@ -139,32 +131,51 @@ void SCSIPowerView::AddCommand(SCSIDEV::scsi_command opcode, const char* name, v } +void SCSIPowerView::dump_command(SASIDEV *controller){ + LOGWARN(" %02X %02X %02X %02X %02X %02X %02X %02X [%02X] \n", + ctrl->cmd[0], + ctrl->cmd[1], + ctrl->cmd[2], + ctrl->cmd[3], + ctrl->cmd[4], + ctrl->cmd[5], + ctrl->cmd[6], + ctrl->cmd[7], + ctrl->cmd[8]); -//--------------------------------------------------------------------------- -// -// Unknown Command C8 -// -//--------------------------------------------------------------------------- -void SCSIPowerView::UnknownCommandC8(SASIDEV *controller) -{ + // for(int i=0; i<8; i++){ + // LOGWARN(" [%d]: %08X\n",i, ctrl->cmd[i]); + // } - // 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 C8 +// // +// //--------------------------------------------------------------------------- +// void SCSIPowerView::UnknownCommandC8(SASIDEV *controller) +// { + +// // Set transfer amount +// ctrl->length = ctrl->cmd[6]; +// LOGWARN("%s Message Length %d", __PRETTY_FUNCTION__, (int)ctrl->length); +// dump_command(controller); + +// if (ctrl->length <= 0) { +// // Failure (Error) +// controller->Error(); +// return; +// } + +// // Set next block +// ctrl->blocks = 1; +// ctrl->next = 1; + +// controller->DataOut(); +// } + //--------------------------------------------------------------------------- // @@ -176,18 +187,26 @@ void SCSIPowerView::UnknownCommandC9(SASIDEV *controller) // Set transfer amount ctrl->length = ctrl->cmd[6]; + LOGWARN("%s Message Length %d", __PRETTY_FUNCTION__, (int)ctrl->length); + dump_command(controller); + LOGWARN("Controller: %08X ctrl: %08X", (DWORD)controller->GetCtrl(), (DWORD)ctrl); + // if (ctrl->length <= 0) { + // // Failure (Error) + // controller->Error(); + // return; + // } - if (ctrl->length <= 0) { - // Failure (Error) - controller->Error(); - return; + if (ctrl->length == 0){ + controller->Status(); } + else + { + // Set next block + ctrl->blocks = 1; + ctrl->next = 1; - // Set next block - ctrl->blocks = 1; - ctrl->next = 1; - - controller->DataOut(); + controller->DataOut(); + } } @@ -202,7 +221,8 @@ void SCSIPowerView::UnknownCommandCA(SASIDEV *controller) // Set transfer amount ctrl->length = ctrl->cmd[6]; - + LOGWARN("%s Message Length %d", __PRETTY_FUNCTION__, (int)ctrl->length); +dump_command(controller); if (ctrl->length <= 0) { // Failure (Error) controller->Error(); @@ -227,7 +247,8 @@ void SCSIPowerView::UnknownCommandCB(SASIDEV *controller) // Set transfer amount ctrl->length = ctrl->cmd[6]; - + LOGWARN("%s Message Length %d", __PRETTY_FUNCTION__, (int)ctrl->length); +dump_command(controller); if (ctrl->length <= 0) { // Failure (Error) controller->Error(); @@ -252,7 +273,8 @@ void SCSIPowerView::UnknownCommandCC(SASIDEV *controller) // Set transfer amount ctrl->length = ctrl->cmd[6]; - + LOGWARN("%s Message Length %d", __PRETTY_FUNCTION__, (int)ctrl->length); +dump_command(controller); if (ctrl->length <= 0) { // Failure (Error) controller->Error(); diff --git a/src/raspberrypi/devices/scsi_powerview.h b/src/raspberrypi/devices/scsi_powerview.h index 276f7f69..5d9db6c7 100644 --- a/src/raspberrypi/devices/scsi_powerview.h +++ b/src/raspberrypi/devices/scsi_powerview.h @@ -47,6 +47,8 @@ private: void AddCommand(SCSIDEV::scsi_command, const char*, void (SCSIPowerView::*)(SASIDEV *)); + void dump_command(SASIDEV *controller); + public: SCSIPowerView(); ~SCSIPowerView();