]> git.lizzy.rs Git - plan9front.git/blob - sys/src/9/alphapc/screen.h
merge
[plan9front.git] / sys / src / 9 / alphapc / 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()        PADDR(arch->pcimem(0xA0000, 1<<16))
53
54 #define vgai(port)              inb(port)
55 #define vgao(port, data)        outb(port, data)
56
57 extern int vgaxi(long, uchar);
58 extern int vgaxo(long, uchar, uchar);
59
60 /*
61  */
62 typedef struct VGAdev VGAdev;
63 typedef struct VGAcur VGAcur;
64 typedef struct VGAscr VGAscr;
65
66 struct VGAdev {
67         char*   name;
68
69         void    (*enable)(VGAscr*);
70         void    (*disable)(VGAscr*);
71         void    (*page)(VGAscr*, int);
72         void    (*linear)(VGAscr*, int, int);
73         void    (*drawinit)(VGAscr*);
74         int     (*fill)(VGAscr*, Rectangle, ulong);
75         void (*flush)(VGAscr*, Rectangle);
76
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 };
122
123 extern VGAscr vgascreen[];
124
125 enum {
126         Backgnd         = 0,    /* black */
127 };
128
129 /* mouse.c */
130 extern void mousectl(Cmdbuf*);
131
132 /* screen.c */
133 extern int      hwaccel;        /* use hw acceleration; default on */
134 extern int      hwblank;        /* use hw blanking; default on */
135 extern void     addvgaseg(char*, ulong, ulong);
136 extern uchar*   attachscreen(Rectangle*, ulong*, int*, int*, int*);
137 extern void     flushmemscreen(Rectangle);
138 extern int      cursoron(int);
139 extern void     cursoroff(int);
140 extern void     setcursor(Cursor*);
141 extern int      screensize(int, int, int, ulong);
142 extern int      screenaperture(int, int);
143 extern Rectangle physgscreenr;  /* actual monitor size */
144 extern void     blankscreen(int);
145
146 extern VGAcur swcursor;
147 extern void swcursorinit(void);
148 extern void swcursorhide(void);
149 extern void swcursoravoid(Rectangle);
150 extern void swcursorunhide(void);
151
152 /* devdraw.c */
153 extern void     deletescreenimage(void);
154 extern int      drawhasclients(void);
155 extern ulong    blanktime;
156 extern QLock    drawlock;
157
158 /* vga.c */
159 extern void     vgascreenwin(VGAscr*);
160 extern void     vgaimageinit(ulong);
161 extern void     vgalinearpciid(VGAscr*, int, int);
162 extern void     vgalinearpci(VGAscr*);
163 extern void     vgalinearaddr(VGAscr*, ulong, int);
164
165 extern void     drawblankscreen(int);
166 extern void     vgablank(VGAscr*, int);
167
168 extern Lock     vgascreenlock;
169
170 #define ishwimage(i)    (vgascreen[0].gscreendata && (i)->data->bdata == vgascreen[0].gscreendata->bdata)
171
172