xref: /csrg-svn/sys/vax/stand/autoconf.c (revision 29291)
123218Smckusick /*
2*29291Smckusick  * Copyright (c) 1982, 1986 Regents of the University of California.
323218Smckusick  * All rights reserved.  The Berkeley software License Agreement
423218Smckusick  * specifies the terms and conditions for redistribution.
523218Smckusick  *
6*29291Smckusick  *	@(#)autoconf.c	7.1 (Berkeley) 06/05/86
723218Smckusick  */
83264Swnj 
99803Ssam #include "../machine/pte.h"
109803Ssam 
113264Swnj #include "../h/param.h"
129186Ssam 
139186Ssam #include "../vax/cpu.h"
149186Ssam #include "../vax/nexus.h"
159186Ssam #include "../vaxuba/ubareg.h"
169186Ssam #include "../vaxmba/mbareg.h"
179186Ssam #include "../vax/mtpr.h"
189186Ssam 
193264Swnj #include "savax.h"
203264Swnj 
213264Swnj #define	UTR(i)	((struct uba_regs *)(NEX780+(i)))
223264Swnj #define	UMA(i)	((caddr_t)UMEM780(i))
233264Swnj #define	MTR(i)	((struct mba_regs *)(NEX780+(i)))
243264Swnj 
253264Swnj struct	uba_regs *ubaddr780[] = { UTR(3), UTR(4), UTR(5), UTR(6) };
263264Swnj caddr_t	umaddr780[] = { UMA(0), UMA(1), UMA(2), UMA(3) };
273264Swnj struct	mba_regs *mbaddr780[] = { MTR(8), MTR(9), MTR(10), MTR(11) };
283264Swnj 
293264Swnj #undef	UTR
303264Swnj #undef	UMA
313264Swnj #undef	MTR
323264Swnj 
333264Swnj #define	UTR(i)	((struct uba_regs *)(NEX750+(i)))
343264Swnj #define	UMA(i)	((caddr_t)UMEM750(i))
353264Swnj #define	MTR(i)	((struct mba_regs *)(NEX750+(i)))
363264Swnj 
373264Swnj struct	uba_regs *ubaddr750[] = { UTR(8), UTR(9) };
383264Swnj caddr_t	umaddr750[] = { UMA(0), UMA(1) };
393341Swnj struct	mba_regs *mbaddr750[] = { MTR(4), MTR(5), MTR(6), MTR(7) };
403264Swnj 
413264Swnj #undef	UTR
423264Swnj #undef	UMA
433264Swnj #undef	MTR
443264Swnj 
457444Sroot #define	UTR(i)	((struct uba_regs *)(NEX730+(i)))
467444Sroot #define	UMA	((caddr_t)UMEM730)
473341Swnj 
487444Sroot struct	uba_regs *ubaddr730[] = { UTR(3) };
497444Sroot caddr_t	umaddr730[] = { UMA };
503341Swnj 
513341Swnj #undef	UTR
523341Swnj #undef	UMA
533341Swnj 
543264Swnj configure()
553264Swnj {
563264Swnj 	union cpusid cpusid;
573348Swnj 	int nmba, nuba, i;
583264Swnj 
593264Swnj 	cpusid.cpusid = mfpr(SID);
603264Swnj 	cpu = cpusid.cpuany.cp_type;
613264Swnj 	switch (cpu) {
623264Swnj 
6324151Sbloom 	case VAX_8600:
643264Swnj 	case VAX_780:
653264Swnj 		mbaddr = mbaddr780;
663264Swnj 		ubaddr = ubaddr780;
673264Swnj 		umaddr = umaddr780;
683348Swnj 		nmba = sizeof (mbaddr780) / sizeof (mbaddr780[0]);
693348Swnj 		nuba = sizeof (ubaddr780) / sizeof (ubaddr780[0]);
703264Swnj 		break;
713264Swnj 
723264Swnj 	case VAX_750:
733264Swnj 		mbaddr = mbaddr750;
743264Swnj 		ubaddr = ubaddr750;
753264Swnj 		umaddr = umaddr750;
763348Swnj 		nmba = sizeof (mbaddr750) / sizeof (mbaddr750[0]);
773348Swnj 		nuba = 0;
783264Swnj 		break;
793341Swnj 
807444Sroot 	case VAX_730:
817444Sroot 		ubaddr = ubaddr730;
827444Sroot 		umaddr = umaddr730;
833348Swnj 		nmba = nuba = 0;
843341Swnj 		break;
853264Swnj 	}
863348Swnj 	/*
873348Swnj 	 * Forward into the past...
883348Swnj 	 */
897444Sroot /*
903348Swnj 	for (i = 0; i < nmba; i++)
913348Swnj 		if (!badloc(mbaddr[i]))
923348Swnj 			mbaddr[i]->mba_cr = MBCR_INIT;
937444Sroot */
943348Swnj 	for (i = 0; i < nuba; i++)
953348Swnj 		if (!badloc(ubaddr[i]))
963348Swnj 			ubaddr[i]->uba_cr = UBACR_ADINIT;
9724151Sbloom 	if ((cpu != VAX_780) && (cpu != VAX_8600))
987444Sroot 		mtpr(IUR, 0);
993348Swnj 	/* give unibus devices a chance to recover... */
1003348Swnj 	if (nuba > 0)
1013348Swnj 		DELAY(2000000);
1023264Swnj }
103