root/sys/arch/newsmips/dev/screg_1185.h
/*      $NetBSD: screg_1185.h,v 1.7 2008/04/09 15:40:30 tsutsui Exp $   */
/*
 * Copyright (c) 1992, 1993
 *      The Regents of the University of California.  All rights reserved.
 *
 * This code is derived from software contributed to Berkeley by
 * Sony Corp. and Kazumasa Utashiro of Software Research Associates, Inc.
 *
 * 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.
 *
 * from: $Hdr: screg_1185.h,v 4.300 91/06/09 06:22:14 root Rel41 $ SONY
 *
 *      @(#)screg_1185.h        8.1 (Berkeley) 6/11/93
 */

/*
 * Copyright (c) 1989- by SONY Corporation.
 */

/*
 *      screg_1185.h    ver 0.0
 *              for SCSI I/F Chip CXD1185Q
 */

/*
 *              SCSI I/F Chip CXD1185Q Register address assignment
 */
#ifdef __mips__
# define        SCSI_BASE       0xbfe00100
#else
# define        SCSI_BASE       0xe1900000
#endif

#define sc_statr        *((volatile uint8_t *)(SCSI_BASE + 0x0))
#define sc_comr         *((volatile uint8_t *)(SCSI_BASE + 0x0))
#define sc_datr         *((volatile uint8_t *)(SCSI_BASE + 0x1))
#define sc_intrq1       *((volatile uint8_t *)(SCSI_BASE + 0x2))
#define sc_intrq2       *((volatile uint8_t *)(SCSI_BASE + 0x3))
#define sc_envir        *((volatile uint8_t *)(SCSI_BASE + 0x3))
#define sc_cmonr        *((volatile uint8_t *)(SCSI_BASE + 0x4))
#define sc_timer        *((volatile uint8_t *)(SCSI_BASE + 0x4))
#define sc_ffstr        *((volatile uint8_t *)(SCSI_BASE + 0x5))
#define sc_idenr        *((volatile uint8_t *)(SCSI_BASE + 0x6))
#define sc_tclow        *((volatile uint8_t *)(SCSI_BASE + 0x7))
#define sc_tcmid        *((volatile uint8_t *)(SCSI_BASE + 0x8))
#define sc_tchi         *((volatile uint8_t *)(SCSI_BASE + 0x9))
#define sc_intok1       *((volatile uint8_t *)(SCSI_BASE + 0xa))
#define sc_intok2       *((volatile uint8_t *)(SCSI_BASE + 0xb))
#define sc_moder        *((volatile uint8_t *)(SCSI_BASE + 0xc))
#define sc_syncr        *((volatile uint8_t *)(SCSI_BASE + 0xd))
#define sc_busconr      *((volatile uint8_t *)(SCSI_BASE + 0xe))
#define sc_ioptr        *((volatile uint8_t *)(SCSI_BASE + 0xf))

/*
 *              CXD1185Q Register bit assignment
 */

/*      sc_statr (status register) bit define
*/
#define R0_MRST         0x80
#define R0_MDBP         0x40
#define R0_INIT         0x10
#define R0_TARG         8
#define R0_TRBZ         4
#define R0_MIRQ         2
#define R0_CIP          1

/*      sc_comr (command register) bit define
*/
#define R0_DMA          0x20
#define R0_TRBE         0x10

/*      sc_intrq1 (interrupt request register 1) bit define
*/
#define R2_STO          0x10
#define R2_RSL          8
#define R2_SWA          4
#define R2_SWOA         2
#define R2_ARBF         1

/*      sc_intrq2 (interrupt request register 2) bit define
*/
#define R3_FNC          0x80
#define R3_DCNT         0x40
#define R3_SRST         0x20
#define R3_PHC          0x10
#define R3_DATN         8
#define R3_DPE          4
#define R3_SPE          2
#define R3_RMSG         1

/*      sc_envir (environment register) bit define
*/
#define R3_DIFE         0x80
#define R3_SDPM         0x40
#define R3_DPEN         0x20
#define R3_SIRM         0x10
#define R3_FS_MASK      3

/*      sc_cmonr (scsi control monitor register) bit define
*/
#define R4_MBSY         0x80
#define R4_MSEL         0x40
#define R4_MMSG         0x20
#define R4_MCD          0x10
#define R4_MIO          8
#define R4_MREQ         4
#define R4_MACK         2
#define R4_MATN         1

