~kris/9p

9hist

03ab821f1a089cf669cbf9326e6eddcce893afc7 — David du Colombier 24 years ago ebc2f99
Plan 9 from Bell Labs 2001-10-15
M pc/devpccard.c => pc/devpccard.c +1 -0
@@ 40,6 40,7 @@ static variant_t variant[] = {
{	Ricoh_vid,	Ricoh_478_did,	"Ricoh 478 PCI/Cardbus bridge",	},
{	TI_vid,		TI_1450_did,		"TI PCI-1450 Cardbus Controller",	},
{	TI_vid,		TI_1251A_did,		"TI PCI-1251A Cardbus Controller",	},
{	TI_vid,		0xAC51,				"TI 0xAC51 Cardbus Controller", },
};

/* Cardbus registers */

M pc/devusb.c => pc/devusb.c +6 -13
@@ 1630,29 1630,22 @@ usbclose(Chan *c)
	if(c->qid.type == QTDIR || c->qid.path < Q3rd)
		return;
	qlock(&usbstate);
	if(waserror()){
		qunlock(&usbstate);
		nexterror();
	}
	d = usbdevice(c);
	s = QID(c->qid) - Qep0;
	if(s >= 0 && s < nelem(d->ep)){
		Endpt *e;
		if((e = d->ep[s]) == nil) {
			XPRINT("usbopen failed (endpoint)\n");
			error(Enodev);
		}
		e->isopen--;
		if (e->isopen == 0){
			eptdeactivate(e);
			unschedendpt(e);
		if(e = d->ep[s]) {
			if (e->isopen == 1){
				e->isopen = 0;
				eptdeactivate(e);
				unschedendpt(e);
			}
		}
	}
	if(QID(c->qid) == Qctl)
		d->busy = 0;
	if(c->flag & COPEN)
		freedev(d);
	poperror();
	qunlock(&usbstate);
}


M pc/devvga.c => pc/devvga.c +21 -8
@@ 151,6 151,7 @@ vgaread(Chan* c, void* a, long n, vlong off)
		len += snprint(p+len, READSTR-len, "blanktime %lud\n", blanktime);
		len += snprint(p+len, READSTR-len, "hwaccel %s\n", hwaccel ? "on" : "off");
		len += snprint(p+len, READSTR-len, "hwblank %s\n", hwblank ? "on" : "off");
		len += snprint(p+len, READSTR-len, "panning %s\n", panning ? "on" : "off");
		snprint(p+len, READSTR-len, "addr 0x%lux\n", scr->aperture);
		n = readstr(offset, a, n, p);
		poperror();


@@ 182,7 183,6 @@ vgactl(char* a)
	VGAscr *scr;
	extern VGAdev *vgadev[];
	extern VGAcur *vgacur[];
	Rectangle r;

	n = getfields(a, field, nelem(field), 1, " \t\n");
	if(n < 1)


@@ 286,13 286,8 @@ vgactl(char* a)
		if(x > scr->gscreen->r.max.x || y > scr->gscreen->r.max.y)
			error("physical screen bigger than virtual");

		r = Rect(0,0,x,y);
		if(!eqrect(r, scr->gscreen->r)){
			if(scr->cur == nil || scr->cur->doespanning == 0)
				error("virtual screen not supported");
		}

		physgscreenr = r;
		physgscreenr = Rect(0,0,x,y);
		scr->gscreen->clipr = physgscreenr;
		return;
	}
	else if(strcmp(field[0], "palettedepth") == 0){


@@ 344,6 339,24 @@ vgactl(char* a)
		blanktime = strtoul(field[1], 0, 0);
		return;
	}
	else if(strcmp(field[0], "panning") == 0){
		if(n < 2)
			error(Ebadarg);
		if(strcmp(field[1], "on") == 0){
			if(scr == nil || scr->cur == nil)
				error("set screen first");
			if(!scr->cur->doespanning)
				error("panning not supported");
			scr->gscreen->clipr = scr->gscreen->r;
			panning = 1;
		}
		else if(strcmp(field[1], "off") == 0){
			scr->gscreen->clipr = physgscreenr;
			panning = 0;
		}else
			error(Ebadarg);
		return;
	}
	else if(strcmp(field[0], "hwaccel") == 0){
		if(n < 2)
			error(Ebadarg);

M pc/ether79c970.c => pc/ether79c970.c +3 -0
@@ 501,6 501,9 @@ reset(Ether* ether)
	/*
	 * Allocate a controller structure and start to initialise it.
	 */
	if(ioalloc(ctlr->port, 0x20, 0, "ether79c970") < 0)
		return -1;

	ether->ctlr = ctlr;
	ether->port = ctlr->port;
	ether->irq = ctlr->pcidev->intl;

M pc/etherwavelan.c => pc/etherwavelan.c +26 -12
@@ 301,6 301,8 @@ struct Ctlr
	Wltv	keys;			// default keys
	int	xclear;			// exclude clear packets off/on

	int	ctlrno;

	Stats;
	WStats;
};


