dat.h 2.8 KB

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