1c19e61b2SDavid E. O'Brien /* 2c19e61b2SDavid E. O'Brien * Device driver optimized for the Symbios/LSI 53C896/53C895A/53C1010 3c19e61b2SDavid E. O'Brien * PCI-SCSI controllers. 4c19e61b2SDavid E. O'Brien * 56f9e728aSGerard Roudier * Copyright (C) 1999-2000 Gerard Roudier <groudier@club-internet.fr> 6c19e61b2SDavid E. O'Brien * 7c19e61b2SDavid E. O'Brien * This driver also supports the following Symbios/LSI PCI-SCSI chips: 8c5595f9dSGerard Roudier * 53C810A, 53C825A, 53C860, 53C875, 53C876, 53C885, 53C895, 9c5595f9dSGerard Roudier * 53C810, 53C815, 53C825 and the 53C1510D is 53C8XX mode. 10c19e61b2SDavid E. O'Brien * 11c19e61b2SDavid E. O'Brien * 12c19e61b2SDavid E. O'Brien * This driver for FreeBSD-CAM is derived from the Linux sym53c8xx driver. 13c19e61b2SDavid E. O'Brien * Copyright (C) 1998-1999 Gerard Roudier 14c19e61b2SDavid E. O'Brien * 15c19e61b2SDavid E. O'Brien * The sym53c8xx driver is derived from the ncr53c8xx driver that had been 16c19e61b2SDavid E. O'Brien * a port of the FreeBSD ncr driver to Linux-1.2.13. 17c19e61b2SDavid E. O'Brien * 18c19e61b2SDavid E. O'Brien * The original ncr driver has been written for 386bsd and FreeBSD by 19c19e61b2SDavid E. O'Brien * Wolfgang Stanglmeier <wolf@cologne.de> 20c19e61b2SDavid E. O'Brien * Stefan Esser <se@mi.Uni-Koeln.de> 21c19e61b2SDavid E. O'Brien * Copyright (C) 1994 Wolfgang Stanglmeier 22c19e61b2SDavid E. O'Brien * 23c19e61b2SDavid E. O'Brien * The initialisation code, and part of the code that addresses 24c19e61b2SDavid E. O'Brien * FreeBSD-CAM services is based on the aic7xxx driver for FreeBSD-CAM 25c19e61b2SDavid E. O'Brien * written by Justin T. Gibbs. 26c19e61b2SDavid E. O'Brien * 27c19e61b2SDavid E. O'Brien * Other major contributions: 28c19e61b2SDavid E. O'Brien * 29c19e61b2SDavid E. O'Brien * NVRAM detection and reading. 30c19e61b2SDavid E. O'Brien * Copyright (C) 1997 Richard Waltham <dormouse@farsrobt.demon.co.uk> 31c19e61b2SDavid E. O'Brien * 32c19e61b2SDavid E. O'Brien *----------------------------------------------------------------------------- 33c19e61b2SDavid E. O'Brien * 34c19e61b2SDavid E. O'Brien * Redistribution and use in source and binary forms, with or without 35c19e61b2SDavid E. O'Brien * modification, are permitted provided that the following conditions 36c19e61b2SDavid E. O'Brien * are met: 37c19e61b2SDavid E. O'Brien * 1. Redistributions of source code must retain the above copyright 38c19e61b2SDavid E. O'Brien * notice, this list of conditions and the following disclaimer. 39c19e61b2SDavid E. O'Brien * 2. Redistributions in binary form must reproduce the above copyright 40c19e61b2SDavid E. O'Brien * notice, this list of conditions and the following disclaimer in the 41c19e61b2SDavid E. O'Brien * documentation and/or other materials provided with the distribution. 42c19e61b2SDavid E. O'Brien * 3. The name of the author may not be used to endorse or promote products 43c19e61b2SDavid E. O'Brien * derived from this software without specific prior written permission. 44c19e61b2SDavid E. O'Brien * 45c19e61b2SDavid E. O'Brien * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND 46c19e61b2SDavid E. O'Brien * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 47c19e61b2SDavid E. O'Brien * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 48c19e61b2SDavid E. O'Brien * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR 49c19e61b2SDavid E. O'Brien * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 50c19e61b2SDavid E. O'Brien * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 51c19e61b2SDavid E. O'Brien * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 52c19e61b2SDavid E. O'Brien * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 53c19e61b2SDavid E. O'Brien * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 54c19e61b2SDavid E. O'Brien * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 55c19e61b2SDavid E. O'Brien * SUCH DAMAGE. 56c19e61b2SDavid E. O'Brien */ 574d129adcSDavid E. O'Brien 584d129adcSDavid E. O'Brien /* $FreeBSD$ */ 594d129adcSDavid E. O'Brien 60c19e61b2SDavid E. O'Brien #ifndef SYM_DEFS_H 61c19e61b2SDavid E. O'Brien #define SYM_DEFS_H 62c19e61b2SDavid E. O'Brien 63c19e61b2SDavid E. O'Brien /* 64c19e61b2SDavid E. O'Brien * Vendor. 65c19e61b2SDavid E. O'Brien */ 66c19e61b2SDavid E. O'Brien #define PCI_VENDOR_NCR 0x1000 67c19e61b2SDavid E. O'Brien 68c19e61b2SDavid E. O'Brien /* 69c19e61b2SDavid E. O'Brien * PCI device identifier of SYMBIOS chips. 70c19e61b2SDavid E. O'Brien */ 71c19e61b2SDavid E. O'Brien #define PCI_ID_SYM53C810 1 72c19e61b2SDavid E. O'Brien #define PCI_ID_SYM53C810AP 5 73c19e61b2SDavid E. O'Brien #define PCI_ID_SYM53C815 4 74c19e61b2SDavid E. O'Brien #define PCI_ID_SYM53C820 2 75c19e61b2SDavid E. O'Brien #define PCI_ID_SYM53C825 3 76c19e61b2SDavid E. O'Brien #define PCI_ID_SYM53C860 6 77c19e61b2SDavid E. O'Brien #define PCI_ID_SYM53C875 0xf 78c19e61b2SDavid E. O'Brien #define PCI_ID_SYM53C875_2 0x8f 79c19e61b2SDavid E. O'Brien #define PCI_ID_SYM53C885 0xd 80c19e61b2SDavid E. O'Brien #define PCI_ID_SYM53C895 0xc 81c19e61b2SDavid E. O'Brien #define PCI_ID_SYM53C896 0xb 82c19e61b2SDavid E. O'Brien #define PCI_ID_SYM53C895A 0x12 83c19e61b2SDavid E. O'Brien #define PCI_ID_LSI53C1010 0x20 84a6fa47ecSGerard Roudier #define PCI_ID_LSI53C1010_2 0x21 85c19e61b2SDavid E. O'Brien #define PCI_ID_LSI53C1510D 0xa 86c19e61b2SDavid E. O'Brien 87c19e61b2SDavid E. O'Brien /* 88c19e61b2SDavid E. O'Brien * SYM53C8XX device features descriptor. 89c19e61b2SDavid E. O'Brien */ 90c19e61b2SDavid E. O'Brien struct sym_pci_chip { 91c19e61b2SDavid E. O'Brien u_short device_id; 92c19e61b2SDavid E. O'Brien unsigned short revision_id; 93c19e61b2SDavid E. O'Brien char *name; 94c19e61b2SDavid E. O'Brien u_char burst_max; /* log-base-2 of max burst */ 95c19e61b2SDavid E. O'Brien u_char offset_max; 96c19e61b2SDavid E. O'Brien u_char nr_divisor; 97f7c17b70SDavid E. O'Brien u_char lp_probe_bit; 98c19e61b2SDavid E. O'Brien u_int features; 99c19e61b2SDavid E. O'Brien #define FE_LED0 (1<<0) 100c19e61b2SDavid E. O'Brien #define FE_WIDE (1<<1) /* Wide data transfers */ 101c19e61b2SDavid E. O'Brien #define FE_ULTRA (1<<2) /* Ultra speed 20Mtrans/sec */ 102c19e61b2SDavid E. O'Brien #define FE_ULTRA2 (1<<3) /* Ultra 2 - 40 Mtrans/sec */ 103c19e61b2SDavid E. O'Brien #define FE_DBLR (1<<4) /* Clock doubler present */ 104c19e61b2SDavid E. O'Brien #define FE_QUAD (1<<5) /* Clock quadrupler present */ 105c19e61b2SDavid E. O'Brien #define FE_ERL (1<<6) /* Enable read line */ 106c19e61b2SDavid E. O'Brien #define FE_CLSE (1<<7) /* Cache line size enable */ 107c19e61b2SDavid E. O'Brien #define FE_WRIE (1<<8) /* Write & Invalidate enable */ 108c19e61b2SDavid E. O'Brien #define FE_ERMP (1<<9) /* Enable read multiple */ 109c19e61b2SDavid E. O'Brien #define FE_BOF (1<<10) /* Burst opcode fetch */ 110c19e61b2SDavid E. O'Brien #define FE_DFS (1<<11) /* DMA fifo size */ 111c19e61b2SDavid E. O'Brien #define FE_PFEN (1<<12) /* Prefetch enable */ 112c19e61b2SDavid E. O'Brien #define FE_LDSTR (1<<13) /* Load/Store supported */ 113c19e61b2SDavid E. O'Brien #define FE_RAM (1<<14) /* On chip RAM present */ 114c19e61b2SDavid E. O'Brien #define FE_CLK80 (1<<15) /* Board clock is 80 MHz */ 115c19e61b2SDavid E. O'Brien #define FE_RAM8K (1<<16) /* On chip RAM sized 8Kb */ 116c19e61b2SDavid E. O'Brien #define FE_64BIT (1<<17) /* Supports 64-bit addressing */ 117c19e61b2SDavid E. O'Brien #define FE_IO256 (1<<18) /* Requires full 256 bytes in PCI space */ 118c19e61b2SDavid E. O'Brien #define FE_NOPM (1<<19) /* Scripts handles phase mismatch */ 119c19e61b2SDavid E. O'Brien #define FE_LEDC (1<<20) /* Hardware control of LED */ 120c19e61b2SDavid E. O'Brien #define FE_ULTRA3 (1<<21) /* Ultra 3 - 80 Mtrans/sec DT */ 121c19e61b2SDavid E. O'Brien #define FE_PCI66 (1<<22) /* 66MHz PCI support */ 122c19e61b2SDavid E. O'Brien #define FE_CRC (1<<23) /* CRC support */ 123c19e61b2SDavid E. O'Brien #define FE_DIFF (1<<24) /* SCSI HVD support */ 124c19e61b2SDavid E. O'Brien #define FE_DFBC (1<<25) /* Have DFBC register */ 125c19e61b2SDavid E. O'Brien #define FE_LCKFRQ (1<<26) /* Have LCKFRQ */ 126c19e61b2SDavid E. O'Brien #define FE_C10 (1<<27) /* Various C10 core (mis)features */ 127c19e61b2SDavid E. O'Brien #define FE_U3EN (1<<28) /* U3EN bit usable */ 128c19e61b2SDavid E. O'Brien 129c19e61b2SDavid E. O'Brien #define FE_CACHE_SET (FE_ERL|FE_CLSE|FE_WRIE|FE_ERMP) 130c19e61b2SDavid E. O'Brien #define FE_CACHE0_SET (FE_CACHE_SET & ~FE_ERL) 131c19e61b2SDavid E. O'Brien #define FE_SPECIAL_SET (FE_CACHE_SET|FE_BOF|FE_DFS|FE_LDSTR|FE_PFEN|FE_RAM) 132c19e61b2SDavid E. O'Brien }; 133c19e61b2SDavid E. O'Brien 134c19e61b2SDavid E. O'Brien /* 135c19e61b2SDavid E. O'Brien * Symbios NVRAM data format 136c19e61b2SDavid E. O'Brien */ 137c19e61b2SDavid E. O'Brien #define SYMBIOS_NVRAM_SIZE 368 138c19e61b2SDavid E. O'Brien #define SYMBIOS_NVRAM_ADDRESS 0x100 139c19e61b2SDavid E. O'Brien 140c19e61b2SDavid E. O'Brien struct Symbios_nvram { 141c19e61b2SDavid E. O'Brien /* Header 6 bytes */ 142c19e61b2SDavid E. O'Brien u_short type; /* 0x0000 */ 143c19e61b2SDavid E. O'Brien u_short byte_count; /* excluding header/trailer */ 144c19e61b2SDavid E. O'Brien u_short checksum; 145c19e61b2SDavid E. O'Brien 146c19e61b2SDavid E. O'Brien /* Controller set up 20 bytes */ 147c19e61b2SDavid E. O'Brien u_char v_major; /* 0x00 */ 148c19e61b2SDavid E. O'Brien u_char v_minor; /* 0x30 */ 149c19e61b2SDavid E. O'Brien u32 boot_crc; 150c19e61b2SDavid E. O'Brien u_short flags; 151c19e61b2SDavid E. O'Brien #define SYMBIOS_SCAM_ENABLE (1) 152c19e61b2SDavid E. O'Brien #define SYMBIOS_PARITY_ENABLE (1<<1) 153c19e61b2SDavid E. O'Brien #define SYMBIOS_VERBOSE_MSGS (1<<2) 154c19e61b2SDavid E. O'Brien #define SYMBIOS_CHS_MAPPING (1<<3) 155c19e61b2SDavid E. O'Brien #define SYMBIOS_NO_NVRAM (1<<3) /* ??? */ 156c19e61b2SDavid E. O'Brien u_short flags1; 157c19e61b2SDavid E. O'Brien #define SYMBIOS_SCAN_HI_LO (1) 158c19e61b2SDavid E. O'Brien u_short term_state; 159c19e61b2SDavid E. O'Brien #define SYMBIOS_TERM_CANT_PROGRAM (0) 160c19e61b2SDavid E. O'Brien #define SYMBIOS_TERM_ENABLED (1) 161c19e61b2SDavid E. O'Brien #define SYMBIOS_TERM_DISABLED (2) 162c19e61b2SDavid E. O'Brien u_short rmvbl_flags; 163c19e61b2SDavid E. O'Brien #define SYMBIOS_RMVBL_NO_SUPPORT (0) 164c19e61b2SDavid E. O'Brien #define SYMBIOS_RMVBL_BOOT_DEVICE (1) 165c19e61b2SDavid E. O'Brien #define SYMBIOS_RMVBL_MEDIA_INSTALLED (2) 166c19e61b2SDavid E. O'Brien u_char host_id; 167c19e61b2SDavid E. O'Brien u_char num_hba; /* 0x04 */ 168c19e61b2SDavid E. O'Brien u_char num_devices; /* 0x10 */ 169c19e61b2SDavid E. O'Brien u_char max_scam_devices; /* 0x04 */ 1706f9e728aSGerard Roudier u_char num_valid_scam_devices; /* 0x00 */ 1716f9e728aSGerard Roudier u_char flags2; 1726f9e728aSGerard Roudier #define SYMBIOS_AVOID_BUS_RESET (1<<2) 173c19e61b2SDavid E. O'Brien 174c19e61b2SDavid E. O'Brien /* Boot order 14 bytes * 4 */ 175c19e61b2SDavid E. O'Brien struct Symbios_host{ 176c19e61b2SDavid E. O'Brien u_short type; /* 4:8xx / 0:nok */ 177c19e61b2SDavid E. O'Brien u_short device_id; /* PCI device id */ 178c19e61b2SDavid E. O'Brien u_short vendor_id; /* PCI vendor id */ 179c19e61b2SDavid E. O'Brien u_char bus_nr; /* PCI bus number */ 180c19e61b2SDavid E. O'Brien u_char device_fn; /* PCI device/function number << 3*/ 181c19e61b2SDavid E. O'Brien u_short word8; 182c19e61b2SDavid E. O'Brien u_short flags; 183c19e61b2SDavid E. O'Brien #define SYMBIOS_INIT_SCAN_AT_BOOT (1) 184c19e61b2SDavid E. O'Brien u_short io_port; /* PCI io_port address */ 185c19e61b2SDavid E. O'Brien } host[4]; 186c19e61b2SDavid E. O'Brien 187c19e61b2SDavid E. O'Brien /* Targets 8 bytes * 16 */ 188c19e61b2SDavid E. O'Brien struct Symbios_target { 189c19e61b2SDavid E. O'Brien u_char flags; 190c19e61b2SDavid E. O'Brien #define SYMBIOS_DISCONNECT_ENABLE (1) 191c19e61b2SDavid E. O'Brien #define SYMBIOS_SCAN_AT_BOOT_TIME (1<<1) 192c19e61b2SDavid E. O'Brien #define SYMBIOS_SCAN_LUNS (1<<2) 193c19e61b2SDavid E. O'Brien #define SYMBIOS_QUEUE_TAGS_ENABLED (1<<3) 194c19e61b2SDavid E. O'Brien u_char rsvd; 195c19e61b2SDavid E. O'Brien u_char bus_width; /* 0x08/0x10 */ 196c19e61b2SDavid E. O'Brien u_char sync_offset; 197c19e61b2SDavid E. O'Brien u_short sync_period; /* 4*period factor */ 198c19e61b2SDavid E. O'Brien u_short timeout; 199c19e61b2SDavid E. O'Brien } target[16]; 200c19e61b2SDavid E. O'Brien /* Scam table 8 bytes * 4 */ 201c19e61b2SDavid E. O'Brien struct Symbios_scam { 202c19e61b2SDavid E. O'Brien u_short id; 203c19e61b2SDavid E. O'Brien u_short method; 204c19e61b2SDavid E. O'Brien #define SYMBIOS_SCAM_DEFAULT_METHOD (0) 205c19e61b2SDavid E. O'Brien #define SYMBIOS_SCAM_DONT_ASSIGN (1) 206c19e61b2SDavid E. O'Brien #define SYMBIOS_SCAM_SET_SPECIFIC_ID (2) 207c19e61b2SDavid E. O'Brien #define SYMBIOS_SCAM_USE_ORDER_GIVEN (3) 208c19e61b2SDavid E. O'Brien u_short status; 209c19e61b2SDavid E. O'Brien #define SYMBIOS_SCAM_UNKNOWN (0) 210c19e61b2SDavid E. O'Brien #define SYMBIOS_SCAM_DEVICE_NOT_FOUND (1) 211c19e61b2SDavid E. O'Brien #define SYMBIOS_SCAM_ID_NOT_SET (2) 212c19e61b2SDavid E. O'Brien #define SYMBIOS_SCAM_ID_VALID (3) 213c19e61b2SDavid E. O'Brien u_char target_id; 214c19e61b2SDavid E. O'Brien u_char rsvd; 215c19e61b2SDavid E. O'Brien } scam[4]; 216c19e61b2SDavid E. O'Brien 217c19e61b2SDavid E. O'Brien u_char spare_devices[15*8]; 218c19e61b2SDavid E. O'Brien u_char trailer[6]; /* 0xfe 0xfe 0x00 0x00 0x00 0x00 */ 219c19e61b2SDavid E. O'Brien }; 220c19e61b2SDavid E. O'Brien typedef struct Symbios_nvram Symbios_nvram; 221c19e61b2SDavid E. O'Brien typedef struct Symbios_host Symbios_host; 222c19e61b2SDavid E. O'Brien typedef struct Symbios_target Symbios_target; 223c19e61b2SDavid E. O'Brien typedef struct Symbios_scam Symbios_scam; 224c19e61b2SDavid E. O'Brien 225c19e61b2SDavid E. O'Brien /* 226c19e61b2SDavid E. O'Brien * Tekram NvRAM data format. 227c19e61b2SDavid E. O'Brien */ 228c19e61b2SDavid E. O'Brien #define TEKRAM_NVRAM_SIZE 64 229c19e61b2SDavid E. O'Brien #define TEKRAM_93C46_NVRAM_ADDRESS 0 230c19e61b2SDavid E. O'Brien #define TEKRAM_24C16_NVRAM_ADDRESS 0x40 231c19e61b2SDavid E. O'Brien 232c19e61b2SDavid E. O'Brien struct Tekram_nvram { 233c19e61b2SDavid E. O'Brien struct Tekram_target { 234c19e61b2SDavid E. O'Brien u_char flags; 235c19e61b2SDavid E. O'Brien #define TEKRAM_PARITY_CHECK (1) 236c19e61b2SDavid E. O'Brien #define TEKRAM_SYNC_NEGO (1<<1) 237c19e61b2SDavid E. O'Brien #define TEKRAM_DISCONNECT_ENABLE (1<<2) 238c19e61b2SDavid E. O'Brien #define TEKRAM_START_CMD (1<<3) 239c19e61b2SDavid E. O'Brien #define TEKRAM_TAGGED_COMMANDS (1<<4) 240c19e61b2SDavid E. O'Brien #define TEKRAM_WIDE_NEGO (1<<5) 241c19e61b2SDavid E. O'Brien u_char sync_index; 242c19e61b2SDavid E. O'Brien u_short word2; 243c19e61b2SDavid E. O'Brien } target[16]; 244c19e61b2SDavid E. O'Brien u_char host_id; 245c19e61b2SDavid E. O'Brien u_char flags; 246c19e61b2SDavid E. O'Brien #define TEKRAM_MORE_THAN_2_DRIVES (1) 247c19e61b2SDavid E. O'Brien #define TEKRAM_DRIVES_SUP_1GB (1<<1) 248c19e61b2SDavid E. O'Brien #define TEKRAM_RESET_ON_POWER_ON (1<<2) 249c19e61b2SDavid E. O'Brien #define TEKRAM_ACTIVE_NEGATION (1<<3) 250c19e61b2SDavid E. O'Brien #define TEKRAM_IMMEDIATE_SEEK (1<<4) 251c19e61b2SDavid E. O'Brien #define TEKRAM_SCAN_LUNS (1<<5) 252c19e61b2SDavid E. O'Brien #define TEKRAM_REMOVABLE_FLAGS (3<<6) /* 0: disable; 1: boot device; 2:all */ 253c19e61b2SDavid E. O'Brien u_char boot_delay_index; 254c19e61b2SDavid E. O'Brien u_char max_tags_index; 255c19e61b2SDavid E. O'Brien u_short flags1; 256c19e61b2SDavid E. O'Brien #define TEKRAM_F2_F6_ENABLED (1) 257c19e61b2SDavid E. O'Brien u_short spare[29]; 258c19e61b2SDavid E. O'Brien }; 259c19e61b2SDavid E. O'Brien typedef struct Tekram_nvram Tekram_nvram; 260c19e61b2SDavid E. O'Brien typedef struct Tekram_target Tekram_target; 261c19e61b2SDavid E. O'Brien 262c19e61b2SDavid E. O'Brien /* 263c19e61b2SDavid E. O'Brien * SYM53C8XX IO register data structure. 264c19e61b2SDavid E. O'Brien */ 265c19e61b2SDavid E. O'Brien struct sym_reg { 266c19e61b2SDavid E. O'Brien /*00*/ u8 nc_scntl0; /* full arb., ena parity, par->ATN */ 267c19e61b2SDavid E. O'Brien 268c19e61b2SDavid E. O'Brien /*01*/ u8 nc_scntl1; /* no reset */ 269c19e61b2SDavid E. O'Brien #define ISCON 0x10 /* connected to scsi */ 270c19e61b2SDavid E. O'Brien #define CRST 0x08 /* force reset */ 271c19e61b2SDavid E. O'Brien #define IARB 0x02 /* immediate arbitration */ 272c19e61b2SDavid E. O'Brien 273c19e61b2SDavid E. O'Brien /*02*/ u8 nc_scntl2; /* no disconnect expected */ 274c19e61b2SDavid E. O'Brien #define SDU 0x80 /* cmd: disconnect will raise error */ 275c19e61b2SDavid E. O'Brien #define CHM 0x40 /* sta: chained mode */ 276c19e61b2SDavid E. O'Brien #define WSS 0x08 /* sta: wide scsi send [W]*/ 277c19e61b2SDavid E. O'Brien #define WSR 0x01 /* sta: wide scsi received [W]*/ 278c19e61b2SDavid E. O'Brien 279c19e61b2SDavid E. O'Brien /*03*/ u8 nc_scntl3; /* cnf system clock dependent */ 280c19e61b2SDavid E. O'Brien #define EWS 0x08 /* cmd: enable wide scsi [W]*/ 281c19e61b2SDavid E. O'Brien #define ULTRA 0x80 /* cmd: ULTRA enable */ 282c19e61b2SDavid E. O'Brien /* bits 0-2, 7 rsvd for C1010 */ 283c19e61b2SDavid E. O'Brien 284c19e61b2SDavid E. O'Brien /*04*/ u8 nc_scid; /* cnf host adapter scsi address */ 285c19e61b2SDavid E. O'Brien #define RRE 0x40 /* r/w:e enable response to resel. */ 286c19e61b2SDavid E. O'Brien #define SRE 0x20 /* r/w:e enable response to select */ 287c19e61b2SDavid E. O'Brien 288c19e61b2SDavid E. O'Brien /*05*/ u8 nc_sxfer; /* ### Sync speed and count */ 289c19e61b2SDavid E. O'Brien /* bits 6-7 rsvd for C1010 */ 290c19e61b2SDavid E. O'Brien 291c19e61b2SDavid E. O'Brien /*06*/ u8 nc_sdid; /* ### Destination-ID */ 292c19e61b2SDavid E. O'Brien 293c19e61b2SDavid E. O'Brien /*07*/ u8 nc_gpreg; /* ??? IO-Pins */ 294c19e61b2SDavid E. O'Brien 295c19e61b2SDavid E. O'Brien /*08*/ u8 nc_sfbr; /* ### First byte received */ 296c19e61b2SDavid E. O'Brien 297c19e61b2SDavid E. O'Brien /*09*/ u8 nc_socl; 298c19e61b2SDavid E. O'Brien #define CREQ 0x80 /* r/w: SCSI-REQ */ 299c19e61b2SDavid E. O'Brien #define CACK 0x40 /* r/w: SCSI-ACK */ 300c19e61b2SDavid E. O'Brien #define CBSY 0x20 /* r/w: SCSI-BSY */ 301c19e61b2SDavid E. O'Brien #define CSEL 0x10 /* r/w: SCSI-SEL */ 302c19e61b2SDavid E. O'Brien #define CATN 0x08 /* r/w: SCSI-ATN */ 303c19e61b2SDavid E. O'Brien #define CMSG 0x04 /* r/w: SCSI-MSG */ 304c19e61b2SDavid E. O'Brien #define CC_D 0x02 /* r/w: SCSI-C_D */ 305c19e61b2SDavid E. O'Brien #define CI_O 0x01 /* r/w: SCSI-I_O */ 306c19e61b2SDavid E. O'Brien 307c19e61b2SDavid E. O'Brien /*0a*/ u8 nc_ssid; 308c19e61b2SDavid E. O'Brien 309c19e61b2SDavid E. O'Brien /*0b*/ u8 nc_sbcl; 310c19e61b2SDavid E. O'Brien 311c19e61b2SDavid E. O'Brien /*0c*/ u8 nc_dstat; 312c19e61b2SDavid E. O'Brien #define DFE 0x80 /* sta: dma fifo empty */ 313c19e61b2SDavid E. O'Brien #define MDPE 0x40 /* int: master data parity error */ 314c19e61b2SDavid E. O'Brien #define BF 0x20 /* int: script: bus fault */ 315c19e61b2SDavid E. O'Brien #define ABRT 0x10 /* int: script: command aborted */ 316c19e61b2SDavid E. O'Brien #define SSI 0x08 /* int: script: single step */ 317c19e61b2SDavid E. O'Brien #define SIR 0x04 /* int: script: interrupt instruct. */ 318c19e61b2SDavid E. O'Brien #define IID 0x01 /* int: script: illegal instruct. */ 319c19e61b2SDavid E. O'Brien 320c19e61b2SDavid E. O'Brien /*0d*/ u8 nc_sstat0; 321c19e61b2SDavid E. O'Brien #define ILF 0x80 /* sta: data in SIDL register lsb */ 322c19e61b2SDavid E. O'Brien #define ORF 0x40 /* sta: data in SODR register lsb */ 323c19e61b2SDavid E. O'Brien #define OLF 0x20 /* sta: data in SODL register lsb */ 324c19e61b2SDavid E. O'Brien #define AIP 0x10 /* sta: arbitration in progress */ 325c19e61b2SDavid E. O'Brien #define LOA 0x08 /* sta: arbitration lost */ 326c19e61b2SDavid E. O'Brien #define WOA 0x04 /* sta: arbitration won */ 327c19e61b2SDavid E. O'Brien #define IRST 0x02 /* sta: scsi reset signal */ 328c19e61b2SDavid E. O'Brien #define SDP 0x01 /* sta: scsi parity signal */ 329c19e61b2SDavid E. O'Brien 330c19e61b2SDavid E. O'Brien /*0e*/ u8 nc_sstat1; 331c19e61b2SDavid E. O'Brien #define FF3210 0xf0 /* sta: bytes in the scsi fifo */ 332c19e61b2SDavid E. O'Brien 333c19e61b2SDavid E. O'Brien /*0f*/ u8 nc_sstat2; 334c19e61b2SDavid E. O'Brien #define ILF1 0x80 /* sta: data in SIDL register msb[W]*/ 335c19e61b2SDavid E. O'Brien #define ORF1 0x40 /* sta: data in SODR register msb[W]*/ 336c19e61b2SDavid E. O'Brien #define OLF1 0x20 /* sta: data in SODL register msb[W]*/ 337c19e61b2SDavid E. O'Brien #define DM 0x04 /* sta: DIFFSENS mismatch (895/6 only) */ 338c19e61b2SDavid E. O'Brien #define LDSC 0x02 /* sta: disconnect & reconnect */ 339c19e61b2SDavid E. O'Brien 340c19e61b2SDavid E. O'Brien /*10*/ u8 nc_dsa; /* --> Base page */ 341c19e61b2SDavid E. O'Brien /*11*/ u8 nc_dsa1; 342c19e61b2SDavid E. O'Brien /*12*/ u8 nc_dsa2; 343c19e61b2SDavid E. O'Brien /*13*/ u8 nc_dsa3; 344c19e61b2SDavid E. O'Brien 345c19e61b2SDavid E. O'Brien /*14*/ u8 nc_istat; /* --> Main Command and status */ 346c19e61b2SDavid E. O'Brien #define CABRT 0x80 /* cmd: abort current operation */ 347c19e61b2SDavid E. O'Brien #define SRST 0x40 /* mod: reset chip */ 348c19e61b2SDavid E. O'Brien #define SIGP 0x20 /* r/w: message from host to script */ 349c19e61b2SDavid E. O'Brien #define SEM 0x10 /* r/w: message between host + script */ 350c19e61b2SDavid E. O'Brien #define CON 0x08 /* sta: connected to scsi */ 351c19e61b2SDavid E. O'Brien #define INTF 0x04 /* sta: int on the fly (reset by wr)*/ 352c19e61b2SDavid E. O'Brien #define SIP 0x02 /* sta: scsi-interrupt */ 353c19e61b2SDavid E. O'Brien #define DIP 0x01 /* sta: host/script interrupt */ 354c19e61b2SDavid E. O'Brien 355c19e61b2SDavid E. O'Brien /*15*/ u8 nc_istat1; /* 896 only */ 356c19e61b2SDavid E. O'Brien /*16*/ u8 nc_mbox0; /* 896 only */ 357c19e61b2SDavid E. O'Brien /*17*/ u8 nc_mbox1; /* 896 only */ 358c19e61b2SDavid E. O'Brien 359c19e61b2SDavid E. O'Brien /*18*/ u8 nc_ctest0; 360c19e61b2SDavid E. O'Brien /*19*/ u8 nc_ctest1; 361c19e61b2SDavid E. O'Brien 362c19e61b2SDavid E. O'Brien /*1a*/ u8 nc_ctest2; 363c19e61b2SDavid E. O'Brien #define CSIGP 0x40 364c19e61b2SDavid E. O'Brien /* bits 0-2,7 rsvd for C1010 */ 365c19e61b2SDavid E. O'Brien 366c19e61b2SDavid E. O'Brien /*1b*/ u8 nc_ctest3; 367c19e61b2SDavid E. O'Brien #define FLF 0x08 /* cmd: flush dma fifo */ 368c19e61b2SDavid E. O'Brien #define CLF 0x04 /* cmd: clear dma fifo */ 369c19e61b2SDavid E. O'Brien #define FM 0x02 /* mod: fetch pin mode */ 370c19e61b2SDavid E. O'Brien #define WRIE 0x01 /* mod: write and invalidate enable */ 371c19e61b2SDavid E. O'Brien /* bits 4-7 rsvd for C1010 */ 372c19e61b2SDavid E. O'Brien 373c19e61b2SDavid E. O'Brien /*1c*/ u32 nc_temp; /* ### Temporary stack */ 374c19e61b2SDavid E. O'Brien 375c19e61b2SDavid E. O'Brien /*20*/ u8 nc_dfifo; 376c19e61b2SDavid E. O'Brien /*21*/ u8 nc_ctest4; 377c19e61b2SDavid E. O'Brien #define BDIS 0x80 /* mod: burst disable */ 378c19e61b2SDavid E. O'Brien #define MPEE 0x08 /* mod: master parity error enable */ 379c19e61b2SDavid E. O'Brien 380c19e61b2SDavid E. O'Brien /*22*/ u8 nc_ctest5; 381c19e61b2SDavid E. O'Brien #define DFS 0x20 /* mod: dma fifo size */ 382c19e61b2SDavid E. O'Brien /* bits 0-1, 3-7 rsvd for C1010 */ 383c19e61b2SDavid E. O'Brien 384c19e61b2SDavid E. O'Brien /*23*/ u8 nc_ctest6; 385c19e61b2SDavid E. O'Brien 386c19e61b2SDavid E. O'Brien /*24*/ u32 nc_dbc; /* ### Byte count and command */ 387c19e61b2SDavid E. O'Brien /*28*/ u32 nc_dnad; /* ### Next command register */ 388c19e61b2SDavid E. O'Brien /*2c*/ u32 nc_dsp; /* --> Script Pointer */ 389c19e61b2SDavid E. O'Brien /*30*/ u32 nc_dsps; /* --> Script pointer save/opcode#2 */ 390c19e61b2SDavid E. O'Brien 391c19e61b2SDavid E. O'Brien /*34*/ u8 nc_scratcha; /* Temporary register a */ 392c19e61b2SDavid E. O'Brien /*35*/ u8 nc_scratcha1; 393c19e61b2SDavid E. O'Brien /*36*/ u8 nc_scratcha2; 394c19e61b2SDavid E. O'Brien /*37*/ u8 nc_scratcha3; 395c19e61b2SDavid E. O'Brien 396c19e61b2SDavid E. O'Brien /*38*/ u8 nc_dmode; 397c19e61b2SDavid E. O'Brien #define BL_2 0x80 /* mod: burst length shift value +2 */ 398c19e61b2SDavid E. O'Brien #define BL_1 0x40 /* mod: burst length shift value +1 */ 399c19e61b2SDavid E. O'Brien #define ERL 0x08 /* mod: enable read line */ 400c19e61b2SDavid E. O'Brien #define ERMP 0x04 /* mod: enable read multiple */ 401c19e61b2SDavid E. O'Brien #define BOF 0x02 /* mod: burst op code fetch */ 402c19e61b2SDavid E. O'Brien 403c19e61b2SDavid E. O'Brien /*39*/ u8 nc_dien; 404c19e61b2SDavid E. O'Brien /*3a*/ u8 nc_sbr; 405c19e61b2SDavid E. O'Brien 406c19e61b2SDavid E. O'Brien /*3b*/ u8 nc_dcntl; /* --> Script execution control */ 407c19e61b2SDavid E. O'Brien #define CLSE 0x80 /* mod: cache line size enable */ 408c19e61b2SDavid E. O'Brien #define PFF 0x40 /* cmd: pre-fetch flush */ 409c19e61b2SDavid E. O'Brien #define PFEN 0x20 /* mod: pre-fetch enable */ 410c19e61b2SDavid E. O'Brien #define SSM 0x10 /* mod: single step mode */ 411c19e61b2SDavid E. O'Brien #define IRQM 0x08 /* mod: irq mode (1 = totem pole !) */ 412c19e61b2SDavid E. O'Brien #define STD 0x04 /* cmd: start dma mode */ 413c19e61b2SDavid E. O'Brien #define IRQD 0x02 /* mod: irq disable */ 414c19e61b2SDavid E. O'Brien #define NOCOM 0x01 /* cmd: protect sfbr while reselect */ 415c19e61b2SDavid E. O'Brien /* bits 0-1 rsvd for C1010 */ 416c19e61b2SDavid E. O'Brien 417c19e61b2SDavid E. O'Brien /*3c*/ u32 nc_adder; 418c19e61b2SDavid E. O'Brien 419c19e61b2SDavid E. O'Brien /*40*/ u16 nc_sien; /* -->: interrupt enable */ 420c19e61b2SDavid E. O'Brien /*42*/ u16 nc_sist; /* <--: interrupt status */ 421c19e61b2SDavid E. O'Brien #define SBMC 0x1000/* sta: SCSI Bus Mode Change (895/6 only) */ 422c19e61b2SDavid E. O'Brien #define STO 0x0400/* sta: timeout (select) */ 423c19e61b2SDavid E. O'Brien #define GEN 0x0200/* sta: timeout (general) */ 424c19e61b2SDavid E. O'Brien #define HTH 0x0100/* sta: timeout (handshake) */ 425c19e61b2SDavid E. O'Brien #define MA 0x80 /* sta: phase mismatch */ 426c19e61b2SDavid E. O'Brien #define CMP 0x40 /* sta: arbitration complete */ 427c19e61b2SDavid E. O'Brien #define SEL 0x20 /* sta: selected by another device */ 428c19e61b2SDavid E. O'Brien #define RSL 0x10 /* sta: reselected by another device*/ 429c19e61b2SDavid E. O'Brien #define SGE 0x08 /* sta: gross error (over/underflow)*/ 430c19e61b2SDavid E. O'Brien #define UDC 0x04 /* sta: unexpected disconnect */ 431c19e61b2SDavid E. O'Brien #define RST 0x02 /* sta: scsi bus reset detected */ 432c19e61b2SDavid E. O'Brien #define PAR 0x01 /* sta: scsi parity error */ 433c19e61b2SDavid E. O'Brien 434c19e61b2SDavid E. O'Brien /*44*/ u8 nc_slpar; 435c19e61b2SDavid E. O'Brien /*45*/ u8 nc_swide; 436c19e61b2SDavid E. O'Brien /*46*/ u8 nc_macntl; 437c19e61b2SDavid E. O'Brien /*47*/ u8 nc_gpcntl; 438c19e61b2SDavid E. O'Brien /*48*/ u8 nc_stime0; /* cmd: timeout for select&handshake*/ 439c19e61b2SDavid E. O'Brien /*49*/ u8 nc_stime1; /* cmd: timeout user defined */ 440c19e61b2SDavid E. O'Brien /*4a*/ u16 nc_respid; /* sta: Reselect-IDs */ 441c19e61b2SDavid E. O'Brien 442c19e61b2SDavid E. O'Brien /*4c*/ u8 nc_stest0; 443c19e61b2SDavid E. O'Brien 444c19e61b2SDavid E. O'Brien /*4d*/ u8 nc_stest1; 445c19e61b2SDavid E. O'Brien #define SCLK 0x80 /* Use the PCI clock as SCSI clock */ 446c19e61b2SDavid E. O'Brien #define DBLEN 0x08 /* clock doubler running */ 447c19e61b2SDavid E. O'Brien #define DBLSEL 0x04 /* clock doubler selected */ 448c19e61b2SDavid E. O'Brien 449c19e61b2SDavid E. O'Brien 450c19e61b2SDavid E. O'Brien /*4e*/ u8 nc_stest2; 451c19e61b2SDavid E. O'Brien #define ROF 0x40 /* reset scsi offset (after gross error!) */ 452c19e61b2SDavid E. O'Brien #define EXT 0x02 /* extended filtering */ 453c19e61b2SDavid E. O'Brien 454c19e61b2SDavid E. O'Brien /*4f*/ u8 nc_stest3; 455c19e61b2SDavid E. O'Brien #define TE 0x80 /* c: tolerAnt enable */ 456c19e61b2SDavid E. O'Brien #define HSC 0x20 /* c: Halt SCSI Clock */ 457c19e61b2SDavid E. O'Brien #define CSF 0x02 /* c: clear scsi fifo */ 458c19e61b2SDavid E. O'Brien 459c19e61b2SDavid E. O'Brien /*50*/ u16 nc_sidl; /* Lowlevel: latched from scsi data */ 460c19e61b2SDavid E. O'Brien /*52*/ u8 nc_stest4; 461c19e61b2SDavid E. O'Brien #define SMODE 0xc0 /* SCSI bus mode (895/6 only) */ 462c19e61b2SDavid E. O'Brien #define SMODE_HVD 0x40 /* High Voltage Differential */ 463c19e61b2SDavid E. O'Brien #define SMODE_SE 0x80 /* Single Ended */ 464c19e61b2SDavid E. O'Brien #define SMODE_LVD 0xc0 /* Low Voltage Differential */ 465c19e61b2SDavid E. O'Brien #define LCKFRQ 0x20 /* Frequency Lock (895/6 only) */ 466c19e61b2SDavid E. O'Brien /* bits 0-5 rsvd for C1010 */ 467c19e61b2SDavid E. O'Brien 468c19e61b2SDavid E. O'Brien /*53*/ u8 nc_53_; 469c19e61b2SDavid E. O'Brien /*54*/ u16 nc_sodl; /* Lowlevel: data out to scsi data */ 470c19e61b2SDavid E. O'Brien /*56*/ u8 nc_ccntl0; /* Chip Control 0 (896) */ 471c19e61b2SDavid E. O'Brien #define ENPMJ 0x80 /* Enable Phase Mismatch Jump */ 472c19e61b2SDavid E. O'Brien #define PMJCTL 0x40 /* Phase Mismatch Jump Control */ 473c19e61b2SDavid E. O'Brien #define ENNDJ 0x20 /* Enable Non Data PM Jump */ 474c19e61b2SDavid E. O'Brien #define DISFC 0x10 /* Disable Auto FIFO Clear */ 475c19e61b2SDavid E. O'Brien #define DILS 0x02 /* Disable Internal Load/Store */ 476c19e61b2SDavid E. O'Brien #define DPR 0x01 /* Disable Pipe Req */ 477c19e61b2SDavid E. O'Brien 478c19e61b2SDavid E. O'Brien /*57*/ u8 nc_ccntl1; /* Chip Control 1 (896) */ 479c19e61b2SDavid E. O'Brien #define ZMOD 0x80 /* High Impedance Mode */ 480c19e61b2SDavid E. O'Brien #define DDAC 0x08 /* Disable Dual Address Cycle */ 481c19e61b2SDavid E. O'Brien #define XTIMOD 0x04 /* 64-bit Table Ind. Indexing Mode */ 482c19e61b2SDavid E. O'Brien #define EXTIBMV 0x02 /* Enable 64-bit Table Ind. BMOV */ 483c19e61b2SDavid E. O'Brien #define EXDBMV 0x01 /* Enable 64-bit Direct BMOV */ 484c19e61b2SDavid E. O'Brien 485c19e61b2SDavid E. O'Brien /*58*/ u16 nc_sbdl; /* Lowlevel: data from scsi data */ 486c19e61b2SDavid E. O'Brien /*5a*/ u16 nc_5a_; 487c19e61b2SDavid E. O'Brien 488c19e61b2SDavid E. O'Brien /*5c*/ u8 nc_scr0; /* Working register B */ 489c19e61b2SDavid E. O'Brien /*5d*/ u8 nc_scr1; 490c19e61b2SDavid E. O'Brien /*5e*/ u8 nc_scr2; 491c19e61b2SDavid E. O'Brien /*5f*/ u8 nc_scr3; 492c19e61b2SDavid E. O'Brien 493c19e61b2SDavid E. O'Brien /*60*/ u8 nc_scrx[64]; /* Working register C-R */ 494c19e61b2SDavid E. O'Brien /*a0*/ u32 nc_mmrs; /* Memory Move Read Selector */ 495c19e61b2SDavid E. O'Brien /*a4*/ u32 nc_mmws; /* Memory Move Write Selector */ 496c19e61b2SDavid E. O'Brien /*a8*/ u32 nc_sfs; /* Script Fetch Selector */ 497c19e61b2SDavid E. O'Brien /*ac*/ u32 nc_drs; /* DSA Relative Selector */ 498c19e61b2SDavid E. O'Brien /*b0*/ u32 nc_sbms; /* Static Block Move Selector */ 499c19e61b2SDavid E. O'Brien /*b4*/ u32 nc_dbms; /* Dynamic Block Move Selector */ 500c19e61b2SDavid E. O'Brien /*b8*/ u32 nc_dnad64; /* DMA Next Address 64 */ 501c19e61b2SDavid E. O'Brien /*bc*/ u16 nc_scntl4; /* C1010 only */ 502c19e61b2SDavid E. O'Brien #define U3EN 0x80 /* Enable Ultra 3 */ 50394d057fdSGerard Roudier #define AIPCKEN 0x40 /* AIP checking enable */ 50494d057fdSGerard Roudier /* Also enable AIP generation on C10-33*/ 505c19e61b2SDavid E. O'Brien #define XCLKH_DT 0x08 /* Extra clock of data hold on DT edge */ 506c19e61b2SDavid E. O'Brien #define XCLKH_ST 0x04 /* Extra clock of data hold on ST edge */ 507c19e61b2SDavid E. O'Brien #define XCLKS_DT 0x02 /* Extra clock of data set on DT edge */ 508c19e61b2SDavid E. O'Brien #define XCLKS_ST 0x01 /* Extra clock of data set on ST edge */ 50994d057fdSGerard Roudier /*be*/ u8 nc_aipcntl0; /* AIP Control 0 C1010 only */ 51094d057fdSGerard Roudier /*bf*/ u8 nc_aipcntl1; /* AIP Control 1 C1010 only */ 51194d057fdSGerard Roudier #define DISAIP 0x08 /* Disable AIP generation C10-66 only */ 512c19e61b2SDavid E. O'Brien /*c0*/ u32 nc_pmjad1; /* Phase Mismatch Jump Address 1 */ 513c19e61b2SDavid E. O'Brien /*c4*/ u32 nc_pmjad2; /* Phase Mismatch Jump Address 2 */ 514c19e61b2SDavid E. O'Brien /*c8*/ u8 nc_rbc; /* Remaining Byte Count */ 515c19e61b2SDavid E. O'Brien /*c9*/ u8 nc_rbc1; 516c19e61b2SDavid E. O'Brien /*ca*/ u8 nc_rbc2; 517c19e61b2SDavid E. O'Brien /*cb*/ u8 nc_rbc3; 518c19e61b2SDavid E. O'Brien 519c19e61b2SDavid E. O'Brien /*cc*/ u8 nc_ua; /* Updated Address */ 520c19e61b2SDavid E. O'Brien /*cd*/ u8 nc_ua1; 521c19e61b2SDavid E. O'Brien /*ce*/ u8 nc_ua2; 522c19e61b2SDavid E. O'Brien /*cf*/ u8 nc_ua3; 523c19e61b2SDavid E. O'Brien /*d0*/ u32 nc_esa; /* Entry Storage Address */ 524c19e61b2SDavid E. O'Brien /*d4*/ u8 nc_ia; /* Instruction Address */ 525c19e61b2SDavid E. O'Brien /*d5*/ u8 nc_ia1; 526c19e61b2SDavid E. O'Brien /*d6*/ u8 nc_ia2; 527c19e61b2SDavid E. O'Brien /*d7*/ u8 nc_ia3; 528c19e61b2SDavid E. O'Brien /*d8*/ u32 nc_sbc; /* SCSI Byte Count (3 bytes only) */ 529c19e61b2SDavid E. O'Brien /*dc*/ u32 nc_csbc; /* Cumulative SCSI Byte Count */ 530c19e61b2SDavid E. O'Brien /* Following for C1010 only */ 531c19e61b2SDavid E. O'Brien /*e0*/ u16 nc_crcpad; /* CRC Value */ 532c19e61b2SDavid E. O'Brien /*e2*/ u8 nc_crccntl0; /* CRC control register */ 533c19e61b2SDavid E. O'Brien #define SNDCRC 0x10 /* Send CRC Request */ 534c19e61b2SDavid E. O'Brien /*e3*/ u8 nc_crccntl1; /* CRC control register */ 535c19e61b2SDavid E. O'Brien /*e4*/ u32 nc_crcdata; /* CRC data register */ 536c19e61b2SDavid E. O'Brien /*e8*/ u32 nc_e8_; 537c19e61b2SDavid E. O'Brien /*ec*/ u32 nc_ec_; 538c19e61b2SDavid E. O'Brien /*f0*/ u16 nc_dfbc; /* DMA FIFO byte count */ 539c19e61b2SDavid E. O'Brien }; 540c19e61b2SDavid E. O'Brien 541c19e61b2SDavid E. O'Brien /*----------------------------------------------------------- 542c19e61b2SDavid E. O'Brien * 543c19e61b2SDavid E. O'Brien * Utility macros for the script. 544c19e61b2SDavid E. O'Brien * 545c19e61b2SDavid E. O'Brien *----------------------------------------------------------- 546c19e61b2SDavid E. O'Brien */ 547c19e61b2SDavid E. O'Brien 548c19e61b2SDavid E. O'Brien #define REGJ(p,r) (offsetof(struct sym_reg, p ## r)) 549c19e61b2SDavid E. O'Brien #define REG(r) REGJ (nc_, r) 550c19e61b2SDavid E. O'Brien 551c19e61b2SDavid E. O'Brien typedef u32 symcmd; 552c19e61b2SDavid E. O'Brien 553c19e61b2SDavid E. O'Brien /*----------------------------------------------------------- 554c19e61b2SDavid E. O'Brien * 555c19e61b2SDavid E. O'Brien * SCSI phases 556c19e61b2SDavid E. O'Brien * 557c19e61b2SDavid E. O'Brien *----------------------------------------------------------- 558c19e61b2SDavid E. O'Brien */ 559c19e61b2SDavid E. O'Brien 560c19e61b2SDavid E. O'Brien #define SCR_DATA_OUT 0x00000000 561c19e61b2SDavid E. O'Brien #define SCR_DATA_IN 0x01000000 562c19e61b2SDavid E. O'Brien #define SCR_COMMAND 0x02000000 563c19e61b2SDavid E. O'Brien #define SCR_STATUS 0x03000000 564c19e61b2SDavid E. O'Brien #define SCR_DT_DATA_OUT 0x04000000 565c19e61b2SDavid E. O'Brien #define SCR_DT_DATA_IN 0x05000000 566c19e61b2SDavid E. O'Brien #define SCR_MSG_OUT 0x06000000 567c19e61b2SDavid E. O'Brien #define SCR_MSG_IN 0x07000000 568c19e61b2SDavid E. O'Brien /* DT phases are illegal for non Ultra3 mode */ 569c19e61b2SDavid E. O'Brien #define SCR_ILG_OUT 0x04000000 570c19e61b2SDavid E. O'Brien #define SCR_ILG_IN 0x05000000 571c19e61b2SDavid E. O'Brien 572c19e61b2SDavid E. O'Brien /*----------------------------------------------------------- 573c19e61b2SDavid E. O'Brien * 574c19e61b2SDavid E. O'Brien * Data transfer via SCSI. 575c19e61b2SDavid E. O'Brien * 576c19e61b2SDavid E. O'Brien *----------------------------------------------------------- 577c19e61b2SDavid E. O'Brien * 578c19e61b2SDavid E. O'Brien * MOVE_ABS (LEN) 579c19e61b2SDavid E. O'Brien * <<start address>> 580c19e61b2SDavid E. O'Brien * 581c19e61b2SDavid E. O'Brien * MOVE_IND (LEN) 582c19e61b2SDavid E. O'Brien * <<dnad_offset>> 583c19e61b2SDavid E. O'Brien * 584c19e61b2SDavid E. O'Brien * MOVE_TBL 585c19e61b2SDavid E. O'Brien * <<dnad_offset>> 586c19e61b2SDavid E. O'Brien * 587c19e61b2SDavid E. O'Brien *----------------------------------------------------------- 588c19e61b2SDavid E. O'Brien */ 589c19e61b2SDavid E. O'Brien 590c19e61b2SDavid E. O'Brien #define OPC_MOVE 0x08000000 591c19e61b2SDavid E. O'Brien 592c19e61b2SDavid E. O'Brien #define SCR_MOVE_ABS(l) ((0x00000000 | OPC_MOVE) | (l)) 593c19e61b2SDavid E. O'Brien #define SCR_MOVE_IND(l) ((0x20000000 | OPC_MOVE) | (l)) 594c19e61b2SDavid E. O'Brien #define SCR_MOVE_TBL (0x10000000 | OPC_MOVE) 595c19e61b2SDavid E. O'Brien 596c19e61b2SDavid E. O'Brien #define SCR_CHMOV_ABS(l) ((0x00000000) | (l)) 597c19e61b2SDavid E. O'Brien #define SCR_CHMOV_IND(l) ((0x20000000) | (l)) 598c19e61b2SDavid E. O'Brien #define SCR_CHMOV_TBL (0x10000000) 599c19e61b2SDavid E. O'Brien 600c19e61b2SDavid E. O'Brien struct sym_tblmove { 601c19e61b2SDavid E. O'Brien u32 size; 602c19e61b2SDavid E. O'Brien u32 addr; 603c19e61b2SDavid E. O'Brien }; 604c19e61b2SDavid E. O'Brien 605c19e61b2SDavid E. O'Brien /*----------------------------------------------------------- 606c19e61b2SDavid E. O'Brien * 607c19e61b2SDavid E. O'Brien * Selection 608c19e61b2SDavid E. O'Brien * 609c19e61b2SDavid E. O'Brien *----------------------------------------------------------- 610c19e61b2SDavid E. O'Brien * 611c19e61b2SDavid E. O'Brien * SEL_ABS | SCR_ID (0..15) [ | REL_JMP] 612c19e61b2SDavid E. O'Brien * <<alternate_address>> 613c19e61b2SDavid E. O'Brien * 614c19e61b2SDavid E. O'Brien * SEL_TBL | << dnad_offset>> [ | REL_JMP] 615c19e61b2SDavid E. O'Brien * <<alternate_address>> 616c19e61b2SDavid E. O'Brien * 617c19e61b2SDavid E. O'Brien *----------------------------------------------------------- 618c19e61b2SDavid E. O'Brien */ 619c19e61b2SDavid E. O'Brien 620c19e61b2SDavid E. O'Brien #define SCR_SEL_ABS 0x40000000 621c19e61b2SDavid E. O'Brien #define SCR_SEL_ABS_ATN 0x41000000 622c19e61b2SDavid E. O'Brien #define SCR_SEL_TBL 0x42000000 623c19e61b2SDavid E. O'Brien #define SCR_SEL_TBL_ATN 0x43000000 624c19e61b2SDavid E. O'Brien 625c19e61b2SDavid E. O'Brien struct sym_tblsel { 626c19e61b2SDavid E. O'Brien u_char sel_scntl4; /* C1010 only */ 627c19e61b2SDavid E. O'Brien u_char sel_sxfer; 628c19e61b2SDavid E. O'Brien u_char sel_id; 629c19e61b2SDavid E. O'Brien u_char sel_scntl3; 630c19e61b2SDavid E. O'Brien }; 631c19e61b2SDavid E. O'Brien 632c19e61b2SDavid E. O'Brien #define SCR_JMP_REL 0x04000000 633c19e61b2SDavid E. O'Brien #define SCR_ID(id) (((u32)(id)) << 16) 634c19e61b2SDavid E. O'Brien 635c19e61b2SDavid E. O'Brien /*----------------------------------------------------------- 636c19e61b2SDavid E. O'Brien * 637c19e61b2SDavid E. O'Brien * Waiting for Disconnect or Reselect 638c19e61b2SDavid E. O'Brien * 639c19e61b2SDavid E. O'Brien *----------------------------------------------------------- 640c19e61b2SDavid E. O'Brien * 641c19e61b2SDavid E. O'Brien * WAIT_DISC 642c19e61b2SDavid E. O'Brien * dummy: <<alternate_address>> 643c19e61b2SDavid E. O'Brien * 644c19e61b2SDavid E. O'Brien * WAIT_RESEL 645c19e61b2SDavid E. O'Brien * <<alternate_address>> 646c19e61b2SDavid E. O'Brien * 647c19e61b2SDavid E. O'Brien *----------------------------------------------------------- 648c19e61b2SDavid E. O'Brien */ 649c19e61b2SDavid E. O'Brien 650c19e61b2SDavid E. O'Brien #define SCR_WAIT_DISC 0x48000000 651c19e61b2SDavid E. O'Brien #define SCR_WAIT_RESEL 0x50000000 652c19e61b2SDavid E. O'Brien 653c19e61b2SDavid E. O'Brien /*----------------------------------------------------------- 654c19e61b2SDavid E. O'Brien * 655c19e61b2SDavid E. O'Brien * Bit Set / Reset 656c19e61b2SDavid E. O'Brien * 657c19e61b2SDavid E. O'Brien *----------------------------------------------------------- 658c19e61b2SDavid E. O'Brien * 659c19e61b2SDavid E. O'Brien * SET (flags {|.. }) 660c19e61b2SDavid E. O'Brien * 661c19e61b2SDavid E. O'Brien * CLR (flags {|.. }) 662c19e61b2SDavid E. O'Brien * 663c19e61b2SDavid E. O'Brien *----------------------------------------------------------- 664c19e61b2SDavid E. O'Brien */ 665c19e61b2SDavid E. O'Brien 666c19e61b2SDavid E. O'Brien #define SCR_SET(f) (0x58000000 | (f)) 667c19e61b2SDavid E. O'Brien #define SCR_CLR(f) (0x60000000 | (f)) 668c19e61b2SDavid E. O'Brien 669c19e61b2SDavid E. O'Brien #define SCR_CARRY 0x00000400 670c19e61b2SDavid E. O'Brien #define SCR_TRG 0x00000200 671c19e61b2SDavid E. O'Brien #define SCR_ACK 0x00000040 672c19e61b2SDavid E. O'Brien #define SCR_ATN 0x00000008 673c19e61b2SDavid E. O'Brien 674c19e61b2SDavid E. O'Brien 675c19e61b2SDavid E. O'Brien /*----------------------------------------------------------- 676c19e61b2SDavid E. O'Brien * 677c19e61b2SDavid E. O'Brien * Memory to memory move 678c19e61b2SDavid E. O'Brien * 679c19e61b2SDavid E. O'Brien *----------------------------------------------------------- 680c19e61b2SDavid E. O'Brien * 681c19e61b2SDavid E. O'Brien * COPY (bytecount) 682c19e61b2SDavid E. O'Brien * << source_address >> 683c19e61b2SDavid E. O'Brien * << destination_address >> 684c19e61b2SDavid E. O'Brien * 685c19e61b2SDavid E. O'Brien * SCR_COPY sets the NO FLUSH option by default. 686c19e61b2SDavid E. O'Brien * SCR_COPY_F does not set this option. 687c19e61b2SDavid E. O'Brien * 688c19e61b2SDavid E. O'Brien * For chips which do not support this option, 689c19e61b2SDavid E. O'Brien * sym_copy_and_bind() will remove this bit. 690c19e61b2SDavid E. O'Brien * 691c19e61b2SDavid E. O'Brien *----------------------------------------------------------- 692c19e61b2SDavid E. O'Brien */ 693c19e61b2SDavid E. O'Brien 694c19e61b2SDavid E. O'Brien #define SCR_NO_FLUSH 0x01000000 695c19e61b2SDavid E. O'Brien 696c19e61b2SDavid E. O'Brien #define SCR_COPY(n) (0xc0000000 | SCR_NO_FLUSH | (n)) 697c19e61b2SDavid E. O'Brien #define SCR_COPY_F(n) (0xc0000000 | (n)) 698c19e61b2SDavid E. O'Brien 699c19e61b2SDavid E. O'Brien /*----------------------------------------------------------- 700c19e61b2SDavid E. O'Brien * 701c19e61b2SDavid E. O'Brien * Register move and binary operations 702c19e61b2SDavid E. O'Brien * 703c19e61b2SDavid E. O'Brien *----------------------------------------------------------- 704c19e61b2SDavid E. O'Brien * 705c19e61b2SDavid E. O'Brien * SFBR_REG (reg, op, data) reg = SFBR op data 706c19e61b2SDavid E. O'Brien * << 0 >> 707c19e61b2SDavid E. O'Brien * 708c19e61b2SDavid E. O'Brien * REG_SFBR (reg, op, data) SFBR = reg op data 709c19e61b2SDavid E. O'Brien * << 0 >> 710c19e61b2SDavid E. O'Brien * 711c19e61b2SDavid E. O'Brien * REG_REG (reg, op, data) reg = reg op data 712c19e61b2SDavid E. O'Brien * << 0 >> 713c19e61b2SDavid E. O'Brien * 714c19e61b2SDavid E. O'Brien *----------------------------------------------------------- 715c19e61b2SDavid E. O'Brien * 716c19e61b2SDavid E. O'Brien * On 825A, 875, 895 and 896 chips the content 717c19e61b2SDavid E. O'Brien * of SFBR register can be used as data (SCR_SFBR_DATA). 718c19e61b2SDavid E. O'Brien * The 896 has additionnal IO registers starting at 719c19e61b2SDavid E. O'Brien * offset 0x80. Bit 7 of register offset is stored in 720c19e61b2SDavid E. O'Brien * bit 7 of the SCRIPTS instruction first DWORD. 721c19e61b2SDavid E. O'Brien * 722c19e61b2SDavid E. O'Brien *----------------------------------------------------------- 723c19e61b2SDavid E. O'Brien */ 724c19e61b2SDavid E. O'Brien 725c19e61b2SDavid E. O'Brien #define SCR_REG_OFS(ofs) ((((ofs) & 0x7f) << 16ul) + ((ofs) & 0x80)) 726c19e61b2SDavid E. O'Brien 727c19e61b2SDavid E. O'Brien #define SCR_SFBR_REG(reg,op,data) \ 728c19e61b2SDavid E. O'Brien (0x68000000 | (SCR_REG_OFS(REG(reg))) | (op) | (((data)&0xff)<<8ul)) 729c19e61b2SDavid E. O'Brien 730c19e61b2SDavid E. O'Brien #define SCR_REG_SFBR(reg,op,data) \ 731c19e61b2SDavid E. O'Brien (0x70000000 | (SCR_REG_OFS(REG(reg))) | (op) | (((data)&0xff)<<8ul)) 732c19e61b2SDavid E. O'Brien 733c19e61b2SDavid E. O'Brien #define SCR_REG_REG(reg,op,data) \ 734c19e61b2SDavid E. O'Brien (0x78000000 | (SCR_REG_OFS(REG(reg))) | (op) | (((data)&0xff)<<8ul)) 735c19e61b2SDavid E. O'Brien 736c19e61b2SDavid E. O'Brien 737c19e61b2SDavid E. O'Brien #define SCR_LOAD 0x00000000 738c19e61b2SDavid E. O'Brien #define SCR_SHL 0x01000000 739c19e61b2SDavid E. O'Brien #define SCR_OR 0x02000000 740c19e61b2SDavid E. O'Brien #define SCR_XOR 0x03000000 741c19e61b2SDavid E. O'Brien #define SCR_AND 0x04000000 742c19e61b2SDavid E. O'Brien #define SCR_SHR 0x05000000 743c19e61b2SDavid E. O'Brien #define SCR_ADD 0x06000000 744c19e61b2SDavid E. O'Brien #define SCR_ADDC 0x07000000 745c19e61b2SDavid E. O'Brien 746c19e61b2SDavid E. O'Brien #define SCR_SFBR_DATA (0x00800000>>8ul) /* Use SFBR as data */ 747c19e61b2SDavid E. O'Brien 748c19e61b2SDavid E. O'Brien /*----------------------------------------------------------- 749c19e61b2SDavid E. O'Brien * 750c19e61b2SDavid E. O'Brien * FROM_REG (reg) SFBR = reg 751c19e61b2SDavid E. O'Brien * << 0 >> 752c19e61b2SDavid E. O'Brien * 753c19e61b2SDavid E. O'Brien * TO_REG (reg) reg = SFBR 754c19e61b2SDavid E. O'Brien * << 0 >> 755c19e61b2SDavid E. O'Brien * 756c19e61b2SDavid E. O'Brien * LOAD_REG (reg, data) reg = <data> 757c19e61b2SDavid E. O'Brien * << 0 >> 758c19e61b2SDavid E. O'Brien * 759c19e61b2SDavid E. O'Brien * LOAD_SFBR(data) SFBR = <data> 760c19e61b2SDavid E. O'Brien * << 0 >> 761c19e61b2SDavid E. O'Brien * 762c19e61b2SDavid E. O'Brien *----------------------------------------------------------- 763c19e61b2SDavid E. O'Brien */ 764c19e61b2SDavid E. O'Brien 765c19e61b2SDavid E. O'Brien #define SCR_FROM_REG(reg) \ 766c19e61b2SDavid E. O'Brien SCR_REG_SFBR(reg,SCR_OR,0) 767c19e61b2SDavid E. O'Brien 768c19e61b2SDavid E. O'Brien #define SCR_TO_REG(reg) \ 769c19e61b2SDavid E. O'Brien SCR_SFBR_REG(reg,SCR_OR,0) 770c19e61b2SDavid E. O'Brien 771c19e61b2SDavid E. O'Brien #define SCR_LOAD_REG(reg,data) \ 772c19e61b2SDavid E. O'Brien SCR_REG_REG(reg,SCR_LOAD,data) 773c19e61b2SDavid E. O'Brien 774c19e61b2SDavid E. O'Brien #define SCR_LOAD_SFBR(data) \ 775c19e61b2SDavid E. O'Brien (SCR_REG_SFBR (gpreg, SCR_LOAD, data)) 776c19e61b2SDavid E. O'Brien 777c19e61b2SDavid E. O'Brien /*----------------------------------------------------------- 778c19e61b2SDavid E. O'Brien * 779c19e61b2SDavid E. O'Brien * LOAD from memory to register. 780c19e61b2SDavid E. O'Brien * STORE from register to memory. 781c19e61b2SDavid E. O'Brien * 782c19e61b2SDavid E. O'Brien * Only supported by 810A, 860, 825A, 875, 895 and 896. 783c19e61b2SDavid E. O'Brien * 784c19e61b2SDavid E. O'Brien *----------------------------------------------------------- 785c19e61b2SDavid E. O'Brien * 786c19e61b2SDavid E. O'Brien * LOAD_ABS (LEN) 787c19e61b2SDavid E. O'Brien * <<start address>> 788c19e61b2SDavid E. O'Brien * 789c19e61b2SDavid E. O'Brien * LOAD_REL (LEN) (DSA relative) 790c19e61b2SDavid E. O'Brien * <<dsa_offset>> 791c19e61b2SDavid E. O'Brien * 792c19e61b2SDavid E. O'Brien *----------------------------------------------------------- 793c19e61b2SDavid E. O'Brien */ 794c19e61b2SDavid E. O'Brien 795c19e61b2SDavid E. O'Brien #define SCR_REG_OFS2(ofs) (((ofs) & 0xff) << 16ul) 796c19e61b2SDavid E. O'Brien #define SCR_NO_FLUSH2 0x02000000 797c19e61b2SDavid E. O'Brien #define SCR_DSA_REL2 0x10000000 798c19e61b2SDavid E. O'Brien 799c19e61b2SDavid E. O'Brien #define SCR_LOAD_R(reg, how, n) \ 800c19e61b2SDavid E. O'Brien (0xe1000000 | how | (SCR_REG_OFS2(REG(reg))) | (n)) 801c19e61b2SDavid E. O'Brien 802c19e61b2SDavid E. O'Brien #define SCR_STORE_R(reg, how, n) \ 803c19e61b2SDavid E. O'Brien (0xe0000000 | how | (SCR_REG_OFS2(REG(reg))) | (n)) 804c19e61b2SDavid E. O'Brien 805c19e61b2SDavid E. O'Brien #define SCR_LOAD_ABS(reg, n) SCR_LOAD_R(reg, SCR_NO_FLUSH2, n) 806c19e61b2SDavid E. O'Brien #define SCR_LOAD_REL(reg, n) SCR_LOAD_R(reg, SCR_NO_FLUSH2|SCR_DSA_REL2, n) 807c19e61b2SDavid E. O'Brien #define SCR_LOAD_ABS_F(reg, n) SCR_LOAD_R(reg, 0, n) 808c19e61b2SDavid E. O'Brien #define SCR_LOAD_REL_F(reg, n) SCR_LOAD_R(reg, SCR_DSA_REL2, n) 809c19e61b2SDavid E. O'Brien 810c19e61b2SDavid E. O'Brien #define SCR_STORE_ABS(reg, n) SCR_STORE_R(reg, SCR_NO_FLUSH2, n) 811c19e61b2SDavid E. O'Brien #define SCR_STORE_REL(reg, n) SCR_STORE_R(reg, SCR_NO_FLUSH2|SCR_DSA_REL2,n) 812c19e61b2SDavid E. O'Brien #define SCR_STORE_ABS_F(reg, n) SCR_STORE_R(reg, 0, n) 813c19e61b2SDavid E. O'Brien #define SCR_STORE_REL_F(reg, n) SCR_STORE_R(reg, SCR_DSA_REL2, n) 814c19e61b2SDavid E. O'Brien 815c19e61b2SDavid E. O'Brien 816c19e61b2SDavid E. O'Brien /*----------------------------------------------------------- 817c19e61b2SDavid E. O'Brien * 818c19e61b2SDavid E. O'Brien * Waiting for Disconnect or Reselect 819c19e61b2SDavid E. O'Brien * 820c19e61b2SDavid E. O'Brien *----------------------------------------------------------- 821c19e61b2SDavid E. O'Brien * 822c19e61b2SDavid E. O'Brien * JUMP [ | IFTRUE/IFFALSE ( ... ) ] 823c19e61b2SDavid E. O'Brien * <<address>> 824c19e61b2SDavid E. O'Brien * 825c19e61b2SDavid E. O'Brien * JUMPR [ | IFTRUE/IFFALSE ( ... ) ] 826c19e61b2SDavid E. O'Brien * <<distance>> 827c19e61b2SDavid E. O'Brien * 828c19e61b2SDavid E. O'Brien * CALL [ | IFTRUE/IFFALSE ( ... ) ] 829c19e61b2SDavid E. O'Brien * <<address>> 830c19e61b2SDavid E. O'Brien * 831c19e61b2SDavid E. O'Brien * CALLR [ | IFTRUE/IFFALSE ( ... ) ] 832c19e61b2SDavid E. O'Brien * <<distance>> 833c19e61b2SDavid E. O'Brien * 834c19e61b2SDavid E. O'Brien * RETURN [ | IFTRUE/IFFALSE ( ... ) ] 835c19e61b2SDavid E. O'Brien * <<dummy>> 836c19e61b2SDavid E. O'Brien * 837c19e61b2SDavid E. O'Brien * INT [ | IFTRUE/IFFALSE ( ... ) ] 838c19e61b2SDavid E. O'Brien * <<ident>> 839c19e61b2SDavid E. O'Brien * 840c19e61b2SDavid E. O'Brien * INT_FLY [ | IFTRUE/IFFALSE ( ... ) ] 841c19e61b2SDavid E. O'Brien * <<ident>> 842c19e61b2SDavid E. O'Brien * 843c19e61b2SDavid E. O'Brien * Conditions: 844c19e61b2SDavid E. O'Brien * WHEN (phase) 845c19e61b2SDavid E. O'Brien * IF (phase) 846c19e61b2SDavid E. O'Brien * CARRYSET 847c19e61b2SDavid E. O'Brien * DATA (data, mask) 848c19e61b2SDavid E. O'Brien * 849c19e61b2SDavid E. O'Brien *----------------------------------------------------------- 850c19e61b2SDavid E. O'Brien */ 851c19e61b2SDavid E. O'Brien 852c19e61b2SDavid E. O'Brien #define SCR_NO_OP 0x80000000 853c19e61b2SDavid E. O'Brien #define SCR_JUMP 0x80080000 854c19e61b2SDavid E. O'Brien #define SCR_JUMP64 0x80480000 855c19e61b2SDavid E. O'Brien #define SCR_JUMPR 0x80880000 856c19e61b2SDavid E. O'Brien #define SCR_CALL 0x88080000 857c19e61b2SDavid E. O'Brien #define SCR_CALLR 0x88880000 858c19e61b2SDavid E. O'Brien #define SCR_RETURN 0x90080000 859c19e61b2SDavid E. O'Brien #define SCR_INT 0x98080000 860c19e61b2SDavid E. O'Brien #define SCR_INT_FLY 0x98180000 861c19e61b2SDavid E. O'Brien 862c19e61b2SDavid E. O'Brien #define IFFALSE(arg) (0x00080000 | (arg)) 863c19e61b2SDavid E. O'Brien #define IFTRUE(arg) (0x00000000 | (arg)) 864c19e61b2SDavid E. O'Brien 865c19e61b2SDavid E. O'Brien #define WHEN(phase) (0x00030000 | (phase)) 866c19e61b2SDavid E. O'Brien #define IF(phase) (0x00020000 | (phase)) 867c19e61b2SDavid E. O'Brien 868c19e61b2SDavid E. O'Brien #define DATA(D) (0x00040000 | ((D) & 0xff)) 869c19e61b2SDavid E. O'Brien #define MASK(D,M) (0x00040000 | (((M ^ 0xff) & 0xff) << 8ul)|((D) & 0xff)) 870c19e61b2SDavid E. O'Brien 871c19e61b2SDavid E. O'Brien #define CARRYSET (0x00200000) 872c19e61b2SDavid E. O'Brien 873c19e61b2SDavid E. O'Brien /*----------------------------------------------------------- 874c19e61b2SDavid E. O'Brien * 875c19e61b2SDavid E. O'Brien * SCSI constants. 876c19e61b2SDavid E. O'Brien * 877c19e61b2SDavid E. O'Brien *----------------------------------------------------------- 878c19e61b2SDavid E. O'Brien */ 879c19e61b2SDavid E. O'Brien 880c19e61b2SDavid E. O'Brien /* 881c19e61b2SDavid E. O'Brien * Messages 882c19e61b2SDavid E. O'Brien */ 883c19e61b2SDavid E. O'Brien 884c19e61b2SDavid E. O'Brien #define M_COMPLETE (0x00) 885c19e61b2SDavid E. O'Brien #define M_EXTENDED (0x01) 886c19e61b2SDavid E. O'Brien #define M_SAVE_DP (0x02) 887c19e61b2SDavid E. O'Brien #define M_RESTORE_DP (0x03) 888c19e61b2SDavid E. O'Brien #define M_DISCONNECT (0x04) 889c19e61b2SDavid E. O'Brien #define M_ID_ERROR (0x05) 890c19e61b2SDavid E. O'Brien #define M_ABORT (0x06) 891c19e61b2SDavid E. O'Brien #define M_REJECT (0x07) 892c19e61b2SDavid E. O'Brien #define M_NOOP (0x08) 893c19e61b2SDavid E. O'Brien #define M_PARITY (0x09) 894c19e61b2SDavid E. O'Brien #define M_LCOMPLETE (0x0a) 895c19e61b2SDavid E. O'Brien #define M_FCOMPLETE (0x0b) 896c19e61b2SDavid E. O'Brien #define M_RESET (0x0c) 897c19e61b2SDavid E. O'Brien #define M_ABORT_TAG (0x0d) 898c19e61b2SDavid E. O'Brien #define M_CLEAR_QUEUE (0x0e) 899c19e61b2SDavid E. O'Brien #define M_INIT_REC (0x0f) 900c19e61b2SDavid E. O'Brien #define M_REL_REC (0x10) 901c19e61b2SDavid E. O'Brien #define M_TERMINATE (0x11) 902c19e61b2SDavid E. O'Brien #define M_SIMPLE_TAG (0x20) 903c19e61b2SDavid E. O'Brien #define M_HEAD_TAG (0x21) 904c19e61b2SDavid E. O'Brien #define M_ORDERED_TAG (0x22) 905c19e61b2SDavid E. O'Brien #define M_IGN_RESIDUE (0x23) 906c19e61b2SDavid E. O'Brien #define M_IDENTIFY (0x80) 907c19e61b2SDavid E. O'Brien 908c19e61b2SDavid E. O'Brien #define M_X_MODIFY_DP (0x00) 909c19e61b2SDavid E. O'Brien #define M_X_SYNC_REQ (0x01) 910c19e61b2SDavid E. O'Brien #define M_X_WIDE_REQ (0x03) 911c19e61b2SDavid E. O'Brien #define M_X_PPR_REQ (0x04) 912c19e61b2SDavid E. O'Brien 913c19e61b2SDavid E. O'Brien /* 914c19e61b2SDavid E. O'Brien * PPR protocol options 915c19e61b2SDavid E. O'Brien */ 916c19e61b2SDavid E. O'Brien #define PPR_OPT_IU (0x01) 917c19e61b2SDavid E. O'Brien #define PPR_OPT_DT (0x02) 918c19e61b2SDavid E. O'Brien #define PPR_OPT_QAS (0x04) 919c19e61b2SDavid E. O'Brien #define PPR_OPT_MASK (0x07) 920c19e61b2SDavid E. O'Brien 921c19e61b2SDavid E. O'Brien /* 922c19e61b2SDavid E. O'Brien * Status 923c19e61b2SDavid E. O'Brien */ 924c19e61b2SDavid E. O'Brien 925c19e61b2SDavid E. O'Brien #define S_GOOD (0x00) 926c19e61b2SDavid E. O'Brien #define S_CHECK_COND (0x02) 927c19e61b2SDavid E. O'Brien #define S_COND_MET (0x04) 928c19e61b2SDavid E. O'Brien #define S_BUSY (0x08) 929c19e61b2SDavid E. O'Brien #define S_INT (0x10) 930c19e61b2SDavid E. O'Brien #define S_INT_COND_MET (0x14) 931c19e61b2SDavid E. O'Brien #define S_CONFLICT (0x18) 932c19e61b2SDavid E. O'Brien #define S_TERMINATED (0x20) 933c19e61b2SDavid E. O'Brien #define S_QUEUE_FULL (0x28) 934c19e61b2SDavid E. O'Brien #define S_ILLEGAL (0xff) 935c19e61b2SDavid E. O'Brien 936c19e61b2SDavid E. O'Brien #endif /* defined SYM_DEFS_H */ 937