From: Soumyajyotii Ssarkar <soumyajyotisarkar23@gmail.com>
Add multi LUN support by scanning all 8 LUNs when ANT bit is set.
Signed-off-by: Soumyajyotii Ssarkar <soumyajyotisarkar23@gmail.com>
Tested-by: Helge Deller <deller@gmx.de>
Signed-off-by: Helge Deller <deller@gmx.de>
---
hw/scsi/ncr53c710.c | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
diff --git a/hw/scsi/ncr53c710.c b/hw/scsi/ncr53c710.c
index 3d7318c12e..277aa2c3d3 100644
--- a/hw/scsi/ncr53c710.c
+++ b/hw/scsi/ncr53c710.c
@@ -1422,8 +1422,30 @@ again:
s->dsp = s->dnad;
break;
}
- } else if (!scsi_device_find(&s->bus, 0, idbitstonum(id), 0)) {
+ }
+ bool device_exists = false;
+ if (insn & (1 << 24)) {
+ /* ATN set - scan all LUNs for this target */
+ for (int lun = 0; lun < 8; lun++) {
+ SCSIDevice *dev = scsi_device_find(&s->bus, 0,
+ idbitstonum(id),
+ lun);
+ if (dev) {
+ device_exists = true;
+ break;
+ }
+ }
+ } else {
+ /* No ATN - check only LUN 0 */
+ SCSIDevice *dev = scsi_device_find(&s->bus, 0,
+ idbitstonum(id), 0);
+ device_exists = dev != NULL;
+ }
+ if (!device_exists) {
ncr710_bad_selection(s, id);
+ if (!(insn & (1 << 24)) && addr != 0) {
+ s->dsp = addr;
+ }
break;
} else {
/*
--
2.52.0