scsireq.h 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. enum { /* fundamental constants/defaults */
  2. NTargetID = 8, /* number of target IDs */
  3. CtlrID = 7, /* default controller target ID */
  4. MaxDirData = 255, /* max. direct data returned */
  5. /*
  6. * default & maximum `maximum i/o size'; overridden by -m.
  7. * limits kernel memory consumption.
  8. * 240K is exabyte maximum block size.
  9. */
  10. MaxIOsize = 240*1024,
  11. LBsize = 512, /* default logical-block size */
  12. };
  13. typedef struct {
  14. uchar *p;
  15. long count;
  16. uchar write;
  17. } ScsiPtr;
  18. typedef struct {
  19. int flags;
  20. char *unit; /* unit directory */
  21. int lun;
  22. ulong lbsize;
  23. ulong offset; /* in blocks of lbsize bytes */
  24. int fd;
  25. ScsiPtr cmd;
  26. ScsiPtr data;
  27. int status; /* returned status */
  28. uchar sense[MaxDirData]; /* returned sense data */
  29. uchar inquiry[MaxDirData]; /* returned inquiry data */
  30. } ScsiReq;
  31. enum { /* flags */
  32. Fopen = 0x0001, /* open */
  33. Fseqdev = 0x0002, /* sequential-access device */
  34. Fwritten = 0x0004, /* device written */
  35. Fronly = 0x0008, /* device is read-only */
  36. Fwormdev = 0x0010, /* write-once read-multiple device */
  37. Fprintdev = 0x0020, /* printer */
  38. Fbfixed = 0x0040, /* fixed block size */
  39. Fchanger = 0x0080, /* medium-changer device */
  40. Finqok = 0x0100, /* inquiry data is OK */
  41. Fmode6 = 0x0200, /* use 6-byte modeselect */
  42. Frw10 = 0x0400, /* use 10-byte read/write */
  43. };
  44. enum {
  45. STnomem =-4, /* buffer allocation failed */
  46. STharderr =-3, /* controller error of some kind */
  47. STtimeout =-2, /* bus timeout */
  48. STok = 0, /* good */
  49. STcheck = 0x02, /* check condition */
  50. STcondmet = 0x04, /* condition met/good */
  51. STbusy = 0x08, /* busy */
  52. STintok = 0x10, /* intermediate/good */
  53. STintcondmet = 0x14, /* intermediate/condition met/good */
  54. STresconf = 0x18, /* reservation conflict */
  55. STterminated = 0x22, /* command terminated */
  56. STqfull = 0x28, /* queue full */
  57. };
  58. enum { /* status */
  59. Status_SD = 0x80, /* sense-data available */
  60. Status_SW = 0x83, /* internal software error */
  61. Status_BADARG = 0x84, /* bad argument to request */
  62. Status_RO = 0x85, /* device is read-only */
  63. };
  64. enum { /* SCSI command codes */
  65. ScmdTur = 0x00, /* test unit ready */
  66. ScmdRewind = 0x01, /* rezero/rewind */
  67. ScmdRsense = 0x03, /* request sense */
  68. ScmdFormat = 0x04, /* format unit */
  69. ScmdRblimits = 0x05, /* read block limits */
  70. ScmdRead = 0x08, /* read */
  71. ScmdWrite = 0x0A, /* write */
  72. ScmdSeek = 0x0B, /* seek */
  73. ScmdFmark = 0x10, /* write filemarks */
  74. ScmdSpace = 0x11, /* space forward/backward */
  75. ScmdInq = 0x12, /* inquiry */
  76. ScmdMselect6 = 0x15, /* mode select */
  77. ScmdMselect10 = 0x55, /* mode select */
  78. ScmdMsense6 = 0x1A, /* mode sense */
  79. ScmdMsense10 = 0x5A, /* mode sense */
  80. ScmdStart = 0x1B, /* start/stop unit */
  81. ScmdRcapacity = 0x25, /* read capacity */
  82. ScmdExtread = 0x28, /* extended read */
  83. ScmdExtwrite = 0x2A, /* extended write */
  84. ScmdExtseek = 0x2B, /* extended seek */
  85. ScmdSynccache = 0x35, /* flush cache */
  86. ScmdRTOC = 0x43, /* read TOC data */
  87. ScmdRdiscinfo = 0x51, /* read disc information */
  88. ScmdRtrackinfo = 0x52, /* read track information */
  89. ScmdBlank = 0xA1, /* blank CD-RW media */
  90. ScmdCDpause = 0x4B, /* pause/resume */
  91. ScmdCDstop = 0x4E, /* stop play/scan */
  92. ScmdCDplay = 0xA5, /* play audio */
  93. ScmdCDload = 0xA6, /* load/unload */
  94. ScmdCDscan = 0xBA, /* fast forward/reverse */
  95. ScmdCDstatus = 0xBD, /* mechanism status */
  96. Scmdgetconf = 0x46, /* get configuration */
  97. ScmdFwaddr = 0xE2, /* first writeable address */
  98. ScmdTreserve = 0xE4, /* reserve track */
  99. ScmdTinfo = 0xE5, /* read track info */
  100. ScmdTwrite = 0xE6, /* write track */
  101. ScmdMload = 0xE7, /* medium load/unload */
  102. ScmdFixation = 0xE9, /* fixation */
  103. ScmdEInitialise = 0x07, /* initialise element status */
  104. ScmdMMove = 0xA5, /* move medium */
  105. ScmdEStatus = 0xB8, /* read element status */
  106. ScmdMExchange = 0xA6, /* exchange medium */
  107. ScmdEposition = 0x2B, /* position to element */
  108. ScmdReadDVD = 0xAD, /* read dvd structure */
  109. ScmdReportKey = 0xA4, /* read dvd key */
  110. ScmdSendKey = 0xA3, /* write dvd key */
  111. };
  112. extern long SRready(ScsiReq*);
  113. extern long SRrewind(ScsiReq*);
  114. extern long SRreqsense(ScsiReq*);
  115. extern long SRformat(ScsiReq*);
  116. extern long SRrblimits(ScsiReq*, uchar*);
  117. extern long SRread(ScsiReq*, void*, long);
  118. extern long SRwrite(ScsiReq*, void*, long);
  119. extern long SRseek(ScsiReq*, long, int);
  120. extern long SRfilemark(ScsiReq*, ulong);
  121. extern long SRspace(ScsiReq*, uchar, long);
  122. extern long SRinquiry(ScsiReq*);
  123. extern long SRmodeselect6(ScsiReq*, uchar*, long);
  124. extern long SRmodeselect10(ScsiReq*, uchar*, long);
  125. extern long SRmodesense6(ScsiReq*, uchar, uchar*, long);
  126. extern long SRmodesense10(ScsiReq*, uchar, uchar*, long);
  127. extern long SRstart(ScsiReq*, uchar);
  128. extern long SRrcapacity(ScsiReq*, uchar*);
  129. extern long SRblank(ScsiReq*, uchar, uchar); /* MMC CD-R/CD-RW commands */
  130. extern long SRsynccache(ScsiReq*);
  131. extern long SRTOC(ScsiReq*, void*, int, uchar, uchar);
  132. extern long SRrdiscinfo(ScsiReq*, void*, int);
  133. extern long SRrtrackinfo(ScsiReq*, void*, int, int);
  134. extern long SRcdpause(ScsiReq*, int); /* MMC CD audio commands */
  135. extern long SRcdstop(ScsiReq*);
  136. extern long SRcdload(ScsiReq*, int, int);
  137. extern long SRcdplay(ScsiReq*, int, long, long);
  138. extern long SRcdstatus(ScsiReq*, uchar*, int);
  139. extern long SRgetconf(ScsiReq*, uchar*, int);
  140. extern long SRfwaddr(ScsiReq*, uchar, uchar, uchar, uchar*); /* old CD-R/CD-RW commands */
  141. extern long SRtreserve(ScsiReq*, long);
  142. extern long SRtinfo(ScsiReq*, uchar, uchar*);
  143. extern long SRwtrack(ScsiReq*, void*, long, uchar, uchar);
  144. extern long SRmload(ScsiReq*, uchar);
  145. extern long SRfixation(ScsiReq*, uchar);
  146. extern long SReinitialise(ScsiReq*); /* CHANGER commands */
  147. extern long SRestatus(ScsiReq*, uchar, uchar*, int);
  148. extern long SRmmove(ScsiReq*, int, int, int, int);
  149. extern long SRrequest(ScsiReq*);
  150. extern int SRclose(ScsiReq*);
  151. extern int SRopenraw(ScsiReq*, char*);
  152. extern int SRopen(ScsiReq*, char*);
  153. extern void makesense(ScsiReq*);