plan 9 kernel history: overview | file list | diff list

1992/0528/pc/devvga.c (diff list | history)

1992/0527/sys/src/9/pc/devvga.c:7,121992/0528/sys/src/9/pc/devvga.c:7,13 (short | long | prev | next)
1992/0527    
#include	"../port/error.h" 
 
#include	"devtab.h" 
1992/0528    
#include	"vga.h" 
1992/0527    
 
/* 
 *  Driver for various VGA cards 
1992/0527/sys/src/9/pc/devvga.c:25,321992/0528/sys/src/9/pc/devvga.c:26,34
1992/0527    
	Qvgamonitor=	1, 
	Qvgasize=	2, 
	Qvgatype=	3, 
	Qvgaportio=	4, 
	Nvga=		4, 
1992/0528    
	Qvgaport=	4, 
	Qvgaiport=	5, 
	Nvga=		5, 
1992/0527    
}; 
 
Dirtab vgadir[]={ 
1992/0527/sys/src/9/pc/devvga.c:33,391992/0528/sys/src/9/pc/devvga.c:35,42
1992/0527    
	"vgamonitor",	{Qvgamonitor},	0,		0666, 
	"vgatype",	{Qvgatype},	0,		0666, 
	"vgasize",	{Qvgasize},	0,		0666, 
	"vgaportio",	{Qvgaportio},	0,		0666, 
1992/0528    
	"vgaport",	{Qvgaport},	0,		0666, 
	"vgaiport",	{Qvgaiport},	0,		0666, 
1992/0527    
}; 
 
/* a routine from ../port/devcons.c */ 
1992/0527/sys/src/9/pc/devvga.c:93,991992/0528/sys/src/9/pc/devvga.c:96,102
1992/0527    
	case Qvgamonitor: 
	case Qvgatype: 
	case Qvgasize: 
	case Qvgaportio: 
1992/0528    
	case Qvgaport: 
1992/0527    
		break; 
	} 
 
1992/0527/sys/src/9/pc/devvga.c:115,1201992/0528/sys/src/9/pc/devvga.c:118,127
1992/0527    
vgaread(Chan *c, void *buf, long n, ulong offset) 
{ 
	char obuf[60]; 
1992/0528    
	int port, i; 
	uchar *cp = buf; 
	void *outfunc(int, int); 
 
1992/0527    
	switch(c->qid.path&~CHDIR){ 
	case Qdir: 
		return devdirread(c, buf, n, vgadir, Nvga, devgen); 
1992/0527/sys/src/9/pc/devvga.c:125,1511992/0528/sys/src/9/pc/devvga.c:132,193
1992/0527    
	case Qvgasize: 
		sprint(obuf, "%dx%d%x%d %s", 
			screeninfo.maxx, screeninfo.maxy, 
			screeninfo.packed ? 16 : 256, 
			screeninfo.interlaced ? "interlaced" : "non-interlaced"); 
1992/0528    
			(screeninfo.packed == 0) ? 256 : 16, 
			(screeninfo.interlaced != 0) ? "interlaced" : "non-interlaced"); 
1992/0527    
		return readstr(offset, buf, n, obuf); 
	case Qvgaportio: 
		return 0; 
1992/0528    
	case Qvgaport: 
		if (offset + n >= 0x8000) 
			error(Ebadarg); 
		for (port=offset; port<offset+n; port++) 
			*cp++ = inb(port); 
		return n; 
	case Qvgaiport: 
		error(Eio); 
1992/0527    
	} 
} 
 
long 
vgawrite(Chan *c, void *va, long n, ulong offset) 
1992/0528    
vgawrite(Chan *c, void *buf, long n, ulong offset) 
1992/0527    
{ 
	if(offset != 0) 
		error(Ebadarg); 
1992/0528    
	uchar *cp = buf; 
	void (*outfunc)(int, int); 
	int port, i; 
 
1992/0527    
	switch(c->qid.path&~CHDIR){ 
	case Qdir: 
		error(Eperm); 
	case Qvgamonitor: 
1992/0528    
		if(offset != 0) 
			error(Ebadarg); 
		error(Eperm); 
1992/0527    
	case Qvgatype: 
1992/0528    
		if(offset != 0) 
			error(Ebadarg); 
		error(Eperm); 
1992/0527    
	case Qvgasize: 
	case Qvgaportio: 
		return 0; 
1992/0528    
		if(offset != 0) 
			error(Ebadarg); 
		error(Eperm); 
	case Qvgaport: 
		if (offset + n >= 0x8000) 
			error(Ebadarg); 
		for (port=offset; port<offset+n; port++) 
			outb(port, *cp++); 
		return n; 
	case Qvgaiport: 
		port = offset / 256; 
		switch (port) { 
		case EMISCW:	outfunc = genout;	break; 
		case SRX:	outfunc = srout;	break; 
		case GRX:	outfunc = grout;	break; 
		case ARW:	outfunc = arout;	break; 
		case CRX:	outfunc = crout;	break; 
		default: 
			error(Ebadarg); 
		} 
		for (i = offset%256; i < (offset%256) + n; i++) 
			outfunc(i, *cp++); 
		return n; 
1992/0527    
	} 
} 
 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)