| 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,12 – 1992/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,32 – 1992/0528/sys/src/9/pc/devvga.c:26,34 | ||
| 1992/0527 | Qvgamonitor= 1, Qvgasize= 2, Qvgatype= 3, | |
| 1992/0528 | Qvgaport= 4, Qvgaiport= 5, Nvga= 5, | |
| 1992/0527 | }; Dirtab vgadir[]={ | |
| 1992/0527/sys/src/9/pc/devvga.c:33,39 – 1992/0528/sys/src/9/pc/devvga.c:35,42 | ||
| 1992/0527 | "vgamonitor", {Qvgamonitor}, 0, 0666, "vgatype", {Qvgatype}, 0, 0666, "vgasize", {Qvgasize}, 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,99 – 1992/0528/sys/src/9/pc/devvga.c:96,102 | ||
| 1992/0527 | case Qvgamonitor: case Qvgatype: case Qvgasize: | |
| 1992/0528 | case Qvgaport: | |
| 1992/0527 | break; } | |
| 1992/0527/sys/src/9/pc/devvga.c:115,120 – 1992/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,151 – 1992/0528/sys/src/9/pc/devvga.c:132,193 | ||
| 1992/0527 | case Qvgasize: sprint(obuf, "%dx%d%x%d %s", screeninfo.maxx, screeninfo.maxy, | |
| 1992/0528 | (screeninfo.packed == 0) ? 256 : 16, (screeninfo.interlaced != 0) ? "interlaced" : "non-interlaced"); | |
| 1992/0527 | return readstr(offset, buf, n, obuf); | |
| 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 | |
| 1992/0528 | vgawrite(Chan *c, void *buf, long n, ulong offset) | |
| 1992/0527 | { | |
| 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: | |
| 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 | } } | |