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

嵌入式Linux

开发平台:

Unix_Linux

  1. /* qlogicpti.h: Performance Technologies QlogicISP sbus card defines.
  2.  *
  3.  * Copyright (C) 1996 David S. Miller (davem@caipfs.rutgers.edu)
  4.  */
  5. #ifndef _QLOGICPTI_H
  6. #define _QLOGICPTI_H
  7. /* Qlogic/SBUS controller registers. */
  8. #define SBUS_CFG1 0x006UL
  9. #define SBUS_CTRL 0x008UL
  10. #define SBUS_STAT 0x00aUL
  11. #define SBUS_SEMAPHORE 0x00cUL
  12. #define CMD_DMA_CTRL 0x022UL
  13. #define DATA_DMA_CTRL 0x042UL
  14. #define MBOX0 0x080UL
  15. #define MBOX1 0x082UL
  16. #define MBOX2 0x084UL
  17. #define MBOX3 0x086UL
  18. #define MBOX4 0x088UL
  19. #define MBOX5 0x08aUL
  20. #define CPU_CMD 0x214UL
  21. #define CPU_ORIDE 0x224UL
  22. #define CPU_PCTRL 0x272UL
  23. #define CPU_PDIFF 0x276UL
  24. #define RISC_PSR 0x420UL
  25. #define RISC_MTREG 0x42EUL
  26. #define HCCTRL 0x440UL
  27. /* SCSI parameters for this driver. */
  28. #define MAX_TARGETS 16
  29. #define MAX_LUNS 8
  30. /* With the qlogic interface, every queue slot can hold a SCSI
  31.  * command with up to 4 scatter/gather entries.  If we need more
  32.  * than 4 entries, continuation entries can be used that hold
  33.  * another 7 entries each.  Unlike for other drivers, this means
  34.  * that the maximum number of scatter/gather entries we can
  35.  * support at any given time is a function of the number of queue
  36.  * slots available.  That is, host->can_queue and host->sg_tablesize
  37.  * are dynamic and _not_ independent.  This all works fine because
  38.  * requests are queued serially and the scatter/gather limit is
  39.  * determined for each queue request anew.
  40.  */
  41. #define QLOGICPTI_REQ_QUEUE_LEN 255 /* must be power of two - 1 */
  42. #define QLOGICPTI_MAX_SG(ql) (4 + ((ql) > 0) ? 7*((ql) - 1) : 0)
  43. #ifndef NULL
  44. #define NULL (0)
  45. #endif
  46. int qlogicpti_detect(Scsi_Host_Template *);
  47. int qlogicpti_release(struct Scsi_Host *);
  48. const char * qlogicpti_info(struct Scsi_Host *);
  49. int qlogicpti_queuecommand(Scsi_Cmnd *, void (* done)(Scsi_Cmnd *));
  50. int qlogicpti_queuecommand_slow(Scsi_Cmnd *, void (* done)(Scsi_Cmnd *));
  51. int qlogicpti_abort(Scsi_Cmnd *);
  52. int qlogicpti_reset(Scsi_Cmnd *, unsigned int);
  53. /* mailbox command complete status codes */
  54. #define MBOX_COMMAND_COMPLETE 0x4000
  55. #define INVALID_COMMAND 0x4001
  56. #define HOST_INTERFACE_ERROR 0x4002
  57. #define TEST_FAILED 0x4003
  58. #define COMMAND_ERROR 0x4005
  59. #define COMMAND_PARAM_ERROR 0x4006
  60. /* async event status codes */
  61. #define ASYNC_SCSI_BUS_RESET 0x8001
  62. #define SYSTEM_ERROR 0x8002
  63. #define REQUEST_TRANSFER_ERROR 0x8003
  64. #define RESPONSE_TRANSFER_ERROR 0x8004
  65. #define REQUEST_QUEUE_WAKEUP 0x8005
  66. #define EXECUTION_TIMEOUT_RESET 0x8006
  67. /* Am I fucking pedantic or what? */
  68. struct Entry_header {
  69. #ifdef __BIG_ENDIAN
  70. u8 entry_cnt;
  71. u8 entry_type;
  72. u8 flags;
  73. u8 sys_def_1;
  74. #else /* __LITTLE_ENDIAN */
  75. u8 entry_type;
  76. u8 entry_cnt;
  77. u8 sys_def_1;
  78. u8 flags;
  79. #endif
  80. };
  81. /* entry header type commands */
  82. #define ENTRY_COMMAND 1
  83. #define ENTRY_CONTINUATION 2
  84. #define ENTRY_STATUS 3
  85. #define ENTRY_MARKER 4
  86. #define ENTRY_EXTENDED_COMMAND 5
  87. /* entry header flag definitions */
  88. #define EFLAG_CONTINUATION 1
  89. #define EFLAG_BUSY 2
  90. #define EFLAG_BAD_HEADER 4
  91. #define EFLAG_BAD_PAYLOAD 8
  92. struct dataseg {
  93. u32 d_base;
  94. u32 d_count;
  95. };
  96. struct Command_Entry {
  97. struct Entry_header hdr;
  98. u32 handle;
  99. #ifdef __BIG_ENDIAN
  100. u8 target_id;
  101. u8 target_lun;
  102. #else /* __LITTLE_ENDIAN */
  103. u8 target_lun;
  104. u8 target_id;
  105. #endif
  106. u16 cdb_length;
  107. u16 control_flags;
  108. u16 rsvd;
  109. u16 time_out;
  110. u16 segment_cnt;
  111. u8 cdb[12];
  112. struct dataseg dataseg[4];
  113. };
  114. /* command entry control flag definitions */
  115. #define CFLAG_NODISC 0x01
  116. #define CFLAG_HEAD_TAG 0x02
  117. #define CFLAG_ORDERED_TAG 0x04
  118. #define CFLAG_SIMPLE_TAG 0x08
  119. #define CFLAG_TAR_RTN 0x10
  120. #define CFLAG_READ 0x20
  121. #define CFLAG_WRITE 0x40
  122. struct Ext_Command_Entry {
  123. struct Entry_header hdr;
  124. u32 handle;
  125. #ifdef __BIG_ENDIAN
  126. u8 target_id;
  127. u8 target_lun;
  128. #else /* __LITTLE_ENDIAN */
  129. u8 target_lun;
  130. u8 target_id;
  131. #endif
  132. u16 cdb_length;
  133. u16 control_flags;
  134. u16 rsvd;
  135. u16 time_out;
  136. u16 segment_cnt;
  137. u8 cdb[44];
  138. };
  139. struct Continuation_Entry {
  140. struct Entry_header hdr;
  141. u32 reserved;
  142. struct dataseg dataseg[7];
  143. };
  144. struct Marker_Entry {
  145. struct Entry_header hdr;
  146. u32 reserved;
  147. #ifdef __BIG_ENDIAN
  148. u8 target_id;
  149. u8 target_lun;
  150. #else /* __LITTLE_ENDIAN */
  151. u8 target_lun;
  152. u8 target_id;
  153. #endif
  154. #ifdef __BIG_ENDIAN
  155. u8 rsvd;
  156. u8 modifier;
  157. #else /* __LITTLE_ENDIAN */
  158. u8 modifier;
  159. u8 rsvd;
  160. #endif
  161. u8 rsvds[52];
  162. };
  163. /* marker entry modifier definitions */
  164. #define SYNC_DEVICE 0
  165. #define SYNC_TARGET 1
  166. #define SYNC_ALL 2
  167. struct Status_Entry {
  168. struct Entry_header hdr;
  169. u32 handle;
  170. u16 scsi_status;
  171. u16 completion_status;
  172. u16 state_flags;
  173. u16 status_flags;
  174. u16 time;
  175. u16 req_sense_len;
  176. u32 residual;
  177. u8 rsvd[8];
  178. u8 req_sense_data[32];
  179. };
  180. /* status entry completion status definitions */
  181. #define CS_COMPLETE 0x0000
  182. #define CS_INCOMPLETE 0x0001
  183. #define CS_DMA_ERROR 0x0002
  184. #define CS_TRANSPORT_ERROR 0x0003
  185. #define CS_RESET_OCCURRED 0x0004
  186. #define CS_ABORTED 0x0005
  187. #define CS_TIMEOUT 0x0006
  188. #define CS_DATA_OVERRUN 0x0007
  189. #define CS_COMMAND_OVERRUN 0x0008
  190. #define CS_STATUS_OVERRUN 0x0009
  191. #define CS_BAD_MESSAGE 0x000a
  192. #define CS_NO_MESSAGE_OUT 0x000b
  193. #define CS_EXT_ID_FAILED 0x000c
  194. #define CS_IDE_MSG_FAILED 0x000d
  195. #define CS_ABORT_MSG_FAILED 0x000e
  196. #define CS_REJECT_MSG_FAILED 0x000f
  197. #define CS_NOP_MSG_FAILED 0x0010
  198. #define CS_PARITY_ERROR_MSG_FAILED 0x0011
  199. #define CS_DEVICE_RESET_MSG_FAILED 0x0012
  200. #define CS_ID_MSG_FAILED 0x0013
  201. #define CS_UNEXP_BUS_FREE 0x0014
  202. #define CS_DATA_UNDERRUN 0x0015
  203. #define CS_BUS_RESET 0x001c
  204. /* status entry state flag definitions */
  205. #define SF_GOT_BUS 0x0100
  206. #define SF_GOT_TARGET 0x0200
  207. #define SF_SENT_CDB 0x0400
  208. #define SF_TRANSFERRED_DATA 0x0800
  209. #define SF_GOT_STATUS 0x1000
  210. #define SF_GOT_SENSE 0x2000
  211. /* status entry status flag definitions */
  212. #define STF_DISCONNECT 0x0001
  213. #define STF_SYNCHRONOUS 0x0002
  214. #define STF_PARITY_ERROR 0x0004
  215. #define STF_BUS_RESET 0x0008
  216. #define STF_DEVICE_RESET 0x0010
  217. #define STF_ABORTED 0x0020
  218. #define STF_TIMEOUT 0x0040
  219. #define STF_NEGOTIATION 0x0080
  220. /* mailbox commands */
  221. #define MBOX_NO_OP 0x0000
  222. #define MBOX_LOAD_RAM 0x0001
  223. #define MBOX_EXEC_FIRMWARE 0x0002
  224. #define MBOX_DUMP_RAM 0x0003
  225. #define MBOX_WRITE_RAM_WORD 0x0004
  226. #define MBOX_READ_RAM_WORD 0x0005
  227. #define MBOX_MAILBOX_REG_TEST 0x0006
  228. #define MBOX_VERIFY_CHECKSUM 0x0007
  229. #define MBOX_ABOUT_FIRMWARE 0x0008
  230. #define MBOX_CHECK_FIRMWARE 0x000e
  231. #define MBOX_INIT_REQ_QUEUE 0x0010
  232. #define MBOX_INIT_RES_QUEUE 0x0011
  233. #define MBOX_EXECUTE_IOCB 0x0012
  234. #define MBOX_WAKE_UP 0x0013
  235. #define MBOX_STOP_FIRMWARE 0x0014
  236. #define MBOX_ABORT 0x0015
  237. #define MBOX_ABORT_DEVICE 0x0016
  238. #define MBOX_ABORT_TARGET 0x0017
  239. #define MBOX_BUS_RESET 0x0018
  240. #define MBOX_STOP_QUEUE 0x0019
  241. #define MBOX_START_QUEUE 0x001a
  242. #define MBOX_SINGLE_STEP_QUEUE 0x001b
  243. #define MBOX_ABORT_QUEUE 0x001c
  244. #define MBOX_GET_DEV_QUEUE_STATUS 0x001d
  245. #define MBOX_GET_FIRMWARE_STATUS 0x001f
  246. #define MBOX_GET_INIT_SCSI_ID 0x0020
  247. #define MBOX_GET_SELECT_TIMEOUT 0x0021
  248. #define MBOX_GET_RETRY_COUNT 0x0022
  249. #define MBOX_GET_TAG_AGE_LIMIT 0x0023
  250. #define MBOX_GET_CLOCK_RATE 0x0024
  251. #define MBOX_GET_ACT_NEG_STATE 0x0025
  252. #define MBOX_GET_ASYNC_DATA_SETUP_TIME 0x0026
  253. #define MBOX_GET_SBUS_PARAMS 0x0027
  254. #define MBOX_GET_TARGET_PARAMS 0x0028
  255. #define MBOX_GET_DEV_QUEUE_PARAMS 0x0029
  256. #define MBOX_SET_INIT_SCSI_ID 0x0030
  257. #define MBOX_SET_SELECT_TIMEOUT 0x0031
  258. #define MBOX_SET_RETRY_COUNT 0x0032
  259. #define MBOX_SET_TAG_AGE_LIMIT 0x0033
  260. #define MBOX_SET_CLOCK_RATE 0x0034
  261. #define MBOX_SET_ACTIVE_NEG_STATE 0x0035
  262. #define MBOX_SET_ASYNC_DATA_SETUP_TIME 0x0036
  263. #define MBOX_SET_SBUS_CONTROL_PARAMS 0x0037
  264. #define MBOX_SET_TARGET_PARAMS 0x0038
  265. #define MBOX_SET_DEV_QUEUE_PARAMS 0x0039
  266. struct host_param {
  267. u_short initiator_scsi_id;
  268. u_short bus_reset_delay;
  269. u_short retry_count;
  270. u_short retry_delay;
  271. u_short async_data_setup_time;
  272. u_short req_ack_active_negation;
  273. u_short data_line_active_negation;
  274. u_short data_dma_burst_enable;
  275. u_short command_dma_burst_enable;
  276. u_short tag_aging;
  277. u_short selection_timeout;
  278. u_short max_queue_depth;
  279. };
  280. /*
  281.  * Device Flags:
  282.  *
  283.  * Bit  Name
  284.  * ---------
  285.  *  7   Disconnect Privilege
  286.  *  6   Parity Checking
  287.  *  5   Wide Data Transfers
  288.  *  4   Synchronous Data Transfers
  289.  *  3   Tagged Queuing
  290.  *  2   Automatic Request Sense
  291.  *  1   Stop Queue on Check Condition
  292.  *  0   Renegotiate on Error
  293.  */
  294. struct dev_param {
  295. u_short device_flags;
  296. u_short execution_throttle;
  297. u_short synchronous_period;
  298. u_short synchronous_offset;
  299. u_short device_enable;
  300. u_short reserved; /* pad */
  301. };
  302. /*
  303.  * The result queue can be quite a bit smaller since continuation entries
  304.  * do not show up there:
  305.  */
  306. #define RES_QUEUE_LEN 255 /* Must be power of two - 1 */
  307. #define QUEUE_ENTRY_LEN 64
  308. #define NEXT_REQ_PTR(wheee)   (((wheee) + 1) & QLOGICPTI_REQ_QUEUE_LEN)
  309. #define NEXT_RES_PTR(wheee)   (((wheee) + 1) & RES_QUEUE_LEN)
  310. #define PREV_REQ_PTR(wheee)   (((wheee) - 1) & QLOGICPTI_REQ_QUEUE_LEN)
  311. #define PREV_RES_PTR(wheee)   (((wheee) - 1) & RES_QUEUE_LEN)
  312. struct pti_queue_entry {
  313. char __opaque[QUEUE_ENTRY_LEN];
  314. };
  315. /* Software state for the driver. */
  316. struct qlogicpti {
  317. /* These are the hot elements in the cache, so they come first. */
  318. spinlock_t   lock; /* Driver mutex       */
  319. unsigned long             qregs;                /* Adapter registers          */
  320. struct pti_queue_entry   *res_cpu;              /* Ptr to RESPONSE bufs (CPU) */
  321. struct pti_queue_entry   *req_cpu;              /* Ptr to REQUEST bufs (CPU)  */
  322. u_int                   req_in_ptr; /* index of next request slot */
  323. u_int                   res_out_ptr; /* index of next result slot  */
  324. long                   send_marker; /* must we send a marker?     */
  325. struct sbus_dev  *sdev;
  326. unsigned long   __pad;
  327. int                       cmd_count[MAX_TARGETS];
  328. unsigned long             tag_ages[MAX_TARGETS];
  329. /* The cmd->handler is only 32-bits, so that things work even on monster
  330.  * Ex000 sparc64 machines with >4GB of ram we just keep track of the
  331.  * scsi command pointers here.  This is essentially what Matt Jacob does. -DaveM
  332.  */
  333. Scsi_Cmnd                *cmd_slots[QLOGICPTI_REQ_QUEUE_LEN + 1];
  334. /* The rest of the elements are unimportant for performance. */
  335. struct qlogicpti         *next;
  336. __u32                     res_dvma;             /* Ptr to RESPONSE bufs (DVMA)*/
  337. __u32                     req_dvma;             /* Ptr to REQUEST bufs (DVMA) */
  338. u_char                   fware_majrev, fware_minrev, fware_micrev;
  339. struct Scsi_Host         *qhost;
  340. int                       qpti_id;
  341. int                       scsi_id;
  342. int                       prom_node;
  343. char                      prom_name[64];
  344. int                       irq;
  345. char                      differential, ultra, clock;
  346. unsigned char             bursts;
  347. struct host_param        host_param;
  348. struct dev_param         dev_param[MAX_TARGETS];
  349. unsigned long             sreg;
  350. #define SREG_TPOWER               0x80   /* State of termpwr           */
  351. #define SREG_FUSE                 0x40   /* State of on board fuse     */
  352. #define SREG_PDISAB               0x20   /* Disable state for power on */
  353. #define SREG_DSENSE               0x10   /* Sense for differential     */
  354. #define SREG_IMASK                0x0c   /* Interrupt level            */
  355. #define SREG_SPMASK               0x03   /* Mask for switch pack       */
  356. unsigned char             swsreg;
  357. unsigned int
  358. gotirq : 1, /* this instance got an irq */
  359. is_pti :  1, /* Non-zero if this is a PTI board. */
  360. sbits : 16; /* syncmode known bits */
  361. };
  362. /* How to twiddle them bits... */
  363. /* SBUS config register one. */
  364. #define SBUS_CFG1_EPAR          0x0100      /* Enable parity checking           */
  365. #define SBUS_CFG1_FMASK         0x00f0      /* Forth code cycle mask            */
  366. #define SBUS_CFG1_BENAB         0x0004      /* Burst dvma enable                */
  367. #define SBUS_CFG1_B64           0x0003      /* Enable 64byte bursts             */
  368. #define SBUS_CFG1_B32           0x0002      /* Enable 32byte bursts             */
  369. #define SBUS_CFG1_B16           0x0001      /* Enable 16byte bursts             */
  370. #define SBUS_CFG1_B8            0x0008      /* Enable 8byte bursts              */
  371. /* SBUS control register */
  372. #define SBUS_CTRL_EDIRQ         0x0020      /* Enable Data DVMA Interrupts      */
  373. #define SBUS_CTRL_ECIRQ         0x0010      /* Enable Command DVMA Interrupts   */
  374. #define SBUS_CTRL_ESIRQ         0x0008      /* Enable SCSI Processor Interrupts */
  375. #define SBUS_CTRL_ERIRQ         0x0004      /* Enable RISC Processor Interrupts */
  376. #define SBUS_CTRL_GENAB         0x0002      /* Global Interrupt Enable          */
  377. #define SBUS_CTRL_RESET         0x0001      /* Soft Reset                       */
  378. /* SBUS status register */
  379. #define SBUS_STAT_DINT          0x0020      /* Data DVMA IRQ pending            */
  380. #define SBUS_STAT_CINT          0x0010      /* Command DVMA IRQ pending         */
  381. #define SBUS_STAT_SINT          0x0008      /* SCSI Processor IRQ pending       */
  382. #define SBUS_STAT_RINT          0x0004      /* RISC Processor IRQ pending       */
  383. #define SBUS_STAT_GINT          0x0002      /* Global IRQ pending               */
  384. /* SBUS semaphore register */
  385. #define SBUS_SEMAPHORE_STAT     0x0002      /* Semaphore status bit             */
  386. #define SBUS_SEMAPHORE_LCK      0x0001      /* Semaphore lock bit               */
  387. /* DVMA control register */
  388. #define DMA_CTRL_CSUSPEND       0x0010      /* DMA channel suspend              */
  389. #define DMA_CTRL_CCLEAR         0x0008      /* DMA channel clear and reset      */
  390. #define DMA_CTRL_FCLEAR         0x0004      /* DMA fifo clear                   */
  391. #define DMA_CTRL_CIRQ           0x0002      /* DMA irq clear                    */
  392. #define DMA_CTRL_DMASTART       0x0001      /* DMA transfer start               */
  393. /* SCSI processor override register */
  394. #define CPU_ORIDE_ETRIG         0x8000      /* External trigger enable          */
  395. #define CPU_ORIDE_STEP          0x4000      /* Single step mode enable          */
  396. #define CPU_ORIDE_BKPT          0x2000      /* Breakpoint reg enable            */
  397. #define CPU_ORIDE_PWRITE        0x1000      /* SCSI pin write enable            */
  398. #define CPU_ORIDE_OFORCE        0x0800      /* Force outputs on                 */
  399. #define CPU_ORIDE_LBACK         0x0400      /* SCSI loopback enable             */
  400. #define CPU_ORIDE_PTEST         0x0200      /* Parity test enable               */
  401. #define CPU_ORIDE_TENAB         0x0100      /* SCSI pins tristate enable        */
  402. #define CPU_ORIDE_TPINS         0x0080      /* SCSI pins enable                 */
  403. #define CPU_ORIDE_FRESET        0x0008      /* FIFO reset                       */
  404. #define CPU_ORIDE_CTERM         0x0004      /* Command terminate                */
  405. #define CPU_ORIDE_RREG          0x0002      /* Reset SCSI processor regs        */
  406. #define CPU_ORIDE_RMOD          0x0001      /* Reset SCSI processor module      */
  407. /* SCSI processor commands */
  408. #define CPU_CMD_BRESET          0x300b      /* Reset SCSI bus                   */
  409. /* SCSI processor pin control register */
  410. #define CPU_PCTRL_PVALID        0x8000      /* Phase bits are valid             */
  411. #define CPU_PCTRL_PHI           0x0400      /* Parity bit high                  */
  412. #define CPU_PCTRL_PLO           0x0200      /* Parity bit low                   */
  413. #define CPU_PCTRL_REQ           0x0100      /* REQ bus signal                   */
  414. #define CPU_PCTRL_ACK           0x0080      /* ACK bus signal                   */
  415. #define CPU_PCTRL_RST           0x0040      /* RST bus signal                   */
  416. #define CPU_PCTRL_BSY           0x0020      /* BSY bus signal                   */
  417. #define CPU_PCTRL_SEL           0x0010      /* SEL bus signal                   */
  418. #define CPU_PCTRL_ATN           0x0008      /* ATN bus signal                   */
  419. #define CPU_PCTRL_MSG           0x0004      /* MSG bus signal                   */
  420. #define CPU_PCTRL_CD            0x0002      /* CD bus signal                    */
  421. #define CPU_PCTRL_IO            0x0001      /* IO bus signal                    */
  422. /* SCSI processor differential pins register */
  423. #define CPU_PDIFF_SENSE         0x0200      /* Differential sense               */
  424. #define CPU_PDIFF_MODE          0x0100      /* Differential mode                */
  425. #define CPU_PDIFF_OENAB         0x0080      /* Outputs enable                   */
  426. #define CPU_PDIFF_PMASK         0x007c      /* Differential control pins        */
  427. #define CPU_PDIFF_TGT           0x0002      /* Target mode enable               */
  428. #define CPU_PDIFF_INIT          0x0001      /* Initiator mode enable            */
  429. /* RISC processor status register */
  430. #define RISC_PSR_FTRUE          0x8000      /* Force true                       */
  431. #define RISC_PSR_LCD            0x4000      /* Loop counter shows done status   */
  432. #define RISC_PSR_RIRQ           0x2000      /* RISC irq status                  */
  433. #define RISC_PSR_TOFLOW         0x1000      /* Timer overflow (rollover)        */
  434. #define RISC_PSR_AOFLOW         0x0800      /* Arithmetic overflow              */
  435. #define RISC_PSR_AMSB           0x0400      /* Arithmetic big endian            */
  436. #define RISC_PSR_ACARRY         0x0200      /* Arithmetic carry                 */
  437. #define RISC_PSR_AZERO          0x0100      /* Arithmetic zero                  */
  438. #define RISC_PSR_ULTRA          0x0020      /* Ultra mode                       */
  439. #define RISC_PSR_DIRQ           0x0010      /* DVMA interrupt                   */
  440. #define RISC_PSR_SIRQ           0x0008      /* SCSI processor interrupt         */
  441. #define RISC_PSR_HIRQ           0x0004      /* Host interrupt                   */
  442. #define RISC_PSR_IPEND          0x0002      /* Interrupt pending                */
  443. #define RISC_PSR_FFALSE         0x0001      /* Force false                      */
  444. /* RISC processor memory timing register */
  445. #define RISC_MTREG_P1DFLT       0x1200      /* Default read/write timing, pg1   */
  446. #define RISC_MTREG_P0DFLT       0x0012      /* Default read/write timing, pg0   */
  447. #define RISC_MTREG_P1ULTRA      0x2300      /* Ultra-mode rw timing, pg1        */
  448. #define RISC_MTREG_P0ULTRA      0x0023      /* Ultra-mode rw timing, pg0        */
  449. /* Host command/ctrl register */
  450. #define HCCTRL_NOP              0x0000      /* CMD: No operation                */
  451. #define HCCTRL_RESET            0x1000      /* CMD: Reset RISC cpu              */
  452. #define HCCTRL_PAUSE            0x2000      /* CMD: Pause RISC cpu              */
  453. #define HCCTRL_REL              0x3000      /* CMD: Release paused RISC cpu     */
  454. #define HCCTRL_STEP             0x4000      /* CMD: Single step RISC cpu        */
  455. #define HCCTRL_SHIRQ            0x5000      /* CMD: Set host irq                */
  456. #define HCCTRL_CHIRQ            0x6000      /* CMD: Clear host irq              */
  457. #define HCCTRL_CRIRQ            0x7000      /* CMD: Clear RISC cpu irq          */
  458. #define HCCTRL_BKPT             0x8000      /* CMD: Breakpoint enables change   */
  459. #define HCCTRL_TMODE            0xf000      /* CMD: Enable test mode            */
  460. #define HCCTRL_HIRQ             0x0080      /* Host IRQ pending                 */
  461. #define HCCTRL_RRIP             0x0040      /* RISC cpu reset in happening now  */
  462. #define HCCTRL_RPAUSED          0x0020      /* RISC cpu is paused now           */
  463. #define HCCTRL_EBENAB           0x0010      /* External breakpoint enable       */
  464. #define HCCTRL_B1ENAB           0x0008      /* Breakpoint 1 enable              */
  465. #define HCCTRL_B0ENAB           0x0004      /* Breakpoint 0 enable              */
  466. #define QLOGICPTI {    
  467. detect: qlogicpti_detect,    
  468. release: qlogicpti_release,    
  469. info: qlogicpti_info,    
  470. queuecommand: qlogicpti_queuecommand_slow,    
  471. abort: qlogicpti_abort,    
  472. reset: qlogicpti_reset,    
  473. can_queue: QLOGICPTI_REQ_QUEUE_LEN,    
  474. this_id: 7,    
  475. sg_tablesize: QLOGICPTI_MAX_SG(QLOGICPTI_REQ_QUEUE_LEN), 
  476. cmd_per_lun: 1,    
  477. use_clustering: ENABLE_CLUSTERING,    
  478. use_new_eh_code: 0    
  479. }
  480. /* For our interrupt engine. */
  481. #define for_each_qlogicpti(qp) 
  482.         for((qp) = qptichain; (qp); (qp) = (qp)->next)
  483. #endif /* !(_QLOGICPTI_H) */