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

VxWorks

开发平台:

C/C++

  1. /* ncr810.h - NCR 810 Script SCSI Controller header file */
  2. /* Copyright 1984-1999 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01g,03dec98,ihw  Added identMsg{Buf,Length} in NCR810_SCSI_CTRL, to
  7.                  support concatenated IDENTIFY/{SYNC,WIDE} messages. (SRP 24089)
  8. 01f,25jun98,ldt  Added definitions for Quadrupler, STEST4, scratch 
  9.                  registers c-j, 895 device id, 50,70,160 MHz speeds
  10.               added siopRamBaseAdrs, updated ncr810CtrlCreate (SPR 24089)
  11. 01e,23apr98,tm,  Added SSTAT2, CTEST5_DFS definitions for SPR 8384 fix
  12. 01d,08may97,dat  temp fix for SPR 8540
  13. 01c,10mar97,dds  SPR 7766: added changes for ncr875 SCSI adapter.
  14. 01b,21nov96,myz  modified PCI_TO_MEM_OFFSET for i960jx 
  15. 01a,26may95,jds  Created ; adapted from ncr710.h
  16. */
  17. #ifndef __INCncr810h
  18. #define __INCncr810h
  19. #ifdef __cplusplus
  20. extern "C" {
  21. #endif
  22. #ifndef _ASMLANGUAGE
  23. #include "semLib.h"
  24. #include "scsiLib.h"
  25. /* PRIVATE */
  26. typedef struct ncr810Thread       /* NCR810_THREAD */
  27.     {
  28.     SCSI_THREAD           scsiThread; /* generic SCSI thread structure */
  29.     struct ncr810Shared * pShMem; /* ptr to SIOP shared data area */
  30.     
  31.     /*
  32.      * The following is a partial context of the SIOP registers which is
  33.      * maintained independently for each thread.  It is saved and
  34.      * restored by the host when scripts are started and completed.
  35.      *
  36.      * See "ncr810Script.h" for aliases for the scratch registers ...
  37.      */
  38.     UINT8 scratcha0; /* image of scratch 0 register */
  39.     UINT8 scratcha1; /* image of scratch 1 register */
  40.     UINT8 scratcha2; /* image of scratch 2 register */
  41.     UINT8 scratcha3; /* image of scratch 3 register */
  42.     UINT8 sxfer; /* image of sxfer register */
  43.     UINT8 scntl3; /* image of scntl3 for sync xfers */
  44.     } NCR810_THREAD;
  45. typedef struct ncr810Event        /* NCR810_EVENT */
  46.     {
  47.     SCSI_EVENT scsiEvent;      /* generic SCSI event */
  48.     UINT       remCount;   /* remaining byte count (mismatch) */
  49.     } NCR810_EVENT;
  50. /* Script entry point identifiers (see "ncr810StartScript()" if changed) */
  51. typedef enum ncr810ScriptEntry
  52.     {
  53.     NCR810_SCRIPT_WAIT           = 0, /* wait for re-select or host cmd */
  54.     NCR810_SCRIPT_INIT_START     = 1, /* start an initiator thread      */
  55.     NCR810_SCRIPT_INIT_CONTINUE  = 2, /* continue an initiator thread   */
  56.     NCR810_SCRIPT_TGT_DISCONNECT = 3 /* disconnect a target thread     */
  57.     } NCR810_SCRIPT_ENTRY;
  58. /* SIOP state enumeration */
  59. typedef enum ncr810State
  60.     {
  61.     NCR810_STATE_IDLE = 0, /* not running any script            */
  62.     NCR810_STATE_PASSIVE, /* waiting for reselect or host cmd  */
  63.     NCR810_STATE_ACTIVE /* running a client script           */
  64.     } NCR810_STATE;
  65. /*
  66.  * Structure used in the ncr810SetHwRegister() and ncr810GetHwRegister().
  67.  * This is used to try to handle the possible different hardware
  68.  * implementations of the chip.  This structure must contain the logical
  69.  * value one wishes e.g 0 sets register bit to zero  and 1 sets to one.
  70.  */
  71. typedef struct
  72.     {
  73.     int stest1Bit7; /* Disable external SCSI clock  */
  74.     int stest2Bit7; /* SCSI control enable */
  75.     int stest2Bit5; /* Enable differential SCSI bus */
  76.     int stest2Bit2; /* Always WIDE SCSI */
  77.     int stest2Bit1; /* Extend SREQ/SACK filtering  */
  78.     int stest3Bit7; /* TolerANT enable  */
  79.     int dmodeBit7;              /* Burst Length transfer bit 1  */
  80.     int dmodeBit6;              /* Burst Length transfer bit 0  */
  81.     int dmodeBit5; /* Source I/O memory enable  */
  82.     int dmodeBit4; /* Destination I/O memory enable*/
  83.     int scntl1Bit7; /* Slow cable mode              */
  84.     } NCR810_HW_REGS;
  85. /*
  86.  * SCSI controller structure
  87.  *
  88.  * NOTE: the entire structure must be located in cache-coherent memory 
  89.  * safe for DMA transfers. This is because some fields are shared with the 
  90.  * SCSI controller e.g. Msg In/Out buffers, Data In/Out buffers and the Cmd 
  91.  * buffer.
  92.  *
  93.  * NOTE: some fields in this structure control hardware features which are
  94.  * not supported by the current software.
  95.  */
  96. typedef struct                  /* NCR_810_SCSI_CTRL - NCR810 */
  97.                                 /* SCSI controller info       */
  98.     {
  99.     SCSI_CTRL scsiCtrl;         /* generic SCSI controller info */
  100.     SEM_ID    singleStepSem; /* use to debug script in single step mode */
  101.     
  102. /* Hardware implementation dependencies */
  103.     BOOL  slowCableMode; /* TRUE to select slow cable mode */
  104.     int   chipType; /* Device type NCR7X0_TYPE */
  105. /* Only 810 Supported today */
  106.     int   devType; /* type of device (see define's below) */
  107.     BOOL  resetReportDsbl; /* TRUE to disable SCSI bus reset reporting */
  108.     BOOL  parityTestMode; /* TRUE enable parity test mode */
  109.     BOOL  parityCheckEnbl; /* TRUE to enable parity checking */
  110.     UINT  clkPeriod;      /* period of controller clock (nsec x 100) */
  111.     UINT8 clkDiv; /* async and sync clock divider in  scntl3 */
  112.     NCR810_HW_REGS hwRegs; /* values used for hardware dependent regs */
  113.     NCR810_STATE  state; /* current state of controller */
  114.                     /* shared data areas for */
  115.                     /* identification & client threads */
  116.     struct ncr810Shared *pIdentShMem;
  117.     struct ncr810Shared *pClientShMem;
  118.     NCR810_THREAD *pHwThread;   /* thread corresp. to current script run */
  119.     NCR810_THREAD *pNewThread;  /* thread to be activated by ISR (if any) */
  120.     BOOL          cmdPending;   /* TRUE => task wants to start new command */
  121.     BOOL          singleStep;   /* TRUE => SIOP is in single-step mode */
  122.     UINT8         identMsg[SCSI_MAX_IDENT_MSG_LENGTH + 5]; /* 5 for wide/sync */
  123.     UINT          identMsgLength;
  124.     volatile UINT8    *pScntl0;      /* SCTNL0 SCSI control register 0 */
  125.     volatile UINT8    *pScntl1;      /* SCTNL1 SCSI control register 1 */
  126.     volatile UINT8    *pScntl2;      /* SCTNL2 SCSI control register 2 */
  127.     volatile UINT8    *pScntl3;      /* SCTNL3 SCSI control register 3 */
  128.     volatile UINT8    *pScid;        /* SCID SCSI chip ID register */
  129.     volatile UINT8    *pSxfer;       /* SODL SCSI transfer register */
  130.     volatile UINT8    *pSdid;        /* SDID SCSI destination ID register */
  131.     volatile UINT8    *pGpreg;       /* GPREG General Purpose register */
  132.     volatile UINT8    *pSfbr;        /* SFBR SCSI first byte received reg */
  133.     volatile UINT8    *pSocl;        /* SOCL SCSI output control latch reg */
  134.     volatile UINT8    *pSsid;        /* SSID SCSI selector ID */
  135.     volatile UINT8    *pSbcl;        /* SBCL SCSI bus control lines reg */
  136.     volatile UINT8    *pDstat;       /* DSTAT DMA status register */
  137.     volatile UINT8    *pSstat0;      /* SSTAT0 SCSI status register 0 */
  138.     volatile UINT8    *pSstat1;      /* SSTAT1 SCSI status register 1 */
  139.     volatile UINT8    *pSstat2;      /* SSTAT2 SCSI status register 2 */
  140.     volatile UINT     *pDsa;         /* DSA data structure address */
  141.     volatile UINT8    *pIstat;       /* ISTAT interrupt status register */
  142.     volatile UINT8    *pCtest0;      /* CTEST0 chip test register 0 */
  143.     volatile UINT8    *pCtest1;      /* CTEST1 chip test register 1 */
  144.     volatile UINT8    *pCtest2;      /* CTEST2 chip test register 2 */
  145.     volatile UINT8    *pCtest3;      /* CTEST3 chip test register 3 */
  146.     volatile UINT     *pTemp;        /* TEMP temporary holding register */
  147.     volatile UINT8    *pDfifo;       /* DFIFO DMA FIFO control register */
  148.     volatile UINT8    *pCtest4;      /* CTEST4 chip test register 4 */
  149.     volatile UINT8    *pCtest5;      /* CTEST5 chip test register 5 */
  150.     volatile UINT8    *pCtest6;      /* CTEST6 chip test register 6 */
  151.     volatile UINT     *pDbc;      /* DCMD SIOP command reg (24Bits Reg) */
  152.     volatile UINT8    *pDcmd;      /* DBC SIOP command register 8bits  */
  153.     volatile UINT     *pDnad;        /* DNAD DMA buffer ptr (next address) */
  154.     volatile UINT     *pDsp;         /* DSP SIOP scripts pointer register */
  155.     volatile UINT     *pDsps;        /* DSPS SIOP scripts ptr save reg */
  156.     volatile UINT8    *pScratcha0;   /* SCRATCHA0 general purpose scratch reg */
  157.     volatile UINT8    *pScratcha1;   /* SCRATCHA1 general purpose scratch reg */
  158.     volatile UINT8    *pScratcha2;   /* SCRATCHA2 general purpose scratch reg */
  159.     volatile UINT8    *pScratcha3;   /* SCRATCHA3 general purpose scratch reg */
  160.     volatile UINT8    *pDmode;       /* DMODE DMA operation mode register */
  161.     volatile UINT8    *pDien;        /* DIEN DMA interrupt enable */
  162.     volatile UINT8    *pDwt;         /* DWT DMA watchdog timer register */
  163.     volatile UINT8    *pDcntl;       /* DCTNL DMA control register */
  164.     volatile UINT     *pAdder;      /* ADDER Adder output Register */
  165.     volatile UINT8    *pSien0;       /* SIEN0 SCSI interrupt enable Zero reg */
  166.     volatile UINT8    *pSien1;       /* SIEN1 SCSI interrupt enable One reg */
  167.     volatile UINT8    *pSist0;       /* SIST0 SCSI interrupt status Zero reg */
  168.     volatile UINT8    *pSist1;       /* SIST1 SCSI interrupt status One reg */
  169.     volatile UINT8    *pSlpar;       /* SLPAR SCSI longitudinal Parity reg */
  170.     volatile UINT8    *pSwide;       /* NCR825 specific: SCSI Wide Residue */
  171.     volatile UINT8    *pMacntl;      /* MACNTL Memory Access Control reg */
  172.     volatile UINT8    *pGpcntl;      /* GPCNTL General Purpose Pin Control */
  173.     volatile UINT8    *pStime0;      /* STIME0 SCSI Timer Zero reg */
  174.     volatile UINT8    *pStime1;      /* STIME1 SCSI Timer One reg */
  175.     volatile UINT8    *pRespid;      /* RESPID Response ID reg */
  176.     volatile UINT8    *pStest0;      /* STEST0 SCSI Test Zero reg */
  177.     volatile UINT8    *pStest1;      /* STEST1 SCSI Test One reg */
  178.     volatile UINT8    *pStest2;      /* STEST2 SCSI Test Two reg */
  179.     volatile UINT8    *pStest3;      /* STEST3 SCSI Test Three reg */
  180.     volatile UINT8    *pStest4;      /* STEST4 SCSI Test Four reg */
  181.     volatile UINT16   *pSidl;        /* SIDL SCSI input data latch reg */
  182.     volatile UINT16   *pSodl;        /* SCSI output data latch reg */
  183.     volatile UINT16   *pSbdl;        /* SBDL SCSI bus data lines register */
  184.     volatile UINT     *pScratchb;    /* SCRATCHB Scratch Register B */
  185.     volatile UINT8    *siopRamBaseAdrs; /* ram base address of SIOP */
  186.     } NCR_810_SCSI_CTRL;
  187. /* END PRIVATE */
  188. /* Data stream swapping macros THESE ARE NOW OBSOLETE */
  189. #if (_BYTE_ORDER == _BIG_ENDIAN)
  190. #   define BYTE_SWAP_32_BIT(x)     LONGSWAP(x)
  191. #   define BYTE_SWAP_16_BIT(x)     ((LSB(x) << 8) | MSB(x))
  192. #else
  193. #   define BYTE_SWAP_32_BIT(x)    (x)
  194. #   define BYTE_SWAP_16_BIT(x)    (x)
  195. #endif 
  196. /* Bit Registers definitions for ncr810 */
  197. /* SCNTL0 */
  198. #define    SCNTL0_ARB1    0x80 /*     Arbitration bit1 and bit0, where  */
  199. #define    SCNTL0_ARB0    0x40 /*     00 - simple arb; 11 - full arb.   */
  200. #define    SCNTL0_START   0x20 /* Start sequence */
  201. #define    SCNTL0_WATN    0x10 /* Select w/wo atn */
  202. #define    SCNTL0_EPC     0x08       /* Parity checking */
  203. #define    SCNTL0_AAP     0x02 /* Assert ATN on parity error */
  204. #define    SCNTL0_TRG     0x01 /* Target/initiator mode */
  205. /* SCNTL1 */
  206. #define    SCNTL1_EXC     0x80 /* Extra Data Set up */
  207. #define    SCNTL1_ADB     0x40 /* Assert Data (SODL) onto scsi */
  208. #define    SCNTL1_DHP     0x20 /* Disable Halt on Parity Error or ATN (targ) */
  209. #define    SCNTL1_CON     0x10 /* connected bit status */
  210. #define    SCNTL1_RST     0x08 /* Assert Rst on scsi */
  211. #define    SCNTL1_AESP    0x04 /* Assert even parity -force error */
  212. #define    SCNTL1_IARB    0x02 /* Immediate arbitration */
  213. #define    SCNTL1_SST     0x01 /* Start SCSI Transfer */
  214. /* SCNTL2 */
  215. #define    SCNTL2_SDU     0x80  /* SCSI Disconnect Unexpected */
  216. #define    SCNTL2_WSR     0x01  /* Wide SCSI Receive */
  217.  
  218. /* SCNTL3 */
  219. #define    SCNTL3_ULTRA   0x80  /* Ultra Enable */
  220. #define    SCNTL3_SCF2    0x40  /* Syncronous Clock Conversion Factor bits */
  221. #define    SCNTL3_SCF1    0x20
  222. #define    SCNTL3_SCF0    0x10
  223. #define    SCNTL3_EWS     0x08 /* Enable WIDE SCSI */
  224. #define    SCNTL3_CCF2    0x04 /* Clock Conversion Factor bits */
  225. #define    SCNTL3_CCF1    0x02
  226. #define    SCNTL3_CCF0    0x01
  227. #define    SCNTL3_SCF_MASK 0x70 /* Sync Clock Conv Factor bit mask */
  228. #define    SCNTL3_CCF_MASK 0x07 /* Clock Conv Factor bit mask */
  229. /* SCID */
  230. #define    SCID_RRE     0x40 /* Enable Response to Reselection */
  231. #define    SCID_SRE     0x20       /* Enable Response to Selection   */
  232. #define    SCID_ENC2    0x04       /* Encoded SCSI ID bit 2 */
  233. #define    SCID_ENC1    0x02       /* Encoded SCSI ID bit 1 */
  234. #define    SCID_ENC0    0x01       /* Encoded SCSI ID bit 0 */
  235. #define    SCID_ENC_MASK 0x07    /* The Encoded SCSI ID mask */
  236. /* SXFER */
  237. #define    SXFER_TP2     0x80 /* Synchronous transfer period 2 */
  238. #define    SXFER_TP1     0x40 /* Synchronous transfer period 1 */
  239. #define    SXFER_TP0     0x20 /* Synchronous transfer period 0 */
  240. #define    SXFER_MO3     0x08 /* Maximun scsi Synchronous transfer offset */
  241. #define    SXFER_MO2     0x04 /* Maximun scsi Synchronous transfer offset */
  242. #define    SXFER_MO1     0x02 /* Maximun scsi Synchronous transfer offset */
  243. #define    SXFER_MO0     0x01 /* Maximun scsi Synchronous transfer offset */
  244. #define    SXFER_OFFSET  0x0f
  245. /* SDID */
  246. #define    SDID_ENC2     0x04   /* Destination SCSI ID bit 2 */
  247. #define    SDID_ENC1     0x02   /* Destination SCSI ID bit 1 */
  248. #define    SDID_ENC0     0x01   /* Destination SCSI ID bit 0 */
  249. #define    SDID_ENC_MASK 0x07    /* The Encoded SCSI ID mask */
  250. /* GPREG */
  251. /* ??? */
  252. /* SFBR */
  253. /* No need to specify bits */
  254. /*  SOCL (RW) and SBCL (RO not latched) */
  255. #define    B_REQ     0x80 /* Assert scsi req */
  256. #define    B_ACK     0x40 /* Assert scsi ack */
  257. #define    B_BSY     0x20 /* Assert scsi busy */
  258. /*#define    B_SEL     0x10*/ /* Assert scsi sel */
  259. #define    B_ATN     0x08 /* Assert scsi atn */
  260. #define    B_MSG     0x04 /* Assert scsi msg */
  261. #define    B_CD      0x02 /* Assert scsi c/d */
  262. #define    B_IO      0x01 /* Assert scsi i/o */
  263. /* SSID */
  264. #define    SSID_VAL  0x80 /* SCSI Valid Bit. ENID is valid only if this
  265.    bit is set. */
  266. #define    SSID_ENC_MASK_7 0x07  /* Binary encoded SCSI ID mask 0-7 */
  267. #define    SSID_ENC_MASK_F 0x0F  /* Binary encoded SCSI ID mask 0-15 */
  268. #if (SCSI_MAX_BUS_ID == SCSI_MAX_BUS_ID_7)
  269.    #define    SSID_ENC_MASK   SSID_ENC_MASK_7 /* SCSI ID mask 0-7 */
  270. #else
  271.    #define    SSID_ENC_MASK   SSID_ENC_MASK_F /* SCSI ID mask 0-15 */
  272. #endif
  273. /* DSTAT (RO) and DIEN (RW enable intr) */
  274. #define    B_DFE     0x80 /* Dma fifo empty */
  275. #define    B_MDPE    0x40       /* Master Data Parity Error */
  276. #define    B_BF      0x20 /* Bus Fault */
  277. #define    B_ABT     0x10 /* Abort condition */
  278. #define    B_SSI     0x08 /* Scsi Step Interrupt */
  279. #define    B_SIR     0x04 /* Script Interrupt received */
  280. #define    B_IID     0x01 /* Illegal Instruction Detected */
  281. /* SSTAT0 */
  282. #define    SSTAT0_ILF 0x80      /* SIDL Input Latch Full */
  283. #define    SSTAT0_ORF 0x40      /* SODR Output Register Full */
  284. #define    SSTAT0_OLF 0x20      /* SODL Output Latch Full */
  285. #define    SSTAT0_AIP 0x10      /* Arbitration In Progress */ 
  286. #define    SSTAT0_LOA 0x01      /* LOst Arbitration */
  287. #define    SSTAT0_WOA 0x02 /* WOn Arbitration */
  288. #define    SSTAT0_RST 0x04     /* SCSI ReSeT signal in the ISTAT register */
  289. #define    SSTAT0_SDP 0x08  /* SCSI SDP/ parity signal */
  290. /* SSTAT1 RO register */
  291. #define    SSTAT1_FF3     0x80 /* Fifo flag 3 :number of bytes in fifo */
  292. #define    SSTAT1_FF2     0x40 /* Fifo flag 2 :number of bytes in fifo */
  293. #define    SSTAT1_FF1     0x20 /* Fifo flag 1 :number of bytes in fifo */
  294. #define    SSTAT1_FF0     0x10 /* Fifo flag 0 :number of bytes in fifo */
  295. /* 0000=0 ..... 1000=8 */
  296. #define    SSTAT1_SPDL    0x08 /* Latched parity line */
  297. #define    SSTAT1_MSGL    0x04 /* Latched state of MSG line */
  298. #define    SSTAT1_CDL     0x02 /* Latched state of C/D line */
  299. #define    SSTAT1_IOL     0x01 /* Latched sate of IO line */
  300. #define    FIFO_MASK      0xf0
  301. /* SSTAT2 */
  302. #define    SSTAT2_ILF  0x80     /* SIDL MSB full */
  303. #define    SSTAT2_ORF  0x40     /* SODR MSB full */
  304. #define    SSTAT2_OLF  0x20     /* SODL MSB full */
  305. #define    SSTAT2_FF4  0x10     /* FIFO flags bit 4 */
  306. #define    SSTAT2_SPL  0x08     /* Latched SCSI Parity */
  307. #define    SSTAT2_DSP  0x04     /* differential sense pin */
  308. #define    SSTAT2_LDSC 0x02  /* Last Disconnect; used in conjunction with
  309.    CON bit in SCNTL1 */
  310. #define    SSTAT2_SDP  0x01  /* SCSI SDP/ parity signal */
  311. /* ISTAT RW register */
  312. #define    ISTAT_ABRT    0x80 /* Abort operation */
  313. #define    ISTAT_SOFTRST 0x40 /* Soft chip reset */
  314. #define    ISTAT_SIGP    0x20 /* signal process */
  315. #define    ISTAT_SEM     0x10   /* Semaphore */
  316. #define    ISTAT_CON     0x08 /* stat connected (reset doesn't disconnect) */
  317. #define    ISTAT_INTF    0x04   /* set by INTFLY script instruction. Signals 
  318.    ISRs while scripts are still running     */
  319. #define    ISTAT_SIP     0x02 /* SCSI Interrupt Pending */
  320. #define    ISTAT_DIP     0x01 /* Dma Interrupt Pending */
  321. /* CTEST1 */
  322. /* 
  323.  * FMT? bits define the bottom bytes in the FIFO that are empty. ? specifies
  324.  * the byte lane number. If byte lane3 is empty then FMT3 bit is set. All
  325.  * 1's indicate an empty FIFO.
  326.  */
  327. #define    CTEST1_FMT3   0x80 /* Byte lane 3 empty? */
  328. #define    CTEST1_FMT2   0x40 /* Byte lane 2 empty? */
  329. #define    CTEST1_FMT1   0x20 /* Byte lane 1 empty? */
  330. #define    CTEST1_FMT0   0x10 /* Byte lane 0 empty? */
  331. /*
  332.  * FFL? bits define the top bytes in the FIFO that are full. ? specifies the
  333.  * byte lane number. If byte lane3 is full then FFL3 is set. All 1's indicate
  334.  * a full FIFO.
  335.  */
  336. #define    CTEST1_FFL3   0x08 /* Byte lane 3 full? */
  337. #define    CTEST1_FFL2   0x04 /* Byte lane 2 full? */
  338. #define    CTEST1_FFL1   0x02 /* Byte lane 1 full? */
  339. #define    CTEST1_FFL0   0x01 /* Byte lane 0 full? */
  340. /* CTEST2 */
  341. #define    CTEST2_DDIR   0x80  /* Data Direction. 1 => From SCSI to board */
  342. #define    CTEST2_SIGP   0x40 /* Signal Process. Same as in ISTAT. When this
  343.    register is read SIGP is cleared in ISTAT */
  344. #define    CTEST2_CIO  0x20   /* Configured as I/O XXX ??? */
  345. #define    CTEST2_CM     0x10 /* Configured as Memory XXX ??? */
  346. #define    CTEST2_TEOP   0x04   /* SCSI true end of process */
  347. #define    CTEST2_DREQ   0x02  /* 1 => DREQ is active */
  348. #define    CTEST_DACK    0x01  /* 1 => DACK is inactive */
  349. /* CTEST3 */
  350. #define    CTEST3_V3      0x80 /* Chip Revision Bit 3 */
  351. #define    CTEST3_V2      0x40 /* Chip Revision Bit 2 */
  352. #define    CTEST3_V1      0x20 /* Chip Revision Bit 1 */
  353. #define    CTEST3_V0      0x10 /* Chip Revision Bit 0 */
  354. #define    CTEST3_FLF     0x08 /* Flush DMA FIFO */
  355. #define    CTEST3_CLF     0x04 /* Clear DMA FIFO */
  356. #define    CTEST3_FM      0x02 /* Fetch Pin mode */
  357. #define    CTEST3_WRIE    0x01  /* Write and Invalidate Enable */
  358. /* DFIFO */
  359. #define    DFIFO_BO_MASK  0x7f  /* 7 bits of SCSI Byte Offset counter between 
  360.    SCSI core and DMA core */
  361. /* CTEST4 */
  362. #define    CTEST4_BDIS    0x80 /* Burst transfer DISable */
  363. #define    CTEST4_ZMOD    0x40 /* Host bus high impedance mode  */
  364. #define    CTEST4_SZD     0x20 /* Scsi data high impedance mode */
  365. #define    CTEST4_SRTM    0x10 /* Shadow Register Test Mode */
  366. #define    CTEST4_MPEE    0x08 /* Master Parity Error Enable */
  367. #define    CTEST4_FBL2    0x04 /* Enable bytes lane */
  368. #define    CTEST4_FLB1    0x02 /* Bit one mux byte lane */
  369. #define    CTEST4_FLB0    0x01 /* Bit zero mux byte lane */
  370. /* CTEST5 */
  371. #define    CTEST5_ADCK    0x80 /* Increment DNAD register */
  372. #define    CTEST5_BBCK    0x40 /* Decrement DBC register */
  373. #define    CTEST5_DFS     0x20  /* DMA FIFO Size: 0=88, 1=536 bytes */
  374. #define    CTEST5_MASR    0x10 /* set/reset values for bit 3 */
  375. #define    CTEST5_DDIR    0x08 /* control internel DMAWR (scsi to host) */
  376. #define    CTEST5_EOP     0x04 /* control internal EOP (DMA/SCSI) */
  377. #define    CTEST5_DREQ    0x02 /* control internal DREQ */
  378. #define    CTEST5_DACK    0x01 /* control internal DACK (DMA/SCSI) */
  379. /* CTEST6 */
  380. #define    CTEST6_DF_MASK 0xff  /* Dma Fifo bits - mask */
  381. /* DMODE RW register */
  382. #define    DMODE_BL1     0x80 /* Burst Length transfer bits; determine the */
  383. #define    DMODE_BL0     0x40 /* number of transfers per bus ownership */
  384. /* 00=2,01=4,10=8,11=16 */
  385. #define    DMODE_SIOM    0x20 /* Source I/O Memory Enable; 1 => I/O space */
  386. #define    DMODE_DIOM    0x10  /* Destination I/O Memory Enable; "  "  "   */
  387. #define    DMODE_ERL     0x08 /* Enable Read Line; */
  388. #define    DMODE_ERMP    0x04 /* Enable Read Multiple */
  389. #define    DMODE_BOF     0x02 /* Burst Opcode Fetch enable; instrs fetched 
  390.    in burst mode */
  391. #define    DMODE_MAN     0x01 /* Manual start mode ,when set disable */
  392. /* autostart script when writting in DSP */
  393. /* DCNTL - DMA Control bits */
  394. #define    DCNTL_CLSE    0x80 /* Cache Line Size Enable */
  395. #define    DCNTL_PFF     0x40   /* Pre-Fetch Flush */
  396. #define    DCNTL_PFEN    0x20   /* Pre-Fetch ENable */ 
  397. #define    DCNTL_SSM     0x10   /* Single-Step Mode */
  398. #define    DCNTL_IRQM    0x08 /* IRQ Mode */
  399. #define    DCNTL_STD     0x04   /* STart Dma operation; instr. is in DSP */
  400. #define    DCNTL_IRQD    0x02 /* IRQ Disable; 1 => IRQ/ wont be asserted */
  401. #define    DCNTL_COM     0x01  /* Compatability XXX ??? 1 => ncr700 mode ?? */
  402. /* SIEN0 (enable intr)and SIST0 (RO Status) */
  403. /* Enable interrupt */
  404. #define    B_MA      0x80 /* Phase Mismatch; initiator interrupt occurs */
  405. #define    B_CMP     0x40 /* Funtion CoMPlete; interrupt when full 
  406.    arbitration and selection is complete */
  407. #define    B_SEL     0x20 /* Selected; intr when selected as target */
  408. #define    B_RSL     0x10 /* Reselected; intr when reselected */
  409. #define    B_SGE     0x08 /* SCSI Gross Error; intr enable */
  410. #define    B_UDC     0x04 /* Enable Unexpected Disconnect intr */
  411. #define    B_RST     0x02 /* Enable Reset intr */
  412. #define    B_PAR     0x01 /* Enable parity intr */
  413. /* SIEN1 (enable intr) and SIST1 (RO status) */
  414. #define    B_STO     0x04 /* Selection/Reselection Timeout; intr enable */
  415. #define    B_GEN     0x02 /* GENeral purpose timer expired; intr enable */
  416. #define    B_HTH     0x01 /* Handshake to Handshake timer expired; intr */
  417. /* MACNTL - Memory Access Control (RW) */
  418. #define    MACNTL_TYP_MASK 0xf0 /* Identify the chip TYPe */
  419. #define    MACNTL_DWR      0x08 /* Data WRite is local memeory access */
  420. #define    MACNTL_DRD      0x04 /* Data ReaD is local memory access */
  421. #define    MACNTL_PSCPT    0x02 /* Pointer to SCRIPTs is local mem access */
  422. #define    MACNTL_SCPTS    0x01 /* SCRIPTS fetch is local mem access */
  423. /* GPCNTL - General Purpose Pin Control (RW) */
  424. /* This reg is used to determine if GPREG pins are inputs or outputs */
  425. #define    GPCNTL_ME    0x80 /* Master Enable; internal bus master is GPIO1*/
  426. #define    GPCNTL_FE    0x40 /* Fetch Enable; internal op-code fetch GPIO0 */
  427. #define    GPCNTL_GPIO1 0x02  /* GPIO1: set - input and reset - output */
  428. #define    GPCNTL_GPIO0 0x01  /* GPIO0: set - input and reset - output */
  429. /* STIME0  SCSI Timer Zero (RW) */
  430. /* These bits select various timeout values.e.g 0000 => disable; 1111 => 1.6s */
  431. #define    STIME0_HTH_MASK 0xf0 /* Handshake-To-Handshake timer period mask */
  432. #define    STIME0_SEL_MASK 0x0f /* SELection timeout mask */
  433. /* STIME1 SCSI Timer One (RW) */
  434. #define    STIME1_GEN_MASK 0x0f /* GENeral timer timeout mask */
  435. /* STEST0 SCSI Test Zero (RO) */
  436. #define  STEST0_SSAID_MASK 0x70 /* SCSI Selected As ID */
  437. #define  STEST0_SLT        0x08 /* Selection response logic test */
  438. #define  STEST0_ART    0x04 /* Arbitation Priority encoder Test */
  439. #define  STEST0_SOZ    0x02 /* SCSI Synchronous Offset Zero */
  440. #define  STEST0_SOM    0x01 /* SCSI Synchronous Offset Maximum */
  441. /* STEST1 SCSI Test One (RW) */
  442. #define     STEST1_SCLK  0x80 /* Disables external SCLK and uses PCI internal
  443.    SCSI clock */
  444. #define     STEST1_SISO  0x40 /* SCSI Isolation Mode; inputs isolated from
  445.         the SCSI bus */
  446. #define     STEST1_QEN   0x08   /* Quadrupler Enable: Power on clock Quadrupler */
  447. #define     STEST1_QSEL  0x04   /* Quadrupler Select: Increase clock to 160 MHz */
  448. /* STEST2 SCSI Test Two (RW) */
  449. #define     STEST2_SCE   0x80 /* SCSI Control Enable */
  450. #define     STEST2_ROF   0x40   /* Reset SCSI OFfset */
  451. #define     STEST2_DIF   0x20   /* NCR825 specific: SCSI Differential Mode */
  452. #define     STEST2_AWS   0x04   /* NCR825 specific: Always Wide SCSI */
  453. #define     STEST2_SLB   0x10  /* SCSI Loopback Mode */
  454. #define     STEST2_SZM   0x08 /* SCSI High Impedence Mode */
  455. #define     STEST2_EXT  0x02 /* Extend SREQ/SACK filtering - Should not be
  456.    set during FAST SCSI > 5MB/s */
  457. #define     STEST2_LOW  0x01 /* SCSI LOW level mode; no DMA operation occur
  458.    and no SCRIPTS execute */
  459. /* STEST3 SCSI Test Three (RW) */
  460. #define     STEST3_TE    0x80 /* Tolerant Enable */ 
  461. #define     STEST3_STR   0x40 /* SCSI FIFO Test Read */
  462. #define     STEST3_HSC  0x20 /* Halt Scsi Clock */
  463. #define     STEST3_DSI  0x10 /* Disable Single Initiator response (SCSI-1) */
  464. #define     STEST3_TTM  0x04 /* Timer Test Mode */
  465. #define     STEST3_CSF   0x02 /* Clear Scsi Fifo */
  466. #define     STEST3_STW   0x01 /* SCSI Fifo Test Write */
  467. /* STEST4 SCSI Test Four (RW) */
  468. #define     STEST4_SMODE1    0x80 /* SCSI Mode Detect (upper bit) */
  469. #define     STEST4_SMODE0    0x40 /* SCSI Mode Detect (lower bit) */
  470. #define     STEST4_LOCK      0x20 /* Detect Clock Quadrupler Lockup */
  471. /* Two types of register base address. Memory I/O and Cofig base addresses */
  472. #define MEMIO_REG_BASE  (0x00)
  473. #define CONFIG_REG_BASE (0x80)
  474. #define BASE MEMIO_REG_BASE
  475. /* _BYTE_ORDER is LITTLE_ENDIAN for PCI devices */
  476. #define OFF_SCNTL0      (BASE)  /* SCTNL0 SCSI control register 0 */
  477. #define OFF_SCNTL1      (BASE + 0x01) /* SCTNL1 SCSI control register 1 */
  478. #define OFF_SCNTL2      (BASE + 0x02) /* SCTNL2 SCSI control register 2 */
  479. #define OFF_SCNTL3      (BASE + 0x03) /* SCTNL3 SCSI control register 3 */
  480. #define OFF_SCID (BASE + 0x04) /* SCID SCSI chip ID register */
  481. #define OFF_SXFER (BASE + 0x05) /* SXFER SCSI chip ID regiester */
  482. #define OFF_SDID (BASE + 0x06) /* SDID SCSI destination ID register */
  483. #define OFF_GPREG (BASE + 0x07) /* GPREG General Purpose register */
  484. #define OFF_SFBR (BASE + 0x08) /* SFBR SCSI first byte received reg */
  485. #define OFF_SOCL (BASE + 0x09)  /* SOCL SCSI output control latch reg */
  486. #define OFF_SSID (BASE + 0x0a) /* SSID SCSI selector ID */
  487. #define OFF_SBCL (BASE + 0x0b) /* SBCL SCSI bus control lines reg */
  488. #define OFF_DSTAT  (BASE + 0x0c) /* DSTAT DMA status register */
  489. #define OFF_SSTAT0 (BASE + 0x0d) /* SSTAT0 SCSI status register 0 */
  490. #define OFF_SSTAT1 (BASE + 0x0e) /* SSTAT1 SCSI status register 0 */
  491. #define OFF_SSTAT2 (BASE + 0x0f) /* SSTAT2 SCSI status register 0 */
  492. #define OFF_DSA  (BASE + 0x10) /* DSA data structure address */
  493. #define OFF_ISTAT    (BASE + 0x14) /* ISTAT interrupt status register */
  494. #define OFF_CTEST0 (BASE + 0x18) /* CTEST0 chip test register 0 */
  495. #define OFF_CTEST1 (BASE + 0x19) /* CTEST1 chip test register 1 */
  496. #define OFF_CTEST2 (BASE + 0x1a) /* CTEST2 chip test register 2 */
  497. #define OFF_CTEST3 (BASE + 0x1b) /* CTEST3 chip test register 3 */
  498. #define OFF_TEMP   (BASE + 0x1c) /* TEMP temporary holding register */
  499. #define OFF_DFIFO (BASE + 0x20) /* DFIFO DMA FIFO control register */
  500. #define OFF_CTEST4 (BASE + 0x21) /* CTEST4 chip test register 4 */
  501. #define OFF_CTEST5 (BASE + 0x22) /* CTEST5 chip test register 5 */
  502. #define OFF_CTEST6 (BASE + 0x23) /* CTEST6 chip test register 6 */
  503. #define OFF_DBC  (BASE + 0x24)  /* DBC SIOP command register 24bits  */
  504. #define OFF_DCMD (BASE + 0x27) /* DCMD SIOP command reg (8Bits Reg) */
  505. #define OFF_DNAD (BASE + 0x28) /* DNAD DMA buffer ptr (next address) */
  506. #define OFF_DSP  (BASE + 0x2c) /* DSP SIOP scripts pointer register */
  507. #define OFF_DSPS (BASE + 0x30) /* DSPS SIOP scripts ptr save reg */
  508. #define OFF_SCRATCHA0 (BASE + 0x34) /* SCRATCHA0 gen purpose scratch reg */
  509. #define OFF_SCRATCHA1 (BASE + 0x35) /* SCRATCHA1 gen purpose scratch reg */
  510. #define OFF_SCRATCHA2 (BASE + 0x36) /* SCRATCHA2 gen purpose scratch reg */
  511. #define OFF_SCRATCHA3 (BASE + 0x37) /* SCRATCHA3 gen purpose scratch reg */
  512. #define OFF_DMODE (BASE + 0x38) /* DMODE DMA operation mode register */
  513. #define OFF_DIEN  (BASE + 0x39) /* DIEN DMA interrupt enable */
  514. #define OFF_DWT   (BASE + 0x3a) /* DWT DMA watchdog timer register */
  515. #define OFF_DCNTL (BASE + 0x3b) /* DCTNL DMA control register */
  516. #define OFF_ADDER (BASE + 0x3c)  /* ADDER Adder output Register */
  517. #define OFF_SIEN0 (BASE + 0x40) /* SIEN0 SCSI interrupt enable 0 reg */
  518. #define OFF_SIEN1 (BASE + 0x41) /* SIEN1 SCSI interrupt enable 1 reg */
  519. #define OFF_SIST0 (BASE + 0x42) /* SIST0 SCSI interrupt status 0 reg */
  520. #define OFF_SIST1 (BASE + 0x43) /* SIST1 SCSI interrupt status 1 reg */
  521. #define OFF_SLPAR (BASE + 0x44) /* SLPAR SCSI longitudinal Parity reg */
  522. #define OFF_SWIDE (BASE + 0x45) /* NCR825: SWIDE SCSI Wide Residue */
  523. #define OFF_MACNTL (BASE + 0x46) /* MACNTL Memory Access Control reg */
  524. #define OFF_GPCNTL (BASE + 0x47) /* GPCNTL General Purpose Pin Control */
  525. #define OFF_STIME0 (BASE + 0x48) /* STIME0 SCSI Timer Zero reg */
  526. #define OFF_STIME1 (BASE + 0x49) /* STIME1 SCSI Timer One reg */
  527. #define OFF_RESPID (BASE + 0x4a) /* RESPID Response ID reg */
  528. #define OFF_STEST0 (BASE + 0x4c) /* STEST0 SCSI Test 0 reg */
  529. #define OFF_STEST1 (BASE + 0x4d) /* STEST1 SCSI Test 1 reg */
  530. #define OFF_STEST2 (BASE + 0x4e) /* STEST2 SCSI Test 2 reg */
  531. #define OFF_STEST3 (BASE + 0x4f) /* STEST3 SCSI Test 3 reg */
  532. #define OFF_SIDL (BASE + 0x50) /* SIDL SCSI input data latch reg */
  533. #define OFF_STEST4 (BASE + 0x52) /* STEST4 SCSI Test 4 reg */
  534. #define OFF_SODL  (BASE + 0x54) /* SCSI output data latch reg */
  535. #define OFF_SBDL  (BASE + 0x58) /* SBDL SCSI bus data lines register */
  536. #define OFF_SCRATCHB (BASE + 0x5c) /* SCRATCHB Scratch Register B */
  537. #define OFF_SCRATCHC (BASE + 0x60) /* SCRATCHC Scratch Register C */
  538. #define OFF_SCRATCHD (BASE + 0x64) /* SCRATCHD Scratch Register D */
  539. #define OFF_SCRATCHE (BASE + 0x68) /* SCRATCHE Scratch Register E */
  540. #define OFF_SCRATCHF (BASE + 0x6c) /* SCRATCHF Scratch Register F */
  541. #define OFF_SCRATCHG (BASE + 0x70) /* SCRATCHG Scratch Register G */
  542. #define OFF_SCRATCHH (BASE + 0x74) /* SCRATCHH Scratch Register H */
  543. #define OFF_SCRATCHI (BASE + 0x78) /* SCRATCHI Scratch Register I */
  544. #define OFF_SCRATCHJ (BASE + 0x7C) /* SCRATCHJ Scratch Register J */
  545. #define NCR810_DEVICE_ID   0x0001
  546. #define NCR825_DEVICE_ID   0x0003
  547. #define NCR875_DEVICE_ID   0x000f
  548. #define NCR895_DEVICE_ID   0x000c
  549. #define SYM895_DEVICE_ID   NCR895_DEVICE_ID
  550. #define PCI_ID_SYMBIOS 0x1000
  551. /*
  552.  * NOTICE: The macro PCI_TO_MEM_OFFSET is not to be used anymore.  It
  553.  * is a BSP specific value, not an architectural value.  The BSP should
  554.  * update the value ncr810PciMemOffset with the appropriate offset value.
  555.  */
  556. /*
  557.  * When memory is accessed from the PCI bus, the addresses need to contain this
  558.  * offset
  559.  *
  560.  * MAKE NO FURTHER CHANGES HERE SEE SPR 8540
  561.  */ 
  562. #ifndef PCI_TO_MEM_OFFSET
  563. #   if (CPU == I960JX)
  564. # define PCI_TO_MEM_OFFSET  0x00000000
  565. #   else
  566. # define PCI_TO_MEM_OFFSET 0x80000000
  567. #   endif
  568. #endif
  569. /* Mask Values */
  570. #define NCR810_COUNT_MASK    ((UINT)0x00ffffff) /* Mask 24 bit value in block */
  571.                                                 /* move description */
  572. /* Shift values for "device" field in shared data structure */
  573. #define NCR810_TARGET_BUS_ID_SHIFT  16 /* bits 23-16: specify target bus ID */
  574. #define NCR810_XFER_PARAMS_SHIFT     8 /* bits 15-08: copy of sxfer reg.    */
  575.  
  576. /* Sync offset and period (SXFER register) */
  577. #define NCR810_MIN_REQ_ACK_OFFSET    1 /* Minimum sync offset        */
  578. #define NCR810_MAX_REQ_ACK_OFFSET    8 /* Maximum sync offset        */
  579. /* #define NCR810_MAX_REQ_ACK_OFFSET   31 /@ Maximum sync offset 875/895*/
  580. #define NCR810_MIN_XFER_PERIOD      0 /* Minimum sync period (clks) */
  581. #define NCR810_MAX_XFER_PERIOD      7 /* Maximum sync period (clks) */
  582. #define NCR810_MIN_XFERP            4 /* Minimum value of xferp */
  583. #define NCR810_MAX_XFERP           11  /* Maximum value of xferp */
  584. #define NCR810_SYNC_XFER_PERIOD_SHIFT  5
  585. #define NCR810_SYNC_XFER_PARAMS_ASYNC 0x00
  586. /* Synchronous transfer clock division factor (SBCL register bits 1,0 (w-o) */
  587. #define NCR810_MIN_CLOCK_DIV      0x00
  588. #define NCR810_MAX_CLOCK_DIV      0x03
  589. #define NCR810_CLOCK_DIVIDE_ASYNC    0x00
  590. /* Clock conversion factor */
  591. /* prescale factor for asynchronous scsi core (scntl3) */
  592. #define NCR810_16MHZ_ASYNC_DIV        0x01    /* 16.67-25.00Mhz input clock */
  593. #define NCR810_25MHZ_ASYNC_DIV        0x02    /* 25.01-37.50Mhz input clock */
  594. #define NCR810_50MHZ_ASYNC_DIV        0x03    /* 37.51-50.00Mhz input clock */
  595. #define NCR810_66MHZ_ASYNC_DIV        0x04    /* 50.01-66.00Mhz input clock */
  596. #define NCR810_75MHZ_ASYNC_DIV        0x04    /* 50.01-75.00Mhz input clock */
  597. /*
  598.  * Note: 80 Mhz value also has bit for clock doubler
  599.  * set. We have to enable clock doubler
  600.  * as we enabled the clock quadrupler. haven't included support
  601.  * for clock doubler yet.
  602.  *
  603.  * Note: When Ultra enable bit is set, the Tolerant Enable bit must be set
  604.  * also. It is STEST3:TE (bit 7).
  605.  *
  606.  */
  607. #define NCR810_80MHZ_ASYNC_DIV        0x85    /* 75.01-80.00Mhz input clock */
  608. /* note 120 MHz normally not used */
  609. #define NCR810_160MHZ_ASYNC_DIV       0x87    /* 160.00 Mhz input clock with 
  610.                                                 clock quadrupler and 40 Mhz 
  611.                                                 input clock                 */
  612. /* ns x 100 clock period */
  613. #define NCR810_1667MHZ  6000    /* 16.67Mhz chip */
  614. #define NCR810_20MHZ    5000    /* 20Mhz chip */
  615. #define NCR810_25MHZ    4000    /* 25Mhz chip */
  616. #define NCR810_3750MHZ  2667    /* 37.50Mhz chip */
  617. #define NCR810_40MHZ    2500    /* 40Mhz chip */
  618. #define NCR810_50MHZ    2000    /* 50Mhz chip */
  619. #define NCR810_66MHZ    1515    /* 66Mhz chip */
  620. #define NCR810_6666MHZ  1500    /* 66Mhz chip */
  621. #define NCR810_75MHZ    1333    /* 75Mhz chip */
  622. #define NCR810_80MHZ    1250    /* 80Mhz chip */
  623. #define NCR810_160MHZ    625    /* 40Mhz chip with Quadrupler */
  624. #define NCR810_MAX_SYNC_PERIOD   NCR810_50MHZ
  625. #define NCR810_MAX_ASYNC_PERIOD  NCR810_25MHZ
  626. /* for ncr875/895
  627. #define NCR810_MAX_SYNC_PERIOD   NCR810_160MHZ
  628. #define NCR810_MAX_ASYNC_PERIOD  NCR810_4MHZ
  629. */
  630. #define NCR810_MAX_XFER_WIDTH 1 /* in transfer width exponent units. 16bits */
  631. /* Chip Type */
  632. #define NCR700_TYPE 0x700   /* not supported */
  633. #define NCR810_TYPE 0x810   /* supported */
  634. #define NCR720_TYPE 0x720   /* not supported */
  635. /*
  636.  * Default value to initialize some registers involved
  637.  * in the hardware implementation.Those values could be
  638.  * overwritten by a bsp call with the ncr810HwSetRegister().
  639.  * The ncr810 Data Manual documentation will you give all
  640.  * the light regarding values choose. See also the
  641.  * documentation of ncr810SetHwRegister call.
  642.  * See above the NCR810_HW_REGS for the meaning of the
  643.  * values prefill.
  644.  */
  645. #define DEFAULT_810_HW_REGS {0,0,0,0,0,1,0,0,0,0,0}
  646. /* function declarations */
  647. IMPORT  NCR_810_SCSI_CTRL * ncr810CtrlCreate (
  648. UINT8 *siopBaseAdrs,
  649. UINT   clkPeriod, 
  650. UINT16 devType);
  651. IMPORT  NCR_810_SCSI_CTRL * ncr810CtrlCreate2 (
  652. UINT8 *siopBaseAdrs,
  653. UINT   clkPeriod, 
  654. UINT16 devType,
  655. UINT8 *siopRamBaseAdrs,
  656. UINT8 *siopIOBaseAdrs);
  657. IMPORT  STATUS  ncr810CtrlInit (NCR_810_SCSI_CTRL *pSiop, 
  658. int scsiCtrlBusId);
  659. IMPORT STATUS ncr810SetHwRegister (NCR_810_SCSI_CTRL *pScsiCtrl,
  660.     NCR810_HW_REGS *pHwRegs);
  661. IMPORT  void    ncr810Intr  (NCR_810_SCSI_CTRL *pSiop);
  662. IMPORT  STATUS  ncr810Show  (SCSI_CTRL *pScsiCtrl);
  663. IMPORT  void    ncr810StepEnable (NCR_810_SCSI_CTRL *pSiop, BOOL enable);
  664. IMPORT  void    ncr810SingleStep (NCR_810_SCSI_CTRL *pSiop, BOOL verbose);
  665. #endif /* _ASMLANGUAGE */
  666. #ifdef __cplusplus
  667. }
  668. #endif
  669. #endif /* __INCncr810h */