[BACK]Return to sireg.h CVS log [TXT][DIR] Up to [local] / sys / arch / sparc / dev

Annotation of sys/arch/sparc/dev/sireg.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: sireg.h,v 1.3 1997/08/08 08:25:30 downsj Exp $        */
        !             2: /*     $NetBSD: sireg.h,v 1.3 1996/01/01 22:40:58 thorpej Exp $        */
        !             3:
        !             4: /*
        !             5:  * Register map for the Sun3 SCSI Interface (si)
        !             6:  * The first part of this register map is an NCR5380
        !             7:  * SCSI Bus Interface Controller (SBIC).  The rest is a
        !             8:  * DMA controller and custom logic in one of two flavors,
        !             9:  * one for the OBIO interface (3/50,3/60) and one for the
        !            10:  * VME interface (3/160,3/260,etc.), where some registers
        !            11:  * are implemented only on one or the other, some on both.
        !            12:  *
        !            13:  * Modified for Sun 4 systems by Jason R. Thorpe <thorpej@NetBSD.ORG>.
        !            14:  */
        !            15:
        !            16: /*
        !            17:  * Note that the obio version on the 4/1xx (the so-called "SCSI Weird", or
        !            18:  * "sw" controller) is laid out a bit differently, and hence the evilness
        !            19:  * with unions.  Also, the "sw" doesn't appear to have a FIFO.
        !            20:  */
        !            21:
        !            22: /*
        !            23:  * Am5380 Register map (no padding)
        !            24:  */
        !            25: struct ncr5380regs {
        !            26:        volatile u_char sci_r0;
        !            27:        volatile u_char sci_r1;
        !            28:        volatile u_char sci_r2;
        !            29:        volatile u_char sci_r3;
        !            30:        volatile u_char sci_r4;
        !            31:        volatile u_char sci_r5;
        !            32:        volatile u_char sci_r6;
        !            33:        volatile u_char sci_r7;
        !            34: };
        !            35:
        !            36: struct si_regs {
        !            37:        struct ncr5380regs sci;
        !            38:
        !            39:        /* DMA controller registers */
        !            40:        union {
        !            41:                struct {
        !            42:                        u_short _Dma_addrh;     /* dma address (VME only) */
        !            43:                        u_short _Dma_addrl;     /* (high word, low word)  */
        !            44:                } _si_u1_s;
        !            45:                u_int           _Dma_addr;      /* dma address (OBIO) */
        !            46:        } _si_u1;
        !            47: #define dma_addrh      _si_u1._si_u1_s._Dma_addrh
        !            48: #define dma_addrl      _si_u1._si_u1_s._Dma_addrl
        !            49: #define dma_addr       _si_u1._Dma_addr
        !            50:
        !            51:        union {
        !            52:                struct {
        !            53:                        u_short _Dma_counth;    /* dma count   (VME only) */
        !            54:                        u_short _Dma_countl;    /* (high word, low word)  */
        !            55:                } _si_u2_s;
        !            56:                u_int           _Dma_count;     /* dma count (OBIO) */
        !            57:        } _si_u2;
        !            58: #define dma_counth     _si_u2._si_u2_s._Dma_counth
        !            59: #define dma_countl     _si_u2._si_u2_s._Dma_countl
        !            60: #define dma_count      _si_u2._Dma_count
        !            61:
        !            62:        u_int           si_pad0;                /* no-existent register */
        !            63:
        !            64:        union {
        !            65:                struct {
        !            66:                        u_short _Fifo_data;     /* fifo data register */
        !            67:                        u_short _Fifo_count;    /* fifo count register */
        !            68:                } _si_u4_s;
        !            69:                u_int           _Sw_csr;        /* sw control/status */
        !            70:        } _si_u4;
        !            71: #define fifo_data      _si_u4._si_u4_s._Fifo_data
        !            72: #define fifo_count     _si_u4._si_u4_s._Fifo_count
        !            73: #define sw_csr         _si_u4._Sw_csr
        !            74:
        !            75:        union {
        !            76:                struct {
        !            77:                        u_short _Si_csr;        /* si control/status */
        !            78:                        u_short _Bprh;          /* VME byte pack high */
        !            79:                } _si_u5_s;
        !            80:                u_int   _Bpr;                   /* sw byte pack */
        !            81:        } _si_u5;
        !            82: #define si_csr         _si_u5._si_u5_s._Si_csr
        !            83: #define si_bprh                _si_u5._si_u5_s._Bprh
        !            84: #define sw_bpr         _si_u5._Bpr
        !            85:
        !            86:        /* The rest of these are on the VME interface only: */
        !            87:        u_short                 si_bprl;        /* VME byte pack low */
        !            88:        u_short                 si_iv_am;       /* bits 0-7: intr vector */
        !            89:                                /* bits 8-13: addr modifier (VME only) */
        !            90:                                                /* bits 14-15: unused */
        !            91:        u_short                 fifo_cnt_hi;    /* high part of fifo_count (VME only) */
        !            92:
        !            93:        /* Whole thing repeats after 32 bytes. */
        !            94:        u_short                 _space[3];
        !            95: };
        !            96:
        !            97: /* possible values for the address modifier, vme version only */
        !            98: #define VME_SUPV_DATA_24       0x3d00
        !            99:
        !           100: /*
        !           101:  * Status Register.
        !           102:  * Note:
        !           103:  *     (r)     indicates bit is read only.
        !           104:  *     (rw)    indicates bit is read or write.
        !           105:  *     (v)     vme host adaptor interface only.
        !           106:  *     (o)     sun3/50 onboard host adaptor interface only.
        !           107:  *     (b)     both vme and sun3/50 host adaptor interfaces.
        !           108:  */
        !           109: #define SI_CSR_DMA_ACTIVE      0x8000  /* (r,o) dma transfer active */
        !           110: #define SI_CSR_DMA_CONFLICT    0x4000  /* (r,b) reg accessed while dmaing */
        !           111: #define SI_CSR_DMA_BUS_ERR     0x2000  /* (r,b) bus error during dma */
        !           112: #define SI_CSR_ID              0x1000  /* (r,b) 0 for 3/50, 1 for SCSI-3, */
        !           113:                                        /* 0 if SCSI-3 unmodified */
        !           114: #define SI_CSR_FIFO_FULL       0x0800  /* (r,b) fifo full */
        !           115: #define SI_CSR_FIFO_EMPTY      0x0400  /* (r,b) fifo empty */
        !           116: #define SI_CSR_SBC_IP          0x0200  /* (r,b) sbc interrupt pending */
        !           117: #define SI_CSR_DMA_IP          0x0100  /* (r,b) dma interrupt pending */
        !           118: #define SI_CSR_LOB             0x00c0  /* (r,v) number of leftover bytes */
        !           119: #define SI_CSR_LOB_THREE       0x00c0  /* (r,v) three leftover bytes */
        !           120: #define SI_CSR_LOB_TWO         0x0080  /* (r,v) two leftover bytes */
        !           121: #define SI_CSR_LOB_ONE         0x0040  /* (r,v) one leftover byte */
        !           122: #define SI_CSR_BPCON           0x0020  /* (rw,v) byte packing control */
        !           123:                                        /* dma is in 0=longwords, 1=words */
        !           124: #define SI_CSR_DMA_EN          0x0010  /* (rw,v) dma/interrupt enable */
        !           125: #define SI_CSR_SEND            0x0008  /* (rw,b) dma dir, 1=to device */
        !           126: #define SI_CSR_INTR_EN         0x0004  /* (rw,b) interrupts enable */
        !           127: #define SI_CSR_FIFO_RES                0x0002  /* (rw,b) inits fifo, 0=reset */
        !           128: #define SI_CSR_SCSI_RES                0x0001  /* (rw,b) reset sbc and udc, 0=reset */

CVSweb