@@ 326,22 328,32 @@ w_cmd(Ctlr *ctlr, ushort cmd, ushort arg)
{
	int i, rc;

	for(i=0; i<WTmOut; i++)
		if((csr_ins(ctlr, WR_Cmd)&WCmdBusy) == 0)
			break;
	if(i==WTmOut){
		print("#l%d: issuing cmd %.4ux: %.4ux\n", ctlr->ctlrno, cmd, csr_ins(ctlr, WR_Cmd));
		return -1;
	}

	csr_outs(ctlr, WR_Parm0, arg);
	csr_outs(ctlr, WR_Cmd, cmd);
	for (i = 0; i<WTmOut; i++){
		rc = csr_ins(ctlr, WR_EvSts);
		if ( rc&WCmdEv ){
			rc = csr_ins(ctlr, WR_Sts);
			csr_ack(ctlr, WCmdEv);
			if ((rc&WCmdMsk) != (cmd&WCmdMsk))
				break;
			if (rc&WResSts)
				break;
			return 0;
		}

	for(i=0; i<WTmOut; i++)
		if(csr_ins(ctlr, WR_EvSts)&WCmdEv)
			break;
	if(i==WTmOut){
		print("#l%d: execing cmd %.4ux: %.4ux\n", ctlr->ctlrno, cmd, csr_ins(ctlr, WR_EvSts));
		return -1;
	}
	rc = csr_ins(ctlr, WR_Sts);
	csr_ack(ctlr, WCmdEv);

	return -1;
	if((rc&WCmdMsk) != (cmd&WCmdMsk) || (rc&WResSts)){
		print("#l%d: cmd %.4ux: status %.4ux\n", ctlr->ctlrno, cmd, rc);
		return -1;
	}
	return 0;
}

static int


@@ 1190,6 1202,7 @@ interrupt(Ureg* ,void* arg)
static char* wavenames[] = {
	"WaveLAN/IEEE",
	"TrueMobile 1150",
	"Instant Wireless ; Network PC CARD",
	nil,
};



@@ 1205,6 1218,7 @@ reset(Ether* ether)
		return -1;

	ilock(&ctlr->Lock);
	ctlr->ctlrno = ether->ctlrno;

	if (ether->port==0)
		ether->port=WDfltIOB;

M pc/screen.c => pc/screen.c +5 -8
@@ 13,8 13,6 @@
#include <cursor.h>
#include "screen.h"

#define round16(x) (((x)+15)&~15)

#define RGB2K(r,g,b)	((156763*(r)+307758*(g)+59769*(b))>>19)

Point ZP = {0, 0};


@@ 53,7 51,7 @@ screensize(int x, int y, int z, ulong chan)
	 * be given back if aperture is set.
	 */
	if(scr->aperture == 0){
		int width = (round16(x)*z)/BI2WD;
		int width = (x*z)/BI2WD;

		gscreendata.bdata = xalloc(width*BY2WD*y);
		if(gscreendata.bdata == 0)


@@ 69,13 67,11 @@ screensize(int x, int y, int z, ulong chan)
	if(gscreen)
		freememimage(gscreen);

	gscreen = allocmemimaged(Rect(0,0,round16(x),y), chan, &gscreendata);
	gscreen = allocmemimaged(Rect(0,0,x,y), chan, &gscreendata);
	vgaimageinit(chan);
	if(gscreen == nil)
		return -1;

	gscreen->r.max.x = x;	/* we used round16(x) to allocate */

	scr->palettedepth = 6;	/* default */
	scr->gscreendata = &gscreendata;
	scr->memdefont = getmemdefont();


@@ 131,7 127,7 @@ attachscreen(Rectangle* r, ulong* chan, int* d, int* width, int *softscreen)
	if(scr->gscreen == nil || scr->gscreendata == nil)
		return nil;

	*r = scr->gscreen->r;
	*r = scr->gscreen->clipr;
	*chan = scr->gscreen->chan;
	*d = scr->gscreen->depth;
	*width = scr->gscreen->width;


@@ 329,7 325,8 @@ setcursor(Cursor* curs)
}

int hwaccel = 1;
int hwblank = 1;
int hwblank = 0;	/* turned on by drivers that are known good */
int panning = 0;

int
hwdraw(Memdrawparam *par)

M pc/screen.h => pc/screen.h +2 -0
@@ 127,6 127,7 @@ extern void mousectl(char*[], int);
/* screen.c */
extern int		hwaccel;	/* use hw acceleration; default on */
extern int		hwblank;	/* use hw blanking; default on */
extern int		panning;	/* use virtual screen panning; default off */
extern void addvgaseg(char*, ulong, ulong);
extern uchar* attachscreen(Rectangle*, ulong*, int*, int*, int*);
extern void	flushmemscreen(Rectangle);


@@ 142,6 143,7 @@ extern void	blankscreen(int);
extern void	deletescreenimage(void);
extern int		drawhasclients(void);
extern ulong	blanktime;
extern void	setscreenimageclipr(Rectangle);

/* vga.c */
extern void	vgascreenwin(VGAscr*);

M pc/vgamach64xx.c => pc/vgamach64xx.c +2 -1
@@ 580,7 580,7 @@ mach64xxcurmove(VGAscr* scr, Point p)
	else
		dx = 64 / scr->gscreen->depth;

	if(screenpan(p, &physgscreenr, dx, 1)){
	if(panning && screenpan(p, &physgscreenr, dx, 1)){
		off = (physgscreenr.min.y*Dx(scr->gscreen->r)+physgscreenr.min.x)/dx;
		pitch = Dx(scr->gscreen->r)/8;
		iow32(scr, CrtcOffPitch, (pitch<<22)|off);


@@ 999,6 999,7 @@ mach64xxdrawinit(VGAscr *scr)
	case ('L'<<8)|'M':		/* 4C4D: Rage Mobility */
	case ('L'<<8)|'P':		/* 4C50: Rage 3D LTPro */
		scr->blank = mach64lcdblank;
		hwblank = 1;
		break;
	}
}

M pc/vganvidia.c => pc/vganvidia.c +1 -0
@@ 362,6 362,7 @@ nvidiadrawinit(VGAscr *scr)
	waitforidle(scr);

	scr->blank = nvidiablank;
	hwblank = 1;
	scr->fill = nvidiahwfill;
	scr->scroll = nvidiahwscroll;
}

