From 5d3cbbbf16d2126d13baf2fa3e0d5edf4386f7e6 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Sat, 22 Jul 1995 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1995-07-22 --- pc/scsi.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++---- port/devsd.c | 6 ++++-- 2 files changed, 55 insertions(+), 6 deletions(-) diff --git a/pc/scsi.c b/pc/scsi.c index dac848788ebb520dd12646bcf060cf63a96456bc..3e867eeeabe99a7c77e9c840ca808ba58c63cfc6 100644 --- a/pc/scsi.c +++ b/pc/scsi.c @@ -7,7 +7,8 @@ #include "ureg.h" #include "../port/error.h" -enum { +enum +{ Ninq = 255, Nscratch = 255, @@ -21,7 +22,8 @@ enum { CMDwrite10 = 0x2A, }; -typedef struct { +typedef struct +{ ISAConf; Scsiio io; @@ -31,7 +33,8 @@ typedef struct { static Ctlr *scsi[MaxScsi]; typedef struct Link Link; -typedef struct Link { +typedef struct Link +{ char *type; Scsiio (*reset)(int, ISAConf*); @@ -231,7 +234,7 @@ scsistart(Target *t, char lun, int s) memset(cmd, 0, sizeof cmd); cmd[0] = CMDstart; cmd[1] = lun<<5; - cmd[4] = s ? 1 : 0; + cmd[4] = s? 1: 0; return scsiexec(t, SCSIread, cmd, sizeof(cmd), 0, 0); } @@ -388,3 +391,47 @@ scsireqsense(Target *t, char lun, void *data, int *nbytes, int quiet) return STcheck; } +int +scsidiskinfo(Target *t, char lun, uchar *data) +{ + int s, nbytes, try; + uchar cmd[10]; + + for(try=0; try<3; try++) { + + nbytes = 4; + + memset(cmd, 0, sizeof(cmd)); + cmd[0] = 0x43; + cmd[1] = lun<<5; + cmd[7] = nbytes>>8; + cmd[8] = nbytes>>0; + + s = scsiexec(t, SCSIread, cmd, sizeof(cmd), data, &nbytes); + if(s == STok) + break; + + nbytes = Nscratch; + scsireqsense(t, lun, t->scratch, &nbytes, 0); + } + return s; +} + +int +scsitrackinfo(Target *t, char lun, int track, uchar *data) +{ + int s, nbytes; + uchar cmd[10]; + + nbytes = 12; + + memset(cmd, 0, sizeof(cmd)); + cmd[0] = 0xe5; + cmd[1] = lun<<5; + cmd[5] = track; + cmd[7] = nbytes>>8; + cmd[8] = nbytes>>0; + + s = scsiexec(t, SCSIread, cmd, sizeof(cmd), data, &nbytes); + return s; +} diff --git a/port/devsd.c b/port/devsd.c index 07e5c6ac9b4baa9b620d21a9118ca76162c69f57..b9b43c8b6d1d24f11b9806ed5e5d9f223573f82d 100644 --- a/port/devsd.c +++ b/port/devsd.c @@ -9,7 +9,8 @@ #include "../port/error.h" #include "devtab.h" -enum { +enum +{ TypeDA = 0x00, /* Direct Access */ TypeSA = 0x01, /* Sequential Access */ TypeWO = 0x04, /* Worm */ @@ -60,7 +61,8 @@ Disk disk[Ndisk]; static void sdrdpart(Disk*); static long sdio(Chan*, int, char*, ulong, ulong); -static int types[] = { +static int types[] = +{ TypeDA, TypeCD, TypeMO, -1, };