On Thu, Dec 03, 2020 at 07:06:59AM +0300, Mike Banon wrote:
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".
Thanks. In general it seems fine to me. I do have a couple of questions.
How long does this add to the total boot time? Some users are particularly sensitive to total boot time, and the "MEDIUM NOT PRESENT" check is specifically there to reduce total boot time. If we retry that check it may be a regression for some users.
Does the troublesome device just require 3 retries, or is it time based (that is, does it just require additional time to detect there is something present, or is there something special about the third request)?
-Kevin
Signed-off-by: Mike Banon mikebdp2@gmail.com
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) {
SeaBIOS mailing list -- seabios@seabios.org To unsubscribe send an email to seabios-leave@seabios.org