134293Skarels /* 2*35041Sbostic * Copyright (c) 1988 Regents of the University of California. 3*35041Sbostic * All rights reserved. 434293Skarels * 5*35041Sbostic * This code is derived from software contributed to Berkeley by 6*35041Sbostic * Chris Torek. 7*35041Sbostic * 8*35041Sbostic * Redistribution and use in source and binary forms are permitted 9*35041Sbostic * provided that the above copyright notice and this paragraph are 10*35041Sbostic * duplicated in all such forms and that any documentation, 11*35041Sbostic * advertising materials, and other materials related to such 12*35041Sbostic * distribution and use acknowledge that the software was developed 13*35041Sbostic * by the University of California, Berkeley. The name of the 14*35041Sbostic * University may not be used to endorse or promote products derived 15*35041Sbostic * from this software without specific prior written permission. 16*35041Sbostic * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 17*35041Sbostic * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 18*35041Sbostic * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. 19*35041Sbostic * 20*35041Sbostic * @(#)bireg.h 7.2 (Berkeley) 07/09/88 21*35041Sbostic */ 22*35041Sbostic 23*35041Sbostic /* 2434293Skarels * VAXBI node definitions. 2534293Skarels */ 2634293Skarels 2734293Skarels /* 2834293Skarels * BI node addresses 2934293Skarels */ 3034293Skarels #define BI_BASE(bi) ((struct bi_node *) (0x20000000 + (bi)*0x2000000)) 3134293Skarels #define NNODEBI 16 /* 16 nodes per BI */ 3234293Skarels /* `local space' 0x20800000 /* ??? */ 3334293Skarels 3434293Skarels #ifndef LOCORE 3534293Skarels /* 3634293Skarels * BI nodes all start with BI interface registers (those on the BIIC chip). 3734293Skarels * These are followed with interface-specific registers. 3834293Skarels * 3934293Skarels * NB: This structure does NOT include the four GPRs (not anymore!) 4034293Skarels */ 4134293Skarels struct biiregs { 4234293Skarels u_short bi_dtype; /* device type */ 4334293Skarels u_short bi_revs; /* revisions */ 4434293Skarels u_long bi_csr; /* control and status register */ 4534293Skarels u_long bi_ber; /* bus error register */ 4634293Skarels u_long bi_eintrcsr; /* error interrupt control register */ 4734293Skarels u_long bi_intrdes; /* interrupt destination register */ 4834293Skarels /* the rest are not required for all nodes */ 4934293Skarels u_long bi_ipintrmsk; /* IP interrupt mask register */ 5034293Skarels u_long bi_fipsdes; /* Force-Bit IPINTR/STOP destination reg */ 5134293Skarels u_long bi_ipintrsrc; /* IPINTR source register */ 5234293Skarels u_long bi_sadr; /* starting address register */ 5334293Skarels u_long bi_eadr; /* ending address register */ 5434293Skarels u_long bi_bcicsr; /* BCI control and status register */ 5534293Skarels u_long bi_wstat; /* write status register */ 5634293Skarels u_long bi_fipscmd; /* Force-Bit IPINTR/STOP command reg */ 5734293Skarels u_long bi_xxx1[3]; /* unused */ 5834293Skarels u_long bi_uintrcsr; /* user interface interrupt control reg */ 5934293Skarels u_long bi_xxx2[43]; /* unused */ 6034293Skarels /* although these are on the BIIC, their interpretation varies */ 6134293Skarels /* u_long bi_gpr[4]; /* general purpose registers */ 6234293Skarels }; 6334293Skarels 6434293Skarels /* 6534293Skarels * A generic BI node. 6634293Skarels */ 6734293Skarels struct bi_node { 6834293Skarels struct biiregs biic; /* interface */ 6934293Skarels u_long bi_xxx[1988]; /* pad to 8K */ 7034293Skarels }; 7134293Skarels 7234293Skarels /* 7334293Skarels * A cpu node. 7434293Skarels */ 7534293Skarels struct bi_cpu { 7634293Skarels struct biiregs biic; /* interface chip */ 7734293Skarels u_long bi_gpr[4]; /* gprs (unused) */ 7834293Skarels u_long bi_sosr; /* slave only status register */ 7934293Skarels u_long bi_xxx[63]; /* pad */ 8034293Skarels u_long bi_rxcd; /* receive console data register */ 8134293Skarels }; 8234293Skarels #endif LOCORE 8334293Skarels 8434293Skarels /* device types */ 8534293Skarels #define BIDT_MS820 0x0001 /* MS820 memory board */ 8634293Skarels #define BIDT_DWBUA 0x0102 /* DWBUA Unibus adapter */ 8734293Skarels #define BIDT_KLESI 0x0103 /* KLESI-B adapter */ 8834293Skarels #define BIDT_KA820 0x0105 /* KA820 cpu */ 8934293Skarels #define BIDT_DB88 0x0106 /* DB88 adapter */ 9034293Skarels #define BIDT_DMB32 0x0109 /* DMB32 adapter */ 9134293Skarels #define BIDT_KDB50 0x010e /* KDB50 disk controller */ 9234293Skarels #define BIDT_DEBNK 0x410e /* BI Ethernet (Lance) + TK50 */ 9334293Skarels #define BIDT_DEBNA 0x410f /* BI Ethernet (Lance) adapter */ 9434293Skarels 9534293Skarels #ifdef notdef /* CPU (KA820) bits in bi_revs */ 9634293Skarels #define BI_CPUREV(x) (((x) >> 11)) /* CPU revision code */ 9734293Skarels #define BI_UPATCHREV(x) (((x) >> 1) & 0x3ff) /* microcode patch rev */ 9834293Skarels #define BI_SPATCHREV(x) (((x) & 1) /* secondary patch rev */ 9934293Skarels #endif 10034293Skarels 10134293Skarels /* bits in bi_csr */ 10234293Skarels #define BICSR_IREV(x) ((u_char)((x) >> 24)) /* VAXBI interface rev */ 10334293Skarels #define BICSR_TYPE(x) ((u_char)((x) >> 16)) /* BIIC type */ 10434293Skarels #define BICSR_HES 0x8000 /* hard error summary */ 10534293Skarels #define BICSR_SES 0x4000 /* soft error summary */ 10634293Skarels #define BICSR_INIT 0x2000 /* initialise node */ 10734293Skarels #define BICSR_BROKE 0x1000 /* broke */ 10834293Skarels #define BICSR_STS 0x0800 /* self test status */ 10934293Skarels #define BICSR_NRST 0x0400 /* node reset */ 11034293Skarels #define BICSR_UWP 0x0100 /* unlock write pending */ 11134293Skarels #define BICSR_HEIE 0x0080 /* hard error interrupt enable */ 11234293Skarels #define BICSR_SEIE 0x0040 /* soft error interrupt enable */ 11334293Skarels #define BICSR_ARB_MASK 0x0030 /* mask to get arbitration codes */ 11434293Skarels #define BICSR_ARB_NONE 0x0030 /* no arbitration */ 11534293Skarels #define BICSR_ARB_LOG 0x0020 /* low priority */ 11634293Skarels #define BICSR_ARB_HIGH 0x0010 /* high priority */ 11734293Skarels #define BICSR_ARB_RR 0x0000 /* round robin */ 11834293Skarels #define BICSR_NODEMASK 0x000f /* node ID */ 11934293Skarels 12034293Skarels #define BICSR_BITS \ 12134293Skarels "\20\20HES\17SES\16INIT\15BROKE\14STS\13NRST\11UWP\10HEIE\7SEIE" 12234293Skarels 12334293Skarels /* bits in bi_ber */ 12434293Skarels #define BIBER_MBZ 0x8000fff0 12534293Skarels #define BIBER_NMR 0x40000000 /* no ack to multi-responder command */ 12634293Skarels #define BIBER_MTCE 0x20000000 /* master transmit check error */ 12734293Skarels #define BIBER_CTE 0x10000000 /* control transmit error */ 12834293Skarels #define BIBER_MPE 0x08000000 /* master parity error */ 12934293Skarels #define BIBER_ISE 0x04000000 /* interlock sequence error */ 13034293Skarels #define BIBER_TDF 0x02000000 /* transmitter during fault */ 13134293Skarels #define BIBER_IVE 0x01000000 /* ident vector error */ 13234293Skarels #define BIBER_CPE 0x00800000 /* command parity error */ 13334293Skarels #define BIBER_SPE 0x00400000 /* slave parity error */ 13434293Skarels #define BIBER_RDS 0x00200000 /* read data substitute */ 13534293Skarels #define BIBER_RTO 0x00100000 /* retry timeout */ 13634293Skarels #define BIBER_STO 0x00080000 /* stall timeout */ 13734293Skarels #define BIBER_BTO 0x00040000 /* bus timeout */ 13834293Skarels #define BIBER_NEX 0x00020000 /* nonexistent address */ 13934293Skarels #define BIBER_ICE 0x00010000 /* illegal confirmation error */ 14034293Skarels #define BIBER_UPEN 0x00000008 /* user parity enable */ 14134293Skarels #define BIBER_IPE 0x00000004 /* ID parity error */ 14234293Skarels #define BIBER_CRD 0x00000002 /* corrected read data */ 14334293Skarels #define BIBER_NPE 0x00000001 /* null bus parity error */ 14434293Skarels #define BIBER_HARD 0x4fff0000 14534293Skarels 14634293Skarels #define BIBER_BITS \ 14734293Skarels "\20\37NMR\36MTCE\35CTE\34MPE\33ISE\32TDF\31IVE\30CPE\ 14834293Skarels \27SPE\26RDS\25RTO\24STO\23BTO\22NEX\21ICE\4UPEN\3IPE\2CRD\1NPE" 14934293Skarels 15034293Skarels /* bits in bi_eintrcsr */ 15134293Skarels #define BIEIC_INTRAB 0x01000000 /* interrupt abort */ 15234293Skarels #define BIEIC_INTRC 0x00800000 /* interrupt complete */ 15334293Skarels #define BIEIC_INTRSENT 0x00200000 /* interrupt command sent */ 15434293Skarels #define BIEIC_INTRFORCE 0x00100000 /* interrupt force */ 15534293Skarels #define BIEIC_LEVELMASK 0x000f0000 /* mask for interrupt levels */ 15634293Skarels #define BIEIC_IPL17 0x00080000 /* ipl 0x17 */ 15734293Skarels #define BIEIC_IPL16 0x00040000 /* ipl 0x16 */ 15834293Skarels #define BIEIC_IPL15 0x00020000 /* ipl 0x15 */ 15934293Skarels #define BIEIC_IPL14 0x00010000 /* ipl 0x14 */ 16034293Skarels #define BIEIC_VECMASK 0x00003ffc /* vector mask for error intr */ 16134293Skarels 16234293Skarels /* bits in bi_intrdes */ 16334293Skarels #define BIDEST_MASK 0x0000ffff /* one bit per node to be intr'ed */ 16434293Skarels 16534293Skarels /* bits in bi_ipintrmsk */ 16634293Skarels #define BIIPINTR_MASK 0xffff0000 /* one per node to allow to ipintr */ 16734293Skarels 16834293Skarels /* bits in bi_fipsdes */ 16934293Skarels #define BIFIPSD_MASK 0x0000ffff 17034293Skarels 17134293Skarels /* bits in bi_ipintrsrc */ 17234293Skarels #define BIIPSRC_MASK 0xffff0000 17334293Skarels 17434293Skarels /* sadr and eadr are simple addresses */ 17534293Skarels 17634293Skarels /* bits in bi_bcicsr */ 17734293Skarels #define BCI_BURSTEN 0x00020000 /* burst mode enable */ 17834293Skarels #define BCI_IPSTOP_FRC 0x00010000 /* ipintr/stop force */ 17934293Skarels #define BCI_MCASTEN 0x00008000 /* multicast space enable */ 18034293Skarels #define BCI_BCASTEN 0x00004000 /* broadcast enable */ 18134293Skarels #define BCI_STOPEN 0x00002000 /* stop enable */ 18234293Skarels #define BCI_RSRVDEN 0x00001000 /* reserved enable */ 18334293Skarels #define BCI_IDENTEN 0x00000800 /* ident enable */ 18434293Skarels #define BCI_INVALEN 0x00000400 /* inval enable */ 18534293Skarels #define BCI_WINVEN 0x00000200 /* write invalidate enable */ 18634293Skarels #define BCI_UINTEN 0x00000100 /* user interface csr space enable */ 18734293Skarels #define BCI_BIICEN 0x00000080 /* BIIC csr space enable */ 18834293Skarels #define BCI_INTEN 0x00000040 /* interrupt enable */ 18934293Skarels #define BCI_IPINTEN 0x00000020 /* ipintr enable */ 19034293Skarels #define BCI_PIPEEN 0x00000010 /* pipeline NXT enable */ 19134293Skarels #define BCI_RTOEVEN 0x00000008 /* read timeout EV enable */ 19234293Skarels 19334293Skarels #define BCI_BITS \ 19434293Skarels "\20\22BURSTEN\21IPSTOP_FRC\20MCASTEN\ 19534293Skarels \17BCASTEN\16STOPEN\15RSRVDEN\14IDENTEN\13INVALEN\12WINVEN\11UINTEN\ 19634293Skarels \10BIICEN\7INTEN\6IPINTEN\5PIPEEN\4RTOEVEN" 19734293Skarels 19834293Skarels /* bits in bi_wstat */ 19934293Skarels #define BIW_GPR3 0x80000000 /* gpr 3 was written */ 20034293Skarels #define BIW_GPR2 0x40000000 /* gpr 2 was written */ 20134293Skarels #define BIW_GPR1 0x20000000 /* gpr 1 was written */ 20234293Skarels #define BIW_GPR0 0x10000000 /* gpr 0 was written */ 20334293Skarels 20434293Skarels /* bits in force-bit ipintr/stop command register 8/ 20534293Skarels #define BIFIPSC_CMDMASK 0x0000f000 /* command */ 20634293Skarels #define BIFIPSC_MIDEN 0x00000800 /* master ID enable */ 20734293Skarels 20834293Skarels /* bits in bi_uintcsr */ 20934293Skarels #define BIUI_INTAB 0xf0000000 /* interrupt abort level */ 21034293Skarels #define BIUI_INTC 0x0f000000 /* interrupt complete bits */ 21134293Skarels #define BIUI_SENT 0x00f00000 /* interrupt sent bits */ 21234293Skarels #define BIUI_FORCE 0x000f0000 /* force interrupt level */ 21334293Skarels #define BIUI_EVECEN 0x00008000 /* external vector enable */ 21434293Skarels #define BIUI_VEC 0x00003ffc /* interrupt vector */ 21534293Skarels 21634293Skarels /* tell if a bi device is a slave (hence has SOSR) */ 21734293Skarels #define BIDT_ISSLAVE(x) (((x) & 0x7f00) == 0) 21834293Skarels 21934293Skarels /* bits in bi_sosr */ 22034293Skarels #define BISOSR_MEMSIZE 0x1ffc0000 /* memory size */ 22134293Skarels #define BISOSR_BROKE 0x00001000 /* broke */ 22234293Skarels 22334293Skarels /* bits in bi_rxcd */ 22434293Skarels #define BIRXCD_BUSY2 0x80000000 /* busy 2 */ 22534293Skarels #define BIRXCD_NODE2 0x0f000000 /* node id 2 */ 22634293Skarels #define BIRXCD_CHAR2 0x00ff0000 /* character 2 */ 22734293Skarels #define BIRXCD_BUSY1 0x00008000 /* busy 1 */ 22834293Skarels #define BIRXCD_NODE1 0x00000f00 /* node id 1 */ 22934293Skarels #define BIRXCD_CHAR1 0x000000ff /* character 1 */ 230