ncr710Script2.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:9k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* ncr710Script.h - NCR 710 Script definition header */
  2. /* Copyright 1984-1992 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 03c,03jun94,ihw  corrected problem with NCR_COMPILE macro
  7. 03b,27may94,ihw  documented prior to release
  8. 03a,02may94,ihw  major modifications to work with new SCSI architecture
  9.               supports tagged commands
  10. 02a,18feb94,ihw  modified for enhanced SCSI library: multiple initiators,
  11.                     disconnect/reconnect and synchronous transfer supported
  12. 01i,22sep92,rrr  added support for c++
  13. 01h,01sep92,ccc  fixed warnings.
  14. 01g,03jul92,eve  change NCRBUG to NCR_COMPILER_BUG
  15. 01f,03jul92,eve  Merge new header
  16. 01e,26jun92,ccc  change ASMLANGUAGE to _ASMLANGUAGE.
  17. 40b,26may92,rrr  the tree shuffle
  18. 40a,12nov91,ccc  SPECIAL VERSION FOR 5.0.2 68040 RELEASE.
  19. 02a,26oct91,eve  Add byte definition to turnoff/on the timeout in the script.
  20. 01a,23oct91,eve  Created script and driver header
  21. */
  22. #ifndef __INCncr710Script2h
  23. #define __INCncr710Script2h
  24. #ifdef __cplusplus
  25. extern "C" {
  26. #endif
  27. #ifndef _ASMLANGUAGE
  28. #ifndef NCR_COMPILE
  29. /*
  30.  *  Entry points defined by PROCs in the script.
  31.  */
  32. extern ULONG ncr710Wait[]; /* wait for re-select or host cmd   */
  33. extern ULONG ncr710InitStart[]; /* start new initiator thread       */
  34. extern ULONG ncr710InitContinue[]; /* continue an initiator thread     */
  35. extern ULONG ncr710TgtDisconnect[]; /* disconnect from SCSI bus         */
  36. /*
  37.  *  Structure giving parameters for block moves using the NCR 710's
  38.  *  indirect addressing ("MOVE FROM") capability.
  39.  */
  40. typedef struct moveParams
  41.     {
  42.     ULONG  size; /* # bytes to move to/from SCSI */
  43.     UINT8 *addr; /* where in memory they go/come */
  44.     } MOVE_PARAMS;
  45. /*
  46.  *  Shared structure defining all information about a SCSI nexus which has
  47.  *  to be visible to the script.  Note that this structure must not be
  48.  *  changed without corresponding changes to the OFFSET_* definitions below.
  49.  *
  50.  *  IMPORTANT NOTE: Every element in this structure _must_ be aligned on
  51.  *  a 4-byte boundary, otherwise the script will fail (illegal instruction).
  52.  */
  53. typedef struct ncr710Shared
  54.     {
  55.     ULONG       device; /* target bus ID, sync xfer params */
  56.     MOVE_PARAMS command; /* command bytes sent to target    */
  57.     MOVE_PARAMS data; /* data bytes to/from target       */
  58.     MOVE_PARAMS status; /* command status byte from target */
  59.     MOVE_PARAMS identOut; /* outgoing identification msg     */
  60.     MOVE_PARAMS identIn; /* incoming identification msg     */
  61.     MOVE_PARAMS msgOut; /* message bytes sent to target    */
  62.     MOVE_PARAMS msgIn; /* message bytes recvd from target */
  63.     MOVE_PARAMS msgInSecond; /* second byte of multi-byte msg   */
  64.     MOVE_PARAMS msgInRest; /* remainder of multi-byte message */
  65.     } NCR710_SHARED;
  66. #endif /* NCR_COMPILE */
  67. /*
  68.  *  The following offsets are used in the script.  They _MUST_ be kept in
  69.  *  sync with the definition of the NCR710_NEXUS structure above.
  70.  */
  71. #define SIZEOF_ULONG         4
  72. #define SIZEOF_MOVE_PARAMS   8
  73. #define OFFSET_DEVICE      0
  74. #define OFFSET_CMD        (OFFSET_DEVICE          + SIZEOF_ULONG)
  75. #define OFFSET_DATA       (OFFSET_CMD             + SIZEOF_MOVE_PARAMS)
  76. #define OFFSET_STATUS      (OFFSET_DATA            + SIZEOF_MOVE_PARAMS)
  77. #define OFFSET_IDENT_OUT     (OFFSET_STATUS          + SIZEOF_MOVE_PARAMS)
  78. #define OFFSET_IDENT_IN     (OFFSET_IDENT_OUT       + SIZEOF_MOVE_PARAMS)
  79. #define OFFSET_MSG_OUT      (OFFSET_IDENT_IN        + SIZEOF_MOVE_PARAMS)
  80. #define OFFSET_MSG_IN      (OFFSET_MSG_OUT         + SIZEOF_MOVE_PARAMS)
  81. #define OFFSET_MSG_IN_SECOND (OFFSET_MSG_IN          + SIZEOF_MOVE_PARAMS)
  82. #define OFFSET_MSG_IN_REST (OFFSET_MSG_IN_SECOND   + SIZEOF_MOVE_PARAMS)
  83. /*
  84.  *  Scratch registers used for data transfer to host
  85.  *
  86.  */
  87. #define HOST_FLAGS          scratch0 /* host <-> SIOP: flags - see below  */
  88. #define MSG_OUT_STATE     scratch1 /* host <-> SIOP: pending,sent,none  */
  89. #define MSG_IN_STATE     scratch2 /* host <-> SIOP: pending,sent,none  */
  90. #define TARGET_BUS_ID     scratch3 /* host <-  SIOP: bus IDs asserted   */
  91. #define CURRENT_PHASE     scratch3    /* host <-  SIOP: phase in progress  */
  92. /* Bitmasks for HOST_FLAGS */
  93. #define FLAGS_IDENTIFY     0x01 /* assert ATN on select, to IDENTIFY */
  94. /*
  95.  *  These definitions provide meaningful aliases for use in "ncr710Lib.c".
  96.  *  I don't like #defining names of structure members, but it's better than
  97.  *  having "scratch0" and so forth all over the place ...  Be careful of
  98.  *  clashes with ordinary variable names.
  99.  */
  100. #define nHostFlags        scratch0 /* (r/w) flag bits as defined above  */
  101. #define nMsgOutState     scratch1 /* (r/w) state of message out buffer */
  102. #define nMsgInState      scratch2 /* (r/w) state of message in  buffer */
  103. #define nBusIdBits       scratch3 /* (r-o) bus ID bits set on reselect */
  104. #define nBusPhase         scratch3 /* (r-o) most recent phase; mismatch */
  105. /*
  106.  *  SCSI phases - defined here to avoid including "scsiLib.h".  Must match !
  107.  */
  108. #define PHASE_NONE         0xff /* no info transfer pending */
  109. #define PHASE_DATA_OUT         0 /* data out (to target)     */
  110. #define PHASE_DATA_IN          1 /* data in (from target)    */
  111. #define PHASE_COMMAND         2 /* command (to target)      */
  112. #define PHASE_STATUS          3 /* status (from target)     */
  113. #define PHASE_MSG_OUT          6 /* message out (to target)  */
  114. #define PHASE_MSG_IN           7 /* message in (from target) */
  115. /*
  116.  *  SCSI messages - defined here to avoid including "scsiLib.h".  Must match !
  117.  */
  118. #define M_CMD_COMPLETE          0x00 /* command complete msg. */
  119. #define M_EXT_MSG               0x01 /* extended message msg. */
  120. #define M_DISCONNECT            0x04 /* disconnect msg.       */
  121. #define M_ABORT                 0x06 /* abort msg.            */
  122. #define M_NO_OP                 0x08 /* no operation msg.     */
  123. #define M_ABORT_TAG             0x0d /* abort tag msg.        */
  124. /*
  125.  *  SCSI message in status - must match SCSI_MSG_IN_STATE enum in "scsiLib.h"
  126.  */
  127. #define M_IN_NONE        0 /* no message in in progress     */
  128. #define M_IN_SECOND_BYTE     1    /* next byte is second of two    */
  129. #define M_IN_EXT_MSG_LEN 2 /* next byte is ext msg length   */
  130. #define M_IN_EXT_MSG_DATA     3 /* next byte(s) are ext msg data */
  131. /*
  132.  *  SCSI message out status - must match SCSI_MSG_OUT_STATE enum in "scsiLib.h"
  133.  */
  134. #define M_OUT_NONE        0 /* no message out in progress */
  135. #define M_OUT_PENDING      1 /* message out ready to send  */
  136. #define M_OUT_SENT        2 /* message out has been sent  */
  137. /*
  138.  *  Script status interrupt codes
  139.  */
  140. #define NCR710_READY      0 /* ready to start new host command  */
  141. #define NCR710_SCRIPT_ABORTED      1 /* have aborted a running script    */
  142. #define NCR710_MESSAGE_OUT_SENT     10 /* have successfully sent a message */
  143. #define NCR710_MESSAGE_IN_RECVD     11 /* have received a complete message */
  144. #define NCR710_EXT_MESSAGE_SIZE     12 /* have read size of extended msg   */
  145. #define NCR710_NO_MSG_OUT        13 /* msg out req. with no msg pending */
  146. #define NCR710_CMD_COMPLETE     20 /* SCSI command completed           */
  147. #define NCR710_DISCONNECTED        21 /* target has disconnected          */
  148. #define NCR710_RESELECTED     22 /* have been reselected by target   */
  149. #define NCR710_SELECTED          23 /* have been selected as a target   */
  150. #define NCR710_SPURIOUS_CMD      30 /* spurious interrupt of resel wait */
  151. #define NCR710_ILLEGAL_PHASE     31 /* target requested phase 4 or 5    */
  152. #define NCR710_NO_IDENTIFY       32 /* no IDENTIFY after reselection    */
  153. /*
  154.  *  Note: the following are not generated by the script, but it seems
  155.  *  sensible to define them here for continuity.
  156.  */
  157. #define NCR710_PHASE_MISMATCH     50 /* unexpected phase change occurred  */
  158. #define NCR710_SCSI_TIMEOUT      51 /* select, reselect or xfer timeout  */
  159. #define NCR710_SCSI_BUS_RESET     52 /* SCSI bus has been reset           */
  160. #define NCR710_UNEXPECTED_DISCON    53 /* target disconnected unexpectedly  */
  161. #define NCR710_SINGLE_STEP       60 /* single-step completed             */
  162. #define NCR710_FATAL_ERROR       99 /* bus error, illegal opcode, etc.   */
  163. /*
  164.  *  NCR 710 register bit definitions
  165.  *
  166.  *  Note: there are similar definitions in "ncr710.h".
  167.  */
  168. #define SBCL_SEL          0x10 /* 1 => SCSI SEL signal asserted  */
  169. #define SBCL_ATN          0x08 /* 1 => SCSI ATN signal asserted  */
  170. #define SCNTL0_TARGET_MODE   0x01 /* 1 => SIOP is in target mode    */
  171. #define SCNTL1_CONNECTED     0x10 /* 1 => SIOP is connected to SCSI */
  172. #define SIEN_MISMATCH_ATN    0x80 /* 1 => mismatch/ATN intr enabled */
  173. #define CTEST2_SIGNAL      0x40 /* 1 => signal pending from host  */
  174. #define CTEST7_NO_TIMEOUT 0x10 /* 1 => disable all SCSI timeouts */
  175. #endif  /* _ASMLANGUAGE */
  176. #ifdef __cplusplus
  177. }
  178. #endif
  179. #endif /* __INCncr710Script2h */