2 #include "../port/lib.h"
7 #include "../port/error.h"
16 igfxenable(VGAscr* scr)
25 scr->mmio = vmap(p->mem[0].bar&~0x0F, p->mem[0].size);
28 addvgaseg("igfxmmio", p->mem[0].bar&~0x0F, p->mem[0].size);
32 addvgaseg("igfxscreen", scr->paddr, scr->apsize);
33 scr->storage = (scr->apsize - 64*64*4) & ~(BY2PG-1);
34 if(scr->storage > 0x1000000)
35 scr->storage = 0x1000000;
45 igfxcurload(VGAscr* scr, Cursor* curs)
51 p = (u32int*)((uchar*)scr->vaddr + scr->storage);
52 memset(p, 0, 64*64*4);
56 for(j=0x80; j; j>>=1){
58 *p++ = (0xFF<<24) | (set&j ? 0x000000 : 0xFFFFFF);
65 scr->offset = curs->offset;
77 igfxcurregs(VGAscr* scr, int pipe)
81 if(scr->mmio == nil || scr->storage == 0)
84 /* check PIPExCONF if enabled */
85 if((scr->mmio[(0x70008 | o)/4] & (1<<31)) == 0)
87 switch(scr->pci->did){
88 case 0x2a42: /* X200 */
89 case 0x2a43: /* X200s */
95 return (u32int*)((uchar*)scr->mmio + (0x70080 + o));
99 igfxcurmove(VGAscr* scr, Point p)
104 for(i=0; i<NPIPE; i++){
105 if((r = igfxcurregs(scr, i)) != nil){
106 x = p.x + scr->offset.x;
107 if(x < 0) x = -x | 0x8000;
108 y = p.y + scr->offset.y;
109 if(y < 0) y = -y | 0x8000;
110 r[CURPOS] = (y << 16) | x;
117 igfxcurenable(VGAscr* scr)
123 igfxcurload(scr, &arrow);
124 igfxcurmove(scr, ZP);
126 for(i=0; i<NPIPE; i++){
127 if((r = igfxcurregs(scr, i)) != nil){
128 r[CURCTL] = (r[CURCTL] & ~(3<<28 | 1<<5)) | (i<<28) | 7;
129 r[CURBASE] = scr->storage;
135 igfxcurdisable(VGAscr* scr)
140 for(i=0; i<NPIPE; i++){
141 if((r = igfxcurregs(scr, i)) != nil){
142 r[CURCTL] &= ~(1<<5 | 7);
148 VGAcur vgaigfxcur = {