/*      sc_ffstr (FIFO status register) bit define
*/
#define R5_FIE          0x80
#define R5_FIF          0x10
#define R5_FIFOREM      0x1f

/*      sc_idenr (scsi identify register) bit define
*/
#define R6_OID_MASK     0x07
#define R6_SID_MASK     0xe0
#define R6_TID_MASK     0xe0

/*      sc_intok1 (interrupt enable register 1) bit define
*/
#define Ra_STO          0x10
#define Ra_RSL          8
#define Ra_SWA          4
#define Ra_SWOA         2
#define Ra_ARBF         1

/*      sc_intok2 (interrupt enable register 2) bit define
*/
#define Rb_FNC          0x80
#define Rb_DCNT         0x40
#define Rb_SRST         0x20
#define Rb_PHC          0x10
#define Rb_DATN         8
#define Rb_DPE          4
#define Rb_SPE          2
#define Rb_RMSG         1

/*      sc_moder (mode register) bit define
*/
#define Rc_HDPE         0x80
#define Rc_HSPE         0x40
#define Rc_HATN         0x20
#define Rc_TMSL         0x10
#define Rc_SPHI         8
#define Rc_BDMA         1

/*      sc_syncr (synchronous transfer control register) bit define
*/
#define Rd_TPD_MASK     0xf0
#define Rd_TOF_MASK     0x0f
#define MIN_TP          62              /* minimum transfer period 4ns * 25 */
#define MAX_OFFSET      15

/*      sc_busconr (scsi bus control register) bit define
*/
#define Re_ABSY         0x80
#define Re_ASEL         0x40
#define Re_AMSG         0x20
#define Re_ACD          0x10
#define Re_AIO          8
#define Re_AREQ         4
#define Re_AACK         2
#define Re_AATN         1

/*      sc_ioptr (I/O port) bit define
*/
#define Rf_PCN_MASK     0xf0
# define        Rf_PCN3         0x80
# define        Rf_PCN2         0x40
# define        Rf_PCN1         0x20
# define        Rf_PCN0         0x10
#define Rf_PRT_MASK     0x0f
# define        Rf_PRT3         8
# define        Rf_PRT2         4
# define        Rf_PRT1         2
# define        Rf_PRT0         1


/*
 *              CXD1185Q commands
 */
/*      category 0
*/
#define SCMD_NOP        0x00
#define SCMD_CHIP_RST   0x01
#define SCMD_AST_RST    0x02
#define SCMD_FLSH_FIFO  0x03
#define SCMD_AST_CTRL   0x04
#define SCMD_NGT_CTRL   0x05
#define SCMD_AST_DATA   0x06
#define SCMD_NGT_DATA   0x07

/*      category 1
*/
#define SCMD_RESEL      0x40
#define SCMD_SEL        0x41
#define SCMD_SEL_ATN    0x42
#define SCMD_ENB_SEL    0x43
#define SCMD_DIS_SEL    0x44

/*      category 2
*/
#define SCMD_SEND_MES   0x80
#define SCMD_SEND_STAT  0x81
#define SCMD_SEND_DATA  0x82
#define SCMD_DISCONNECT 0x83
#define SCMD_RCV_MOUT   0x84
#define SCMD_RCV_CMD    0x85
#define SCMD_RCV_DATA   0x86

/*      category 3
*/
#define SCMD_TR_INFO    0xc0
#define SCMD_TR_PAD     0xc1
#define SCMD_NGT_ACK    0xc2
#define SCMD_AST_ATN    0xc3
#define SCMD_NGT_ATN    0xc4


/*
 *              scsi parameter definition
 */
/*      SCSI bus ID
*/
#define SC_OWNID        0x7
#define SC_TG_SHIFT     5

/*      scsi bus phase
*/
#define SC_PMASK                (R4_MMSG|R4_MCD|R4_MIO)
# define        DAT_OUT         0
# define        DAT_IN                          R4_MIO
# define        COM_OUT                  R4_MCD
# define        STAT_IN                 (R4_MCD|R4_MIO)
# define        MES_OUT         (R4_MMSG|R4_MCD)
# define        MES_IN          (R4_MMSG|R4_MCD|R4_MIO)

/*      scsi command types define
*/
#define CMD_TYPEMASK    0xe0
# define        CMD_T0          0               /*  6 byte commands */
# define        CMD_T1          0x20            /* 10 byte commands */
# define        CMD_T5          0xa0            /* 12 byte commands */
# define        CMD_T6          0xc0
# define        CMD_T7          0xe0

#define MAXNSCSI        1