162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Device driver for the SYMBIOS/LSILOGIC 53C8XX and 53C1010 family 462306a36Sopenharmony_ci * of PCI-SCSI IO processors. 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Copyright (C) 1999-2001 Gerard Roudier <groudier@free.fr> 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci * This driver is derived from the Linux sym53c8xx driver. 962306a36Sopenharmony_ci * Copyright (C) 1998-2000 Gerard Roudier 1062306a36Sopenharmony_ci * 1162306a36Sopenharmony_ci * The sym53c8xx driver is derived from the ncr53c8xx driver that had been 1262306a36Sopenharmony_ci * a port of the FreeBSD ncr driver to Linux-1.2.13. 1362306a36Sopenharmony_ci * 1462306a36Sopenharmony_ci * The original ncr driver has been written for 386bsd and FreeBSD by 1562306a36Sopenharmony_ci * Wolfgang Stanglmeier <wolf@cologne.de> 1662306a36Sopenharmony_ci * Stefan Esser <se@mi.Uni-Koeln.de> 1762306a36Sopenharmony_ci * Copyright (C) 1994 Wolfgang Stanglmeier 1862306a36Sopenharmony_ci * 1962306a36Sopenharmony_ci * Other major contributions: 2062306a36Sopenharmony_ci * 2162306a36Sopenharmony_ci * NVRAM detection and reading. 2262306a36Sopenharmony_ci * Copyright (C) 1997 Richard Waltham <dormouse@farsrobt.demon.co.uk> 2362306a36Sopenharmony_ci * 2462306a36Sopenharmony_ci *----------------------------------------------------------------------------- 2562306a36Sopenharmony_ci */ 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci#ifndef SYM_DEFS_H 2862306a36Sopenharmony_ci#define SYM_DEFS_H 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci#define SYM_VERSION "2.2.3" 3162306a36Sopenharmony_ci#define SYM_DRIVER_NAME "sym-" SYM_VERSION 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci/* 3462306a36Sopenharmony_ci * SYM53C8XX device features descriptor. 3562306a36Sopenharmony_ci */ 3662306a36Sopenharmony_cistruct sym_chip { 3762306a36Sopenharmony_ci u_short device_id; 3862306a36Sopenharmony_ci u_short revision_id; 3962306a36Sopenharmony_ci char *name; 4062306a36Sopenharmony_ci u_char burst_max; /* log-base-2 of max burst */ 4162306a36Sopenharmony_ci u_char offset_max; 4262306a36Sopenharmony_ci u_char nr_divisor; 4362306a36Sopenharmony_ci u_char lp_probe_bit; 4462306a36Sopenharmony_ci u_int features; 4562306a36Sopenharmony_ci#define FE_LED0 (1<<0) 4662306a36Sopenharmony_ci#define FE_WIDE (1<<1) /* Wide data transfers */ 4762306a36Sopenharmony_ci#define FE_ULTRA (1<<2) /* Ultra speed 20Mtrans/sec */ 4862306a36Sopenharmony_ci#define FE_ULTRA2 (1<<3) /* Ultra 2 - 40 Mtrans/sec */ 4962306a36Sopenharmony_ci#define FE_DBLR (1<<4) /* Clock doubler present */ 5062306a36Sopenharmony_ci#define FE_QUAD (1<<5) /* Clock quadrupler present */ 5162306a36Sopenharmony_ci#define FE_ERL (1<<6) /* Enable read line */ 5262306a36Sopenharmony_ci#define FE_CLSE (1<<7) /* Cache line size enable */ 5362306a36Sopenharmony_ci#define FE_WRIE (1<<8) /* Write & Invalidate enable */ 5462306a36Sopenharmony_ci#define FE_ERMP (1<<9) /* Enable read multiple */ 5562306a36Sopenharmony_ci#define FE_BOF (1<<10) /* Burst opcode fetch */ 5662306a36Sopenharmony_ci#define FE_DFS (1<<11) /* DMA fifo size */ 5762306a36Sopenharmony_ci#define FE_PFEN (1<<12) /* Prefetch enable */ 5862306a36Sopenharmony_ci#define FE_LDSTR (1<<13) /* Load/Store supported */ 5962306a36Sopenharmony_ci#define FE_RAM (1<<14) /* On chip RAM present */ 6062306a36Sopenharmony_ci#define FE_VARCLK (1<<15) /* Clock frequency may vary */ 6162306a36Sopenharmony_ci#define FE_RAM8K (1<<16) /* On chip RAM sized 8Kb */ 6262306a36Sopenharmony_ci#define FE_64BIT (1<<17) /* 64-bit PCI BUS interface */ 6362306a36Sopenharmony_ci#define FE_IO256 (1<<18) /* Requires full 256 bytes in PCI space */ 6462306a36Sopenharmony_ci#define FE_NOPM (1<<19) /* Scripts handles phase mismatch */ 6562306a36Sopenharmony_ci#define FE_LEDC (1<<20) /* Hardware control of LED */ 6662306a36Sopenharmony_ci#define FE_ULTRA3 (1<<21) /* Ultra 3 - 80 Mtrans/sec DT */ 6762306a36Sopenharmony_ci#define FE_66MHZ (1<<22) /* 66MHz PCI support */ 6862306a36Sopenharmony_ci#define FE_CRC (1<<23) /* CRC support */ 6962306a36Sopenharmony_ci#define FE_DIFF (1<<24) /* SCSI HVD support */ 7062306a36Sopenharmony_ci#define FE_DFBC (1<<25) /* Have DFBC register */ 7162306a36Sopenharmony_ci#define FE_LCKFRQ (1<<26) /* Have LCKFRQ */ 7262306a36Sopenharmony_ci#define FE_C10 (1<<27) /* Various C10 core (mis)features */ 7362306a36Sopenharmony_ci#define FE_U3EN (1<<28) /* U3EN bit usable */ 7462306a36Sopenharmony_ci#define FE_DAC (1<<29) /* Support PCI DAC (64 bit addressing) */ 7562306a36Sopenharmony_ci#define FE_ISTAT1 (1<<30) /* Have ISTAT1, MBOX0, MBOX1 registers */ 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ci#define FE_CACHE_SET (FE_ERL|FE_CLSE|FE_WRIE|FE_ERMP) 7862306a36Sopenharmony_ci#define FE_CACHE0_SET (FE_CACHE_SET & ~FE_ERL) 7962306a36Sopenharmony_ci}; 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci/* 8262306a36Sopenharmony_ci * SYM53C8XX IO register data structure. 8362306a36Sopenharmony_ci */ 8462306a36Sopenharmony_cistruct sym_reg { 8562306a36Sopenharmony_ci/*00*/ u8 nc_scntl0; /* full arb., ena parity, par->ATN */ 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ci/*01*/ u8 nc_scntl1; /* no reset */ 8862306a36Sopenharmony_ci #define ISCON 0x10 /* connected to scsi */ 8962306a36Sopenharmony_ci #define CRST 0x08 /* force reset */ 9062306a36Sopenharmony_ci #define IARB 0x02 /* immediate arbitration */ 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ci/*02*/ u8 nc_scntl2; /* no disconnect expected */ 9362306a36Sopenharmony_ci #define SDU 0x80 /* cmd: disconnect will raise error */ 9462306a36Sopenharmony_ci #define CHM 0x40 /* sta: chained mode */ 9562306a36Sopenharmony_ci #define WSS 0x08 /* sta: wide scsi send [W]*/ 9662306a36Sopenharmony_ci #define WSR 0x01 /* sta: wide scsi received [W]*/ 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ci/*03*/ u8 nc_scntl3; /* cnf system clock dependent */ 9962306a36Sopenharmony_ci #define EWS 0x08 /* cmd: enable wide scsi [W]*/ 10062306a36Sopenharmony_ci #define ULTRA 0x80 /* cmd: ULTRA enable */ 10162306a36Sopenharmony_ci /* bits 0-2, 7 rsvd for C1010 */ 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ci/*04*/ u8 nc_scid; /* cnf host adapter scsi address */ 10462306a36Sopenharmony_ci #define RRE 0x40 /* r/w:e enable response to resel. */ 10562306a36Sopenharmony_ci #define SRE 0x20 /* r/w:e enable response to select */ 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_ci/*05*/ u8 nc_sxfer; /* ### Sync speed and count */ 10862306a36Sopenharmony_ci /* bits 6-7 rsvd for C1010 */ 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ci/*06*/ u8 nc_sdid; /* ### Destination-ID */ 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ci/*07*/ u8 nc_gpreg; /* ??? IO-Pins */ 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci/*08*/ u8 nc_sfbr; /* ### First byte received */ 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_ci/*09*/ u8 nc_socl; 11762306a36Sopenharmony_ci #define CREQ 0x80 /* r/w: SCSI-REQ */ 11862306a36Sopenharmony_ci #define CACK 0x40 /* r/w: SCSI-ACK */ 11962306a36Sopenharmony_ci #define CBSY 0x20 /* r/w: SCSI-BSY */ 12062306a36Sopenharmony_ci #define CSEL 0x10 /* r/w: SCSI-SEL */ 12162306a36Sopenharmony_ci #define CATN 0x08 /* r/w: SCSI-ATN */ 12262306a36Sopenharmony_ci #define CMSG 0x04 /* r/w: SCSI-MSG */ 12362306a36Sopenharmony_ci #define CC_D 0x02 /* r/w: SCSI-C_D */ 12462306a36Sopenharmony_ci #define CI_O 0x01 /* r/w: SCSI-I_O */ 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_ci/*0a*/ u8 nc_ssid; 12762306a36Sopenharmony_ci 12862306a36Sopenharmony_ci/*0b*/ u8 nc_sbcl; 12962306a36Sopenharmony_ci 13062306a36Sopenharmony_ci/*0c*/ u8 nc_dstat; 13162306a36Sopenharmony_ci #define DFE 0x80 /* sta: dma fifo empty */ 13262306a36Sopenharmony_ci #define MDPE 0x40 /* int: master data parity error */ 13362306a36Sopenharmony_ci #define BF 0x20 /* int: script: bus fault */ 13462306a36Sopenharmony_ci #define ABRT 0x10 /* int: script: command aborted */ 13562306a36Sopenharmony_ci #define SSI 0x08 /* int: script: single step */ 13662306a36Sopenharmony_ci #define SIR 0x04 /* int: script: interrupt instruct. */ 13762306a36Sopenharmony_ci #define IID 0x01 /* int: script: illegal instruct. */ 13862306a36Sopenharmony_ci 13962306a36Sopenharmony_ci/*0d*/ u8 nc_sstat0; 14062306a36Sopenharmony_ci #define ILF 0x80 /* sta: data in SIDL register lsb */ 14162306a36Sopenharmony_ci #define ORF 0x40 /* sta: data in SODR register lsb */ 14262306a36Sopenharmony_ci #define OLF 0x20 /* sta: data in SODL register lsb */ 14362306a36Sopenharmony_ci #define AIP 0x10 /* sta: arbitration in progress */ 14462306a36Sopenharmony_ci #define LOA 0x08 /* sta: arbitration lost */ 14562306a36Sopenharmony_ci #define WOA 0x04 /* sta: arbitration won */ 14662306a36Sopenharmony_ci #define IRST 0x02 /* sta: scsi reset signal */ 14762306a36Sopenharmony_ci #define SDP 0x01 /* sta: scsi parity signal */ 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci/*0e*/ u8 nc_sstat1; 15062306a36Sopenharmony_ci #define FF3210 0xf0 /* sta: bytes in the scsi fifo */ 15162306a36Sopenharmony_ci 15262306a36Sopenharmony_ci/*0f*/ u8 nc_sstat2; 15362306a36Sopenharmony_ci #define ILF1 0x80 /* sta: data in SIDL register msb[W]*/ 15462306a36Sopenharmony_ci #define ORF1 0x40 /* sta: data in SODR register msb[W]*/ 15562306a36Sopenharmony_ci #define OLF1 0x20 /* sta: data in SODL register msb[W]*/ 15662306a36Sopenharmony_ci #define DM 0x04 /* sta: DIFFSENS mismatch (895/6 only) */ 15762306a36Sopenharmony_ci #define LDSC 0x02 /* sta: disconnect & reconnect */ 15862306a36Sopenharmony_ci 15962306a36Sopenharmony_ci/*10*/ u8 nc_dsa; /* --> Base page */ 16062306a36Sopenharmony_ci/*11*/ u8 nc_dsa1; 16162306a36Sopenharmony_ci/*12*/ u8 nc_dsa2; 16262306a36Sopenharmony_ci/*13*/ u8 nc_dsa3; 16362306a36Sopenharmony_ci 16462306a36Sopenharmony_ci/*14*/ u8 nc_istat; /* --> Main Command and status */ 16562306a36Sopenharmony_ci #define CABRT 0x80 /* cmd: abort current operation */ 16662306a36Sopenharmony_ci #define SRST 0x40 /* mod: reset chip */ 16762306a36Sopenharmony_ci #define SIGP 0x20 /* r/w: message from host to script */ 16862306a36Sopenharmony_ci #define SEM 0x10 /* r/w: message between host + script */ 16962306a36Sopenharmony_ci #define CON 0x08 /* sta: connected to scsi */ 17062306a36Sopenharmony_ci #define INTF 0x04 /* sta: int on the fly (reset by wr)*/ 17162306a36Sopenharmony_ci #define SIP 0x02 /* sta: scsi-interrupt */ 17262306a36Sopenharmony_ci #define DIP 0x01 /* sta: host/script interrupt */ 17362306a36Sopenharmony_ci 17462306a36Sopenharmony_ci/*15*/ u8 nc_istat1; /* 896 only */ 17562306a36Sopenharmony_ci #define FLSH 0x04 /* sta: chip is flushing */ 17662306a36Sopenharmony_ci #define SCRUN 0x02 /* sta: scripts are running */ 17762306a36Sopenharmony_ci #define SIRQD 0x01 /* r/w: disable INT pin */ 17862306a36Sopenharmony_ci 17962306a36Sopenharmony_ci/*16*/ u8 nc_mbox0; /* 896 only */ 18062306a36Sopenharmony_ci/*17*/ u8 nc_mbox1; /* 896 only */ 18162306a36Sopenharmony_ci 18262306a36Sopenharmony_ci/*18*/ u8 nc_ctest0; 18362306a36Sopenharmony_ci/*19*/ u8 nc_ctest1; 18462306a36Sopenharmony_ci 18562306a36Sopenharmony_ci/*1a*/ u8 nc_ctest2; 18662306a36Sopenharmony_ci #define CSIGP 0x40 18762306a36Sopenharmony_ci /* bits 0-2,7 rsvd for C1010 */ 18862306a36Sopenharmony_ci 18962306a36Sopenharmony_ci/*1b*/ u8 nc_ctest3; 19062306a36Sopenharmony_ci #define FLF 0x08 /* cmd: flush dma fifo */ 19162306a36Sopenharmony_ci #define CLF 0x04 /* cmd: clear dma fifo */ 19262306a36Sopenharmony_ci #define FM 0x02 /* mod: fetch pin mode */ 19362306a36Sopenharmony_ci #define WRIE 0x01 /* mod: write and invalidate enable */ 19462306a36Sopenharmony_ci /* bits 4-7 rsvd for C1010 */ 19562306a36Sopenharmony_ci 19662306a36Sopenharmony_ci/*1c*/ u32 nc_temp; /* ### Temporary stack */ 19762306a36Sopenharmony_ci 19862306a36Sopenharmony_ci/*20*/ u8 nc_dfifo; 19962306a36Sopenharmony_ci/*21*/ u8 nc_ctest4; 20062306a36Sopenharmony_ci #define BDIS 0x80 /* mod: burst disable */ 20162306a36Sopenharmony_ci #define MPEE 0x08 /* mod: master parity error enable */ 20262306a36Sopenharmony_ci 20362306a36Sopenharmony_ci/*22*/ u8 nc_ctest5; 20462306a36Sopenharmony_ci #define DFS 0x20 /* mod: dma fifo size */ 20562306a36Sopenharmony_ci /* bits 0-1, 3-7 rsvd for C1010 */ 20662306a36Sopenharmony_ci 20762306a36Sopenharmony_ci/*23*/ u8 nc_ctest6; 20862306a36Sopenharmony_ci 20962306a36Sopenharmony_ci/*24*/ u32 nc_dbc; /* ### Byte count and command */ 21062306a36Sopenharmony_ci/*28*/ u32 nc_dnad; /* ### Next command register */ 21162306a36Sopenharmony_ci/*2c*/ u32 nc_dsp; /* --> Script Pointer */ 21262306a36Sopenharmony_ci/*30*/ u32 nc_dsps; /* --> Script pointer save/opcode#2 */ 21362306a36Sopenharmony_ci 21462306a36Sopenharmony_ci/*34*/ u8 nc_scratcha; /* Temporary register a */ 21562306a36Sopenharmony_ci/*35*/ u8 nc_scratcha1; 21662306a36Sopenharmony_ci/*36*/ u8 nc_scratcha2; 21762306a36Sopenharmony_ci/*37*/ u8 nc_scratcha3; 21862306a36Sopenharmony_ci 21962306a36Sopenharmony_ci/*38*/ u8 nc_dmode; 22062306a36Sopenharmony_ci #define BL_2 0x80 /* mod: burst length shift value +2 */ 22162306a36Sopenharmony_ci #define BL_1 0x40 /* mod: burst length shift value +1 */ 22262306a36Sopenharmony_ci #define ERL 0x08 /* mod: enable read line */ 22362306a36Sopenharmony_ci #define ERMP 0x04 /* mod: enable read multiple */ 22462306a36Sopenharmony_ci #define BOF 0x02 /* mod: burst op code fetch */ 22562306a36Sopenharmony_ci 22662306a36Sopenharmony_ci/*39*/ u8 nc_dien; 22762306a36Sopenharmony_ci/*3a*/ u8 nc_sbr; 22862306a36Sopenharmony_ci 22962306a36Sopenharmony_ci/*3b*/ u8 nc_dcntl; /* --> Script execution control */ 23062306a36Sopenharmony_ci #define CLSE 0x80 /* mod: cache line size enable */ 23162306a36Sopenharmony_ci #define PFF 0x40 /* cmd: pre-fetch flush */ 23262306a36Sopenharmony_ci #define PFEN 0x20 /* mod: pre-fetch enable */ 23362306a36Sopenharmony_ci #define SSM 0x10 /* mod: single step mode */ 23462306a36Sopenharmony_ci #define IRQM 0x08 /* mod: irq mode (1 = totem pole !) */ 23562306a36Sopenharmony_ci #define STD 0x04 /* cmd: start dma mode */ 23662306a36Sopenharmony_ci #define IRQD 0x02 /* mod: irq disable */ 23762306a36Sopenharmony_ci #define NOCOM 0x01 /* cmd: protect sfbr while reselect */ 23862306a36Sopenharmony_ci /* bits 0-1 rsvd for C1010 */ 23962306a36Sopenharmony_ci 24062306a36Sopenharmony_ci/*3c*/ u32 nc_adder; 24162306a36Sopenharmony_ci 24262306a36Sopenharmony_ci/*40*/ u16 nc_sien; /* -->: interrupt enable */ 24362306a36Sopenharmony_ci/*42*/ u16 nc_sist; /* <--: interrupt status */ 24462306a36Sopenharmony_ci #define SBMC 0x1000/* sta: SCSI Bus Mode Change (895/6 only) */ 24562306a36Sopenharmony_ci #define STO 0x0400/* sta: timeout (select) */ 24662306a36Sopenharmony_ci #define GEN 0x0200/* sta: timeout (general) */ 24762306a36Sopenharmony_ci #define HTH 0x0100/* sta: timeout (handshake) */ 24862306a36Sopenharmony_ci #define MA 0x80 /* sta: phase mismatch */ 24962306a36Sopenharmony_ci #define CMP 0x40 /* sta: arbitration complete */ 25062306a36Sopenharmony_ci #define SEL 0x20 /* sta: selected by another device */ 25162306a36Sopenharmony_ci #define RSL 0x10 /* sta: reselected by another device*/ 25262306a36Sopenharmony_ci #define SGE 0x08 /* sta: gross error (over/underflow)*/ 25362306a36Sopenharmony_ci #define UDC 0x04 /* sta: unexpected disconnect */ 25462306a36Sopenharmony_ci #define RST 0x02 /* sta: scsi bus reset detected */ 25562306a36Sopenharmony_ci #define PAR 0x01 /* sta: scsi parity error */ 25662306a36Sopenharmony_ci 25762306a36Sopenharmony_ci/*44*/ u8 nc_slpar; 25862306a36Sopenharmony_ci/*45*/ u8 nc_swide; 25962306a36Sopenharmony_ci/*46*/ u8 nc_macntl; 26062306a36Sopenharmony_ci/*47*/ u8 nc_gpcntl; 26162306a36Sopenharmony_ci/*48*/ u8 nc_stime0; /* cmd: timeout for select&handshake*/ 26262306a36Sopenharmony_ci/*49*/ u8 nc_stime1; /* cmd: timeout user defined */ 26362306a36Sopenharmony_ci/*4a*/ u16 nc_respid; /* sta: Reselect-IDs */ 26462306a36Sopenharmony_ci 26562306a36Sopenharmony_ci/*4c*/ u8 nc_stest0; 26662306a36Sopenharmony_ci 26762306a36Sopenharmony_ci/*4d*/ u8 nc_stest1; 26862306a36Sopenharmony_ci #define SCLK 0x80 /* Use the PCI clock as SCSI clock */ 26962306a36Sopenharmony_ci #define DBLEN 0x08 /* clock doubler running */ 27062306a36Sopenharmony_ci #define DBLSEL 0x04 /* clock doubler selected */ 27162306a36Sopenharmony_ci 27262306a36Sopenharmony_ci 27362306a36Sopenharmony_ci/*4e*/ u8 nc_stest2; 27462306a36Sopenharmony_ci #define ROF 0x40 /* reset scsi offset (after gross error!) */ 27562306a36Sopenharmony_ci #define EXT 0x02 /* extended filtering */ 27662306a36Sopenharmony_ci 27762306a36Sopenharmony_ci/*4f*/ u8 nc_stest3; 27862306a36Sopenharmony_ci #define TE 0x80 /* c: tolerAnt enable */ 27962306a36Sopenharmony_ci #define HSC 0x20 /* c: Halt SCSI Clock */ 28062306a36Sopenharmony_ci #define CSF 0x02 /* c: clear scsi fifo */ 28162306a36Sopenharmony_ci 28262306a36Sopenharmony_ci/*50*/ u16 nc_sidl; /* Lowlevel: latched from scsi data */ 28362306a36Sopenharmony_ci/*52*/ u8 nc_stest4; 28462306a36Sopenharmony_ci #define SMODE 0xc0 /* SCSI bus mode (895/6 only) */ 28562306a36Sopenharmony_ci #define SMODE_HVD 0x40 /* High Voltage Differential */ 28662306a36Sopenharmony_ci #define SMODE_SE 0x80 /* Single Ended */ 28762306a36Sopenharmony_ci #define SMODE_LVD 0xc0 /* Low Voltage Differential */ 28862306a36Sopenharmony_ci #define LCKFRQ 0x20 /* Frequency Lock (895/6 only) */ 28962306a36Sopenharmony_ci /* bits 0-5 rsvd for C1010 */ 29062306a36Sopenharmony_ci 29162306a36Sopenharmony_ci/*53*/ u8 nc_53_; 29262306a36Sopenharmony_ci/*54*/ u16 nc_sodl; /* Lowlevel: data out to scsi data */ 29362306a36Sopenharmony_ci/*56*/ u8 nc_ccntl0; /* Chip Control 0 (896) */ 29462306a36Sopenharmony_ci #define ENPMJ 0x80 /* Enable Phase Mismatch Jump */ 29562306a36Sopenharmony_ci #define PMJCTL 0x40 /* Phase Mismatch Jump Control */ 29662306a36Sopenharmony_ci #define ENNDJ 0x20 /* Enable Non Data PM Jump */ 29762306a36Sopenharmony_ci #define DISFC 0x10 /* Disable Auto FIFO Clear */ 29862306a36Sopenharmony_ci #define DILS 0x02 /* Disable Internal Load/Store */ 29962306a36Sopenharmony_ci #define DPR 0x01 /* Disable Pipe Req */ 30062306a36Sopenharmony_ci 30162306a36Sopenharmony_ci/*57*/ u8 nc_ccntl1; /* Chip Control 1 (896) */ 30262306a36Sopenharmony_ci #define ZMOD 0x80 /* High Impedance Mode */ 30362306a36Sopenharmony_ci #define DDAC 0x08 /* Disable Dual Address Cycle */ 30462306a36Sopenharmony_ci #define XTIMOD 0x04 /* 64-bit Table Ind. Indexing Mode */ 30562306a36Sopenharmony_ci #define EXTIBMV 0x02 /* Enable 64-bit Table Ind. BMOV */ 30662306a36Sopenharmony_ci #define EXDBMV 0x01 /* Enable 64-bit Direct BMOV */ 30762306a36Sopenharmony_ci 30862306a36Sopenharmony_ci/*58*/ u16 nc_sbdl; /* Lowlevel: data from scsi data */ 30962306a36Sopenharmony_ci/*5a*/ u16 nc_5a_; 31062306a36Sopenharmony_ci 31162306a36Sopenharmony_ci/*5c*/ u8 nc_scr0; /* Working register B */ 31262306a36Sopenharmony_ci/*5d*/ u8 nc_scr1; 31362306a36Sopenharmony_ci/*5e*/ u8 nc_scr2; 31462306a36Sopenharmony_ci/*5f*/ u8 nc_scr3; 31562306a36Sopenharmony_ci 31662306a36Sopenharmony_ci/*60*/ u8 nc_scrx[64]; /* Working register C-R */ 31762306a36Sopenharmony_ci/*a0*/ u32 nc_mmrs; /* Memory Move Read Selector */ 31862306a36Sopenharmony_ci/*a4*/ u32 nc_mmws; /* Memory Move Write Selector */ 31962306a36Sopenharmony_ci/*a8*/ u32 nc_sfs; /* Script Fetch Selector */ 32062306a36Sopenharmony_ci/*ac*/ u32 nc_drs; /* DSA Relative Selector */ 32162306a36Sopenharmony_ci/*b0*/ u32 nc_sbms; /* Static Block Move Selector */ 32262306a36Sopenharmony_ci/*b4*/ u32 nc_dbms; /* Dynamic Block Move Selector */ 32362306a36Sopenharmony_ci/*b8*/ u32 nc_dnad64; /* DMA Next Address 64 */ 32462306a36Sopenharmony_ci/*bc*/ u16 nc_scntl4; /* C1010 only */ 32562306a36Sopenharmony_ci #define U3EN 0x80 /* Enable Ultra 3 */ 32662306a36Sopenharmony_ci #define AIPCKEN 0x40 /* AIP checking enable */ 32762306a36Sopenharmony_ci /* Also enable AIP generation on C10-33*/ 32862306a36Sopenharmony_ci #define XCLKH_DT 0x08 /* Extra clock of data hold on DT edge */ 32962306a36Sopenharmony_ci #define XCLKH_ST 0x04 /* Extra clock of data hold on ST edge */ 33062306a36Sopenharmony_ci #define XCLKS_DT 0x02 /* Extra clock of data set on DT edge */ 33162306a36Sopenharmony_ci #define XCLKS_ST 0x01 /* Extra clock of data set on ST edge */ 33262306a36Sopenharmony_ci/*be*/ u8 nc_aipcntl0; /* AIP Control 0 C1010 only */ 33362306a36Sopenharmony_ci/*bf*/ u8 nc_aipcntl1; /* AIP Control 1 C1010 only */ 33462306a36Sopenharmony_ci #define DISAIP 0x08 /* Disable AIP generation C10-66 only */ 33562306a36Sopenharmony_ci/*c0*/ u32 nc_pmjad1; /* Phase Mismatch Jump Address 1 */ 33662306a36Sopenharmony_ci/*c4*/ u32 nc_pmjad2; /* Phase Mismatch Jump Address 2 */ 33762306a36Sopenharmony_ci/*c8*/ u8 nc_rbc; /* Remaining Byte Count */ 33862306a36Sopenharmony_ci/*c9*/ u8 nc_rbc1; 33962306a36Sopenharmony_ci/*ca*/ u8 nc_rbc2; 34062306a36Sopenharmony_ci/*cb*/ u8 nc_rbc3; 34162306a36Sopenharmony_ci 34262306a36Sopenharmony_ci/*cc*/ u8 nc_ua; /* Updated Address */ 34362306a36Sopenharmony_ci/*cd*/ u8 nc_ua1; 34462306a36Sopenharmony_ci/*ce*/ u8 nc_ua2; 34562306a36Sopenharmony_ci/*cf*/ u8 nc_ua3; 34662306a36Sopenharmony_ci/*d0*/ u32 nc_esa; /* Entry Storage Address */ 34762306a36Sopenharmony_ci/*d4*/ u8 nc_ia; /* Instruction Address */ 34862306a36Sopenharmony_ci/*d5*/ u8 nc_ia1; 34962306a36Sopenharmony_ci/*d6*/ u8 nc_ia2; 35062306a36Sopenharmony_ci/*d7*/ u8 nc_ia3; 35162306a36Sopenharmony_ci/*d8*/ u32 nc_sbc; /* SCSI Byte Count (3 bytes only) */ 35262306a36Sopenharmony_ci/*dc*/ u32 nc_csbc; /* Cumulative SCSI Byte Count */ 35362306a36Sopenharmony_ci /* Following for C1010 only */ 35462306a36Sopenharmony_ci/*e0*/ u16 nc_crcpad; /* CRC Value */ 35562306a36Sopenharmony_ci/*e2*/ u8 nc_crccntl0; /* CRC control register */ 35662306a36Sopenharmony_ci #define SNDCRC 0x10 /* Send CRC Request */ 35762306a36Sopenharmony_ci/*e3*/ u8 nc_crccntl1; /* CRC control register */ 35862306a36Sopenharmony_ci/*e4*/ u32 nc_crcdata; /* CRC data register */ 35962306a36Sopenharmony_ci/*e8*/ u32 nc_e8_; 36062306a36Sopenharmony_ci/*ec*/ u32 nc_ec_; 36162306a36Sopenharmony_ci/*f0*/ u16 nc_dfbc; /* DMA FIFO byte count */ 36262306a36Sopenharmony_ci}; 36362306a36Sopenharmony_ci 36462306a36Sopenharmony_ci/*----------------------------------------------------------- 36562306a36Sopenharmony_ci * 36662306a36Sopenharmony_ci * Utility macros for the script. 36762306a36Sopenharmony_ci * 36862306a36Sopenharmony_ci *----------------------------------------------------------- 36962306a36Sopenharmony_ci */ 37062306a36Sopenharmony_ci 37162306a36Sopenharmony_ci#define REGJ(p,r) (offsetof(struct sym_reg, p ## r)) 37262306a36Sopenharmony_ci#define REG(r) REGJ (nc_, r) 37362306a36Sopenharmony_ci 37462306a36Sopenharmony_ci/*----------------------------------------------------------- 37562306a36Sopenharmony_ci * 37662306a36Sopenharmony_ci * SCSI phases 37762306a36Sopenharmony_ci * 37862306a36Sopenharmony_ci *----------------------------------------------------------- 37962306a36Sopenharmony_ci */ 38062306a36Sopenharmony_ci 38162306a36Sopenharmony_ci#define SCR_DATA_OUT 0x00000000 38262306a36Sopenharmony_ci#define SCR_DATA_IN 0x01000000 38362306a36Sopenharmony_ci#define SCR_COMMAND 0x02000000 38462306a36Sopenharmony_ci#define SCR_STATUS 0x03000000 38562306a36Sopenharmony_ci#define SCR_DT_DATA_OUT 0x04000000 38662306a36Sopenharmony_ci#define SCR_DT_DATA_IN 0x05000000 38762306a36Sopenharmony_ci#define SCR_MSG_OUT 0x06000000 38862306a36Sopenharmony_ci#define SCR_MSG_IN 0x07000000 38962306a36Sopenharmony_ci/* DT phases are illegal for non Ultra3 mode */ 39062306a36Sopenharmony_ci#define SCR_ILG_OUT 0x04000000 39162306a36Sopenharmony_ci#define SCR_ILG_IN 0x05000000 39262306a36Sopenharmony_ci 39362306a36Sopenharmony_ci/*----------------------------------------------------------- 39462306a36Sopenharmony_ci * 39562306a36Sopenharmony_ci * Data transfer via SCSI. 39662306a36Sopenharmony_ci * 39762306a36Sopenharmony_ci *----------------------------------------------------------- 39862306a36Sopenharmony_ci * 39962306a36Sopenharmony_ci * MOVE_ABS (LEN) 40062306a36Sopenharmony_ci * <<start address>> 40162306a36Sopenharmony_ci * 40262306a36Sopenharmony_ci * MOVE_IND (LEN) 40362306a36Sopenharmony_ci * <<dnad_offset>> 40462306a36Sopenharmony_ci * 40562306a36Sopenharmony_ci * MOVE_TBL 40662306a36Sopenharmony_ci * <<dnad_offset>> 40762306a36Sopenharmony_ci * 40862306a36Sopenharmony_ci *----------------------------------------------------------- 40962306a36Sopenharmony_ci */ 41062306a36Sopenharmony_ci 41162306a36Sopenharmony_ci#define OPC_MOVE 0x08000000 41262306a36Sopenharmony_ci 41362306a36Sopenharmony_ci#define SCR_MOVE_ABS(l) ((0x00000000 | OPC_MOVE) | (l)) 41462306a36Sopenharmony_ci/* #define SCR_MOVE_IND(l) ((0x20000000 | OPC_MOVE) | (l)) */ 41562306a36Sopenharmony_ci#define SCR_MOVE_TBL (0x10000000 | OPC_MOVE) 41662306a36Sopenharmony_ci 41762306a36Sopenharmony_ci#define SCR_CHMOV_ABS(l) ((0x00000000) | (l)) 41862306a36Sopenharmony_ci/* #define SCR_CHMOV_IND(l) ((0x20000000) | (l)) */ 41962306a36Sopenharmony_ci#define SCR_CHMOV_TBL (0x10000000) 42062306a36Sopenharmony_ci 42162306a36Sopenharmony_ci#ifdef SYM_CONF_TARGET_ROLE_SUPPORT 42262306a36Sopenharmony_ci/* We steal the `indirect addressing' flag for target mode MOVE in scripts */ 42362306a36Sopenharmony_ci 42462306a36Sopenharmony_ci#define OPC_TCHMOVE 0x08000000 42562306a36Sopenharmony_ci 42662306a36Sopenharmony_ci#define SCR_TCHMOVE_ABS(l) ((0x20000000 | OPC_TCHMOVE) | (l)) 42762306a36Sopenharmony_ci#define SCR_TCHMOVE_TBL (0x30000000 | OPC_TCHMOVE) 42862306a36Sopenharmony_ci 42962306a36Sopenharmony_ci#define SCR_TMOV_ABS(l) ((0x20000000) | (l)) 43062306a36Sopenharmony_ci#define SCR_TMOV_TBL (0x30000000) 43162306a36Sopenharmony_ci#endif 43262306a36Sopenharmony_ci 43362306a36Sopenharmony_cistruct sym_tblmove { 43462306a36Sopenharmony_ci u32 size; 43562306a36Sopenharmony_ci u32 addr; 43662306a36Sopenharmony_ci}; 43762306a36Sopenharmony_ci 43862306a36Sopenharmony_ci/*----------------------------------------------------------- 43962306a36Sopenharmony_ci * 44062306a36Sopenharmony_ci * Selection 44162306a36Sopenharmony_ci * 44262306a36Sopenharmony_ci *----------------------------------------------------------- 44362306a36Sopenharmony_ci * 44462306a36Sopenharmony_ci * SEL_ABS | SCR_ID (0..15) [ | REL_JMP] 44562306a36Sopenharmony_ci * <<alternate_address>> 44662306a36Sopenharmony_ci * 44762306a36Sopenharmony_ci * SEL_TBL | << dnad_offset>> [ | REL_JMP] 44862306a36Sopenharmony_ci * <<alternate_address>> 44962306a36Sopenharmony_ci * 45062306a36Sopenharmony_ci *----------------------------------------------------------- 45162306a36Sopenharmony_ci */ 45262306a36Sopenharmony_ci 45362306a36Sopenharmony_ci#define SCR_SEL_ABS 0x40000000 45462306a36Sopenharmony_ci#define SCR_SEL_ABS_ATN 0x41000000 45562306a36Sopenharmony_ci#define SCR_SEL_TBL 0x42000000 45662306a36Sopenharmony_ci#define SCR_SEL_TBL_ATN 0x43000000 45762306a36Sopenharmony_ci 45862306a36Sopenharmony_ci#ifdef SYM_CONF_TARGET_ROLE_SUPPORT 45962306a36Sopenharmony_ci#define SCR_RESEL_ABS 0x40000000 46062306a36Sopenharmony_ci#define SCR_RESEL_ABS_ATN 0x41000000 46162306a36Sopenharmony_ci#define SCR_RESEL_TBL 0x42000000 46262306a36Sopenharmony_ci#define SCR_RESEL_TBL_ATN 0x43000000 46362306a36Sopenharmony_ci#endif 46462306a36Sopenharmony_ci 46562306a36Sopenharmony_cistruct sym_tblsel { 46662306a36Sopenharmony_ci u_char sel_scntl4; /* C1010 only */ 46762306a36Sopenharmony_ci u_char sel_sxfer; 46862306a36Sopenharmony_ci u_char sel_id; 46962306a36Sopenharmony_ci u_char sel_scntl3; 47062306a36Sopenharmony_ci}; 47162306a36Sopenharmony_ci 47262306a36Sopenharmony_ci#define SCR_JMP_REL 0x04000000 47362306a36Sopenharmony_ci#define SCR_ID(id) (((u32)(id)) << 16) 47462306a36Sopenharmony_ci 47562306a36Sopenharmony_ci/*----------------------------------------------------------- 47662306a36Sopenharmony_ci * 47762306a36Sopenharmony_ci * Waiting for Disconnect or Reselect 47862306a36Sopenharmony_ci * 47962306a36Sopenharmony_ci *----------------------------------------------------------- 48062306a36Sopenharmony_ci * 48162306a36Sopenharmony_ci * WAIT_DISC 48262306a36Sopenharmony_ci * dummy: <<alternate_address>> 48362306a36Sopenharmony_ci * 48462306a36Sopenharmony_ci * WAIT_RESEL 48562306a36Sopenharmony_ci * <<alternate_address>> 48662306a36Sopenharmony_ci * 48762306a36Sopenharmony_ci *----------------------------------------------------------- 48862306a36Sopenharmony_ci */ 48962306a36Sopenharmony_ci 49062306a36Sopenharmony_ci#define SCR_WAIT_DISC 0x48000000 49162306a36Sopenharmony_ci#define SCR_WAIT_RESEL 0x50000000 49262306a36Sopenharmony_ci 49362306a36Sopenharmony_ci#ifdef SYM_CONF_TARGET_ROLE_SUPPORT 49462306a36Sopenharmony_ci#define SCR_DISCONNECT 0x48000000 49562306a36Sopenharmony_ci#endif 49662306a36Sopenharmony_ci 49762306a36Sopenharmony_ci/*----------------------------------------------------------- 49862306a36Sopenharmony_ci * 49962306a36Sopenharmony_ci * Bit Set / Reset 50062306a36Sopenharmony_ci * 50162306a36Sopenharmony_ci *----------------------------------------------------------- 50262306a36Sopenharmony_ci * 50362306a36Sopenharmony_ci * SET (flags {|.. }) 50462306a36Sopenharmony_ci * 50562306a36Sopenharmony_ci * CLR (flags {|.. }) 50662306a36Sopenharmony_ci * 50762306a36Sopenharmony_ci *----------------------------------------------------------- 50862306a36Sopenharmony_ci */ 50962306a36Sopenharmony_ci 51062306a36Sopenharmony_ci#define SCR_SET(f) (0x58000000 | (f)) 51162306a36Sopenharmony_ci#define SCR_CLR(f) (0x60000000 | (f)) 51262306a36Sopenharmony_ci 51362306a36Sopenharmony_ci#define SCR_CARRY 0x00000400 51462306a36Sopenharmony_ci#define SCR_TRG 0x00000200 51562306a36Sopenharmony_ci#define SCR_ACK 0x00000040 51662306a36Sopenharmony_ci#define SCR_ATN 0x00000008 51762306a36Sopenharmony_ci 51862306a36Sopenharmony_ci 51962306a36Sopenharmony_ci/*----------------------------------------------------------- 52062306a36Sopenharmony_ci * 52162306a36Sopenharmony_ci * Memory to memory move 52262306a36Sopenharmony_ci * 52362306a36Sopenharmony_ci *----------------------------------------------------------- 52462306a36Sopenharmony_ci * 52562306a36Sopenharmony_ci * COPY (bytecount) 52662306a36Sopenharmony_ci * << source_address >> 52762306a36Sopenharmony_ci * << destination_address >> 52862306a36Sopenharmony_ci * 52962306a36Sopenharmony_ci * SCR_COPY sets the NO FLUSH option by default. 53062306a36Sopenharmony_ci * SCR_COPY_F does not set this option. 53162306a36Sopenharmony_ci * 53262306a36Sopenharmony_ci * For chips which do not support this option, 53362306a36Sopenharmony_ci * sym_fw_bind_script() will remove this bit. 53462306a36Sopenharmony_ci * 53562306a36Sopenharmony_ci *----------------------------------------------------------- 53662306a36Sopenharmony_ci */ 53762306a36Sopenharmony_ci 53862306a36Sopenharmony_ci#define SCR_NO_FLUSH 0x01000000 53962306a36Sopenharmony_ci 54062306a36Sopenharmony_ci#define SCR_COPY(n) (0xc0000000 | SCR_NO_FLUSH | (n)) 54162306a36Sopenharmony_ci#define SCR_COPY_F(n) (0xc0000000 | (n)) 54262306a36Sopenharmony_ci 54362306a36Sopenharmony_ci/*----------------------------------------------------------- 54462306a36Sopenharmony_ci * 54562306a36Sopenharmony_ci * Register move and binary operations 54662306a36Sopenharmony_ci * 54762306a36Sopenharmony_ci *----------------------------------------------------------- 54862306a36Sopenharmony_ci * 54962306a36Sopenharmony_ci * SFBR_REG (reg, op, data) reg = SFBR op data 55062306a36Sopenharmony_ci * << 0 >> 55162306a36Sopenharmony_ci * 55262306a36Sopenharmony_ci * REG_SFBR (reg, op, data) SFBR = reg op data 55362306a36Sopenharmony_ci * << 0 >> 55462306a36Sopenharmony_ci * 55562306a36Sopenharmony_ci * REG_REG (reg, op, data) reg = reg op data 55662306a36Sopenharmony_ci * << 0 >> 55762306a36Sopenharmony_ci * 55862306a36Sopenharmony_ci *----------------------------------------------------------- 55962306a36Sopenharmony_ci * 56062306a36Sopenharmony_ci * On 825A, 875, 895 and 896 chips the content 56162306a36Sopenharmony_ci * of SFBR register can be used as data (SCR_SFBR_DATA). 56262306a36Sopenharmony_ci * The 896 has additionnal IO registers starting at 56362306a36Sopenharmony_ci * offset 0x80. Bit 7 of register offset is stored in 56462306a36Sopenharmony_ci * bit 7 of the SCRIPTS instruction first DWORD. 56562306a36Sopenharmony_ci * 56662306a36Sopenharmony_ci *----------------------------------------------------------- 56762306a36Sopenharmony_ci */ 56862306a36Sopenharmony_ci 56962306a36Sopenharmony_ci#define SCR_REG_OFS(ofs) ((((ofs) & 0x7f) << 16ul) + ((ofs) & 0x80)) 57062306a36Sopenharmony_ci 57162306a36Sopenharmony_ci#define SCR_SFBR_REG(reg,op,data) \ 57262306a36Sopenharmony_ci (0x68000000 | (SCR_REG_OFS(REG(reg))) | (op) | (((data)&0xff)<<8ul)) 57362306a36Sopenharmony_ci 57462306a36Sopenharmony_ci#define SCR_REG_SFBR(reg,op,data) \ 57562306a36Sopenharmony_ci (0x70000000 | (SCR_REG_OFS(REG(reg))) | (op) | (((data)&0xff)<<8ul)) 57662306a36Sopenharmony_ci 57762306a36Sopenharmony_ci#define SCR_REG_REG(reg,op,data) \ 57862306a36Sopenharmony_ci (0x78000000 | (SCR_REG_OFS(REG(reg))) | (op) | (((data)&0xff)<<8ul)) 57962306a36Sopenharmony_ci 58062306a36Sopenharmony_ci 58162306a36Sopenharmony_ci#define SCR_LOAD 0x00000000 58262306a36Sopenharmony_ci#define SCR_SHL 0x01000000 58362306a36Sopenharmony_ci#define SCR_OR 0x02000000 58462306a36Sopenharmony_ci#define SCR_XOR 0x03000000 58562306a36Sopenharmony_ci#define SCR_AND 0x04000000 58662306a36Sopenharmony_ci#define SCR_SHR 0x05000000 58762306a36Sopenharmony_ci#define SCR_ADD 0x06000000 58862306a36Sopenharmony_ci#define SCR_ADDC 0x07000000 58962306a36Sopenharmony_ci 59062306a36Sopenharmony_ci#define SCR_SFBR_DATA (0x00800000>>8ul) /* Use SFBR as data */ 59162306a36Sopenharmony_ci 59262306a36Sopenharmony_ci/*----------------------------------------------------------- 59362306a36Sopenharmony_ci * 59462306a36Sopenharmony_ci * FROM_REG (reg) SFBR = reg 59562306a36Sopenharmony_ci * << 0 >> 59662306a36Sopenharmony_ci * 59762306a36Sopenharmony_ci * TO_REG (reg) reg = SFBR 59862306a36Sopenharmony_ci * << 0 >> 59962306a36Sopenharmony_ci * 60062306a36Sopenharmony_ci * LOAD_REG (reg, data) reg = <data> 60162306a36Sopenharmony_ci * << 0 >> 60262306a36Sopenharmony_ci * 60362306a36Sopenharmony_ci * LOAD_SFBR(data) SFBR = <data> 60462306a36Sopenharmony_ci * << 0 >> 60562306a36Sopenharmony_ci * 60662306a36Sopenharmony_ci *----------------------------------------------------------- 60762306a36Sopenharmony_ci */ 60862306a36Sopenharmony_ci 60962306a36Sopenharmony_ci#define SCR_FROM_REG(reg) \ 61062306a36Sopenharmony_ci SCR_REG_SFBR(reg,SCR_OR,0) 61162306a36Sopenharmony_ci 61262306a36Sopenharmony_ci#define SCR_TO_REG(reg) \ 61362306a36Sopenharmony_ci SCR_SFBR_REG(reg,SCR_OR,0) 61462306a36Sopenharmony_ci 61562306a36Sopenharmony_ci#define SCR_LOAD_REG(reg,data) \ 61662306a36Sopenharmony_ci SCR_REG_REG(reg,SCR_LOAD,data) 61762306a36Sopenharmony_ci 61862306a36Sopenharmony_ci#define SCR_LOAD_SFBR(data) \ 61962306a36Sopenharmony_ci (SCR_REG_SFBR (gpreg, SCR_LOAD, data)) 62062306a36Sopenharmony_ci 62162306a36Sopenharmony_ci/*----------------------------------------------------------- 62262306a36Sopenharmony_ci * 62362306a36Sopenharmony_ci * LOAD from memory to register. 62462306a36Sopenharmony_ci * STORE from register to memory. 62562306a36Sopenharmony_ci * 62662306a36Sopenharmony_ci * Only supported by 810A, 860, 825A, 875, 895 and 896. 62762306a36Sopenharmony_ci * 62862306a36Sopenharmony_ci *----------------------------------------------------------- 62962306a36Sopenharmony_ci * 63062306a36Sopenharmony_ci * LOAD_ABS (LEN) 63162306a36Sopenharmony_ci * <<start address>> 63262306a36Sopenharmony_ci * 63362306a36Sopenharmony_ci * LOAD_REL (LEN) (DSA relative) 63462306a36Sopenharmony_ci * <<dsa_offset>> 63562306a36Sopenharmony_ci * 63662306a36Sopenharmony_ci *----------------------------------------------------------- 63762306a36Sopenharmony_ci */ 63862306a36Sopenharmony_ci 63962306a36Sopenharmony_ci#define SCR_REG_OFS2(ofs) (((ofs) & 0xff) << 16ul) 64062306a36Sopenharmony_ci#define SCR_NO_FLUSH2 0x02000000 64162306a36Sopenharmony_ci#define SCR_DSA_REL2 0x10000000 64262306a36Sopenharmony_ci 64362306a36Sopenharmony_ci#define SCR_LOAD_R(reg, how, n) \ 64462306a36Sopenharmony_ci (0xe1000000 | how | (SCR_REG_OFS2(REG(reg))) | (n)) 64562306a36Sopenharmony_ci 64662306a36Sopenharmony_ci#define SCR_STORE_R(reg, how, n) \ 64762306a36Sopenharmony_ci (0xe0000000 | how | (SCR_REG_OFS2(REG(reg))) | (n)) 64862306a36Sopenharmony_ci 64962306a36Sopenharmony_ci#define SCR_LOAD_ABS(reg, n) SCR_LOAD_R(reg, SCR_NO_FLUSH2, n) 65062306a36Sopenharmony_ci#define SCR_LOAD_REL(reg, n) SCR_LOAD_R(reg, SCR_NO_FLUSH2|SCR_DSA_REL2, n) 65162306a36Sopenharmony_ci#define SCR_LOAD_ABS_F(reg, n) SCR_LOAD_R(reg, 0, n) 65262306a36Sopenharmony_ci#define SCR_LOAD_REL_F(reg, n) SCR_LOAD_R(reg, SCR_DSA_REL2, n) 65362306a36Sopenharmony_ci 65462306a36Sopenharmony_ci#define SCR_STORE_ABS(reg, n) SCR_STORE_R(reg, SCR_NO_FLUSH2, n) 65562306a36Sopenharmony_ci#define SCR_STORE_REL(reg, n) SCR_STORE_R(reg, SCR_NO_FLUSH2|SCR_DSA_REL2,n) 65662306a36Sopenharmony_ci#define SCR_STORE_ABS_F(reg, n) SCR_STORE_R(reg, 0, n) 65762306a36Sopenharmony_ci#define SCR_STORE_REL_F(reg, n) SCR_STORE_R(reg, SCR_DSA_REL2, n) 65862306a36Sopenharmony_ci 65962306a36Sopenharmony_ci 66062306a36Sopenharmony_ci/*----------------------------------------------------------- 66162306a36Sopenharmony_ci * 66262306a36Sopenharmony_ci * Waiting for Disconnect or Reselect 66362306a36Sopenharmony_ci * 66462306a36Sopenharmony_ci *----------------------------------------------------------- 66562306a36Sopenharmony_ci * 66662306a36Sopenharmony_ci * JUMP [ | IFTRUE/IFFALSE ( ... ) ] 66762306a36Sopenharmony_ci * <<address>> 66862306a36Sopenharmony_ci * 66962306a36Sopenharmony_ci * JUMPR [ | IFTRUE/IFFALSE ( ... ) ] 67062306a36Sopenharmony_ci * <<distance>> 67162306a36Sopenharmony_ci * 67262306a36Sopenharmony_ci * CALL [ | IFTRUE/IFFALSE ( ... ) ] 67362306a36Sopenharmony_ci * <<address>> 67462306a36Sopenharmony_ci * 67562306a36Sopenharmony_ci * CALLR [ | IFTRUE/IFFALSE ( ... ) ] 67662306a36Sopenharmony_ci * <<distance>> 67762306a36Sopenharmony_ci * 67862306a36Sopenharmony_ci * RETURN [ | IFTRUE/IFFALSE ( ... ) ] 67962306a36Sopenharmony_ci * <<dummy>> 68062306a36Sopenharmony_ci * 68162306a36Sopenharmony_ci * INT [ | IFTRUE/IFFALSE ( ... ) ] 68262306a36Sopenharmony_ci * <<ident>> 68362306a36Sopenharmony_ci * 68462306a36Sopenharmony_ci * INT_FLY [ | IFTRUE/IFFALSE ( ... ) ] 68562306a36Sopenharmony_ci * <<ident>> 68662306a36Sopenharmony_ci * 68762306a36Sopenharmony_ci * Conditions: 68862306a36Sopenharmony_ci * WHEN (phase) 68962306a36Sopenharmony_ci * IF (phase) 69062306a36Sopenharmony_ci * CARRYSET 69162306a36Sopenharmony_ci * DATA (data, mask) 69262306a36Sopenharmony_ci * 69362306a36Sopenharmony_ci *----------------------------------------------------------- 69462306a36Sopenharmony_ci */ 69562306a36Sopenharmony_ci 69662306a36Sopenharmony_ci#define SCR_NO_OP 0x80000000 69762306a36Sopenharmony_ci#define SCR_JUMP 0x80080000 69862306a36Sopenharmony_ci#define SCR_JUMP64 0x80480000 69962306a36Sopenharmony_ci#define SCR_JUMPR 0x80880000 70062306a36Sopenharmony_ci#define SCR_CALL 0x88080000 70162306a36Sopenharmony_ci#define SCR_CALLR 0x88880000 70262306a36Sopenharmony_ci#define SCR_RETURN 0x90080000 70362306a36Sopenharmony_ci#define SCR_INT 0x98080000 70462306a36Sopenharmony_ci#define SCR_INT_FLY 0x98180000 70562306a36Sopenharmony_ci 70662306a36Sopenharmony_ci#define IFFALSE(arg) (0x00080000 | (arg)) 70762306a36Sopenharmony_ci#define IFTRUE(arg) (0x00000000 | (arg)) 70862306a36Sopenharmony_ci 70962306a36Sopenharmony_ci#define WHEN(phase) (0x00030000 | (phase)) 71062306a36Sopenharmony_ci#define IF(phase) (0x00020000 | (phase)) 71162306a36Sopenharmony_ci 71262306a36Sopenharmony_ci#define DATA(D) (0x00040000 | ((D) & 0xff)) 71362306a36Sopenharmony_ci#define MASK(D,M) (0x00040000 | (((M ^ 0xff) & 0xff) << 8ul)|((D) & 0xff)) 71462306a36Sopenharmony_ci 71562306a36Sopenharmony_ci#define CARRYSET (0x00200000) 71662306a36Sopenharmony_ci 71762306a36Sopenharmony_ci/*----------------------------------------------------------- 71862306a36Sopenharmony_ci * 71962306a36Sopenharmony_ci * SCSI constants. 72062306a36Sopenharmony_ci * 72162306a36Sopenharmony_ci *----------------------------------------------------------- 72262306a36Sopenharmony_ci */ 72362306a36Sopenharmony_ci 72462306a36Sopenharmony_ci/* 72562306a36Sopenharmony_ci * Messages 72662306a36Sopenharmony_ci */ 72762306a36Sopenharmony_ci 72862306a36Sopenharmony_ci#define M_COMPLETE COMMAND_COMPLETE 72962306a36Sopenharmony_ci#define M_EXTENDED EXTENDED_MESSAGE 73062306a36Sopenharmony_ci#define M_SAVE_DP SAVE_POINTERS 73162306a36Sopenharmony_ci#define M_RESTORE_DP RESTORE_POINTERS 73262306a36Sopenharmony_ci#define M_DISCONNECT DISCONNECT 73362306a36Sopenharmony_ci#define M_ID_ERROR INITIATOR_ERROR 73462306a36Sopenharmony_ci#define M_ABORT ABORT_TASK_SET 73562306a36Sopenharmony_ci#define M_REJECT MESSAGE_REJECT 73662306a36Sopenharmony_ci#define M_NOOP NOP 73762306a36Sopenharmony_ci#define M_PARITY MSG_PARITY_ERROR 73862306a36Sopenharmony_ci#define M_LCOMPLETE LINKED_CMD_COMPLETE 73962306a36Sopenharmony_ci#define M_FCOMPLETE LINKED_FLG_CMD_COMPLETE 74062306a36Sopenharmony_ci#define M_RESET TARGET_RESET 74162306a36Sopenharmony_ci#define M_ABORT_TAG ABORT_TASK 74262306a36Sopenharmony_ci#define M_CLEAR_QUEUE CLEAR_TASK_SET 74362306a36Sopenharmony_ci#define M_INIT_REC INITIATE_RECOVERY 74462306a36Sopenharmony_ci#define M_REL_REC RELEASE_RECOVERY 74562306a36Sopenharmony_ci#define M_TERMINATE (0x11) 74662306a36Sopenharmony_ci#define M_SIMPLE_TAG SIMPLE_QUEUE_TAG 74762306a36Sopenharmony_ci#define M_HEAD_TAG HEAD_OF_QUEUE_TAG 74862306a36Sopenharmony_ci#define M_ORDERED_TAG ORDERED_QUEUE_TAG 74962306a36Sopenharmony_ci#define M_IGN_RESIDUE IGNORE_WIDE_RESIDUE 75062306a36Sopenharmony_ci 75162306a36Sopenharmony_ci#define M_X_MODIFY_DP EXTENDED_MODIFY_DATA_POINTER 75262306a36Sopenharmony_ci#define M_X_SYNC_REQ EXTENDED_SDTR 75362306a36Sopenharmony_ci#define M_X_WIDE_REQ EXTENDED_WDTR 75462306a36Sopenharmony_ci#define M_X_PPR_REQ EXTENDED_PPR 75562306a36Sopenharmony_ci 75662306a36Sopenharmony_ci/* 75762306a36Sopenharmony_ci * PPR protocol options 75862306a36Sopenharmony_ci */ 75962306a36Sopenharmony_ci#define PPR_OPT_IU (0x01) 76062306a36Sopenharmony_ci#define PPR_OPT_DT (0x02) 76162306a36Sopenharmony_ci#define PPR_OPT_QAS (0x04) 76262306a36Sopenharmony_ci#define PPR_OPT_MASK (0x07) 76362306a36Sopenharmony_ci 76462306a36Sopenharmony_ci/* 76562306a36Sopenharmony_ci * Status 76662306a36Sopenharmony_ci */ 76762306a36Sopenharmony_ci 76862306a36Sopenharmony_ci#define S_GOOD SAM_STAT_GOOD 76962306a36Sopenharmony_ci#define S_CHECK_COND SAM_STAT_CHECK_CONDITION 77062306a36Sopenharmony_ci#define S_COND_MET SAM_STAT_CONDITION_MET 77162306a36Sopenharmony_ci#define S_BUSY SAM_STAT_BUSY 77262306a36Sopenharmony_ci#define S_INT SAM_STAT_INTERMEDIATE 77362306a36Sopenharmony_ci#define S_INT_COND_MET SAM_STAT_INTERMEDIATE_CONDITION_MET 77462306a36Sopenharmony_ci#define S_CONFLICT SAM_STAT_RESERVATION_CONFLICT 77562306a36Sopenharmony_ci#define S_TERMINATED SAM_STAT_COMMAND_TERMINATED 77662306a36Sopenharmony_ci#define S_QUEUE_FULL SAM_STAT_TASK_SET_FULL 77762306a36Sopenharmony_ci#define S_ILLEGAL (0xff) 77862306a36Sopenharmony_ci 77962306a36Sopenharmony_ci#endif /* defined SYM_DEFS_H */ 780