📄 sym53c8xx_defs.h
字号:
#define INW_OFF(o) (readb((char *)np->reg + ncr_offw(o)) << 8 | readb((char *)np->reg + ncr_offw(o) + 1))#else#define INW_OFF(o) readw_raw((char *)np->reg + ncr_offw(o))#endif#define INL_OFF(o) readl_raw((char *)np->reg + (o))#ifdef CONFIG_SCSI_NCR53C8XX_NO_WORD_TRANSFERS/* Only 8 or 32 bit transfers allowed */#define OUTW_OFF(o, val) do { writeb((char)((val) >> 8), (char *)np->reg + ncr_offw(o)); writeb((char)(val), (char *)np->reg + ncr_offw(o) + 1); } while (0)#else#define OUTW_OFF(o, val) writew_raw((val), (char *)np->reg + ncr_offw(o))#endif#define OUTL_OFF(o, val) writel_raw((val), (char *)np->reg + (o))#endif#define INB(r) INB_OFF (offsetof(struct ncr_reg,r))#define INW(r) INW_OFF (offsetof(struct ncr_reg,r))#define INL(r) INL_OFF (offsetof(struct ncr_reg,r))#define OUTB(r, val) OUTB_OFF (offsetof(struct ncr_reg,r), (val))#define OUTW(r, val) OUTW_OFF (offsetof(struct ncr_reg,r), (val))#define OUTL(r, val) OUTL_OFF (offsetof(struct ncr_reg,r), (val))/* * Set bit field ON, OFF */#define OUTONB(r, m) OUTB(r, INB(r) | (m))#define OUTOFFB(r, m) OUTB(r, INB(r) & ~(m))#define OUTONW(r, m) OUTW(r, INW(r) | (m))#define OUTOFFW(r, m) OUTW(r, INW(r) & ~(m))#define OUTONL(r, m) OUTL(r, INL(r) | (m))#define OUTOFFL(r, m) OUTL(r, INL(r) & ~(m))/* * We normally want the chip to have a consistent view * of driver internal data structures when we restart it. * Thus these macros. */#define OUTL_DSP(v) \ do { \ MEMORY_BARRIER(); \ OUTL (nc_dsp, (v)); \ } while (0)#define OUTONB_STD() \ do { \ MEMORY_BARRIER(); \ OUTONB (nc_dcntl, (STD|NOCOM)); \ } while (0)/*** NCR53C8XX devices features table.*/struct ncr_chip { unsigned short revision_id; unsigned char burst_max; /* log-base-2 of max burst */ unsigned char offset_max; unsigned char nr_divisor; unsigned int features;#define FE_LED0 (1<<0)#define FE_WIDE (1<<1) /* Wide data transfers */#define FE_ULTRA (1<<2) /* Ultra speed 20Mtrans/sec */#define FE_DBLR (1<<4) /* Clock doubler present */#define FE_QUAD (1<<5) /* Clock quadrupler present */#define FE_ERL (1<<6) /* Enable read line */#define FE_CLSE (1<<7) /* Cache line size enable */#define FE_WRIE (1<<8) /* Write & Invalidate enable */#define FE_ERMP (1<<9) /* Enable read multiple */#define FE_BOF (1<<10) /* Burst opcode fetch */#define FE_DFS (1<<11) /* DMA fifo size */#define FE_PFEN (1<<12) /* Prefetch enable */#define FE_LDSTR (1<<13) /* Load/Store supported */#define FE_RAM (1<<14) /* On chip RAM present */#define FE_VARCLK (1<<15) /* SCSI clock may vary */#define FE_RAM8K (1<<16) /* On chip RAM sized 8Kb */#define FE_64BIT (1<<17) /* Have a 64-bit PCI interface */#define FE_IO256 (1<<18) /* Requires full 256 bytes in PCI space */#define FE_NOPM (1<<19) /* Scripts handles phase mismatch */#define FE_LEDC (1<<20) /* Hardware control of LED */#define FE_DIFF (1<<21) /* Support Differential SCSI */#define FE_66MHZ (1<<23) /* 66MHz PCI Support */#define FE_DAC (1<<24) /* Support DAC cycles (64 bit addressing) */#define FE_ISTAT1 (1<<25) /* Have ISTAT1, MBOX0, MBOX1 registers */#define FE_DAC_IN_USE (1<<26) /* Platform does DAC cycles */#define FE_EHP (1<<27) /* 720: Even host parity */#define FE_MUX (1<<28) /* 720: Multiplexed bus */#define FE_EA (1<<29) /* 720: Enable Ack */#define FE_CACHE_SET (FE_ERL|FE_CLSE|FE_WRIE|FE_ERMP)#define FE_SCSI_SET (FE_WIDE|FE_ULTRA|FE_DBLR|FE_QUAD|F_CLK80)#define FE_SPECIAL_SET (FE_CACHE_SET|FE_BOF|FE_DFS|FE_LDSTR|FE_PFEN|FE_RAM)};/*** Driver setup structure.**** This structure is initialized from linux config options.** It can be overridden at boot-up by the boot command line.*/#define SCSI_NCR_MAX_EXCLUDES 8struct ncr_driver_setup { u8 master_parity; u8 scsi_parity; u8 disconnection; u8 special_features; u8 force_sync_nego; u8 reverse_probe; u8 pci_fix_up; u8 use_nvram; u8 verbose; u8 default_tags; u16 default_sync; u16 debug; u8 burst_max; u8 led_pin; u8 max_wide; u8 settle_delay; u8 diff_support; u8 irqm; u8 bus_check; u8 optimize; u8 recovery; u8 host_id; u16 iarb; u32 excludes[SCSI_NCR_MAX_EXCLUDES]; char tag_ctrl[100];};/*** Initial setup.** Can be overriden at startup by a command line.*/#define SCSI_NCR_DRIVER_SETUP \{ \ SCSI_NCR_SETUP_MASTER_PARITY, \ SCSI_NCR_SETUP_SCSI_PARITY, \ SCSI_NCR_SETUP_DISCONNECTION, \ SCSI_NCR_SETUP_SPECIAL_FEATURES, \ SCSI_NCR_SETUP_FORCE_SYNC_NEGO, \ 0, \ 0, \ 1, \ 0, \ SCSI_NCR_SETUP_DEFAULT_TAGS, \ SCSI_NCR_SETUP_DEFAULT_SYNC, \ 0x00, \ 7, \ 0, \ 1, \ SCSI_NCR_SETUP_SETTLE_TIME, \ 0, \ 0, \ 1, \ 0, \ 0, \ 255, \ 0x00 \}/*** Boot fail safe setup.** Override initial setup from boot command line:** ncr53c8xx=safe:y*/#define SCSI_NCR_DRIVER_SAFE_SETUP \{ \ 0, \ 1, \ 0, \ 0, \ 0, \ 0, \ 0, \ 1, \ 2, \ 0, \ 255, \ 0x00, \ 255, \ 0, \ 0, \ 10, \ 1, \ 1, \ 1, \ 0, \ 0, \ 255 \}/**************** ORIGINAL CONTENT of ncrreg.h from FreeBSD ******************//*-----------------------------------------------------------------**** The ncr 53c810 register structure.****-----------------------------------------------------------------*/struct ncr_reg {/*00*/ u8 nc_scntl0; /* full arb., ena parity, par->ATN *//*01*/ u8 nc_scntl1; /* no reset */ #define ISCON 0x10 /* connected to scsi */ #define CRST 0x08 /* force reset */ #define IARB 0x02 /* immediate arbitration *//*02*/ u8 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*/ u8 nc_scntl3; /* cnf system clock dependent */ #define EWS 0x08 /* cmd: enable wide scsi [W]*/ #define ULTRA 0x80 /* cmd: ULTRA enable */ /* bits 0-2, 7 rsvd for C1010 *//*04*/ u8 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*/ u8 nc_sxfer; /* ### Sync speed and count */ /* bits 6-7 rsvd for C1010 *//*06*/ u8 nc_sdid; /* ### Destination-ID *//*07*/ u8 nc_gpreg; /* ??? IO-Pins *//*08*/ u8 nc_sfbr; /* ### First byte in phase *//*09*/ u8 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*/ u8 nc_ssid;/*0b*/ u8 nc_sbcl;/*0c*/ u8 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*/ u8 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*/ u8 nc_sstat1; #define FF3210 0xf0 /* sta: bytes in the scsi fifo *//*0f*/ u8 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 DM 0x04 /* sta: DIFFSENS mismatch (895/6 only) */ #define LDSC 0x02 /* sta: disconnect & reconnect *//*10*/ u8 nc_dsa; /* --> Base page *//*11*/ u8 nc_dsa1;/*12*/ u8 nc_dsa2;/*13*/ u8 nc_dsa3;/*14*/ u8 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*/ u8 nc_istat1; /* 896 and later cores only */ #define FLSH 0x04 /* sta: chip is flushing */ #define SRUN 0x02 /* sta: scripts are running */ #define SIRQD 0x01 /* r/w: disable INT pin *//*16*/ u8 nc_mbox0; /* 896 and later cores only *//*17*/ u8 nc_mbox1; /* 896 and later cores only *//*18*/ u8 nc_ctest0; #define EHP 0x04 /* 720 even host parity *//*19*/ u8 nc_ctest1;/*1a*/ u8 nc_ctest2; #define CSIGP 0x40 /* bits 0-2,7 rsvd for C1010 *//*1b*/ u8 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 */ /* bits 4-7 rsvd for C1010 *//*1c*/ u32 nc_temp; /* ### Temporary stack *//*20*/ u8 nc_dfifo;/*21*/ u8 nc_ctest4; #define MUX 0x80 /* 720 host bus multiplex mode */ #define BDIS 0x80 /* mod: burst disable */ #define MPEE 0x08 /* mod: master parity error enable *//*22*/ u8 nc_ctest5; #define DFS 0x20 /* mod: dma fifo size */ /* bits 0-1, 3-7 rsvd for C1010 *//*23*/ u8 nc_ctest6;/*24*/ u32 nc_dbc; /* ### Byte count and command *//*28*/ u32 nc_dnad; /* ### Next command register *//*2c*/ u32 nc_dsp; /* --> Script Pointer *//*30*/ u32 nc_dsps; /* --> Script pointer save/opcode#2 *//*34*/ u8 nc_scratcha; /* Temporary register a *//*35*/ u8 nc_scratcha1;/*36*/ u8 nc_scratcha2;/*37*/ u8 nc_scratcha3;/*38*/ u8 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*/ u8 nc_dien;/*3a*/ u8 nc_sbr;/*3b*/ u8 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 EA 0x20 /* mod: 720 enable-ack */ #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 */ /* bits 0-1 rsvd for C1010 *//*3c*/ u32 nc_adder;/*40*/ u16 nc_sien; /* -->: interrupt enable *//*42*/ u16 nc_sist; /* <--: interrupt status */ #define SBMC 0x1000/* sta: SCSI Bus Mode Change (895/6 only) */ #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*/ u8 nc_slpar;/*45*/ u8 nc_swide;/*46*/ u8 nc_macntl;/*47*/ u8 nc_gpcntl;/*48*/ u8 nc_stime0; /* cmd: timeout for select&handshake*//*49*/ u8 nc_stime1; /* cmd: timeout user defined *//*4a*/ u16 nc_respid; /* sta: Reselect-IDs *//*4c*/ u8 nc_stest0;/*4d*/ u8 nc_stest1; #define SCLK 0x80 /* Use the PCI clock as SCSI clock */ #define DBLEN 0x08 /* clock doubler running */ #define DBLSEL 0x04 /* clock doubler selected */ /*4e*/ u8 nc_stest2; #define ROF 0x40 /* reset scsi offset (after gross error!) */ #define DIF 0x20 /* 720 SCSI differential mode */ #define EXT 0x02 /* extended filtering *//*4f*/ u8 nc_stest3; #define TE 0x80 /* c: tolerAnt enable */ #define HSC 0x20 /* c: Halt SCSI Clock */ #define CSF 0x02 /* c: clear scsi fifo *//*50*/ u16 nc_sidl; /* Lowlevel: latched from scsi data *//*52*/ u8 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) */ /* bits 0-5 rsvd for C1010 *//*53*/ u8 nc_53_;/*54*/ u16 nc_sodl; /* Lowlevel: data out to scsi data *//*56*/ u8 nc_ccntl0; /* Chip Control 0 (896) */ #define ENPMJ 0x80 /* Enable Phase Mismatch Jump */ #define PMJCTL 0x40 /* Phase Mismatch Jump Control */ #define ENNDJ 0x20 /* Enable Non Data PM Jump */ #define DISFC 0x10 /* Disable Auto FIFO Clear */ #define DILS 0x02 /* Disable Internal Load/Store */ #define DPR 0x01 /* Disable Pipe Req *//*57*/ u8 nc_ccntl1; /* Chip Control 1 (896) */ #define ZMOD 0x80 /* High Impedance Mode */ #define DIC 0x10 /* Disable Internal Cycles */ #define DDAC 0x08 /* Disable Dual Address Cycle */ #define XTIMOD 0x04 /* 64-bit Table Ind. Indexing Mode */ #define EXTIBMV 0x02 /* Enable 64-bit Table Ind. BMOV */ #define EXDBMV 0x01 /* Enable 64-bit Direct BMOV *//*58*/ u16 nc_sbdl; /* Lowlevel: data from scsi data *//*5a*/ u16 nc_5a_;/*5c*/ u8 nc_scr0; /* Working register B *//*5d*/ u8 nc_scr1; /* *//*5e*/ u8 nc_scr2; /* *//*5f*/ u8 nc_scr3; /* *//*60*/ u8 nc_scrx[64]; /* Working register C-R *//*a0*/ u32 nc_mmrs; /* Memory Move Read Selector *//*a4*/ u32 nc_mmws; /* Memory Move Write Selector *//*a8*/ u32 nc_sfs; /* Script Fetch Selector *//*ac*/ u32 nc_drs; /* DSA Relative Selector *//*b0*/ u32 nc_sbms; /* Static Block Move Selector *//*b4*/ u32 nc_dbms; /* Dynamic Block Move Selector *//*b8*/ u32 nc_dnad64; /* DMA Next Address 64 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -