17dd7cddfSDavid du Colombier #pragma src "/sys/src/libdisk" 27dd7cddfSDavid du Colombier #pragma lib "libdisk.a" 37dd7cddfSDavid du Colombier 4*fef25afaSDavid du Colombier #include <diskcmd.h> 5*fef25afaSDavid du Colombier 67dd7cddfSDavid du Colombier /* SCSI interface */ 77dd7cddfSDavid du Colombier typedef struct Scsi Scsi; 87dd7cddfSDavid du Colombier struct Scsi { 980ee5cbfSDavid du Colombier QLock; 107dd7cddfSDavid du Colombier char* inquire; 117dd7cddfSDavid du Colombier int rawfd; 127dd7cddfSDavid du Colombier int nchange; 137dd7cddfSDavid du Colombier ulong changetime; 147dd7cddfSDavid du Colombier }; 157dd7cddfSDavid du Colombier 167dd7cddfSDavid du Colombier enum { 177dd7cddfSDavid du Colombier Sread = 0, 187dd7cddfSDavid du Colombier Swrite, 197dd7cddfSDavid du Colombier Snone, 207dd7cddfSDavid du Colombier }; 217dd7cddfSDavid du Colombier 227dd7cddfSDavid du Colombier char* scsierror(int, int); 237dd7cddfSDavid du Colombier int scsicmd(Scsi*, uchar*, int, void*, int, int); 247dd7cddfSDavid du Colombier int scsi(Scsi*, uchar*, int, void*, int, int); 257dd7cddfSDavid du Colombier Scsi* openscsi(char*); 26af6a38e6SDavid du Colombier void closescsi(Scsi*); 277dd7cddfSDavid du Colombier int scsiready(Scsi*); 287dd7cddfSDavid du Colombier 297dd7cddfSDavid du Colombier extern int scsiverbose; 307dd7cddfSDavid du Colombier 317dd7cddfSDavid du Colombier /* disk partition interface */ 327dd7cddfSDavid du Colombier typedef struct Disk Disk; 337dd7cddfSDavid du Colombier struct Disk { 347dd7cddfSDavid du Colombier char *prefix; 359a747e4fSDavid du Colombier char *part; 367dd7cddfSDavid du Colombier int fd; 377dd7cddfSDavid du Colombier int wfd; 387dd7cddfSDavid du Colombier int ctlfd; 397dd7cddfSDavid du Colombier int rdonly; 407dd7cddfSDavid du Colombier int type; 417dd7cddfSDavid du Colombier 427dd7cddfSDavid du Colombier vlong secs; 437dd7cddfSDavid du Colombier vlong secsize; 447dd7cddfSDavid du Colombier vlong size; 457dd7cddfSDavid du Colombier vlong offset; /* within larger disk, perhaps */ 467dd7cddfSDavid du Colombier int width; /* of disk size in bytes as decimal string */ 477dd7cddfSDavid du Colombier int c; 487dd7cddfSDavid du Colombier int h; 497dd7cddfSDavid du Colombier int s; 507dd7cddfSDavid du Colombier int chssrc; 517dd7cddfSDavid du Colombier }; 527dd7cddfSDavid du Colombier 537dd7cddfSDavid du Colombier Disk* opendisk(char*, int, int); 547dd7cddfSDavid du Colombier 557dd7cddfSDavid du Colombier enum { 567dd7cddfSDavid du Colombier Tfile = 0, 577dd7cddfSDavid du Colombier Tsd, 587dd7cddfSDavid du Colombier Tfloppy, 597dd7cddfSDavid du Colombier 607dd7cddfSDavid du Colombier Gpart = 0, /* partition info source */ 617dd7cddfSDavid du Colombier Gdisk, 627dd7cddfSDavid du Colombier Gguess, 637dd7cddfSDavid du Colombier }; 647dd7cddfSDavid du Colombier 657dd7cddfSDavid du Colombier /* proto file parsing */ 667dd7cddfSDavid du Colombier typedef void Protoenum(char *new, char *old, Dir *d, void *a); 677dd7cddfSDavid du Colombier typedef void Protowarn(char *msg, void *a); 687dd7cddfSDavid du Colombier int rdproto(char*, char*, Protoenum*, Protowarn*, void*); 69