mirror of https://github.com/akuker/RASCSI.git
Additional powerview processing implemented
This commit is contained in:
parent
9f8fc1fb8a
commit
f09fb6dd2f
|
@ -9,6 +9,8 @@
|
|||
"ratio": "cpp",
|
||||
"tuple": "cpp",
|
||||
"type_traits": "cpp",
|
||||
"utility": "cpp"
|
||||
"utility": "cpp",
|
||||
"string_view": "cpp",
|
||||
"regex": "cpp"
|
||||
}
|
||||
}
|
|
@ -1033,6 +1033,7 @@ void SASIDEV::Receive()
|
|||
|
||||
// If result is false, move to the status phase
|
||||
if (!result) {
|
||||
LOGWARN("%s invalid result received", __PRETTY_FUNCTION__);
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
|
@ -1119,9 +1120,16 @@ bool SASIDEV::XferOut(bool cont)
|
|||
{
|
||||
ASSERT(ctrl.phase == BUS::dataout);
|
||||
|
||||
|
||||
|
||||
// Logical Unit
|
||||
DWORD lun = GetEffectiveLun();
|
||||
if(ctrl.cmd[0] == SASIDEV::eCmdUnknownPowerViewCC)
|
||||
{
|
||||
lun = 0;
|
||||
}
|
||||
if (!ctrl.unit[lun]) {
|
||||
LOGWARN("%s Invalid LUN %d - %02X", __PRETTY_FUNCTION__, (int)lun, ctrl.cmd[0]);
|
||||
return false;
|
||||
}
|
||||
Disk *device = ctrl.unit[lun];
|
||||
|
@ -1199,6 +1207,7 @@ bool SASIDEV::XferOut(bool cont)
|
|||
case SASIDEV::eCmdUnknownPowerViewCB:
|
||||
case SASIDEV::eCmdUnknownPowerViewCC:
|
||||
LOGWARN("Finished receiving a Powerview Command ($%02X) in %s", (WORD)ctrl.cmd[0] , __PRETTY_FUNCTION__)
|
||||
return true;
|
||||
break;
|
||||
case SASIDEV::eCmdSetMcastAddr:
|
||||
LOGTRACE("%s Done with DaynaPort Set Multicast Address", __PRETTY_FUNCTION__);
|
||||
|
|
|
@ -229,7 +229,8 @@ void SCSIDEV::Execute()
|
|||
|
||||
int lun = GetEffectiveLun();
|
||||
if (!ctrl.unit[lun]) {
|
||||
if ((SCSIDEV::scsi_command)ctrl.cmd[0] != eCmdInquiry && (SCSIDEV::scsi_command)ctrl.cmd[0] != eCmdRequestSense) {
|
||||
if ((SCSIDEV::scsi_command)ctrl.cmd[0] != eCmdInquiry && (SCSIDEV::scsi_command)ctrl.cmd[0] != eCmdRequestSense && (SCSIDEV::scsi_command)ctrl.cmd[0] != eCmdUnknownPowerViewCC)
|
||||
{
|
||||
LOGDEBUG("Invalid LUN %d for ID %d", lun, GetSCSIID());
|
||||
|
||||
Error(ERROR_CODES::sense_key::ILLEGAL_REQUEST, ERROR_CODES::asc::INVALID_LUN);
|
||||
|
|
|
@ -54,17 +54,15 @@ const BYTE SCSIPowerView::m_inquiry_response[] = {
|
|||
|
||||
SCSIPowerView::SCSIPowerView() : Disk("SCPV")
|
||||
{
|
||||
AddCommand(SCSIDEV::eCmdUnknownPowerViewC8, "Unknown PowerViewC8", &SCSIPowerView::UnknownCommandC9);
|
||||
AddCommand(SCSIDEV::eCmdUnknownPowerViewC8, "Unknown PowerViewC8", &SCSIPowerView::UnknownCommandC8);
|
||||
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);
|
||||
AddCommand(SCSIDEV::eCmdUnknownPowerViewCA, "Unknown PowerViewCA", &SCSIPowerView::UnknownCommandCA);
|
||||
AddCommand(SCSIDEV::eCmdUnknownPowerViewCB, "Unknown PowerViewCB", &SCSIPowerView::UnknownCommandCB);
|
||||
AddCommand(SCSIDEV::eCmdUnknownPowerViewCC, "Unknown PowerViewCC", &SCSIPowerView::UnknownCommandCC);
|
||||
|
||||
struct fb_var_screeninfo fbinfo;
|
||||
struct fb_var_screeninfo fbinfo;
|
||||
struct fb_fix_screeninfo fbfixinfo;
|
||||
|
||||
// disk.id = MAKEID('S', 'C', 'V', 'D');
|
||||
|
||||
// create lookup table
|
||||
for (int i = 0; i < 256; i++) {
|
||||
unsigned char b = i;
|
||||
|
@ -150,31 +148,35 @@ void SCSIPowerView::dump_command(SASIDEV *controller){
|
|||
|
||||
}
|
||||
|
||||
// //---------------------------------------------------------------------------
|
||||
// //
|
||||
// // Unknown Command C8
|
||||
// //
|
||||
// //---------------------------------------------------------------------------
|
||||
// void SCSIPowerView::UnknownCommandC8(SASIDEV *controller)
|
||||
// {
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
// 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);
|
||||
// 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;
|
||||
// }
|
||||
if (ctrl->length <= 0) {
|
||||
// Failure (Error)
|
||||
controller->Error();
|
||||
return;
|
||||
}
|
||||
|
||||
// // Set next block
|
||||
// ctrl->blocks = 1;
|
||||
// ctrl->next = 1;
|
||||
ctrl->buffer[0] = 0x01;
|
||||
ctrl->buffer[1] = 0x09;
|
||||
ctrl->buffer[2] = 0x08;
|
||||
|
||||
// controller->DataOut();
|
||||
// }
|
||||
// Set next block
|
||||
ctrl->blocks = 1;
|
||||
ctrl->next = 1;
|
||||
|
||||
controller->DataIn();
|
||||
}
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
@ -189,7 +191,7 @@ void SCSIPowerView::UnknownCommandC9(SASIDEV *controller)
|
|||
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);
|
||||
// LOGWARN("Controller: %08X ctrl: %08X", (DWORD)controller->GetCtrl(), (DWORD)ctrl);
|
||||
// if (ctrl->length <= 0) {
|
||||
// // Failure (Error)
|
||||
// controller->Error();
|
||||
|
@ -222,7 +224,7 @@ 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);
|
||||
dump_command(controller);
|
||||
if (ctrl->length <= 0) {
|
||||
// Failure (Error)
|
||||
controller->Error();
|
||||
|
@ -247,8 +249,9 @@ void SCSIPowerView::UnknownCommandCB(SASIDEV *controller)
|
|||
|
||||
// Set transfer amount
|
||||
ctrl->length = ctrl->cmd[6];
|
||||
ctrl->length = ctrl->length * 4;
|
||||
LOGWARN("%s Message Length %d", __PRETTY_FUNCTION__, (int)ctrl->length);
|
||||
dump_command(controller);
|
||||
dump_command(controller);
|
||||
if (ctrl->length <= 0) {
|
||||
// Failure (Error)
|
||||
controller->Error();
|
||||
|
@ -272,9 +275,10 @@ void SCSIPowerView::UnknownCommandCC(SASIDEV *controller)
|
|||
{
|
||||
|
||||
// Set transfer amount
|
||||
ctrl->length = ctrl->cmd[6];
|
||||
// ctrl->length = ctrl->cmd[6];
|
||||
ctrl->length = 0x8bb;
|
||||
LOGWARN("%s Message Length %d", __PRETTY_FUNCTION__, (int)ctrl->length);
|
||||
dump_command(controller);
|
||||
dump_command(controller);
|
||||
if (ctrl->length <= 0) {
|
||||
// Failure (Error)
|
||||
controller->Error();
|
||||
|
|
|
@ -1563,7 +1563,23 @@ int GPIOBUS::GetCommandByteCount(BYTE opcode) {
|
|||
}
|
||||
else if (opcode >= 0x20 && opcode <= 0x7D) {
|
||||
return 10;
|
||||
} else {
|
||||
}
|
||||
else if(opcode == 0xC8){
|
||||
return 8;
|
||||
}
|
||||
else if(opcode == 0xC9){
|
||||
return 8;
|
||||
}
|
||||
else if(opcode == 0xCA){
|
||||
return 11;
|
||||
}
|
||||
else if(opcode == 0xCB){
|
||||
return 6;
|
||||
}
|
||||
else if(opcode == 0xCC){
|
||||
return 4;
|
||||
}
|
||||
else {
|
||||
return 6;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue