1 typedef struct Cursor Cursor; 2 typedef struct Cursorinfo Cursorinfo; 3 struct Cursorinfo { 4 Cursor; 5 Lock; 6 }; 7 8 /* devmouse.c */ 9 extern void mousetrack(int, int, int, int); 10 extern Point mousexy(void); 11 12 extern void mouseaccelerate(int); 13 extern int m3mouseputc(Queue*, int); 14 extern int m5mouseputc(Queue*, int); 15 extern int mouseputc(Queue*, int); 16 17 extern Cursorinfo cursor; 18 extern Cursor arrow; 19 20 /* 21 * Generic VGA registers. 22 */ 23 enum { 24 MiscW = 0x03C2, /* Miscellaneous Output (W) */ 25 MiscR = 0x03CC, /* Miscellaneous Output (R) */ 26 Status0 = 0x03C2, /* Input status 0 (R) */ 27 Status1 = 0x03DA, /* Input Status 1 (R) */ 28 FeatureR = 0x03CA, /* Feature Control (R) */ 29 FeatureW = 0x03DA, /* Feature Control (W) */ 30 31 Seqx = 0x03C4, /* Sequencer Index, Data at Seqx+1 */ 32 Crtx = 0x03D4, /* CRT Controller Index, Data at Crtx+1 */ 33 Grx = 0x03CE, /* Graphics Controller Index, Data at Grx+1 */ 34 Attrx = 0x03C0, /* Attribute Controller Index and Data */ 35 36 PaddrW = 0x03C8, /* Palette Address Register, write */ 37 Pdata = 0x03C9, /* Palette Data Register */ 38 Pixmask = 0x03C6, /* Pixel Mask Register */ 39 PaddrR = 0x03C7, /* Palette Address Register, read */ 40 Pstatus = 0x03C7, /* DAC Status (RO) */ 41 42 Pcolours = 256, /* Palette */ 43 Pred = 0, 44 Pgreen = 1, 45 Pblue = 2, 46 47 Pblack = 0x00, 48 Pwhite = 0xFF, 49 }; 50 51 #define VGAMEM() 0xA0000 52 #define vgai(port) inb(port) 53 #define vgao(port, data) outb(port, data) 54 55 extern int vgaxi(long, uchar); 56 extern int vgaxo(long, uchar, uchar); 57 58 /* 59 */ 60 typedef struct VGAdev VGAdev; 61 typedef struct VGAcur VGAcur; 62 typedef struct VGAscr VGAscr; 63 64 struct VGAdev { 65 char* name; 66 67 void (*enable)(VGAscr*); 68 void (*disable)(VGAscr*); 69 void (*page)(VGAscr*, int); 70 void (*linear)(VGAscr*, int, int); 71 void (*drawinit)(VGAscr*); 72 int (*fill)(VGAscr*, Rectangle, ulong); 73 void (*ovlctl)(VGAscr*, Chan*, void*, int); 74 int (*ovlwrite)(VGAscr*, void*, int, vlong); 75 void (*flush)(VGAscr*, Rectangle); 76 }; 77 78 struct VGAcur { 79 char* name; 80 81 void (*enable)(VGAscr*); 82 void (*disable)(VGAscr*); 83 void (*load)(VGAscr*, Cursor*); 84 int (*move)(VGAscr*, Point); 85 86 int doespanning; 87 }; 88 89 /* 90 */ 91 struct VGAscr { 92 Lock devlock; 93 VGAdev* dev; 94 Pcidev* pci; 95 96 VGAcur* cur; 97 ulong storage; 98 Cursor; 99 100 int useflush; 101 102 ulong paddr; /* frame buffer */ 103 void* vaddr; 104 int apsize; 105 106 ulong io; /* device specific registers */ 107 ulong *mmio; 108 109 ulong colormap[Pcolours][3]; 110 int palettedepth; 111 112 Memimage* gscreen; 113 Memdata* gscreendata; 114 Memsubfont* memdefont; 115 116 int (*fill)(VGAscr*, Rectangle, ulong); 117 int (*scroll)(VGAscr*, Rectangle, Rectangle); 118 void (*blank)(VGAscr*, int); 119 ulong id; /* internal identifier for driver use */ 120 int isblank; 121 int overlayinit; 122 }; 123 124 extern VGAscr vgascreen[]; 125 126 enum { 127 Backgnd = 0, /* black */ 128 }; 129 130 /* mouse.c */ 131 extern void mousectl(Cmdbuf*); 132 extern void mouseresize(void); 133 134 /* screen.c */ 135 extern int hwaccel; /* use hw acceleration; default on */ 136 extern int hwblank; /* use hw blanking; default on */ 137 extern int panning; /* use virtual screen panning; default off */ 138 extern void addvgaseg(char*, ulong, ulong); 139 extern uchar* attachscreen(Rectangle*, ulong*, int*, int*, int*); 140 extern void flushmemscreen(Rectangle); 141 extern int cursoron(int); 142 extern void cursoroff(int); 143 extern void setcursor(Cursor*); 144 extern int screensize(int, int, int, ulong); 145 extern int screenaperture(int, int); 146 extern Rectangle physgscreenr; /* actual monitor size */ 147 extern void blankscreen(int); 148 149 extern VGAcur swcursor; 150 extern void swcursorinit(void); 151 extern void swcursorhide(void); 152 extern void swcursoravoid(Rectangle); 153 extern void swcursorunhide(void); 154 155 /* devdraw.c */ 156 extern void deletescreenimage(void); 157 extern void resetscreenimage(void); 158 extern int drawhasclients(void); 159 extern ulong blanktime; 160 extern void setscreenimageclipr(Rectangle); 161 extern void drawflush(void); 162 extern int drawidletime(void); 163 extern QLock drawlock; 164 165 /* vga.c */ 166 extern void vgascreenwin(VGAscr*); 167 extern void vgaimageinit(ulong); 168 extern void vgalinearpciid(VGAscr*, int, int); 169 extern void vgalinearpci(VGAscr*); 170 extern void vgalinearaddr(VGAscr*, ulong, int); 171 172 extern void drawblankscreen(int); 173 extern void vgablank(VGAscr*, int); 174 175 extern Lock vgascreenlock; 176 177 #define ishwimage(i) (vgascreen[0].gscreendata && (i)->data->bdata == vgascreen[0].gscreendata->bdata) 178