xref: /csrg-svn/sys/vax/stand/autoconf.c (revision 3348)
1*3348Swnj /*	autoconf.c	4.3	81/03/22	*/
23264Swnj 
33264Swnj #include "../h/param.h"
43264Swnj #include "../h/cpu.h"
53264Swnj #include "../h/nexus.h"
63264Swnj #include "../h/pte.h"
73264Swnj #include "../h/ubareg.h"
83264Swnj #include "../h/mbareg.h"
93264Swnj #include "../h/mtpr.h"
103264Swnj #include "savax.h"
113264Swnj 
123264Swnj #define	UTR(i)	((struct uba_regs *)(NEX780+(i)))
133264Swnj #define	UMA(i)	((caddr_t)UMEM780(i))
143264Swnj #define	MTR(i)	((struct mba_regs *)(NEX780+(i)))
153264Swnj 
163264Swnj struct	uba_regs *ubaddr780[] = { UTR(3), UTR(4), UTR(5), UTR(6) };
173264Swnj caddr_t	umaddr780[] = { UMA(0), UMA(1), UMA(2), UMA(3) };
183264Swnj struct	mba_regs *mbaddr780[] = { MTR(8), MTR(9), MTR(10), MTR(11) };
193264Swnj 
203264Swnj #undef	UTR
213264Swnj #undef	UMA
223264Swnj #undef	MTR
233264Swnj 
243264Swnj #define	UTR(i)	((struct uba_regs *)(NEX750+(i)))
253264Swnj #define	UMA(i)	((caddr_t)UMEM750(i))
263264Swnj #define	MTR(i)	((struct mba_regs *)(NEX750+(i)))
273264Swnj 
283264Swnj struct	uba_regs *ubaddr750[] = { UTR(8), UTR(9) };
293264Swnj caddr_t	umaddr750[] = { UMA(0), UMA(1) };
303341Swnj struct	mba_regs *mbaddr750[] = { MTR(4), MTR(5), MTR(6), MTR(7) };
313264Swnj 
323264Swnj #undef	UTR
333264Swnj #undef	UMA
343264Swnj #undef	MTR
353264Swnj 
363341Swnj #define	UTR(i)	((struct uba_regs *)(NEX730+(i)))
373341Swnj #define	UMA	((caddr_t)UMEM730)
383341Swnj 
393341Swnj struct	uba_regs *ubaddr730[] = { UTR(3) };
403341Swnj caddr_t	umaddr730[] = { UMA };
413341Swnj 
423341Swnj #undef	UTR
433341Swnj #undef	UMA
443341Swnj 
453264Swnj configure()
463264Swnj {
473264Swnj 	union cpusid cpusid;
48*3348Swnj 	int nmba, nuba, i;
493264Swnj 
503264Swnj 	cpusid.cpusid = mfpr(SID);
513264Swnj 	cpu = cpusid.cpuany.cp_type;
523264Swnj 	switch (cpu) {
533264Swnj 
543264Swnj 	case VAX_780:
553264Swnj 		mbaddr = mbaddr780;
563264Swnj 		ubaddr = ubaddr780;
573264Swnj 		umaddr = umaddr780;
58*3348Swnj 		nmba = sizeof (mbaddr780) / sizeof (mbaddr780[0]);
59*3348Swnj 		nuba = sizeof (ubaddr780) / sizeof (ubaddr780[0]);
603264Swnj 		break;
613264Swnj 
623264Swnj 	case VAX_750:
633264Swnj 		mbaddr = mbaddr750;
643264Swnj 		ubaddr = ubaddr750;
653264Swnj 		umaddr = umaddr750;
66*3348Swnj 		nmba = sizeof (mbaddr750) / sizeof (mbaddr750[0]);
67*3348Swnj 		nuba = 0;
683264Swnj 		break;
693341Swnj 
703341Swnj 	case VAX_730:
713341Swnj 		ubaddr = ubaddr730;
723341Swnj 		umaddr = umaddr730;
73*3348Swnj 		nmba = nuba = 0;
743341Swnj 		break;
753264Swnj 	}
76*3348Swnj 	/*
77*3348Swnj 	 * Forward into the past...
78*3348Swnj 	 */
79*3348Swnj 	for (i = 0; i < nmba; i++)
80*3348Swnj 		if (!badloc(mbaddr[i]))
81*3348Swnj 			mbaddr[i]->mba_cr = MBCR_INIT;
82*3348Swnj 	for (i = 0; i < nuba; i++)
83*3348Swnj 		if (!badloc(ubaddr[i]))
84*3348Swnj 			ubaddr[i]->uba_cr = UBACR_ADINIT;
85*3348Swnj 	/* give unibus devices a chance to recover... */
86*3348Swnj 	if (nuba > 0)
87*3348Swnj 		DELAY(2000000);
883264Swnj }
89