aha152x.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:11k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. #ifndef _AHA152X_H
  2. #define _AHA152X_H
  3. /*
  4.  * $Id: aha152x.h,v 2.4 2000/12/16 12:48:48 fischer Exp $
  5.  */
  6. #if defined(__KERNEL__)
  7. #include <linux/blk.h>
  8. #include "scsi.h"
  9. #include <asm/io.h>
  10. #include <linux/version.h>
  11. int aha152x_detect(Scsi_Host_Template *);
  12. int aha152x_command(Scsi_Cmnd *);
  13. int aha152x_queue(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
  14. int aha152x_abort(Scsi_Cmnd *);
  15. int aha152x_release(struct Scsi_Host *shpnt);
  16. int aha152x_device_reset(Scsi_Cmnd *);
  17. int aha152x_bus_reset(Scsi_Cmnd *);
  18. int aha152x_host_reset(Scsi_Cmnd *);
  19. int aha152x_biosparam(Disk *, kdev_t, int*);
  20. int aha152x_proc_info(char *buffer, char **start, off_t offset, int length, int hostno, int inout);
  21. /* number of queueable commands
  22.    (unless we support more than 1 cmd_per_lun this should do) */
  23. #define AHA152X_MAXQUEUE 7
  24. #define AHA152X_REVID "Adaptec 152x SCSI driver; $Revision: 2.4 $"
  25. /* Initial value of Scsi_Host entry */
  26. #define AHA152X { proc_name: "aha152x",
  27.                   proc_info: aha152x_proc_info,
  28.                   name: AHA152X_REVID,
  29.                   detect: aha152x_detect,
  30.                   command: aha152x_command,
  31.                   queuecommand: aha152x_queue,
  32.   eh_abort_handler: aha152x_abort,
  33.   eh_device_reset_handler: aha152x_device_reset,
  34.   eh_bus_reset_handler: aha152x_bus_reset,
  35.   eh_host_reset_handler: aha152x_host_reset,
  36.                   release: aha152x_release,
  37.                   slave_attach: 0,
  38.                   bios_param: aha152x_biosparam,
  39.                   can_queue: 1,
  40.                   this_id: 7,
  41.                   sg_tablesize: SG_ALL,
  42.                   cmd_per_lun: 1,
  43.                   present: 0,
  44.                   unchecked_isa_dma: 0,
  45.                   use_clustering: DISABLE_CLUSTERING,
  46.   use_new_eh_code: 1 }
  47. #endif
  48. /* port addresses */
  49. #define SCSISEQ      (HOSTIOPORT0+0x00)    /* SCSI sequence control */
  50. #define SXFRCTL0     (HOSTIOPORT0+0x01)    /* SCSI transfer control 0 */
  51. #define SXFRCTL1     (HOSTIOPORT0+0x02)    /* SCSI transfer control 1 */
  52. #define SCSISIG      (HOSTIOPORT0+0x03)    /* SCSI signal in/out */
  53. #define SCSIRATE     (HOSTIOPORT0+0x04)    /* SCSI rate control */
  54. #define SELID        (HOSTIOPORT0+0x05)    /* selection/reselection ID */
  55. #define SCSIID       SELID                 /* SCSI ID */
  56. #define SCSIDAT      (HOSTIOPORT0+0x06)    /* SCSI latched data */
  57. #define SCSIBUS      (HOSTIOPORT0+0x07)    /* SCSI data bus */
  58. #define STCNT0       (HOSTIOPORT0+0x08)    /* SCSI transfer count 0 */
  59. #define STCNT1       (HOSTIOPORT0+0x09)    /* SCSI transfer count 1 */
  60. #define STCNT2       (HOSTIOPORT0+0x0a)    /* SCSI transfer count 2 */
  61. #define SSTAT0       (HOSTIOPORT0+0x0b)    /* SCSI interrupt status 0 */
  62. #define SSTAT1       (HOSTIOPORT0+0x0c)    /* SCSI interrupt status 1 */
  63. #define SSTAT2       (HOSTIOPORT0+0x0d)    /* SCSI interrupt status 2 */
  64. #define SCSITEST     (HOSTIOPORT0+0x0e)    /* SCSI test control */
  65. #define SSTAT3       SCSITEST              /* SCSI interrupt status 3 */
  66. #define SSTAT4       (HOSTIOPORT0+0x0f)    /* SCSI status 4 */
  67. #define SIMODE0      (HOSTIOPORT1+0x10)    /* SCSI interrupt mode 0 */
  68. #define SIMODE1      (HOSTIOPORT1+0x11)    /* SCSI interrupt mode 1 */
  69. #define DMACNTRL0    (HOSTIOPORT1+0x12)    /* DMA control 0 */
  70. #define DMACNTRL1    (HOSTIOPORT1+0x13)    /* DMA control 1 */
  71. #define DMASTAT      (HOSTIOPORT1+0x14)    /* DMA status */
  72. #define FIFOSTAT     (HOSTIOPORT1+0x15)    /* FIFO status */
  73. #define DATAPORT     (HOSTIOPORT1+0x16)    /* DATA port */
  74. #define BRSTCNTRL    (HOSTIOPORT1+0x18)    /* burst control */
  75. #define PORTA        (HOSTIOPORT1+0x1a)    /* PORT A */
  76. #define PORTB        (HOSTIOPORT1+0x1b)    /* PORT B */
  77. #define REV          (HOSTIOPORT1+0x1c)    /* revision */
  78. #define STACK        (HOSTIOPORT1+0x1d)    /* stack */
  79. #define TEST         (HOSTIOPORT1+0x1e)    /* test register */
  80. #define IO_RANGE        0x20
  81. /* used in aha152x_porttest */
  82. #define O_PORTA         0x1a               /* PORT A */
  83. #define O_PORTB         0x1b               /* PORT B */
  84. #define O_DMACNTRL1     0x13               /* DMA control 1 */
  85. #define O_STACK         0x1d               /* stack */
  86. /* used in tc1550_porttest */
  87. #define O_TC_PORTA      0x0a               /* PORT A */
  88. #define O_TC_PORTB      0x0b               /* PORT B */
  89. #define O_TC_DMACNTRL1  0x03               /* DMA control 1 */
  90. #define O_TC_STACK      0x0d               /* stack */
  91. /* bits and bitmasks to ports */
  92. /* SCSI sequence control */
  93. #define TEMODEO      0x80
  94. #define ENSELO       0x40
  95. #define ENSELI       0x20
  96. #define ENRESELI     0x10
  97. #define ENAUTOATNO   0x08
  98. #define ENAUTOATNI   0x04
  99. #define ENAUTOATNP   0x02
  100. #define SCSIRSTO     0x01
  101. /* SCSI transfer control 0 */
  102. #define SCSIEN       0x80
  103. #define DMAEN        0x40
  104. #define CH1          0x20
  105. #define CLRSTCNT     0x10
  106. #define SPIOEN       0x08
  107. #define CLRCH1       0x02
  108. /* SCSI transfer control 1 */
  109. #define BITBUCKET    0x80
  110. #define SWRAPEN      0x40
  111. #define ENSPCHK      0x20
  112. #define STIMESEL     0x18    /* mask */
  113. #define STIMESEL_    3
  114. #define ENSTIMER     0x04
  115. #define BYTEALIGN    0x02
  116. /* SCSI signal IN */
  117. #define SIG_CDI          0x80
  118. #define SIG_IOI          0x40
  119. #define SIG_MSGI         0x20
  120. #define SIG_ATNI         0x10
  121. #define SIG_SELI         0x08
  122. #define SIG_BSYI         0x04
  123. #define SIG_REQI         0x02
  124. #define SIG_ACKI         0x01
  125. /* SCSI Phases */
  126. #define P_MASK       (SIG_MSGI|SIG_CDI|SIG_IOI)
  127. #define P_DATAO      (0)
  128. #define P_DATAI      (SIG_IOI)
  129. #define P_CMD        (SIG_CDI)
  130. #define P_STATUS     (SIG_CDI|SIG_IOI)
  131. #define P_MSGO       (SIG_MSGI|SIG_CDI)
  132. #define P_MSGI       (SIG_MSGI|SIG_CDI|SIG_IOI)
  133. /* SCSI signal OUT */
  134. #define SIG_CDO          0x80
  135. #define SIG_IOO          0x40
  136. #define SIG_MSGO         0x20
  137. #define SIG_ATNO         0x10
  138. #define SIG_SELO         0x08
  139. #define SIG_BSYO         0x04
  140. #define SIG_REQO         0x02
  141. #define SIG_ACKO         0x01
  142. /* SCSI rate control */
  143. #define SXFR         0x70    /* mask */
  144. #define SXFR_        4
  145. #define SOFS         0x0f    /* mask */
  146. /* SCSI ID */
  147. #define OID          0x70
  148. #define OID_         4
  149. #define TID          0x07
  150. /* SCSI transfer count */
  151. #define GETSTCNT() ( (GETPORT(STCNT2)<<16) 
  152.                    + (GETPORT(STCNT1)<< 8) 
  153.                    + GETPORT(STCNT0) )
  154. #define SETSTCNT(X) { SETPORT(STCNT2, ((X) & 0xFF0000) >> 16); 
  155.                       SETPORT(STCNT1, ((X) & 0x00FF00) >>  8); 
  156.                       SETPORT(STCNT0, ((X) & 0x0000FF) ); }
  157. /* SCSI interrupt status */
  158. #define TARGET       0x80
  159. #define SELDO        0x40
  160. #define SELDI        0x20
  161. #define SELINGO      0x10
  162. #define SWRAP        0x08
  163. #define SDONE        0x04
  164. #define SPIORDY      0x02
  165. #define DMADONE      0x01
  166. #define SETSDONE     0x80
  167. #define CLRSELDO     0x40
  168. #define CLRSELDI     0x20
  169. #define CLRSELINGO   0x10
  170. #define CLRSWRAP     0x08
  171. #define CLRSDONE     0x04
  172. #define CLRSPIORDY   0x02
  173. #define CLRDMADONE   0x01
  174. /* SCSI status 1 */
  175. #define SELTO        0x80
  176. #define ATNTARG      0x40
  177. #define SCSIRSTI     0x20
  178. #define PHASEMIS     0x10
  179. #define BUSFREE      0x08
  180. #define SCSIPERR     0x04
  181. #define PHASECHG     0x02
  182. #define REQINIT      0x01
  183. #define CLRSELTIMO   0x80
  184. #define CLRATNO      0x40
  185. #define CLRSCSIRSTI  0x20
  186. #define CLRBUSFREE   0x08
  187. #define CLRSCSIPERR  0x04
  188. #define CLRPHASECHG  0x02
  189. #define CLRREQINIT   0x01
  190. /* SCSI status 2 */
  191. #define SOFFSET      0x20
  192. #define SEMPTY       0x10
  193. #define SFULL        0x08
  194. #define SFCNT        0x07    /* mask */
  195. /* SCSI status 3 */
  196. #define SCSICNT      0xf0    /* mask */
  197. #define SCSICNT_     4
  198. #define OFFCNT       0x0f    /* mask */
  199. /* SCSI TEST control */
  200. #define SCTESTU      0x08
  201. #define SCTESTD      0x04
  202. #define STCTEST      0x01
  203. /* SCSI status 4 */
  204. #define SYNCERR      0x04
  205. #define FWERR        0x02
  206. #define FRERR        0x01
  207. #define CLRSYNCERR   0x04
  208. #define CLRFWERR     0x02
  209. #define CLRFRERR     0x01
  210. /* SCSI interrupt mode 0 */
  211. #define ENSELDO      0x40
  212. #define ENSELDI      0x20
  213. #define ENSELINGO    0x10
  214. #define ENSWRAP      0x08
  215. #define ENSDONE      0x04
  216. #define ENSPIORDY    0x02
  217. #define ENDMADONE    0x01
  218. /* SCSI interrupt mode 1 */
  219. #define ENSELTIMO    0x80
  220. #define ENATNTARG    0x40
  221. #define ENSCSIRST    0x20
  222. #define ENPHASEMIS   0x10
  223. #define ENBUSFREE    0x08
  224. #define ENSCSIPERR   0x04
  225. #define ENPHASECHG   0x02
  226. #define ENREQINIT    0x01
  227. /* DMA control 0 */
  228. #define ENDMA        0x80
  229. #define _8BIT        0x40
  230. #define DMA          0x20
  231. #define WRITE_READ   0x08
  232. #define INTEN        0x04
  233. #define RSTFIFO      0x02
  234. #define SWINT        0x01
  235. /* DMA control 1 */
  236. #define PWRDWN       0x80
  237. #define STK          0x07    /* mask */
  238. /* DMA status */
  239. #define ATDONE       0x80
  240. #define WORDRDY      0x40
  241. #define INTSTAT      0x20
  242. #define DFIFOFULL    0x10
  243. #define DFIFOEMP     0x08
  244. /* BURST control */
  245. #define BON          0xf0
  246. #define BOFF         0x0f
  247. /* TEST REGISTER */
  248. #define BOFFTMR      0x40
  249. #define BONTMR       0x20
  250. #define STCNTH       0x10
  251. #define STCNTM       0x08
  252. #define STCNTL       0x04
  253. #define SCSIBLK      0x02
  254. #define DMABLK       0x01
  255. /* On the AHA-152x board PORTA and PORTB contain
  256.    some information about the board's configuration. */
  257. typedef union {
  258.   struct {
  259.     unsigned reserved:2;    /* reserved */
  260.     unsigned tardisc:1;     /* Target disconnect: 0=disabled, 1=enabled */
  261.     unsigned syncneg:1;     /* Initial sync neg: 0=disabled, 1=enabled */
  262.     unsigned msgclasses:2;  /* Message classes
  263.                                  0=#4
  264.                                  1=#0, #1, #2, #3, #4
  265.                                  2=#0, #3, #4
  266.                                  3=#0, #4
  267.                              */
  268.     unsigned boot:1;        /* boot: 0=disabled, 1=enabled */
  269.     unsigned dma:1;         /* Transfer mode: 0=PIO; 1=DMA */
  270.     unsigned id:3;          /* SCSI-id */
  271.     unsigned irq:2;         /* IRQ-Channel: 0,3=12, 1=10, 2=11 */
  272.     unsigned dmachan:2;     /* DMA-Channel: 0=0, 1=5, 2=6, 3=7 */
  273.     unsigned parity:1;      /* SCSI-parity: 1=enabled 0=disabled */
  274.   } fields;
  275.   unsigned short port;
  276. } aha152x_config ;
  277. #define cf_parity     fields.parity
  278. #define cf_dmachan    fields.dmachan
  279. #define cf_irq        fields.irq
  280. #define cf_id         fields.id
  281. #define cf_dma        fields.dma
  282. #define cf_boot       fields.boot
  283. #define cf_msgclasses fields.msgclasses
  284. #define cf_syncneg    fields.syncneg
  285. #define cf_tardisc    fields.tardisc
  286. #define cf_port       port
  287. /* Some macros to manipulate ports and their bits */
  288. #define SETPORT(PORT, VAL) outb( (VAL), (PORT) )
  289. #define GETPORT(PORT) inb( PORT )
  290. #define SETBITS(PORT, BITS) outb( (inb(PORT) | (BITS)), (PORT) )
  291. #define CLRBITS(PORT, BITS) outb( (inb(PORT) & ~(BITS)), (PORT) )
  292. #define TESTHI(PORT, BITS) ((inb(PORT) & (BITS)) == (BITS))
  293. #define TESTLO(PORT, BITS) ((inb(PORT) & (BITS)) == 0)
  294. #define SETRATE(RATE) SETPORT(SCSIRATE,(RATE) & 0x7f)
  295. #if defined(AHA152X_DEBUG)
  296. enum {
  297.   debug_procinfo  = 0x0001,
  298.   debug_queue     = 0x0002,
  299.   debug_locks     = 0x0004,
  300.   debug_intr      = 0x0008,
  301.   debug_selection = 0x0010,
  302.   debug_msgo      = 0x0020,
  303.   debug_msgi      = 0x0040,
  304.   debug_status    = 0x0080,
  305.   debug_cmd       = 0x0100,
  306.   debug_datai     = 0x0200,
  307.   debug_datao     = 0x0400,
  308.   debug_eh   = 0x0800,
  309.   debug_done      = 0x1000,
  310.   debug_phases    = 0x2000,
  311. };
  312. #endif
  313. #endif /* _AHA152X_H */