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

VxWorks

开发平台:

C/C++

  1. /* ncr5390_2.h - NCR 53C90 Advanced SCSI Controller header file */
  2. /*
  3. modification history
  4. --------------------
  5. 01a,07may96,dds  written (from jaideep)
  6. */
  7. #ifndef __INCncr5390_2h
  8. #define __INCncr5390_2h
  9. #ifdef __cplusplus
  10. extern "C" {
  11. #endif
  12. #ifndef _ASMLANGUAGE
  13. #include "scsiLib.h"
  14. #include "semLib.h"
  15. /* ASC state enumeration */
  16. typedef enum ascState
  17.     {
  18.     ASC_STATE_IDLE = 0,
  19.     ASC_STATE_SELECT_PENDING,
  20.     ASC_STATE_CONNECTED
  21.     } ASC_STATE;
  22. /* SCSI controller structure */
  23. typedef struct /* NCR_5390_SCSI_CTRL - NCR 5390 SCSI controller info */
  24.     {
  25.     SCSI_CTRL  scsiCtrl;        /* generic SCSI controller info */
  26.     SEM_ID     xferDoneSem;     /* semaphore for waiting on transfer */
  27.     UINT       clkPeriod;       /* period of the controller clock (nsec) */
  28.     UINT       maxBytesPerXfer; /* limit of ASC's DMA transfer counter */
  29.     UINT       defSelTimeOut;   /* default dev. select time-out (usec) */
  30.     FUNCPTR    sysScsiDmaStart; /* function for SCSI DMA I/O */
  31.     FUNCPTR    sysScsiDmaAbort; /* function for SCSI DMA aborts */
  32.     int        sysScsiDmaArg;   /* call-back argument for SCSI DMA funcs. */
  33.     int        devType; /* type of device (see define's below) */
  34.     TBOOL      slowCableMode; /* TRUE to select slow cable mode */
  35.     TBOOL      resetReportDsbl; /* TRUE to disable SCSI bus reset reporting */
  36.     TBOOL      parityTestMode; /* TRUE to enable par test mode (DO NOT USE!) */
  37.     TBOOL      parityCheckEnbl; /* TRUE to enable parity checking */
  38.     UINT8      clkCvtFactor;    /* value of the clock conversion factor */
  39.     int        chipType;     /* chip type (see definitions below) */
  40.     ASC_STATE  state;           /* current state of controller */
  41.     int        selBusId;        /* SCSI id of target being selected */
  42.     int        reqPhase;        /* current info xfer phase of SCSI */
  43.     BOOL       xferPending;     /* is a transfer pending on the controller ? */
  44.     int        xferPhase;    /* SCSI phase currently being xferred */
  45.     UINT       xferNBytes;   /* Number of bytes currently being xfered */
  46.     UINT8    * xferAddr;        /* Address of buffer being xfered */
  47.     int        xferDirection;   /* Direction of current transfer */
  48.     BOOL       xferUsingDma; /* Current transfer is using DMA ? */
  49.     BOOL       syncDataXfer; /* Synchronous data transfer enabled ? */
  50.     volatile UINT8 *pTclReg; /* ptr xfer count LSB reg */
  51.     volatile UINT8 *pTchReg; /* ptr xfer count MSB reg */
  52.     volatile UINT8 *pFifoReg; /* ptr FIFO reg */
  53.     volatile UINT8 *pCmdReg; /* ptr command reg */
  54.     volatile UINT8 *pStatReg; /* ptr status reg */
  55.     volatile UINT8 *pIntrReg; /* ptr interrupt reg */
  56.     volatile UINT8 *pStepReg; /* ptr sequence step reg */
  57.     volatile UINT8 *pFlgsReg; /* ptr FIFO flags reg */
  58.     volatile UINT8 *pCfg1Reg; /* ptr configuration 1 reg */
  59.     volatile UINT8 *pClkReg; /* ptr clock conversion factor reg */
  60.     volatile UINT8 *pTestReg; /* ptr test mode reg */
  61.     volatile UINT8 *pCfg2Reg; /* ptr configuration 2 reg (if present) */
  62.     volatile UINT8 *pCfg3Reg; /* ptr configuration 3 reg (if present) */
  63.     volatile UINT8 *pTcxReg; /* ptr to xfer count ext'n reg (if present) */
  64.     } NCR_5390_SCSI_CTRL;
  65. typedef struct ncr5390functbl
  66.     {
  67.     FUNCPTR ascCommand;
  68.     FUNCPTR ascIntr;
  69.     FUNCPTR ascRegRead;
  70.     FUNCPTR ascRegWrite;
  71.     FUNCPTR ascXferCountGet;
  72.     FUNCPTR ascXferCountSet;
  73.     FUNCPTR ncr5390CtrlInit;
  74.     FUNCPTR ncr5390Show;
  75.     } SCSIDRV_FUNC_TBL;
  76. /* defines for the overlapping registers */
  77. #define pBidReg           pStatReg /* select/reselect bus id */
  78. #define pTmoReg           pIntrReg /* select/reselect bus id */
  79. /* ASC device types */
  80. #define ASC_NCR5390 0
  81. #define ASC_NCR5390A 1
  82. #define ASC_NCR5390B 2
  83. #define ASC_NCR5394 3
  84. #define ASC_NCR5395 4
  85. #define ASC_NCR5396 5
  86. #define ASC_NCR53C9X         6        /* as in NCR 89C100 (for frc5ce) */
  87. /* FIFO register */
  88. #define NCR5390_FIFO_DEPTH       16
  89. /* command register */
  90. #define NCR5390_NOP             0x00
  91. #define NCR5390_FIFO_FLUSH      0x01
  92. #define NCR5390_CHIP_RESET      0x02
  93. #define NCR5390_BUS_RESET       0x03
  94. #define NCR5390_INFO_TRANSFER   0x10
  95. #define NCR5390_I_CMD_COMPLETE  0x11
  96. #define NCR5390_MSG_ACCEPTED    0x12
  97. #define NCR5390_SET_ATTENTION   0x1a
  98. #define NCR5390_UNSET_ATTENTION 0x1b
  99. #define NCR5390_SEND_MESSAGE    0x20
  100. #define NCR5390_SEND_STATUS     0x21
  101. #define NCR5390_SEND_DATA       0x22
  102. #define NCR5390_DISCONNECT_SEQ  0x23
  103. #define NCR5390_TERMINATE_SEQ   0x24
  104. #define NCR5390_T_CMD_COMPLETE  0x25
  105. #define NCR5390_DISCONNECT      0x27
  106. #define NCR5390_RCV_MESSAGE     0x28
  107. #define NCR5390_RCV_COMMAND     0x29
  108. #define NCR5390_RCV_DATA        0x2a
  109. #define NCR5390_RCV_CMD_SEQ     0x2b
  110. #define NCR5390_RESELECT        0x40
  111. #define NCR5390_SELECT          0x41
  112. #define NCR5390_SELECT_ATN      0x42
  113. #define NCR5390_SEL_ATN_STOP    0x43
  114. #define NCR5390_SELECTION_ENBL  0x44
  115. #define NCR5390_SELECTION_DSBL  0x45
  116. #define NCR5390_SELECT_ATN3     0x46
  117. #define NCR5390_DMA_OP          0x80
  118. /* status register */
  119. #define NCR5390_DOUT_PHASE      0x00
  120. #define NCR5390_DIN_PHASE       0x01
  121. #define NCR5390_CMND_PHASE      0x02
  122. #define NCR5390_STAT_PHASE      0x03
  123. #define NCR5390_MSGOUT_PHASE    0x06
  124. #define NCR5390_MSGIN_PHASE     0x07
  125. #define NCR5390_PHASE_MASK      0x07
  126. #define NCR5390_VAL_GROUP       0x08
  127. #define NCR5390_TERMINAL_CNT    0x10
  128. #define NCR5390_PARITY_ERR      0x20
  129. #define NCR5390_GROSS_ERR       0x40
  130. #define NCR5390_INTERRUPT       0x80
  131. /* interrupt status register */
  132. #define NCR5390_SELECTED        0x01
  133. #define NCR5390_ATN_SELECTED    0x02
  134. #define NCR5390_RESELECTED      0x04
  135. #define NCR5390_FUNC_COMPLETE   0x08
  136. #define NCR5390_BUS_SERVICE     0x10
  137. #define NCR5390_DISCONNECTED    0x20
  138. #define NCR5390_ILLEGAL_CMD     0x40
  139. #define NCR5390_SCSI_RESET      0x80
  140. /* fifo flags register */
  141. #define NCR5390_MORE_DATA       0x1f
  142. /* configuration register 1 */
  143. #define NCR5390_OWN_ID_MASK     0x07
  144. #define NCR5390_CHIPTEST_ENBL   0x08
  145. #define NCR5390_PAR_CHECK_ENBL  0x10
  146. #define NCR5390_PAR_TEST_ENBL   0x20
  147. #define NCR5390_RESET_REP_DSBL  0x40
  148. #define NCR5390_SLOW_CABLE      0x80
  149. /* test register */
  150. #define NCR5390_TARGET   0x01
  151. #define NCR5390_INITIATOR       0x02
  152. #define NCR5390_HIGH_IMP        0x04
  153. /* configuration register 2 */
  154. #define NCR5390_DMA_PAR_ENBL    0x01
  155. #define NCR5390_REG_PAR_ENBL    0x02
  156. #define NCR5390_PARITY_ABORT    0x04
  157. #define NCR5390_SCSI_2          0x08
  158. #define NCR5390_DREQ_HIGH_IMP   0x10
  159. #define NCR5390_FEATURE_ENABLE 0x40 /* enable advanced features */
  160. /* configuration register 3 */
  161. #define NCR5390_FAST_CLOCK   0x01 /* clock freq > 25 MHz               */
  162. #define NCR5390_FAST_SCSI    0x02 /* allow fast SCSI data rates        */
  163. #define NCR5390_CDB10      0x04 /* allow 10-byte group 2 CDBs        */
  164. #define NCR5390_Q_TAG_ENABLE 0x08 /* auto-receive queue tag messages   */
  165. #define NCR5390_CHECK_ID_MSG 0x10 /* check ID msg during (re)selection */
  166. /** sequence step register **/
  167. #define NCR5390_SEQ_ATNSTOP     0x01
  168. #define NCR5390_SEQ_OUT         0x04
  169. #define NCR5390_SEQ_TIME        0x07
  170. #define NCR5390_SEQ_ERR         0x00
  171. /** miscellaneous constants **/
  172. #define ASC_SYNC_XFER_PARAMS_ASYNC 0x00
  173. #define ASC_MIN_XFER_PERIOD     5
  174. #define ASC_MAX_XFER_PERIOD     35
  175. #define ASC_MAX_REQ_ACK_OFFSET  15
  176. #define ASC_STAT_BITS           0x07
  177. typedef NCR_5390_SCSI_CTRL ASC;
  178. /* external declarations */
  179. IMPORT SCSIDRV_FUNC_TBL *pNcr5390IfTbl;
  180. #if defined(__STDC__) || defined(__cplusplus)
  181. IMPORT  void ncr5390IfTblInit ();
  182. IMPORT  void ascIntr ( ASC *);
  183. IMPORT STATUS ncr5390CtrlInit (FAST ASC *, FAST int , FAST UINT, int);
  184. IMPORT NCR_5390_SCSI_CTRL * ncr5390CtrlCreateScsi2 (UINT8 *baseAdrs, 
  185. int regOffset,
  186. UINT clkPeriod,
  187. UINT    sysScsiDmaMaxBytes,
  188. FUNCPTR sysScsiDmaXfer,
  189. FUNCPTR sysScsiDmaAbort,
  190. int     sysScsiDmaArg);
  191. #ifndef NCR5390_2_LOCAL_FUNCS
  192. IMPORT void ascCommand (ASC *pAsc, int cmdCode);
  193. IMPORT void ncr5390Intr (ASC *);
  194. IMPORT void ascXferCountGet (FAST ASC *, FAST UINT *);
  195. IMPORT STATUS ascXferCountSet (FAST ASC *, FAST UINT);
  196. IMPORT STATUS ncr5390CtrlInitScsi2 (FAST ASC *, FAST int , FAST UINT);
  197. IMPORT STATUS ncr5390ShowScsi2 ( FAST NCR_5390_SCSI_CTRL *);
  198. #endif
  199. #else /* __STDC__ */
  200. IMPORT  void ncr5390IfTblInit();
  201. IMPORT NCR_5390_SCSI_CTRL * ncr5390CtrlCreateScsi2 ();
  202. #ifndef NCR5390_2_LOCAL_FUNCS
  203. IMPORT void ascCommand ();
  204. IMPORT void ncr5390Intr ();
  205. IMPORT void ascXferCountGet ();
  206. IMPORT STATUS ascXferCountSet ();
  207. IMPORT STATUS ncr5390CtrlInitScsi2 ();
  208. IMPORT STATUS ncr5390ShowScsi2 ();
  209. #endif
  210. #endif /* __STDC__ */
  211. #endif /* _ASMLANGUAGE */
  212. #ifdef __cplusplus
  213. }
  214. #endif
  215. #endif /* __INCncr5390_2h */