NetBSD/sys/arch/pdp10/dev/rhreg.h
ragge 7a599d2c3e Simple ebus, Massbus adapter and Massbus disk drivers.
The Massbus disk drivers should be merged with the vax Massbus disk drivers
when the 4.4BSD Massbus code gets free.
2003-08-19 10:51:57 +00:00

136 lines
5.8 KiB
C

/* $NetBSD: rhreg.h,v 1.1 2003/08/19 10:51:57 ragge Exp $ */
/*
* Copyright (c) 2003 Anders Magnusson (ragge@ludd.luth.se).
* All rights reserved.
*
* 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. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
*/
/*
* RH20 register definitions.
*/
/*
* Different device codes.
*/
#define RH_DT_RP04 0x10
#define RH_DT_RP05 0x11
#define RH_DT_RP06 0x12
#define RH_DT_RP07 0x22
#define RH_DT_RM02 0x15
#define RH_DT_RM03 0x14
#define RH_DT_RM05 0x17
#define RH_DT_RM80 0x16
#define RH_DT_TU45 052
#define RH_DT_DRQ 0x800 /* Dual ported */
#define RH_DT_MOH 0x2000 /* Moving head device */
/*
* Some common registers used in the rh device driver.
*/
#define RH_DS 1 /* unit status */
#define RH_AS 4 /* attention summary */
#define RH_DT 6 /* drive type */
#define RH_SBAR 070 /* Bus address register */
#define RH_STCR 071 /* Transfer control register */
#define RH_IVIR 074 /* Interrupt vector register */
#define RH_DS_DPR 0x100 /* Unit present */
/*
* Internal register bits.
*/
#define RH_BAR_ADRMSK 0177777 /* Disk/tape address mask */
#define RH_TCR_RCLP 0002000000000 /* Reset channel when starting */
#define RH_TCR_SES 0000200000000 /* Store status after transfer */
#define RH_TCR_DTES 0000000200000 /* Don't stop if errors */
#define RH_TCR_NBC 0000000177700 /* Negative block count */
#define RH_TCR_NBCSH 6 /* Block count shift */
/*
* RH20 register definitions.
*/
#define RH20_CONI_BPE 0400000 /* Data bus parity error */
#define RH20_CONI_EXC 0200000 /* Exception */
#define RH20_CONI_LWE 0100000 /* Long word count error */
#define RH20_CONI_SWE 0040000 /* Short word count error */
#define RH20_CONI_MBE 0020000 /* MBOX error */
#define RH20_CONI_DRE 0010000 /* Drive response error */
#define RH20_CONI_RAE 0004000 /* Register access error */
#define RH20_CONI_MBH 0002000 /* MBOX halted */
#define RH20_CONI_OVR 0001000 /* Data overrun */
#define RH20_CONI_MEN 0000400 /* Massbus enable */
#define RH20_CONI_ATN 0000200 /* Drive attention */
#define RH20_CONI_2RF 0000100 /* Secondary command register full */
#define RH20_CONI_ATE 0000040 /* Attention enable */
#define RH20_CONI_1RF 0000020 /* Primary command register full */
#define RH20_CONI_DON 0000010 /* Channel done */
#define RH20_CONO_RAE 0004000 /* Clear RAE */
#define RH20_CONO_RST 0002000 /* Controller reset */
#define RH20_CONO_XFR 0001000 /* Clear transfer error */
#define RH20_CONO_MEN 0000400 /* Massbus enable */
#define RH20_CONO_RCL 0000200 /* Reset MBOX command list pointer */
#define RH20_CONO_DEL 0000100 /* Delete secondary command */
#define RH20_CONO_ATE 0000040 /* Enable attention interrupts */
#define RH20_CONO_STP 0000020 /* Stop current command */
#define RH20_CONO_DON 0000010 /* Clear done */
#define RH20_CONO_IMSK 0000007 /* Mask for interrupt level */
#define RH20_DATAI_CBPE 0001000000000 /* Control bus parity error */
#define RH20_DATAI_TRA 0000200000000 /* Transfer received */
#define RH20_DATAI_CPA 0000000200000 /* Massbus parity bit */
#define RH20_DATAO_RS 0770000000000 /* Register select */
#define RH20_DATAO_LR 0004000000000 /* Load register */
#define RH20_DATAO_RAES 0000400000000 /* RAE Suppress */
/*
* Data channel defines.
*/
#define DCH_CCL_OFF 0 /* Channel Command List opcode */
#define DCH_CST_OFF 1 /* Channel Status Word */
#define DCH_CCW_OFF 2 /* Current Channel Command Word */
#define DCH_CIV_OFF 3 /* Unused, free for software to use */
#define DCH_CCW_HLT 0000000000000 /* HALT opcode */
#define DCH_CCW_JMP 0200000000000 /* JUMP opcode */
#define DCH_CCW_XFR 0400000000000 /* XFER opcode, plus next 2 bits: */
#define DCH_CCW_XHLT 0200000000000 /* Xfer cmd: "Halt after xfer" */
#define DCH_CCW_XREV 0100000000000 /* Xfer cmd: "Reverse xfer" */
#define DCH_CCW_CNTMSK 0077760000000 /* Word Count (positive) */
#define DCH_CCW_CNTSH 22 /* Word Count shift */
#define DCH_CCW_ADRMSK 0000017777777 /* 22-bit address */
/* Channel Status Word
*/
#define DCH_CSW_SET 0400000000000 /* Always set 1 */
#define DCH_CSW_MPAR 0200000000000 /* Mem Par Err during CCW fetch */
#define DCH_CSW_NOAPE 0100000000000 /* Set if NO mem addr par err */
#define DCH_CSW_NOWC0 0040000000000 /* CCW count NOT 0 when CSW set */
#define DCH_CSW_NXM 0020000000000 /* Chan referenced NXM */
#define DCH_CSW_LXFE 0000400000000 /* Last Transfer Error */
#define DCH_CSW_RH20E 0000200000000 /* RH20 tried to start not-ready chn */
#define DCH_CSW_LWCE 0000100000000 /* Long Word Count Error */
#define DCH_CSW_SWCE 0000040000000 /* Short Word Count Error */
#define DCH_CSW_OVN 0000020000000 /* Overrun */
#define DCH_CSW_ADRMSK 0000017777777 /* 22-bit CCW addr+1 */