1 2 enum { 3 Maxtrack = 200, 4 Ntrack = Maxtrack+1, 5 BScdrom = 2048, 6 BScdda = 2352, 7 BScdxa = 2336, 8 BSmax = 2352, 9 Nalloc = 12*BScdda, 10 DictBlock = 1, 11 12 TypeDA = 0, /* Direct Access */ 13 TypeSA = 1, /* Sequential Access */ 14 TypeWO = 4, /* Worm */ 15 TypeCD = 5, /* CD-ROM */ 16 TypeMO = 7, /* rewriteable Magneto-Optical */ 17 TypeMC = 8, /* Medium Changer */ 18 19 TypeNone = 0, 20 TypeAudio, 21 TypeAwritable, 22 TypeData, 23 TypeDwritable, 24 TypeDisk, 25 TypeBlank, 26 27 Cwrite = 1<<0, 28 Ccdda = 1<<1, 29 30 Nblock = 12, 31 }; 32 33 typedef struct Buf Buf; 34 typedef struct Drive Drive; 35 typedef struct Track Track; 36 typedef struct Otrack Otrack; 37 typedef struct Dev Dev; 38 typedef struct Msf Msf; /* minute, second, frame */ 39 40 struct Msf { 41 int m; 42 int s; 43 int f; 44 }; 45 46 struct Track 47 { 48 /* initialized while obtaining the toc (gettoc) */ 49 vlong size; /* total size in bytes */ 50 long bs; /* block size in bytes */ 51 ulong beg; /* beginning block number */ 52 ulong end; /* ending block number */ 53 int type; 54 Msf mbeg; 55 Msf mend; 56 57 58 /* initialized by fs */ 59 char name[32]; 60 int mode; 61 int mtime; 62 }; 63 64 struct DTrack 65 { 66 uchar name[32]; 67 uchar beg[4]; 68 uchar end[4]; 69 uchar size[8]; 70 uchar magic[4]; 71 }; 72 73 struct Otrack 74 { 75 Track *track; 76 Drive *drive; 77 int nchange; 78 int omode; 79 Buf *buf; 80 81 int nref; /* kept by file server */ 82 }; 83 84 struct Dev 85 { 86 Otrack* (*openrd)(Drive *d, int trackno); 87 Otrack* (*create)(Drive *d, int bs); 88 long (*read)(Otrack *t, void *v, long n, long off); 89 long (*write)(Otrack *t, void *v, long n); 90 void (*close)(Otrack *t); 91 int (*gettoc)(Drive*); 92 int (*fixate)(Drive *d); 93 char* (*ctl)(Drive *d, int argc, char **argv); 94 char* (*setspeed)(Drive *d, int r, int w); 95 }; 96 97 struct Drive 98 { 99 QLock; 100 Scsi; 101 102 int type; 103 int nopen; 104 int firsttrack; 105 int ntrack; 106 int nchange; 107 int changetime; 108 int nameok; 109 int writeok; 110 Track track[Ntrack]; 111 ulong cap; 112 uchar blkbuf[BScdda]; 113 int maxreadspeed; 114 int maxwritespeed; 115 int readspeed; 116 int writespeed; 117 Dev; 118 119 void *aux; /* kept by driver */ 120 }; 121 122 struct Buf 123 { 124 uchar *data; /* buffer */ 125 long off; /* data[0] at offset off in file */ 126 int bs; /* block size */ 127 long ndata; /* no. valid bytes in data */ 128 int nblock; /* total buffer size in blocks */ 129 int omode; /* OREAD, OWRITE */ 130 long (*fn)(Buf*, void*, long, long); /* read, write */ 131 132 /* used only by client */ 133 Otrack *otrack; 134 }; 135 136 extern int vflag; 137