Pārlūkot izejas kodu

Add XEBEC S1410, WD100x vendor command "Initialize Drive Characteristics"

Signed-off-by: Jernej Jakob <jernej.jakob@gmail.com>
Jernej Jakob 2 gadi atpakaļ
vecāks
revīzija
0010496ff2
1 mainītis faili ar 21 papildinājumiem un 0 dzēšanām
  1. 21 0
      lib/SCSI2SD/src/firmware/vendor.c

+ 21 - 0
lib/SCSI2SD/src/firmware/vendor.c

@@ -25,6 +25,18 @@ static void doAssignDiskParameters(void)
 	scsiDev.phase = STATUS;
 }
 
+// XEBEC specific commands
+// http://www.bitsavers.org/pdf/xebec/104524C_S1410Man_Aug83.pdf
+// WD100x seems to be identical to the Xebec but calls this command "Set Parameters"
+// http://www.bitsavers.org/pdf/westernDigital/WD100x/79-000004_WD1002-SHD_OEM_Manual_Aug1984.pdf
+static void doXebecInitializeDriveCharacteristics()
+{
+	if (scsiDev.status == GOOD)
+	{
+		scsiDev.phase = STATUS;
+	}
+}
+
 int scsiVendorCommand()
 {
 	int commandHandled = 1;
@@ -48,6 +60,15 @@ int scsiVendorCommand()
 		scsiDev.phase = DATA_OUT;
 		scsiDev.postDataOutHook = doAssignDiskParameters;
 	}
+	else if (command == 0x0C &&
+		scsiDev.target->cfg->quirks == S2S_CFG_QUIRKS_XEBEC)
+	{
+		// XEBEC S1410: "Initialize Drive Characteristics"
+		// WD100x: "Set Parameters"
+		scsiDev.dataLen = 8;
+		scsiDev.phase = DATA_OUT;
+		scsiDev.postDataOutHook = doXebecInitializeDriveCharacteristics;
+	}
 	else if (command == 0x0F &&
 		scsiDev.target->cfg->quirks == S2S_CFG_QUIRKS_XEBEC)
 	{