M pc/vgas3.c => pc/vgas3.c +6 -7
@@ 12,8 12,6 @@
#include <cursor.h>
#include "screen.h"

#define	round16(x)	(((x)+15)&~15)

enum {
	PCIS3		= 0x5333,		/* PCI VID */



@@ 463,7 461,7 @@ hwscroll(VGAscr *scr, Rectangle r, Rectangle sr)
	d = scr->gscreen->depth;
	did = (d-8)/8;
	cmd = 0x00000020|(Bitbltop<<17)|(did<<2);
	stride = round16(Dx(scr->gscreen->r))*d/8;
	stride = Dx(scr->gscreen->r)*d/8;

	if(r.min.x <= sr.min.x){
		cmd |= 1<<25;


@@ 508,7 506,7 @@ hwfill(VGAscr *scr, Rectangle r, ulong sval)
	d = scr->gscreen->depth;
	did = (d-8)/8;
	cmd = 0x16000120|(Bitbltop<<17)|(did<<2);
	stride = round16(Dx(scr->gscreen->r))*d/8;
	stride = Dx(scr->gscreen->r)*d/8;
	mmio = scr->mmio;
	waitforlinearfifo(scr);
	waitforfifo(scr, 8);


@@ 533,7 531,7 @@ enum {
};

static void
s3blank(int blank)
s3blank(VGAscr*, int blank)
{
	uchar x;



@@ 544,7 542,6 @@ s3blank(int blank)
	vgaxo(Seqx, CursorSyncCtl, x);
}


static void
s3drawinit(VGAscr *scr)
{


@@ 561,6 558,9 @@ s3drawinit(VGAscr *scr)
	 * know that size, I'm not turning them on.  See waitforlinearfifo
	 * above.
	 */
	scr->blank = s3blank;
	/* hwblank = 1;		not known to work well */

	switch(id){
	case VIRGE:
	case VIRGEVX:


@@ 568,7 568,6 @@ s3drawinit(VGAscr *scr)
		scr->mmio = (ulong*)(scr->aperture+0x1000000);
		scr->fill = hwfill;
		scr->scroll = hwscroll;
		/* scr->blank = hwblank; */
		break;
	case SAVAGEIXMV:
		scr->mmio = (ulong*)(scr->aperture+0x1000000);

M pc/vgasavage.c => pc/vgasavage.c +3 -4
@@ 12,7 12,6 @@
#include <cursor.h>
#include "screen.h"

#define	round16(x)	(((x)+15)&~15)
enum {
	PCIS3		= 0x5333,		/* PCI VID */



@@ 363,7 362,6 @@ savagewaitidle(VGAscr *scr)

	switch(scr->id){
	case SAVAGE4:
	case SUPERSAVAGEIXC16:
		/* wait for engine idle and FIFO empty */
		statw = (ulong*)((uchar*)scr->mmio+AltStatus0);
		mask = CBEMask | Ge2Idle;


@@ 373,6 371,7 @@ savagewaitidle(VGAscr *scr)
	/* case SAVAGEMX: ? */
	/* case SAVAGEIXMV: ? */
	/* case SAVAGEIX: ? */
	case SUPERSAVAGEIXC16:
	case SAVAGEIXMV:
		/* wait for engine idle and FIFO empty */
		statw = (ulong*)((uchar*)scr->mmio+XStatus0);


@@ 457,7 456,6 @@ savagescroll(VGAscr *scr, Rectangle r, Rectangle sr)
	return 1;
}


static void
savageblank(VGAscr*, int blank)
{


@@ 521,7 519,7 @@ savageinit(VGAscr *scr)

	/* set bitmap descriptors */
	bd = (scr->gscreen->depth<<DepthShift) |
		(round16(Dx(scr->gscreen->r))<<StrideShift) | BlockWriteDis
		(Dx(scr->gscreen->r)<<StrideShift) | BlockWriteDis
		| BDS64;

	*(ulong*)(mmio+GBD1) = 0;


@@ 547,5 545,6 @@ savageinit(VGAscr *scr)

	scr->fill = savagefill;
	scr->scroll = savagescroll;
	scr->blank = savageblank;
}


M pc/vgat2r4.c => pc/vgat2r4.c +1 -0
@@ 562,6 562,7 @@ t2r4drawinit(VGAscr *scr)
	scr->fill = t2r4hwfill;
	scr->scroll = t2r4hwscroll;
	scr->blank = t2r4blank;
	hwblank = 1;
}

VGAdev vgat2r4dev = {

M port/devdraw.c => port/devdraw.c +1 -1
@@ 860,7 860,7 @@ initscreenimage(void)
	}

	screenimage->width = width;
	screenimage->clipr = screenimage->r;
	screenimage->clipr = r;
	return 1;
}


M port/devmouse.c => port/devmouse.c +8 -8
@@ 501,15 501,15 @@ mousetrack(int dx, int dy, int b, int msec)
		dy = scale(dy);
	}
	x = mouse.xy.x + dx;
	if(x < gscreen->r.min.x)
		x = gscreen->r.min.x;
	if(x >= gscreen->r.max.x)
		x = gscreen->r.max.x;
	if(x < gscreen->clipr.min.x)
		x = gscreen->clipr.min.x;
	if(x >= gscreen->clipr.max.x)
		x = gscreen->clipr.max.x;
	y = mouse.xy.y + dy;
	if(y < gscreen->r.min.y)
		y = gscreen->r.min.y;
	if(y >= gscreen->r.max.y)
		y = gscreen->r.max.y;
	if(y < gscreen->clipr.min.y)
		y = gscreen->clipr.min.y;
	if(y >= gscreen->clipr.max.y)
		y = gscreen->clipr.max.y;

	lastb = mouse.buttons;
	mouse.xy = Pt(x, y);