aboutsummaryrefslogtreecommitdiff
path: root/src/hw
diff options
context:
space:
mode:
authorMike Banon <mikebdp2@gmail.com>2020-12-03 07:06:59 +0300
committerKevin O'Connor <kevin@koconnor.net>2020-12-21 10:59:39 -0500
commitef88eeaf052c8a7d28c5f85e790c5e45bcffa45e (patch)
treed8e8ac1964d6272c3bed4a07b9be904323bf7634 /src/hw
parent748d619be3282fba35f99446098ac2d0579f6063 (diff)
downloadseabios-hppa-ef88eeaf052c8a7d28c5f85e790c5e45bcffa45e.zip
seabios-hppa-ef88eeaf052c8a7d28c5f85e790c5e45bcffa45e.tar.gz
seabios-hppa-ef88eeaf052c8a7d28c5f85e790c5e45bcffa45e.tar.bz2
Support booting USB drives with a write protect switch enabled
At least some USB drives with a write protect switch (e.g. Netac U335) could report "MEDIUM NOT PRESENT" for a while if a write protection is enabled. Instead of stopping the initialization attempts immediately, stop only after getting this report for 3 times, to ensure the successful initialization of such a "broken hardware". Signed-off-by: Mike Banon <mikebdp2@gmail.com>
Diffstat (limited to 'src/hw')
-rw-r--r--src/hw/blockcmd.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/hw/blockcmd.c b/src/hw/blockcmd.c
index 1f15081..6b6fea9 100644
--- a/src/hw/blockcmd.c
+++ b/src/hw/blockcmd.c
@@ -144,8 +144,9 @@ scsi_is_ready(struct disk_op_s *op)
dprintf(6, "scsi_is_ready (drive=%p)\n", op->drive_fl);
/* Retry TEST UNIT READY for 5 seconds unless MEDIUM NOT PRESENT is
- * reported by the device. If the device reports "IN PROGRESS",
+ * reported by the device 3 times. If the device reports "IN PROGRESS",
* 30 seconds is added. */
+ int tries = 3;
int in_progress = 0;
u32 end = timer_calc(5000);
for (;;) {
@@ -167,8 +168,11 @@ scsi_is_ready(struct disk_op_s *op)
// Sense succeeded.
if (sense.asc == 0x3a) { /* MEDIUM NOT PRESENT */
- dprintf(1, "Device reports MEDIUM NOT PRESENT\n");
- return -1;
+ tries--;
+ dprintf(1, "Device reports MEDIUM NOT PRESENT - %d tries left\n",
+ tries);
+ if (!tries)
+ return -1;
}
if (sense.asc == 0x04 && sense.ascq == 0x01 && !in_progress) {