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