~kris/9p

9hist

4fa8390216a31b5fd8cfcaf1c51fb62ef5a35c5e — David du Colombier 33 years ago 7958c62
Plan 9 from Bell Labs 1993-01-06
4 files changed, 43 insertions(+), 26 deletions(-)

M pc/devvga.c
M power/l.s
M power/main.c
M power/trap.c
M pc/devvga.c => pc/devvga.c +23 -6
@@ 103,6 103,7 @@ VGAmode mode13 =
static	Rectangle mbb;
static	Rectangle NULLMBB = {10000, 10000, -10000, -10000};
static	void nopage(int), tsengpage(int), tridentpage(int), parapage(int);
static	void atipage(int);
static	void vgaupdate(void);

/*


@@ 124,9 125,9 @@ enum
	Generic,
};

Vgacard vgacards[] =
Vgacard vgachips[] =
{
[Ati]		{ "ati", nopage, },
[Ati]		{ "ati", atipage, },
[Pvga1a]	{ "pvga1a", parapage, },
[Trident]	{ "trident", tridentpage, },
[Tseng]		{ "tseng", tsengpage, },


@@ 145,7 146,7 @@ enum
	Qvgasize=	1,
	Qvgatype=	2,
	Qvgaport=	3,
	Nvga=		4,
	Nvga=		3,
};
Dirtab vgadir[]={
	"vgasize",	{Qvgasize},	0,		0666,


@@ 156,7 157,7 @@ Dirtab vgadir[]={
void
vgareset(void)
{
	vgacard = &vgacards[Generic];
	vgacard = &vgachips[Generic];
}

void


@@ 253,7 254,7 @@ vgawrite(Chan *c, void *buf, long n, ulong offset)
		cbuf[n] = 0;
		if(cp = strchr(cbuf, '\n'))
			*cp = 0;
		for(vp = vgacards; vp->name; vp++)
		for(vp = vgachips; vp->name; vp++)
			if(strcmp(cbuf, vp->name) == 0){
				vgacard = vp;
				return n;


@@ 629,10 630,26 @@ nopage(int page)
{
	USED(page);
}
/*
 * The following code is unproven: we haven't got the
 * ATI stuff to work yet.
 */
static void
atipage(int page)
{
	/* the ext register is in the ATI ROM at a fixed address */
	ushort extreg = *((ushort *)0x800C0010);
	uchar v;

	outb(extreg, 0xb2);
	v = (inb(extreg+1) & 0xe1) | (page<<1);
	outb(extreg, 0xb2);
	outb(extreg+1, v);
}
static void
tridentpage(int page)
{
	srout(0x0e, page^0x02);	/* yes, the page bit needs to be toggled! */
	srout(0x0e, page^0x02);
}
static void
tsengpage(int page)

M power/l.s => power/l.s +7 -7
@@ 493,19 493,18 @@ TEXT	clrfpintr(SB), $0
	OR	$CU1, R3
	MOVW	R3, M(STATUS)
	WAIT

	MOVW	FCR31, R1
	MOVW	R1, R2
	AND	$~(0x3F<<12), R2
	MOVW	R2, FCR31

	MOVW	FCR31, R1		/* Read it to stall the fpu */
	WAIT
	MOVW	R0, FCR31
	WAIT
	AND	$~CU1, R3
	MOVW	R3, M(STATUS)
	RET

TEXT	savefpregs(SB), $0
	MOVW	M(STATUS), R3
	MOVW	FCR31, R2
	MOVW	FCR31, R2		/* Read stalls the fpu until inst. complete. */
	WAIT

	MOVD	F0, 0x00(R1)
	MOVD	F2, 0x08(R1)


@@ 523,6 522,7 @@ TEXT	savefpregs(SB), $0
	MOVD	F26, 0x68(R1)
	MOVD	F28, 0x70(R1)
	MOVD	F30, 0x78(R1)
	WAIT

	MOVW	R2, 0x80(R1)
	AND	$~CU1, R3

M power/main.c => power/main.c +1 -1
@@ 537,7 537,7 @@ confinit(void)
	/*
	 *  set minimal default values
	 */
	conf.nmach = 1;
	conf.nmach = 2;
	conf.nproc = 100;
	conf.nswap = 262144;
	conf.nimage = 200;

M power/trap.c => power/trap.c +12 -12
@@ 76,18 76,18 @@ m->ur = ur;

	ecode = (ur->cause>>2)&0xf;
	user = ur->status&KUP;
	if(user)
		u->dbgreg = ur;

	fpchk = 0;
	if(u && u->p->fpstate == FPactive) {
		if((ur->status&CU1) == 0)		/* Paranoid */
			panic("FPactive but no CU1");
		u->p->fpstate = FPinactive;
		ur->status &= ~CU1;
		savefpregs(&u->fpsave);
		fptrap(ur);
		fpchk = 1;
	if(user) {
		u->dbgreg = ur;
		if(u->p->fpstate == FPactive) {
			if((ur->status&CU1) == 0)		/* Paranoid */
				panic("FPactive but no CU1");
			u->p->fpstate = FPinactive;
			ur->status &= ~CU1;
			savefpregs(&u->fpsave);
			fptrap(ur);
			fpchk = 1;
		}
	}

	switch(ecode){


@@ 115,7 115,7 @@ m->ur = ur;

	case CCPU:
		cop = (ur->cause>>28)&3;
		if(user && u && cop == 1) {
		if(user && cop == 1) {
			if(u->p->fpstate == FPinit) {
				u->p->fpstate = FPinactive;
				fcr31 = u->fpsave.fpstatus;