| plan 9 kernel history: overview | file list | diff list |
alphapc/devvga.c (diff list | history)
| 1999/0415/sys/src/9/alphapc/devvga.c:103,109 – 1999/0512/sys/src/9/alphapc/devvga.c:103,114 (short | long) | ||
| 1999/0415 | else s = "off"; len += snprint(p+len, READSTR-len, "hwgc: %s\n", s); | |
| 1999/0512 | if(scr->pciaddr) snprint(p+len, READSTR-len, "addr: 0x%lux\n", scr->pciaddr); else snprint(p+len, READSTR-len, "addr: 0x%lux\n", scr->aperture); | |
| 1999/0415 | n = readstr(offset, a, n, p); poperror(); | |
| 1999/0512/sys/src/9/alphapc/devvga.c:157,163 – 2000/0308/sys/src/9/alphapc/devvga.c:157,163 (short | long) | ||
| 1999/0415 | extern VGAdev *vgadev[]; extern VGAcur *vgacur[]; | |
| 2000/0308 | n = getfields(a, field, 4, 1, " "); | |
| 1999/0415 | if(n < 2) error(Ebadarg); | |
| 2000/0308/sys/src/9/alphapc/devvga.c:93,101 – 2000/0330/sys/src/9/alphapc/devvga.c:93,101 (short | long) | ||
| 1999/0415 | s = scr->dev->name; else s = "cga"; | |
| 2000/0330 | len = snprint(p, READSTR, "type %s\n", s); | |
| 1999/0415 | if(scr->gscreen) | |
| 2000/0330 | len += snprint(p+len, READSTR-len, "size %dx%dx%d\n", | |
| 1999/0415 | scr->gscreen->r.max.x, scr->gscreen->r.max.y, 1<<scr->gscreen->ldepth); if(scr->cur) | |
| 2000/0308/sys/src/9/alphapc/devvga.c:102,113 – 2000/0330/sys/src/9/alphapc/devvga.c:102,113 | ||
| 1999/0415 | s = scr->cur->name; else s = "off"; | |
| 2000/0330 | len += snprint(p+len, READSTR-len, "hwgc %s\n", s); | |
| 1999/0512 | if(scr->pciaddr) | |
| 2000/0330 | snprint(p+len, READSTR-len, "addr 0x%lux\n", | |
| 1999/0512 | scr->pciaddr); else | |
| 2000/0330 | snprint(p+len, READSTR-len, "addr 0x%lux\n", | |
| 1999/0512 | scr->aperture); | |
| 1999/0415 | n = readstr(offset, a, n, p); | |
| 2000/0330/sys/src/9/alphapc/devvga.c:14,37 – 2000/0401/sys/src/9/alphapc/devvga.c:14,40 (short | long) | ||
| 1999/0415 | #include <cursor.h> #include "screen.h" | |
| 2000/0401 | extern uchar *vgabios; | |
| 1999/0415 | enum { Qdir, | |
| 2000/0401 | Qvgabios, | |
| 1999/0415 | }; static Dirtab vgadir[] = { | |
| 2000/0401 | "vgabios", { Qvgabios, 0 }, 0x10000, 0440, | |
| 1999/0415 | }; static void vgareset(void) { | |
| 2000/0401 | /* reserve the 'standard' vga registers */ if(ioalloc(0x2b0, 0x2df-0x2b0+1, 0, "vga") < 0) panic("vga ports already allocated"); if(ioalloc(0x3c0, 0x3da-0x3c0+1, 0, "vga") < 0) panic("vga ports already allocated"); | |
| 1999/0415 | conf.monitor = 1; } | |
| 2000/0330/sys/src/9/alphapc/devvga.c:69,78 – 2000/0401/sys/src/9/alphapc/devvga.c:72,79 | ||
| 1999/0415 | static long vgaread(Chan* c, void* a, long n, vlong off) { | |
| 2000/0401 | int len; | |
| 1999/0415 | char *p, *s; | |
| 2000/0330/sys/src/9/alphapc/devvga.c:93,113 – 2000/0401/sys/src/9/alphapc/devvga.c:94,114 | ||
| 1999/0415 | s = scr->dev->name; else s = "cga"; | |
| 2000/0330 |
| |
| 2000/0401 | len = snprint(p, READSTR, "type: %s\n", s); | |
| 1999/0415 | if(scr->gscreen) | |
| 2000/0330 |
| |
| 2000/0401 | len += snprint(p+len, READSTR-len, "size: %dx%dx%d\n", | |
| 1999/0415 | scr->gscreen->r.max.x, scr->gscreen->r.max.y, | |
| 2000/0401 | scr->gscreen->depth); | |
| 1999/0415 | if(scr->cur) s = scr->cur->name; else s = "off"; | |
| 2000/0330 |
| |
| 2000/0401 | len += snprint(p+len, READSTR-len, "hwgc: %s\n", s); | |
| 1999/0512 | if(scr->pciaddr) | |
| 2000/0330 |
| |
| 2000/0401 | snprint(p+len, READSTR-len, "addr: 0x%lux\n", | |
| 1999/0512 | scr->pciaddr); else | |
| 2000/0330 |
| |
| 2000/0401 | snprint(p+len, READSTR-len, "addr: 0x%lux\n", | |
| 1999/0512 | scr->aperture); | |
| 1999/0415 | n = readstr(offset, a, n, p); | |
| 2000/0330/sys/src/9/alphapc/devvga.c:116,145 – 2000/0401/sys/src/9/alphapc/devvga.c:117,134 | ||
| 1999/0415 | return n; | |
| 2000/0401 | case Qvgabios: if(vgabios == nil) error(Egreg); if(offset&0x80000000) offset &= ~0x800E0000; if(offset+n > 0x10000) n = 0x10000-offset; if(n < 0) return 0; memmove(a, vgabios+offset, n); | |
| 1999/0415 | return n; | |
| 2000/0330/sys/src/9/alphapc/devvga.c:148,164 – 2000/0401/sys/src/9/alphapc/devvga.c:137,157 | ||
| 1999/0415 | return 0; } | |
| 2000/0401 | static char Ebusy[] = "vga already configured"; | |
| 1999/0415 | static void vgactl(char* a) { int align, i, n, size, x, y, z; | |
| 2000/0401 | char *chanstr, *field[6], *p; ulong chan; | |
| 1999/0415 | VGAscr *scr; extern VGAdev *vgadev[]; extern VGAcur *vgacur[]; | |
| 2000/0401 | Rectangle r; | |
| 1999/0415 | ||
| 2000/0308 |
| |
| 1999/0415 |
| |
| 2000/0401 | n = getfields(a, field, nelem(field), 1, " "); if(n < 1) | |
| 1999/0415 | error(Ebadarg); scr = &vgascreen[0]; | |
| 2000/0330/sys/src/9/alphapc/devvga.c:165,170 – 2000/0401/sys/src/9/alphapc/devvga.c:158,168 | ||
| 1999/0415 | if(strcmp(field[0], "hwgc") == 0){ if(n < 2) error(Ebadarg); | |
| 2000/0401 | /* BUG: drawinit should become a different message rather than piggybacking */ if(scr && scr->dev && scr->dev->drawinit) scr->dev->drawinit(scr); | |
| 1999/0415 | if(strcmp(field[1], "off") == 0){ lock(&cursor); if(scr->cur){ | |
| 2000/0330/sys/src/9/alphapc/devvga.c:205,212 – 2000/0401/sys/src/9/alphapc/devvga.c:203,213 | ||
| 1999/0415 | } } else if(strcmp(field[0], "size") == 0){ | |
| 2000/0401 | if(n < 3) | |
| 1999/0415 | error(Ebadarg); | |
| 2000/0401 | if(drawhasclients()) error(Ebusy); | |
| 1999/0415 | x = strtoul(field[1], &p, 0); if(x == 0 || x > 2048) error(Ebadarg); | |
| 2000/0330/sys/src/9/alphapc/devvga.c:219,241 – 2000/0401/sys/src/9/alphapc/devvga.c:220,295 | ||
| 1999/0415 | if(*p) p++; | |
| 2000/0401 | z = strtoul(p, &p, 0); | |
| 1999/0415 |
| |
| 2000/0401 | chanstr = field[2]; if((chan = strtochan(chanstr)) == 0) error("bad channel"); | |
| 1999/0415 | ||
| 2000/0401 | if(chantodepth(chan) != z) error("depth, channel do not match"); | |
| 1999/0415 | cursoroff(1); | |
| 2000/0401 | deletescreenimage(); if(screensize(x, y, z, chan)) | |
| 1999/0415 | error(Egreg); vgascreenwin(scr); cursoron(1); return; } | |
| 2000/0401 | else if(strcmp(field[0], "actualsize") == 0){ if(scr->gscreen == nil) error("set the screen size first"); if(n < 2) error(Ebadarg); x = strtoul(field[1], &p, 0); if(x == 0 || x > 2048) error(Ebadarg); if(*p) p++; y = strtoul(p, nil, 0); if(y == 0 || y > 2048) error(Ebadarg); 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; return; } else if(strcmp(field[0], "palettedepth") == 0){ if(n < 2) error(Ebadarg); x = strtoul(field[1], &p, 0); if(x != 8 && x != 6) error(Ebadarg); scr->palettedepth = x; return; } else if(strcmp(field[0], "drawinit") == 0){ /* * This is a separate message, but first we need to make * aux/vga send it; once everyone has the new vga, we * can take the drawinit stuff out of hwgc. */ /* if(scr && scr->dev && scr->dev->drawinit) scr->dev->drawinit(scr); */ return; } | |
| 1999/0415 | else if(strcmp(field[0], "linear") == 0){ if(n < 2) error(Ebadarg); | |
| 2000/0330/sys/src/9/alphapc/devvga.c:249,254 – 2000/0401/sys/src/9/alphapc/devvga.c:303,330 | ||
| 1999/0415 | error("not enough free address space"); return; } | |
| 2000/0401 | /* else if(strcmp(field[0], "memset") == 0){ if(n < 4) error(Ebadarg); memset((void*)strtoul(field[1], 0, 0), atoi(field[2]), atoi(field[3])); return; } */ else if(strcmp(field[0], "blank") == 0){ if(n < 2) error(Ebadarg); drawblankscreen(atoi(field[1])); return; } else if(strcmp(field[0], "hwaccel") == 0){ if(n < 2) error(Ebadarg); if(strcmp(field[1], "on") == 0) hwaccel = 1; else if(strcmp(field[1], "off") == 0) hwaccel = 0; return; } | |
| 1999/0415 | error(Ebadarg); } | |
| 2000/0330/sys/src/9/alphapc/devvga.c:256,265 – 2000/0401/sys/src/9/alphapc/devvga.c:332,338 | ||
| 1999/0415 | static long vgawrite(Chan* c, void* a, long n, vlong off) { | |
| 2000/0330/sys/src/9/alphapc/devvga.c:281,310 – 2000/0401/sys/src/9/alphapc/devvga.c:354,359 | ||
| 1999/0415 | poperror(); free(p); return n; | |
| 2000/0401/sys/src/9/alphapc/devvga.c:1,4 – 2000/0407/sys/src/9/alphapc/devvga.c:1,5 (short | long) | ||
| 1999/0415 | /* | |
| 2000/0407 | * VGA controller | |
| 1999/0415 | */ #include "u.h" #include "../port/lib.h" | |
| 2000/0401/sys/src/9/alphapc/devvga.c:69,74 – 2000/0407/sys/src/9/alphapc/devvga.c:70,89 | ||
| 1999/0415 | { } | |
| 2000/0407 | static void checkport(int start, int end) { /* standard vga regs are OK */ if(start >= 0x2b0 && end <= 0x2df+1) return; if(start >= 0x3c0 && end <= 0x3da+1) return; if(iounused(start, end)) return; error(Eperm); } | |
| 1999/0415 | static long vgaread(Chan* c, void* a, long n, vlong off) { | |
| 2000/0401/sys/src/9/alphapc/devvga.c:76,81 – 2000/0407/sys/src/9/alphapc/devvga.c:91,97 | ||
| 1999/0415 | char *p, *s; VGAscr *scr; ulong offset = off; | |
| 2000/0407 | char chbuf[30]; | |
| 1999/0415 | switch(c->qid.path & ~CHDIR){ | |
| 2000/0401/sys/src/9/alphapc/devvga.c:90,116 – 2000/0407/sys/src/9/alphapc/devvga.c:106,137 | ||
| 1999/0415 | free(p); nexterror(); } | |
| 2000/0407 | len = 0; | |
| 1999/0415 | if(scr->dev) s = scr->dev->name; else s = "cga"; | |
| 2000/0401 |
| |
| 1999/0415 |
| |
| 2000/0401 |
| |
| 2000/0407 | len += snprint(p+len, READSTR-len, "type %s\n", s); if(scr->gscreen) { len += snprint(p+len, READSTR-len, "size %dx%dx%d %s\n", | |
| 1999/0415 | scr->gscreen->r.max.x, scr->gscreen->r.max.y, | |
| 2000/0401 |
| |
| 1999/0415 |
| |
| 2000/0401 |
| |
| 2000/0407 | scr->gscreen->depth, chantostr(chbuf, scr->gscreen->chan)); if(Dx(scr->gscreen->r) != Dx(physgscreenr) || Dy(scr->gscreen->r) != Dy(physgscreenr)) len += snprint(p+len, READSTR-len, "actualsize %dx%d\n", physgscreenr.max.x, physgscreenr.max.y); } len += snprint(p+len, READSTR-len, "hwaccel %s\n", hwaccel ? "on" : "off"); len += snprint(p+len, READSTR-len, "hwblank %s\n", hwblank ? "on" : "off"); | |
| 1999/0512 | if(scr->pciaddr) | |
| 2000/0401 |
| |
| 1999/0512 |
| |
| 2000/0407 | snprint(p+len, READSTR-len, "addr 0x%lux\n", scr->pciaddr); | |
| 1999/0512 | else | |
| 2000/0401 |
| |
| 1999/0512 |
| |
| 1999/0415 | ||
| 2000/0407 | snprint(p+len, READSTR-len, "addr 0x%lux\n", scr->aperture); | |
| 1999/0415 | n = readstr(offset, a, n, p); poperror(); free(p); | |
| 2000/0401/sys/src/9/alphapc/devvga.c:159,168 – 2000/0407/sys/src/9/alphapc/devvga.c:180,185 | ||
| 1999/0415 | if(n < 2) error(Ebadarg); | |
| 2000/0401 |
| |
| 1999/0415 | if(strcmp(field[1], "off") == 0){ lock(&cursor); if(scr->cur){ | |
| 2000/0401/sys/src/9/alphapc/devvga.c:277,293 – 2000/0407/sys/src/9/alphapc/devvga.c:294,301 | ||
| 2000/0401 | return; } else if(strcmp(field[0], "drawinit") == 0){ | |
| 1999/0415 | else if(strcmp(field[0], "linear") == 0){ | |
| 2000/0401/sys/src/9/alphapc/devvga.c:311,319 – 2000/0407/sys/src/9/alphapc/devvga.c:319,327 | ||
| 2000/0401 | } */ else if(strcmp(field[0], "blank") == 0){ | |
| 2000/0407 | if(n < 1) | |
| 2000/0401 | error(Ebadarg); | |
| 2000/0407 | drawblankscreen(1); | |
| 2000/0401 | return; } else if(strcmp(field[0], "hwaccel") == 0){ | |
| 2000/0401/sys/src/9/alphapc/devvga.c:323,328 – 2000/0407/sys/src/9/alphapc/devvga.c:331,345 | ||
| 2000/0401 | hwaccel = 1; else if(strcmp(field[1], "off") == 0) hwaccel = 0; | |
| 2000/0407 | return; } else if(strcmp(field[0], "hwblank") == 0){ if(n < 2) error(Ebadarg); if(strcmp(field[1], "on") == 0) hwblank = 1; else if(strcmp(field[1], "off") == 0) hwblank = 0; | |
| 2000/0401 | return; } | |
| 1999/0415 | ||
| 2000/0407/sys/src/9/alphapc/devvga.c:126,131 – 2000/0522/sys/src/9/alphapc/devvga.c:126,132 (short | long) | ||
| 2000/0407 | physgscreenr.max.x, physgscreenr.max.y); } | |
| 2000/0522 | len += snprint(p+len, READSTR-len, "blanktime %lud\n", blanktime); | |
| 2000/0407 | len += snprint(p+len, READSTR-len, "hwaccel %s\n", hwaccel ? "on" : "off"); len += snprint(p+len, READSTR-len, "hwblank %s\n", hwblank ? "on" : "off"); | |
| 1999/0512 | if(scr->pciaddr) | |
| 2000/0407/sys/src/9/alphapc/devvga.c:323,328 – 2000/0522/sys/src/9/alphapc/devvga.c:324,334 | ||
| 2000/0401 | error(Ebadarg); | |
| 2000/0407 | drawblankscreen(1); | |
| 2000/0401 | return; | |
| 2000/0522 | } else if(strcmp(field[0], "blanktime") == 0){ if(n < 2) error(Ebadarg); blanktime = strtoul(field[1], 0, 0); | |
| 2000/0401 | } else if(strcmp(field[0], "hwaccel") == 0){ if(n < 2) | |
| 2000/0522/sys/src/9/alphapc/devvga.c:329,334 – 2000/0530/sys/src/9/alphapc/devvga.c:329,335 (short | long) | ||
| 2000/0522 | if(n < 2) error(Ebadarg); blanktime = strtoul(field[1], 0, 0); | |
| 2000/0530 | return; | |
| 2000/0401 | } else if(strcmp(field[0], "hwaccel") == 0){ if(n < 2) | |
| 2000/0530/sys/src/9/alphapc/devvga.c:24,29 – 2001/0727/sys/src/9/alphapc/devvga.c:24,30 (short | long) | ||
| 1999/0415 | }; static Dirtab vgadir[] = { | |
| 2001/0727 | ".", { Qdir, 0, QTDIR }, 0, 0550, | |
| 1999/0415 | "vgactl", { Qvgactl, 0 }, 0, 0660, | |
| 2000/0401 | "vgabios", { Qvgabios, 0 }, 0x10000, 0440, | |
| 1999/0415 | }; | |
| 2000/0530/sys/src/9/alphapc/devvga.c:47,62 – 2001/0727/sys/src/9/alphapc/devvga.c:48,63 | ||
| 1999/0415 | return devattach('v', spec); } | |
| 2001/0727 | Walkqid* vgawalk(Chan* c, Chan *nc, char** name, int nname) | |
| 1999/0415 | { | |
| 2001/0727 | return devwalk(c, nc, name, nname, vgadir, nelem(vgadir), devgen); | |
| 1999/0415 | } | |
| 2001/0727 | static int vgastat(Chan* c, uchar* dp, int n) | |
| 1999/0415 | { | |
| 2001/0727 | return devstat(c, dp, n, vgadir, nelem(vgadir), devgen); | |
| 1999/0415 | } static Chan* | |
| 2000/0530/sys/src/9/alphapc/devvga.c:93,99 – 2001/0727/sys/src/9/alphapc/devvga.c:94,100 | ||
| 1999/0415 | ulong offset = off; | |
| 2000/0407 | char chbuf[30]; | |
| 1999/0415 |
| |
| 2001/0727 | switch((ulong)c->qid.path){ | |
| 1999/0415 | case Qdir: return devdirread(c, a, n, vgadir, nelem(vgadir), devgen); | |
| 2000/0530/sys/src/9/alphapc/devvga.c:359,365 – 2001/0727/sys/src/9/alphapc/devvga.c:360,366 | ||
| 1999/0415 | char *p; ulong offset = off; | |
| 2001/0727 | switch((ulong)c->qid.path){ | |
| 1999/0415 | case Qdir: error(Eperm); | |
| 2000/0530/sys/src/9/alphapc/devvga.c:394,400 – 2001/0727/sys/src/9/alphapc/devvga.c:395,400 | ||
| 1999/0415 | vgareset, devinit, vgaattach, | |
| 2001/0727/sys/src/9/alphapc/devvga.c:173,179 – 2001/1117/sys/src/9/alphapc/devvga.c:173,179 (short | long) | ||
| 1999/0415 | extern VGAcur *vgacur[]; | |
| 2000/0401 | Rectangle r; | |
| 1999/0415 | ||
| 2000/0401 |
| |
| 2001/1117 | n = tokenize(a, field, nelem(field)); | |
| 2000/0401 | if(n < 1) | |
| 1999/0415 | error(Ebadarg); | |
| 2001/1117/sys/src/9/alphapc/devvga.c:393,399 – 2002/0109/sys/src/9/alphapc/devvga.c:393,400 (short | long) | ||
| 1999/0415 | "vga", vgareset, | |
| 2002/0109 | devinit, devshutdown, | |
| 1999/0415 | vgaattach, vgawalk, vgastat, | |