📄 ncrreg.h
字号:
/* $OpenBSD: ncrreg.h,v 1.1 1997/12/01 18:58:49 millert Exp $ *//* $NetBSD: ncrreg.h,v 1.14 1997/09/23 02:27:46 perry Exp $ *//****************************************************************************** Id: ncrreg.h,v 1.11 1997/08/31 19:42:31 se Exp**** Device driver for the NCR 53C810 PCI-SCSI-Controller.**** FreeBSD / NetBSD / OpenBSD****-------------------------------------------------------------------------**** Written for 386bsd and FreeBSD by** wolf@cologne.de Wolfgang Stanglmeier** se@mi.Uni-Koeln.de Stefan Esser**** Ported to NetBSD by** mycroft@gnu.ai.mit.edu****-------------------------------------------------------------------------**** Copyright (c) 1994 Wolfgang Stanglmeier. All rights reserved.**** Redistribution and use in source and binary forms, with or without** modification, are permitted provided that the following conditions** are met:** 1. Redistributions of source code must retain the above copyright** notice, this list of conditions and the following disclaimer.** 2. Redistributions in binary form must reproduce the above copyright** notice, this list of conditions and the following disclaimer in the** documentation and/or other materials provided with the distribution.** 3. The name of the author may not be used to endorse or promote products** derived from this software without specific prior written permission.**** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.******************************************************************************/#ifndef __NCR_REG_H__#define __NCR_REG_H__/*==========================================================**** OS dependencies.****==========================================================*/#ifdef __OpenBSD__#define ISSCRIPTRAMMAPPED(np) (np->scriptmapped)#else /*__OpenBSD__*/#define ISSCRIPTRAMMAPPED(np) (np->vaddr2)#endif /*__OpenBSD__*//*-----------------------------------------------------------------**** The ncr 53c810 register structure.****-----------------------------------------------------------------*/struct ncr_reg {/*00*/ u_int8_t nc_scntl0; /* full arb., ena parity, par->ATN *//*01*/ u_int8_t nc_scntl1; /* no reset */ #define ISCON 0x10 /* connected to scsi */ #define CRST 0x08 /* force reset *//*02*/ u_int8_t nc_scntl2; /* no disconnect expected */ #define SDU 0x80 /* cmd: disconnect will raise error */ #define CHM 0x40 /* sta: chained mode */ #define WSS 0x08 /* sta: wide scsi send [W]*/ #define WSR 0x01 /* sta: wide scsi received [W]*//*03*/ u_int8_t nc_scntl3; /* cnf system clock dependent */ #define EWS 0x08 /* cmd: enable wide scsi [W]*//*04*/ u_int8_t nc_scid; /* cnf host adapter scsi address */ #define RRE 0x40 /* r/w:e enable response to resel. */ #define SRE 0x20 /* r/w:e enable response to select *//*05*/ u_int8_t nc_sxfer; /* ### Sync speed and count *//*06*/ u_int8_t nc_sdid; /* ### Destination-ID *//*07*/ u_int8_t nc_gpreg; /* ??? IO-Pins *//*08*/ u_int8_t nc_sfbr; /* ### First byte in phase *//*09*/ u_int8_t nc_socl; #define CREQ 0x80 /* r/w: SCSI-REQ */ #define CACK 0x40 /* r/w: SCSI-ACK */ #define CBSY 0x20 /* r/w: SCSI-BSY */ #define CSEL 0x10 /* r/w: SCSI-SEL */ #define CATN 0x08 /* r/w: SCSI-ATN */ #define CMSG 0x04 /* r/w: SCSI-MSG */ #define CC_D 0x02 /* r/w: SCSI-C_D */ #define CI_O 0x01 /* r/w: SCSI-I_O *//*0a*/ u_int8_t nc_ssid;/*0b*/ u_int8_t nc_sbcl;/*0c*/ u_int8_t nc_dstat; #define DFE 0x80 /* sta: dma fifo empty */ #define MDPE 0x40 /* int: master data parity error */ #define BF 0x20 /* int: script: bus fault */ #define ABRT 0x10 /* int: script: command aborted */ #define SSI 0x08 /* int: script: single step */ #define SIR 0x04 /* int: script: interrupt instruct. */ #define IID 0x01 /* int: script: illegal instruct. *//*0d*/ u_int8_t nc_sstat0; #define ILF 0x80 /* sta: data in SIDL register lsb */ #define ORF 0x40 /* sta: data in SODR register lsb */ #define OLF 0x20 /* sta: data in SODL register lsb */ #define AIP 0x10 /* sta: arbitration in progress */ #define LOA 0x08 /* sta: arbitration lost */ #define WOA 0x04 /* sta: arbitration won */ #define IRST 0x02 /* sta: scsi reset signal */ #define SDP 0x01 /* sta: scsi parity signal *//*0e*/ u_int8_t nc_sstat1; #define FF3210 0xf0 /* sta: bytes in the scsi fifo *//*0f*/ u_int8_t nc_sstat2; #define ILF1 0x80 /* sta: data in SIDL register msb[W]*/ #define ORF1 0x40 /* sta: data in SODR register msb[W]*/ #define OLF1 0x20 /* sta: data in SODL register msb[W]*/ #define LDSC 0x02 /* sta: disconnect & reconnect *//*10*/ u_int32_t nc_dsa; /* --> Base page *//*14*/ u_int8_t nc_istat; /* --> Main Command and status */ #define CABRT 0x80 /* cmd: abort current operation */ #define SRST 0x40 /* mod: reset chip */ #define SIGP 0x20 /* r/w: message from host to ncr */ #define SEM 0x10 /* r/w: message between host + ncr */ #define CON 0x08 /* sta: connected to scsi */ #define INTF 0x04 /* sta: int on the fly (reset by wr)*/ #define SIP 0x02 /* sta: scsi-interrupt */ #define DIP 0x01 /* sta: host/script interrupt *//*15*/ u_int8_t nc_15_;/*16*/ u_int8_t nc_16_;/*17*/ u_int8_t nc_17_;/*18*/ u_int8_t nc_ctest0;/*19*/ u_int8_t nc_ctest1;/*1a*/ u_int8_t nc_ctest2; #define CSIGP 0x40/*1b*/ u_int8_t nc_ctest3; #define FLF 0x08 /* cmd: flush dma fifo */ #define CLF 0x04 /* cmd: clear dma fifo */ #define FM 0x02 /* mod: fetch pin mode */ #define WRIE 0x01 /* mod: write and invalidate enable *//*1c*/ u_int32_t nc_temp; /* ### Temporary stack *//*20*/ u_int8_t nc_dfifo;/*21*/ u_int8_t nc_ctest4; #define BDIS 0x80 /* mod: burst disable */ #define MPEE 0x08 /* mod: master parity error enable *//*22*/ u_int8_t nc_ctest5; #define DFS 0x20 /* mod: dma fifo size *//*23*/ u_int8_t nc_ctest6;/*24*/ u_int32_t nc_dbc; /* ### Byte count and command *//*28*/ u_int32_t nc_dnad; /* ### Next command register *//*2c*/ u_int32_t nc_dsp; /* --> Script Pointer *//*30*/ u_int32_t nc_dsps; /* --> Script pointer save/opcode#2 *//*34*/ u_int32_t nc_scratcha; /* ??? Temporary register a *//*38*/ u_int8_t nc_dmode; #define BL_2 0x80 /* mod: burst length shift value +2 */ #define BL_1 0x40 /* mod: burst length shift value +1 */ #define ERL 0x08 /* mod: enable read line */ #define ERMP 0x04 /* mod: enable read multiple */ #define BOF 0x02 /* mod: burst op code fetch *//*39*/ u_int8_t nc_dien;/*3a*/ u_int8_t nc_dwt;/*3b*/ u_int8_t nc_dcntl; /* --> Script execution control */ #define CLSE 0x80 /* mod: cache line size enable */ #define PFF 0x40 /* cmd: pre-fetch flush */ #define PFEN 0x20 /* mod: pre-fetch enable */ #define SSM 0x10 /* mod: single step mode */ #define IRQM 0x08 /* mod: irq mode (1 = totem pole !) */ #define STD 0x04 /* cmd: start dma mode */ #define IRQD 0x02 /* mod: irq disable */ #define NOCOM 0x01 /* cmd: protect sfbr while reselect *//*3c*/ u_int32_t nc_adder;/*40*/ u_int16_t nc_sien; /* -->: interrupt enable *//*42*/ u_int16_t nc_sist; /* <--: interrupt status */ #define STO 0x0400/* sta: timeout (select) */ #define GEN 0x0200/* sta: timeout (general) */ #define HTH 0x0100/* sta: timeout (handshake) */ #define MA 0x80 /* sta: phase mismatch */ #define CMP 0x40 /* sta: arbitration complete */ #define SEL 0x20 /* sta: selected by another device */ #define RSL 0x10 /* sta: reselected by another device*/ #define SGE 0x08 /* sta: gross error (over/underflow)*/ #define UDC 0x04 /* sta: unexpected disconnect */ #define RST 0x02 /* sta: scsi bus reset detected */ #define PAR 0x01 /* sta: scsi parity error *//*44*/ u_int8_t nc_slpar;/*45*/ u_int8_t nc_swide;/*46*/ u_int8_t nc_macntl;/*47*/ u_int8_t nc_gpcntl;/*48*/ u_int8_t nc_stime0; /* cmd: timeout for select&handshake*//*49*/ u_int8_t nc_stime1; /* cmd: timeout user defined *//*4a*/ u_int16_t nc_respid; /* sta: Reselect-IDs *//*4c*/ u_int8_t nc_stest0;/*4d*/ u_int8_t nc_stest1; #define DBLEN 0x08 /* clock doubler running */ #define DBLSEL 0x04 /* clock doubler selected *//*4e*/ u_int8_t nc_stest2; #define ROF 0x40 /* reset scsi offset (after gross error!) */ #define EXT 0x02 /* extended filtering *//*4f*/ u_int8_t nc_stest3; #define TE 0x80 /* c: tolerAnt enable */ #define HSC 0x20 /* c: Halt SCSI Clock */ #define CSF 0x02 /* c: clear scsi fifo *//*50*/ u_int16_t nc_sidl; /* Lowlevel: latched from scsi data *//*52*/ u_int8_t nc_stest4; #define SMODE 0xc0 /* SCSI bus mode (895/6 only) */ #define SMODE_HVD 0x40 /* High Voltage Differential */ #define SMODE_SE 0x80 /* Single Ended */ #define SMODE_LVD 0xc0 /* Low Voltage Differential */ #define LCKFRQ 0x20 /* Frequency Lock (895/6 only) *//*53*/ u_int8_t nc_53_;/*54*/ u_int16_t nc_sodl; /* Lowlevel: data out to scsi data *//*56*/ u_int16_t nc_56_;/*58*/ u_int16_t nc_sbdl; /* Lowlevel: data from scsi data *//*5a*/ u_int16_t nc_5a_;/*5c*/ u_int8_t nc_scr0; /* Working register B *//*5d*/ u_int8_t nc_scr1; /* *//*5e*/ u_int8_t nc_scr2; /* *//*5f*/ u_int8_t nc_scr3; /* *//*60*/};/*-----------------------------------------------------------**** Utility macros for the script.****-----------------------------------------------------------*/#define REGJ(p,r) (offsetof(struct ncr_reg, p ## r))#define REG(r) REGJ (nc_, r)#ifndef TARGET_MODE#define TARGET_MODE 0#endiftypedef u_int32_t ncrcmd;#if BYTE_ORDER == BIG_ENDIAN#define SCR_BO(x) ((((x) >> 24) & 0xff) | (((x) >> 8) & 0xff00) | \ ((x) << 24) | (((x) & 0xff00) << 8))#else#define SCR_BO(x) (x)#endif/*-----------------------------------------------------------**** SCSI phases****-----------------------------------------------------------*/#define SCR_DATA_OUT 0x00000000#define SCR_DATA_IN 0x01000000#define SCR_COMMAND 0x02000000#define SCR_STATUS 0x03000000#define SCR_ILG_OUT 0x04000000#define SCR_ILG_IN 0x05000000#define SCR_MSG_OUT 0x06000000#define SCR_MSG_IN 0x07000000/*-----------------------------------------------------------**** Data transfer via SCSI.****-----------------------------------------------------------**** MOVE_ABS (LEN)** <<start address>>**** MOVE_IND (LEN)** <<dnad_offset>>**** MOVE_TBL** <<dnad_offset>>****-----------------------------------------------------------*/#define SCR_MOVE_ABS(l) ((0x08000000 ^ (TARGET_MODE << 1ul)) | (l))#define SCR_MOVE_IND(l) ((0x28000000 ^ (TARGET_MODE << 1ul)) | (l))#define SCR_MOVE_TBL (0x18000000 ^ (TARGET_MODE << 1ul))struct scr_tblmove { u_int32_t size; u_int32_t addr;};/*-----------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -