2 |
- |
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)
|