123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- enum {
- Maxtrack = 200,
- Ntrack = Maxtrack+1,
- BScdrom = 2048,
- BScdda = 2352,
- BScdxa = 2336,
- BSmax = 2352,
- Nalloc = 12*BScdda,
- DictBlock = 1,
- TypeDA = 0, /* Direct Access */
- TypeSA = 1, /* Sequential Access */
- TypeWO = 4, /* Worm */
- TypeCD = 5, /* CD-ROM */
- TypeMO = 7, /* rewriteable Magneto-Optical */
- TypeMC = 8, /* Medium Changer */
- TypeNone = 0,
- TypeAudio,
- TypeAwritable,
- TypeData,
- TypeDwritable,
- TypeDisk,
- TypeBlank,
- Cwrite = 1<<0,
- Ccdda = 1<<1,
- Nblock = 12,
- };
- typedef struct Buf Buf;
- typedef struct Drive Drive;
- typedef struct Track Track;
- typedef struct Otrack Otrack;
- typedef struct Dev Dev;
- typedef struct Msf Msf; /* minute, second, frame */
- struct Msf {
- int m;
- int s;
- int f;
- };
- struct Track
- {
- /* initialized while obtaining the toc (gettoc) */
- vlong size; /* total size in bytes */
- long bs; /* block size in bytes */
- ulong beg; /* beginning block number */
- ulong end; /* ending block number */
- int type;
- Msf mbeg;
- Msf mend;
- /* initialized by fs */
- char name[32];
- int mode;
- int mtime;
- };
- struct DTrack
- {
- uchar name[32];
- uchar beg[4];
- uchar end[4];
- uchar size[8];
- uchar magic[4];
- };
- struct Otrack
- {
- Track *track;
- Drive *drive;
- int nchange;
- int omode;
- Buf *buf;
- int nref; /* kept by file server */
- };
- struct Dev
- {
- Otrack* (*openrd)(Drive *d, int trackno);
- Otrack* (*create)(Drive *d, int bs);
- long (*read)(Otrack *t, void *v, long n, long off);
- long (*write)(Otrack *t, void *v, long n);
- void (*close)(Otrack *t);
- int (*gettoc)(Drive*);
- int (*fixate)(Drive *d);
- char* (*ctl)(Drive *d, int argc, char **argv);
- char* (*setspeed)(Drive *d, int r, int w);
- };
- struct Drive
- {
- QLock;
- Scsi;
- int type;
- int nopen;
- int firsttrack;
- int ntrack;
- int nchange;
- int changetime;
- int nameok;
- int writeok;
- Track track[Ntrack];
- ulong cap;
- uchar blkbuf[BScdda];
- int maxreadspeed;
- int maxwritespeed;
- int readspeed;
- int writespeed;
- Dev;
- void *aux; /* kept by driver */
- };
- struct Buf
- {
- uchar *data; /* buffer */
- long off; /* data[0] at offset off in file */
- int bs; /* block size */
- long ndata; /* no. valid bytes in data */
- int nblock; /* total buffer size in blocks */
- int omode; /* OREAD, OWRITE */
- long (*fn)(Buf*, void*, long, long); /* read, write */
- /* used only by client */
- Otrack *otrack;
- };
- extern int vflag;
|