st.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:5k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. #ifndef _ST_H
  2. #define _ST_H
  3. #ifndef _SCSI_H
  4. #include "scsi.h"
  5. #endif
  6. #include <linux/devfs_fs_kernel.h>
  7. #include <linux/completion.h>
  8. /* The tape buffer descriptor. */
  9. typedef struct {
  10. unsigned char in_use;
  11. unsigned char dma; /* DMA-able buffer */
  12. int buffer_size;
  13. int buffer_blocks;
  14. int buffer_bytes;
  15. int read_pointer;
  16. int writing;
  17. int midlevel_result;
  18. int syscall_result;
  19. Scsi_Request *last_SRpnt;
  20. unsigned char *b_data;
  21. unsigned short use_sg; /* zero or number of segments for this adapter */
  22. unsigned short sg_segs; /* total number of allocated segments */
  23. unsigned short orig_sg_segs; /* number of segments allocated at first try */
  24. unsigned int *sg_lengths;
  25. struct scatterlist sg[1]; /* MUST BE last item */
  26. } ST_buffer;
  27. /* The tape mode definition */
  28. typedef struct {
  29. unsigned char defined;
  30. unsigned char sysv; /* SYS V semantics? */
  31. unsigned char do_async_writes;
  32. unsigned char do_buffer_writes;
  33. unsigned char do_read_ahead;
  34. unsigned char defaults_for_writes;
  35. unsigned char default_compression; /* 0 = don't touch, etc */
  36. short default_density; /* Forced density, -1 = no value */
  37. int default_blksize; /* Forced blocksize, -1 = no value */
  38. } ST_mode;
  39. #define ST_NBR_MODE_BITS 2
  40. #define ST_NBR_MODES (1 << ST_NBR_MODE_BITS)
  41. #define ST_MODE_SHIFT (7 - ST_NBR_MODE_BITS)
  42. #define ST_MODE_MASK ((ST_NBR_MODES - 1) << ST_MODE_SHIFT)
  43. #define ST_MAX_TAPES (1 << ST_MODE_SHIFT)
  44. /* The status related to each partition */
  45. typedef struct {
  46. unsigned char rw;
  47. unsigned char eof;
  48. unsigned char at_sm;
  49. unsigned char last_block_valid;
  50. u32 last_block_visited;
  51. int drv_block; /* The block where the drive head is */
  52. int drv_file;
  53. } ST_partstat;
  54. #define ST_NBR_PARTITIONS 4
  55. /* The tape drive descriptor */
  56. typedef struct {
  57. kdev_t devt;
  58. Scsi_Device *device;
  59. struct semaphore lock; /* For serialization */
  60. struct completion wait; /* For SCSI commands */
  61. ST_buffer *buffer;
  62. /* Drive characteristics */
  63. unsigned char omit_blklims;
  64. unsigned char do_auto_lock;
  65. unsigned char can_bsr;
  66. unsigned char can_partitions;
  67. unsigned char two_fm;
  68. unsigned char fast_mteom;
  69. unsigned char immediate;
  70. unsigned char restr_dma;
  71. unsigned char scsi2_logical;
  72. unsigned char default_drvbuffer; /* 0xff = don't touch, value 3 bits */
  73. unsigned char cln_mode; /* 0 = none, otherwise sense byte nbr */
  74. unsigned char cln_sense_value;
  75. unsigned char cln_sense_mask;
  76. unsigned char use_pf; /* Set Page Format bit in all mode selects? */
  77. unsigned char c_algo;      /* compression algorithm */
  78. int tape_type;
  79. int write_threshold;
  80. int timeout; /* timeout for normal commands */
  81. int long_timeout; /* timeout for commands known to take long time */
  82. /* Mode characteristics */
  83. ST_mode modes[ST_NBR_MODES];
  84. int current_mode;
  85. devfs_handle_t de_r[ST_NBR_MODES];  /*  Rewind entries     */
  86. devfs_handle_t de_n[ST_NBR_MODES];  /*  No-rewind entries  */
  87. /* Status variables */
  88. int partition;
  89. int new_partition;
  90. int nbr_partitions; /* zero until partition support enabled */
  91. ST_partstat ps[ST_NBR_PARTITIONS];
  92. unsigned char dirty;
  93. unsigned char ready;
  94. unsigned char write_prot;
  95. unsigned char drv_write_prot;
  96. unsigned char in_use;
  97. unsigned char blksize_changed;
  98. unsigned char density_changed;
  99. unsigned char compression_changed;
  100. unsigned char drv_buffer;
  101. unsigned char density;
  102. unsigned char door_locked;
  103. unsigned char autorew_dev;   /* auto-rewind device */
  104. unsigned char rew_at_close;  /* rewind necessary at close */
  105. unsigned char inited;
  106. unsigned char cleaning_req;  /* cleaning requested? */
  107. int block_size;
  108. int min_block;
  109. int max_block;
  110. int recover_count;     /* From tape opening */
  111. int recover_reg;       /* From last status call */
  112. #if DEBUG
  113. unsigned char write_pending;
  114. int nbr_finished;
  115. int nbr_waits;
  116. unsigned char last_cmnd[6];
  117. unsigned char last_sense[16];
  118. #endif
  119. } Scsi_Tape;
  120. /* Bit masks for use_pf */
  121. #define USE_PF      1
  122. #define PF_TESTED   2
  123. /* Values of eof */
  124. #define ST_NOEOF 0
  125. #define ST_FM_HIT       1
  126. #define ST_FM           2
  127. #define ST_EOM_OK       3
  128. #define ST_EOM_ERROR 4
  129. #define ST_EOD_1        5
  130. #define ST_EOD_2        6
  131. #define ST_EOD 7
  132. /* EOD hit while reading => ST_EOD_1 => return zero => ST_EOD_2 =>
  133.    return zero => ST_EOD, return ENOSPC */
  134. /* Values of rw */
  135. #define ST_IDLE 0
  136. #define ST_READING 1
  137. #define ST_WRITING 2
  138. /* Values of ready state */
  139. #define ST_READY 0
  140. #define ST_NOT_READY 1
  141. #define ST_NO_TAPE 2
  142. /* Values for door lock state */
  143. #define ST_UNLOCKED 0
  144. #define ST_LOCKED_EXPLICIT 1
  145. #define ST_LOCKED_AUTO  2
  146. #define ST_LOCK_FAILS   3
  147. /* Positioning SCSI-commands for Tandberg, etc. drives */
  148. #define QFA_REQUEST_BLOCK 0x02
  149. #define QFA_SEEK_BLOCK 0x0c
  150. /* Setting the binary options */
  151. #define ST_DONT_TOUCH  0
  152. #define ST_NO          1
  153. #define ST_YES         2
  154. #define EXTENDED_SENSE_START  18
  155. #endif