home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / CMDS / mtools_3.6.src.lzh / MTOOLS_3.6 / devices.h < prev    next >
Text File  |  1997-11-12  |  3KB  |  152 lines

  1. #ifdef linux
  2.  
  3. #include <sys/types.h>
  4. #include <linux/fd.h>
  5. #include <linux/fdreg.h>
  6. #include <linux/major.h>
  7. #include <linux/fs.h>
  8.  
  9.  
  10. typedef struct floppy_raw_cmd RawRequest_t;
  11.  
  12. UNUSED(static inline void RR_INIT(struct floppy_raw_cmd *request))
  13. {
  14.     request->data = 0;
  15.     request->length = 0;
  16.     request->cmd_count = 9;
  17.     request->flags = FD_RAW_INTR | FD_RAW_NEED_SEEK | FD_RAW_NEED_DISK
  18. #ifdef FD_RAW_SOFTFAILUE
  19.         | FD_RAW_SOFTFAILURE | FD_RAW_STOP_IF_FAILURE
  20. #endif
  21.         ;
  22.     request->cmd[1] = 0;
  23.     request->cmd[6] = 0;
  24.     request->cmd[7] = 0x1b;
  25.     request->cmd[8] = 0xff;
  26.     request->reply_count = 0;
  27. }
  28.  
  29. UNUSED(static inline void RR_SETRATE(struct floppy_raw_cmd *request, int rate))
  30. {
  31.     request->rate = rate;
  32. }
  33.  
  34. UNUSED(static inline void RR_SETDRIVE(struct floppy_raw_cmd *request,int drive))
  35. {
  36.     request->cmd[1] = (request->cmd[1] & ~3) | (drive & 3);
  37. }
  38.  
  39. UNUSED(static inline void RR_SETTRACK(struct floppy_raw_cmd *request,int track))
  40. {
  41.     request->cmd[2] = track;
  42. }
  43.  
  44. UNUSED(static inline void RR_SETPTRACK(struct floppy_raw_cmd *request,
  45.                        int track))
  46. {
  47.     request->track = track;
  48. }
  49.  
  50. UNUSED(static inline void RR_SETHEAD(struct floppy_raw_cmd *request, int head))
  51. {
  52.     if(head)
  53.         request->cmd[1] |= 4;
  54.     else
  55.         request->cmd[1] &= ~4;
  56.     request->cmd[3] = head;
  57. }
  58.  
  59. UNUSED(static inline void RR_SETSECTOR(struct floppy_raw_cmd *request, 
  60.                        int sector))
  61. {
  62.     request->cmd[4] = sector;
  63. }
  64.  
  65. UNUSED(static inline void RR_SETSIZECODE(struct floppy_raw_cmd *request, 
  66.                      int sizecode))
  67. {
  68.     request->cmd[5] = sizecode;
  69.     request->length += 128 << sizecode;
  70. }
  71.  
  72. #if 0
  73. static inline void RR_SETEND(struct floppy_raw_cmd *request, int end)
  74. {
  75.     request->cmd[6] = end;
  76. }
  77. #endif
  78.  
  79. UNUSED(static inline void RR_SETDIRECTION(struct floppy_raw_cmd *request, 
  80.                       int direction))
  81. {
  82.  
  83.     if(direction == MT_READ) {
  84.         request->flags |= FD_RAW_READ;
  85.         request->cmd[0] = FD_READ;
  86.     } else {
  87.         request->flags |= FD_RAW_WRITE;
  88.         request->cmd[0] = FD_WRITE;
  89.     }
  90. }
  91.  
  92.  
  93. UNUSED(static inline void RR_SETDATA(struct floppy_raw_cmd *request, 
  94.                      caddr_t data))
  95. {
  96.     request->data = data;
  97. }
  98.  
  99.  
  100. #if 0
  101. static inline void RR_SETLENGTH(struct floppy_raw_cmd *request, int length)
  102. {
  103.     request->length += length;
  104. }
  105. #endif
  106.  
  107. UNUSED(static inline void RR_SETCONT(struct floppy_raw_cmd *request))
  108. {
  109. #ifdef FD_RAW_MORE
  110.     request->flags |= FD_RAW_MORE;
  111. #endif
  112. }
  113.  
  114.  
  115. UNUSED(static inline int RR_SIZECODE(struct floppy_raw_cmd *request))
  116. {
  117.     return request->cmd[5];
  118. }
  119.  
  120.  
  121.  
  122. UNUSED(static inline int RR_TRACK(struct floppy_raw_cmd *request))
  123. {
  124.     return request->cmd[2];
  125. }
  126.  
  127.  
  128. UNUSED(static inline int GET_DRIVE(int fd))
  129. {
  130.     struct stat statbuf;
  131.  
  132.     if (fstat(fd, &statbuf) < 0 ){
  133.         perror("stat");
  134.         return -1;
  135.     }
  136.       
  137.     if (!S_ISBLK(statbuf.st_mode) ||
  138.         MAJOR(statbuf.st_rdev) != FLOPPY_MAJOR)
  139.         return -1;
  140.     
  141.     return MINOR( statbuf.st_rdev );
  142. }
  143.  
  144.  
  145.  
  146. /* void print_message(RawRequest_t *raw_cmd,char *message);*/
  147. int send_one_cmd(int fd, RawRequest_t *raw_cmd, const char *message);
  148. int analyze_one_reply(RawRequest_t *raw_cmd, int *bytes, int do_print);
  149.  
  150.  
  151. #endif
  152.