Added hooks for C8-CCh

This commit is contained in:
Tony Kuker 2022-01-08 04:51:51 +00:00
parent 983b0257c9
commit 9f8fc1fb8a
5 changed files with 92 additions and 56 deletions

View File

@ -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;

View File

@ -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:

View File

@ -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

View File

@ -37,6 +37,7 @@
#include "os.h"
#include "disk.h"
#include <sys/mman.h>
#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();

View File

@ -47,6 +47,8 @@ private:
void AddCommand(SCSIDEV::scsi_command, const char*, void (SCSIPowerView::*)(SASIDEV *));
void dump_command(SASIDEV *controller);
public:
SCSIPowerView();
~SCSIPowerView();