Pārlūkot izejas kodu

Parity is configurable from the ini file

default is enabled
Troy 2 gadi atpakaļ
vecāks
revīzija
05681c25bc

+ 7 - 1
lib/BlueSCSI_platform_RP2040/scsiPhy.cpp

@@ -332,7 +332,7 @@ static inline uint8_t scsiReadOneByte(int* parityError)
 
     if (parityError && r != (g_scsi_parity_lookup[r & 0xFF] ^ SCSI_IO_DATA_MASK))
     {
-        bluelog("Parity error in scsiReadOneByte(): ", (uint32_t)r);
+        bluedbg("Parity error in scsiReadOneByte(): ", (uint32_t)r);
         *parityError = 1;
     }
 
@@ -363,6 +363,12 @@ extern "C" void scsiRead(uint8_t* data, uint32_t count, int* parityError)
     {
         // Use accelerated routine
         scsi_accel_rp2040_read(data, count, parityError, &scsiDev.resetFlag);
+
+    }
+
+    if(*parityError && (scsiDev.boardCfg.flags & S2S_CFG_ENABLE_PARITY))
+    {
+        bluelog("Parity error in scsiRead()");
     }
 
     scsiLogDataOut(data, count);

+ 1 - 1
lib/BlueSCSI_platform_RP2040/scsi_accel_rp2040.cpp

@@ -565,7 +565,7 @@ void scsi_accel_rp2040_read(uint8_t *buf, uint32_t count, int *parityError, vola
     uint8_t byte1 = ~(paritycheck >> 16);
     if (paritycheck != ((g_scsi_parity_lookup[byte1] << 16) | g_scsi_parity_lookup[byte0]))
     {
-        bluelog("Parity error in scsi_accel_rp2040_read(): ", paritycheck);
+        bluedbg("Parity error in scsi_accel_rp2040_read(): ", paritycheck);
         *parityError = 1;
     }
 

+ 11 - 1
src/BlueSCSI_disk.cpp

@@ -668,6 +668,16 @@ void s2s_configInit(S2S_BoardCfg* config)
         bluelog("-- MapLunsToIDs is on");
         config->flags |= S2S_CFG_MAP_LUNS_TO_IDS;
     }
+
+    if (ini_getbool("SCSI", "Parity", true, CONFIGFILE))
+    {
+        bluelog("-- Parity is enabled");
+        config->flags |= S2S_CFG_ENABLE_PARITY;
+    }
+    else
+    {
+        bluelog("-- Parity is disabled");
+    }
 }
 
 extern "C"
@@ -1137,7 +1147,7 @@ void diskDataOut_callback(uint32_t bytes_complete)
         scsiRead(&scsiDev.data[start], len, &parityError);
         g_disk_transfer.bytes_scsi_done += len;
 
-        if (parityError)
+        if (parityError & (scsiDev.boardCfg.flags & S2S_CFG_ENABLE_PARITY))
         {
             scsiDev.status = CHECK_CONDITION;
             scsiDev.target->sense.code = ABORTED_COMMAND;