root/sys/arch/amiga/dev/scireg.h
/*      $NetBSD: scireg.h,v 1.6 2005/12/11 12:16:28 christos Exp $      */

/*
 * Copyright (c) 1990 The Regents of the University of California.
 * All rights reserved.
 *
 * This code is derived from software contributed to Berkeley by
 * Van Jacobson of Lawrence Berkeley Laboratory.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. Neither the name of the University nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 *      @(#)scireg.h    7.3 (Berkeley) 2/5/91
 */

/*
 * NCR 5380 SCSI interface hardware description.
 *
 */

#if 0   /* for reference */
typedef struct {
        unsigned char pad0[1];
        volatile unsigned char sci_data;        /* r:  Current data */
#define sci_odata sci_data                      /* w:  Out data */

        unsigned char pad1[1];
        volatile unsigned char sci_icmd;        /* rw: Initiator command */

        unsigned char pad2[1];
        volatile unsigned char sci_mode;        /* rw: Mode */

        unsigned char pad3[1];
        volatile unsigned char sci_tcmd;        /* rw: Target command */

        unsigned char pad4[1];
        volatile unsigned char sci_bus_csr;     /* r:  Bus Status */
#define sci_sel_enb sci_bus_csr                 /* w:  Select enable */

        unsigned char pad5[1];
        volatile unsigned char sci_csr;         /* r:  Status */
#define sci_dma_send sci_csr                    /* w:  Start DMA send data */

        unsigned char pad6[1];
        volatile unsigned char sci_idata;       /* r:  Input data */
#define sci_trecv sci_idata                     /* w:  Start DMA receive, target */

        unsigned char pad7[1];
        volatile unsigned char sci_iack;        /* r:  Interrupt Acknowledge  */
#define sci_irecv sci_iack                      /* w:  Start DMA receive, initiator */
} sci_regmap_t;
#endif

/*
 * Initiator command register
 */

#define SCI_ICMD_DATA           0x01            /* rw: Assert data bus   */
#define SCI_ICMD_ATN            0x02            /* rw: Assert ATN signal */
#define SCI_ICMD_SEL            0x04            /* rw: Assert SEL signal */
#define SCI_ICMD_BSY            0x08            /* rw: Assert BSY signal */
#define SCI_ICMD_ACK            0x10            /* rw: Assert ACK signal */
#define SCI_ICMD_LST            0x20            /* r:  Lost arbitration */
#define SCI_ICMD_DIFF   SCI_ICMD_LST            /* w:  Differential cable */
#define SCI_ICMD_AIP            0x40            /* r:  Arbitration in progress */
#define SCI_ICMD_TEST   SCI_ICMD_AIP            /* w:  Test mode */
#define SCI_ICMD_RST            0x80            /* rw: Assert RST signal */


/*
 * Mode register
 */

#define SCI_MODE_ARB            0x01            /* rw: Start arbitration */
#define SCI_MODE_DMA            0x02            /* rw: Enable DMA xfers */
#define SCI_MODE_MONBSY         0x04            /* rw: Monitor BSY signal */
#define SCI_MODE_DMA_IE         0x08            /* rw: Enable DMA complete interrupt */
#define SCI_MODE_PERR_IE        0x10            /* rw: Interrupt on parity errors */
#define SCI_MODE_PAR_CHK        0x20            /* rw: Check parity */
#define SCI_MODE_TARGET         0x40            /* rw: Target mode (Initiator if 0) */
#define SCI_MODE_BLOCKDMA       0x80            /* rw: Block-mode DMA handshake (MBZ) */


/*
 * Target command register
 */

#define SCI_TCMD_IO             0x01            /* rw: Assert I/O signal */
#define SCI_TCMD_CD             0x02            /* rw: Assert C/D signal */
#define SCI_TCMD_MSG            0x04            /* rw: Assert MSG signal */
#define SCI_TCMD_PHASE_MASK     0x07            /* r:  Mask for current bus phase */
#define SCI_TCMD_REQ            0x08            /* rw: Assert REQ signal */
#define SCI_TCMD_LAST_SENT      0x80            /* ro: Last byte was xferred
                                                 *     (not on 5380/1) */

#define SCI_PHASE(x)            ((x>>2) & 7)

/*
 * Current (SCSI) Bus status
 */

#define SCI_BUS_DBP             0x01            /* r:  Data Bus parity */
#define SCI_BUS_SEL             0x02            /* r:  SEL signal */
#define SCI_BUS_IO              0x04            /* r:  I/O signal */
#define SCI_BUS_CD              0x08            /* r:  C/D signal */
#define SCI_BUS_MSG             0x10            /* r:  MSG signal */
#define SCI_BUS_REQ             0x20            /* r:  REQ signal */
#define SCI_BUS_BSY             0x40            /* r:  BSY signal */
#define SCI_BUS_RST             0x80            /* r:  RST signal */

#define SCI_CUR_PHASE(x)        SCSI_PHASE((x)>>2)

/*
 * Bus and Status register
 */

#define SCI_CSR_ACK             0x01            /* r:  ACK signal */
#define SCI_CSR_ATN             0x02            /* r:  ATN signal */
#define SCI_CSR_DISC            0x04            /* r:  Disconnected (BSY==0) */
#define SCI_CSR_PHASE_MATCH     0x08            /* r:  Bus and SCI_TCMD match */
#define SCI_CSR_INT             0x10            /* r:  Interrupt request */
#define SCI_CSR_PERR            0x20            /* r:  Parity error */
#define SCI_CSR_DREQ            0x40            /* r:  DMA request */
#define SCI_CSR_DONE            0x80            /* r:  DMA count is zero */