Fix for VMS 5.5-2 for incorrect Inquiry command allocation lengths

This commit is contained in:
Michael McMaster 2019-12-02 19:43:05 +10:00
parent 3a4712b524
commit 4cd3aed782
4 changed files with 25 additions and 1 deletions

View File

@ -1,3 +1,9 @@
20191202 4.x.x
- Fix to prevent sending floppy geometry mode page when not configured as
a floppy (Thanks Landon Rodgers)
- Fix for VMS 5.5-2 Inquiry allocation lengths. Requires setting "vms" quirk
mode in the XML config (Thanks Landon Rodgers)
20190610 4.8.3
- Improve XEBEC controller support
- Add Flexible Disk Drive Geometry SCSI MODE page

View File

@ -1,4 +1,5 @@
// Copyright (C) 2013 Michael McMaster <michael@codesrc.com>
// Copyright (C) 2019 Landon Rodgers <g.landon.rodgers@gmail.com>
//
// This file is part of SCSI2SD.
//
@ -213,6 +214,13 @@ void scsiInquiry()
if (scsiDev.phase == DATA_IN)
{
// VAX workaround
if (allocationLength == 255 &&
(scsiDev.target->cfg->quirks & CONFIG_QUIRKS_VMS))
{
allocationLength = 254;
}
// "real" hard drives send back exactly allocationLenth bytes, padded
// with zeroes. This only seems to happen for Inquiry responses, and not
// other commands that also supply an allocation length such as Mode Sense or

View File

@ -131,7 +131,8 @@ typedef enum
CONFIG_QUIRKS_NONE = 0,
CONFIG_QUIRKS_APPLE = 1,
CONFIG_QUIRKS_OMTI = 2,
CONFIG_QUIRKS_XEBEC = 4
CONFIG_QUIRKS_XEBEC = 4,
CONFIG_QUIRKS_VMS = 8
} CONFIG_QUIRKS;
typedef enum

View File

@ -251,6 +251,7 @@ ConfigUtil::toXML(const TargetConfig& config)
" apple\t\tReturns Apple-specific mode pages\n" <<
" omti\t\tOMTI host non-standard link control\n" <<
" xebec\t\tXEBEC ignore step options in control byte\n" <<
" vms\t\tVMS output max 254 bytes inquiry data\n" <<
" ********************************************************* -->\n" <<
" <quirks>";
if (config.quirks == CONFIG_QUIRKS_APPLE)
@ -265,6 +266,10 @@ ConfigUtil::toXML(const TargetConfig& config)
{
s << "xebec";
}
else if (config.quirks == CONFIG_QUIRKS_VMS)
{
s << "vms";
}
s <<
"</quirks>\n" <<
@ -527,6 +532,10 @@ parseTarget(wxXmlNode* node)
{
result.quirks |= CONFIG_QUIRKS_XEBEC;
}
else if (quirk == "vms")
{
result.quirks |= CONFIG_QUIRKS_VMS;
}
}
}
else if (child->GetName() == "deviceType")