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