From 5eb95f141948cd44ea4d01d9922de2b99589bc42 Mon Sep 17 00:00:00 2001 From: Laurent Vivier Date: Mon, 30 Oct 2006 21:52:58 +0000 Subject: [PATCH] Wait bus is not busy --- libscsi/scsi_command.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/libscsi/scsi_command.c b/libscsi/scsi_command.c index 4556bf7..a8e7869 100644 --- a/libscsi/scsi_command.c +++ b/libscsi/scsi_command.c @@ -11,17 +11,45 @@ #include #include #include +#include #include "libscsi.h" #define COMPLETION_TIMEOUT 300 +#define SCSI_BUSY (1 << 6) +#define SCSI_SEL (1 << 1) + +static inline int scsi_busy(void) +{ + return (SCSIStat() & (SCSI_BUSY | SCSI_SEL)) != 0; +} + +static inline int scsi_wait_bus() +{ + int timeout; + + timeout = Ticks + 300; + + while (scsi_busy()) + if (Ticks > timeout) + return scsiBusy; + return noErr; +} + int scsi_command(int target, char* cdb, int count, TIB_t* tib) { int err; short stat; short message; + err = scsi_wait_bus(); + if (err != noErr) + { + printf("SCSI bus is busy\n"); + return err; + } + err = SCSIGet(); if (err != noErr) {