xref: /plan9/sys/src/9/pc/screen.h (revision 1ee3cffaa7e3c1b699746f1d489ecd9b6a7d4d76)
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