xref: /openbsd/sys/dev/ic/stireg.h (revision 0b21a9cf)
1 /*	$OpenBSD: stireg.h,v 1.15 2024/08/17 08:45:22 miod Exp $	*/
2 
3 /*
4  * Copyright (c) 2000 Michael Shalayeff
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19  * IN NO EVENT SHALL THE AUTHOR OR HIS RELATIVES BE LIABLE FOR ANY DIRECT,
20  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22  * SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
24  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
25  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
26  * THE POSSIBILITY OF SUCH DAMAGE.
27  */
28 
29 #ifndef _IC_STIREG_H_
30 #define _IC_STIREG_H_
31 
32 #define	STI_REGION_MAX	8
33 #define	STI_MONITOR_MAX	256
34 #define	STI_DEVNAME_LEN	32
35 #define	STI_NCMAP	256
36 
37 /* code ROM definitions */
38 #define	STI_BEGIN	0
39 #define	STI_INIT_GRAPH	0
40 #define	STI_STATE_MGMT	1
41 #define	STI_FONT_UNPMV	2
42 #define	STI_BLOCK_MOVE	3
43 #define	STI_SELF_TEST	4
44 #define	STI_EXCEP_HDLR	5
45 #define	STI_INQ_CONF	6
46 #define	STI_SCM_ENT	7
47 #define	STI_DMA_CTRL	8
48 #define	STI_FLOW_CTRL	9
49 #define	STI_UTIMING	10
50 #define	STI_PROC_MGR	11
51 #define	STI_UTIL	12
52 #define	STI_END		13
53 #define	STI_CODECNT	16
54 
55 #define	STI_CODEBASE_MAIN	0x40
56 #define	STI_CODEBASE_ALT	0x80
57 
58 #define	STI_CODEBASE_PA		STI_CODEBASE_MAIN
59 #define	STI_CODEBASE_M68K	STI_CODEBASE_ALT
60 #define	STI_CODEBASE_PA64	STI_CODEBASE_ALT
61 
62 /* sti returns */
63 #define	STI_OK		0
64 #define	STI_FAIL	-1
65 #define	STI_NRDY	1
66 
67 /* sti errno */
68 #define	STI_NOERRNO		0	/* no error */
69 #define	STI_BADREENTLVL		1	/* bad reentry level */
70 #define	STI_NOREGIONSDEF	2	/* region table is not setup */
71 #define	STI_ILLNPLANES		3	/* invalid num of text planes */
72 #define	STI_ILLINDEX		4	/* invalid font index */
73 #define	STI_ILLLOC		5	/* invalid font location */
74 #define	STI_ILLCOLOUR		6	/* invalid colour */
75 #define	STI_ILLBLKMVFROM	7	/* invalid from in blkmv */
76 #define	STI_ILLBLKMVTO		8	/* invalid to in blkmv */
77 #define	STI_ILLBLKMVSIZE	9	/* invalid size in blkmv */
78 #define	STI_BEIUNSUPP		10	/* bus error ints unsupported */
79 #define	STI_UNXPBE		11	/* unexpected bus error */
80 #define	STI_UNXHWF		12	/* unexpected hardware failure */
81 #define	STI_NEGCFG		13	/* no ext global config struct */
82 #define	STI_NEIG		14	/* no ext init struct */
83 #define	STI_ILLSCME		15	/* invalid set cmap entry */
84 #define	STI_ILLCMVAL		16	/* invalid cmap value */
85 #define	STI_NORESMEM		17	/* no requested global memory */
86 #define	STI_RESMEMCORR		18	/* reserved memory corrupted */
87 #define	STI_ILLNTBLKMV		19	/* invalid non-text blkmv */
88 #define	STI_ILLMONITOR		20	/* monitor selection is out of range */
89 #define	STI_ILLEXCADDR		21	/* invalid excpt handler addr */
90 #define	STI_ILLEXCFLAGS		22	/* invalid excpt handler flags */
91 #define	STI_NOEHE		23	/* no ext exhdl struct */
92 #define	STI_NOINQCE		24	/* no ext inq cfg struct */
93 #define	STI_ILLRGNPTR		25	/* invalid region pointer */
94 #define	STI_ILLUTLOP		26	/* invalid util opcode */
95 #define	STI_UNKNOWN		250	/* unknown error */
96 #define	STI_NOCFGPTR		251	/* no config ptr defined */
97 #define	STI_NOFLPTR		252	/* no flag ptr defined */
98 #define	STI_NOINPTR		253	/* no in ptr defined */
99 #define	STI_NOOUTPTR		254	/* no way you can get it */
100 #define	STI_NOLOCK		255	/* kernel dishonour graphics lock */
101 
102 /* colours */
103 #define	STI_COLOUR_BLACK	0
104 #define	STI_COLOUR_WHITE	1
105 #define	STI_COLOUR_RED		2
106 #define	STI_COLOUR_YELLOW	3
107 #define	STI_COLOUR_GREEN	4
108 #define	STI_COLOUR_CYAN		5
109 #define	STI_COLOUR_BLUE		6
110 #define	STI_COLOUR_MAGENTA	7
111 
112 	/* LSB high */
113 struct	sti_dd {
114 	u_int32_t	dd_type;	/* 0x00 device type */
115 #define	STI_DEVTYPE1	1
116 #define	STI_DEVTYPE4	3
117 	u_int8_t	dd_unused;
118 	u_int8_t	dd_nmon;	/* 0x05 number monitor rates */
119 	u_int8_t	dd_grrev;	/* 0x06 global rom revision */
120 	u_int8_t	dd_lrrev;	/* 0x07 local rom revision */
121 	u_int32_t	dd_grid[2];	/* 0x08 graphics id */
122 #define	STI_DD_CRX		0x26D1482A	/* single-head CRX */
123 #define	STI_DD_GRX		0x26D1488C	/* gray-scale GRX */
124 #define	STI_DD_CRX24		0x26D148EE	/* CRX+ */
125 #define	STI_DD_EVRX		0x27134C9F	/* 425e on-board */
126 #define	STI_DD_3X2V		0x27134CB4	/* 382 on-board */
127 #define	STI_DD_TIMBER		0x27F12392	/* on-board 710, older 715 */
128 #define	STI_DD_DUAL_CRX		0x27FCCB6D	/* dual-head CRX */
129 #define	STI_DD_ARTIST		0x2B4DED6D	/* on-board 712/715, also GSC */
130 #define	STI_DD_HCRX		0x2BCB015A
131 #define	STI_DD_EG		0x2D08C0A7	/* Visualize EG */
132 #define	STI_DD_SUMMIT		0x2FC1066B	/* Visualize FX2, FX4, FX6 */
133 #define	STI_DD_PINNACLE		0x35ACDA16	/* Visualize FXe */
134 #define	STI_DD_LEGO		0x35ACDA30	/* Visualize FX5, FX10 */
135 #define	STI_DD_FIREGL		0x3BA8F544	/* FireGL-UX */
136 	u_int32_t	dd_fntaddr;	/* 0x10 font start address */
137 	u_int32_t	dd_maxst;	/* 0x14 max state storage */
138 	u_int32_t	dd_romend;	/* 0x18 rom last address */
139 	u_int32_t	dd_reglst;	/* 0x1c device region list */
140 	u_int16_t	dd_maxreent;	/* 0x20 max reent storage */
141 	u_int16_t	dd_maxtimo;	/* 0x22 max execution timeout .1 sec */
142 	u_int32_t	dd_montbl;	/* 0x24 monitor table address */
143 	u_int32_t	dd_udaddr;	/* 0x28 user data address */
144 	u_int32_t	dd_stimemreq;	/* 0x2c sti memory request */
145 	u_int32_t	dd_udsize;	/* 0x30 user data size */
146 	u_int16_t	dd_pwruse;	/* 0x34 power usage */
147 	u_int8_t	dd_bussup;	/* 0x36 bus support */
148 #define	STI_BUSSUPPORT_GSCINTL	0x01	/*	supports pulling INTL for int */
149 #define	STI_BUSSUPPORT_GSC15X	0x02	/*	supports GSC 1.5X */
150 #define	STI_BUSSUPPORT_GSC2X	0x04	/*	supports GSC 2.X */
151 #define	STI_BUSSUPPORT_PCIIOEIM	0x08	/*	will use directed int */
152 #define	STI_BUSSUPPORT_PCISTD	0x10	/*	will use std PCI int */
153 #define	STI_BUSSUPPORT_ILOCK	0x20	/*	supports implicit locking */
154 #define	STI_BUSSUPPORT_ROMMAP	0x40	/*	rom is only in pci erom space */
155 #define	STI_BUSSUPPORT_2DECODE	0x80	/*	single address decoder */
156 	u_int8_t	dd_ebussup;	/* 0x37 extended bus support */
157 #define	STI_EBUSSUPPORT_DMA	0x01	/*	supports dma */
158 #define	STI_EBUSSUPPORT_PIOLOCK	0x02	/*	no implicit locking for dma */
159 #define	STI_EBUSSUPPORT_GVID	0x04	/*	requires gvid callback */
160 	u_int8_t	dd_altcodet;	/* 0x38 alternate code type */
161 #define	STI_ALTCODE_UNKNOWN	0x00
162 #define	STI_ALTCODE_PA64	0x01	/*	alt code is in pa64 */
163 	u_int8_t	dd_eddst[3];	/* 0x39 extended DD struct */
164 	u_int32_t	dd_cfbaddr;	/* 0x3c CFB address, location of
165 						X11 driver to be used for
166 						servers w/o accel */
167 	u_int32_t	dd_pacode[16];	/* 0x40 routines for pa-risc */
168 	u_int32_t	dd_altcode[16];	/* 0x80 routines for m68k/i386 */
169 } __packed;
170 
171 #define	STI_REVISION(maj, min)	(((maj) << 4) | ((min) & 0x0f))
172 
173 /* after the last region there is one indirect list ptr */
174 struct sti_region {
175 	u_int	offset  :14;	/* page offset dev io space relative */
176 	u_int	sys_only: 1;	/* whether allow user access */
177 	u_int	cache   : 1;	/* map in cache */
178 	u_int	btlb    : 1;	/* should use BTLB if available */
179 	u_int	last    : 1;	/* last region in the list */
180 	u_int	length  :14;	/* size in pages */
181 }  __packed;
182 
183 struct sti_font {
184 	u_int16_t	first;
185 	u_int16_t	last;
186 	u_int8_t	width;
187 	u_int8_t	height;
188 	u_int8_t	type;
189 #define	STI_FONT_HPROMAN8	1
190 #define	STI_FONT_KANA8		2
191 	u_int8_t	bpc;
192 	u_int32_t	next;
193 	u_int8_t	uheight;
194 	u_int8_t	uoffset;
195 	u_int8_t	unused[2];
196 }  __packed;
197 
198 struct sti_fontcfg {
199 	u_int16_t	first;
200 	u_int16_t	last;
201 	u_int8_t	width;
202 	u_int8_t	height;
203 	u_int8_t	type;
204 	u_int8_t	bpc;
205 	u_int8_t	uheight;
206 	u_int8_t	uoffset;
207 }  __packed;
208 
209 typedef struct sti_mon {
210 	u_int32_t	width: 12;
211 	u_int32_t	height: 12;
212 	u_int32_t	hz: 7;		/* low 7 bits of refresh rate */
213 	u_int32_t	flat: 1;	/* flatpanel */
214 	u_int32_t	vesa: 1;	/* vesa mode */
215 	u_int32_t	grey: 1;	/* greyscale */
216 	u_int32_t	dblbuf: 1;	/* double buffered */
217 	u_int32_t	user: 1;	/* user-defined mode */
218 	u_int32_t	stereo: 1;	/* stereo display */
219 	u_int32_t	sam: 1;		/* ? */
220 	u_int32_t	: 15;
221 	u_int32_t	hz_upper: 3;	/* upper 3 bits of refresh rate */
222 	u_int32_t	font: 8;	/* rom font index */
223 } __packed *sti_mon_t;
224 
225 typedef struct sti_ecfg {
226 	u_int8_t	current_monitor;
227 	u_int8_t	uf_boot;
228 	u_int16_t	power;		/* power dissipation Watts */
229 	u_int32_t	freq_ref;
230 	u_int32_t	*addr;		/* memory block of size dd_stimemreq */
231 	union {
232 		struct {
233 			int32_t		(*gvid_cmd)(void *, ...);
234 			void		*gvid_cmd_arg;
235 			u_int32_t	pci_id;
236 			void		*future;
237 		} g;
238 		void *future;
239 	} future;
240 } __packed *sti_ecfg_t;
241 
242 typedef struct sti_cfg {
243 	u_int32_t	text_planes;
244 	u_int16_t	scr_width;
245 	u_int16_t	scr_height;
246 	u_int16_t	oscr_width;
247 	u_int16_t	oscr_height;
248 	u_int16_t	fb_width;
249 	u_int16_t	fb_height;
250 	u_int32_t	regions[STI_REGION_MAX];
251 	u_int32_t	reent_level;
252 	u_int32_t	*save_addr;
253 	sti_ecfg_t	ext_cfg;
254 }  __packed *sti_cfg_t;
255 
256 
257 /* routine types */
258 #define	STI_DEP(n) \
259 	typedef int (*sti_##n##_t)( \
260 	  sti_##n##flags_t, sti_##n##in_t, sti_##n##out_t, sti_cfg_t);
261 
262 typedef struct sti_initflags {
263 	u_int32_t	flags;
264 #define	STI_INITF_WAIT	0x80000000
265 #define	STI_INITF_RESET	0x40000000
266 #define	STI_INITF_TEXT	0x20000000
267 #define	STI_INITF_NTEXT	0x10000000
268 #define	STI_INITF_CLEAR	0x08000000
269 #define	STI_INITF_CMB	0x04000000	/* non-text planes cmap black */
270 #define	STI_INITF_EBET	0x02000000	/* enable bus error timer */
271 #define	STI_INITF_EBETI	0x01000000	/* enable bus error timer interrupt */
272 #define	STI_INITF_PTS	0x00800000	/* preserve text settings */
273 #define	STI_INITF_PNTS	0x00400000	/* preserve non-text settings */
274 #define	STI_INITF_PBET	0x00200000	/* preserve BET settings */
275 #define	STI_INITF_PBETI	0x00100000	/* preserve BETI settings */
276 #define	STI_INITF_ICMT	0x00080000	/* init cmap for text planes */
277 #define	STI_INITF_SCMT	0x00040000	/* change current monitor type */
278 #define	STI_INITF_RIE	0x00020000	/* retain int enables */
279 	void *future;
280 } __packed *sti_initflags_t;
281 
282 typedef struct sti_einitin {
283 	u_int8_t	mon_type;
284 	u_int8_t	pad;
285 	u_int16_t	inflight;	/* possible on pci */
286 	void		*future;
287 } __packed *sti_einitin_t;
288 
289 typedef struct sti_initin {
290 	u_int32_t	text_planes;	/* number of planes for text */
291 	sti_einitin_t	ext_in;
292 } __packed *sti_initin_t;
293 
294 typedef struct sti_initout {
295 	int32_t		errno;
296 	u_int32_t	text_planes;	/* number of planes used for text */
297 	void		*future;
298 } __packed *sti_initout_t;
299 
300 STI_DEP(init);
301 
302 typedef struct sti_mgmtflags {
303 	u_int32_t	flags;
304 #define	STI_MGMTF_WAIT	0x80000000
305 #define	STI_MGMTF_SAVE	0x40000000
306 #define	STI_MGMTF_RALL	0x20000000	/* restore all display planes */
307 	void *future;
308 } __packed *sti_mgmtflags_t;
309 
310 typedef struct sti_mgmtin {
311 	void	*addr;
312 	void	*future;
313 } __packed *sti_mgmtin_t;
314 
315 typedef struct sti_mgmtout {
316 	int32_t		errno;
317 	void		*future;
318 } __packed *sti_mgmtout_t;
319 
320 STI_DEP(mgmt);
321 
322 typedef struct sti_unpmvflags {
323 	u_int32_t	flags;
324 #define	STI_UNPMVF_WAIT	0x80000000
325 #define	STI_UNPMVF_NTXT	0x40000000	/* intp non-text planes */
326 	void		*future;
327 } __packed *sti_unpmvflags_t;
328 
329 typedef struct sti_unpmvin {
330 	u_int32_t	*font_addr;	/* font */
331 	u_int16_t	index;		/* character index in the font */
332 	u_int8_t	fg_colour;
333 	u_int8_t	bg_colour;
334 	u_int16_t	x, y;
335 	void		*future;
336 } __packed *sti_unpmvin_t;
337 
338 typedef struct sti_unpmvout {
339 	u_int32_t	errno;
340 	void		*future;
341 } __packed *sti_unpmvout_t;
342 
343 STI_DEP(unpmv);
344 
345 typedef struct sti_blkmvflags {
346 	u_int32_t	flags;
347 #define	STI_BLKMVF_WAIT	0x80000000
348 #define	STI_BLKMVF_COLR	0x40000000	/* change colour on move */
349 #define	STI_BLKMVF_CLR	0x20000000	/* clear on move */
350 #define	STI_BLKMVF_NTXT	0x10000000	/* move in non-text planes */
351 	void		*future;
352 } __packed *sti_blkmvflags_t;
353 
354 typedef struct sti_blkmvin {
355 	u_int8_t	fg_colour;
356 	u_int8_t	bg_colour;
357 	u_int16_t	srcx, srcy, dstx, dsty;
358 	u_int16_t	width, height;
359 	u_int16_t	pad;
360 	void		*future;
361 } __packed *sti_blkmvin_t;
362 
363 typedef struct sti_blkmvout {
364 	u_int32_t	errno;
365 	void		*future;
366 } __packed *sti_blkmvout_t;
367 
368 STI_DEP(blkmv);
369 
370 typedef struct sti_testflags {
371 	u_int32_t	flags;
372 #define	STI_TESTF_WAIT	0x80000000
373 #define	STI_TESTF_ETST	0x40000000
374 	void		*future;
375 } __packed *sti_testflags_t;
376 
377 typedef struct sti_testin {
378 	void		*future;
379 } __packed *sti_testin_t;
380 
381 typedef struct sti_testout {
382 	u_int32_t	errno;
383 	u_int32_t	result;
384 	void		*future;
385 } __packed *sti_testout_t;
386 
387 STI_DEP(test);
388 
389 typedef struct sti_exhdlflags {
390 	u_int32_t	flags;
391 #define	STI_EXHDLF_WAIT	0x80000000
392 #define	STI_EXHDLF_CINT	0x40000000	/* clear int */
393 #define	STI_EXHDLF_CBE	0x20000000	/* clear BE */
394 #define	STI_EXHDLF_PINT	0x10000000	/* preserve int */
395 #define	STI_EXHDLF_RINT	0x08000000	/* restore int */
396 #define	STI_EXHDLF_WEIM	0x04000000	/* write eim w/ sti_eexhdlin */
397 #define	STI_EXHDLF_REIM	0x02000000	/* read eim to sti_eexhdlout */
398 #define	STI_EXHDLF_GIE	0x01000000	/* global int enable */
399 #define	STI_EXHDLF_PGIE	0x00800000
400 #define	STI_EXHDLF_WIEM	0x00400000
401 #define	STI_EXHDLF_EIEM	0x00200000
402 #define	STI_EXHDLF_BIC	0x00100000	/* begin int cycle */
403 #define	STI_EXHDLF_EIC	0x00080000	/* end int cycle */
404 #define	STI_EXHDLF_RIE	0x00040000	/* reset do not clear int enables */
405 	void		*future;
406 } __packed *sti_exhdlflags_t;
407 
408 typedef struct sti_eexhdlin {
409 	u_int32_t	eim_addr;
410 	u_int32_t	eim_data;
411 	u_int32_t	iem;		/* enable mask */
412 	u_int32_t	icm;		/* clear mask */
413 	void		*future;
414 } __packed *sti_eexhdlin_t;
415 
416 typedef struct sti_exhdlint {
417 	u_int32_t	flags;
418 #define	STI_EXHDLINT_BET	0x80000000	/* bus error timer */
419 #define	STI_EXHDLINT_HW		0x40000000	/* high water */
420 #define	STI_EXHDLINT_LW		0x20000000	/* low water */
421 #define	STI_EXHDLINT_TM		0x10000000	/* texture map */
422 #define	STI_EXHDLINT_VB		0x08000000	/* vertical blank */
423 #define	STI_EXHDLINT_UDC	0x04000000	/* unbuffered dma complete */
424 #define	STI_EXHDLINT_BDC	0x02000000	/* buffered dma complete */
425 #define	STI_EXHDLINT_UDPC	0x01000000	/* unbuf priv dma complete */
426 #define	STI_EXHDLINT_BDPC	0x00800000	/* buffered priv dma complete */
427 } __packed *sti_exhdlint_t;
428 
429 typedef struct sti_exhdlin {
430 	sti_exhdlint_t	addr;
431 	sti_eexhdlin_t	ext;
432 } __packed *sti_exhdlin_t;
433 
434 typedef struct sti_eexhdlout {
435 	u_int32_t	eim_addr;
436 	u_int32_t	eim_data;
437 	u_int32_t	iem;		/* enable mask */
438 	u_int32_t	icm;		/* clear mask */
439 	void		*future;
440 } __packed *sti_eexhdlout_t;
441 
442 typedef struct sti_exhdlout {
443 	u_int32_t	errno;
444 	u_int32_t	flags;
445 #define	STI_EXHDLO_BE	0x80000000	/* BE was intercepted */
446 #define	STI_EXHDLO_IP	0x40000000	/* there is int pending */
447 #define	STI_EXHDLO_IE	0x20000000	/* global enable set */
448 	sti_eexhdlout_t	ext;
449 } __packed *sti_exhdlout_t;
450 
451 STI_DEP(exhdl);
452 
453 typedef struct sti_inqconfflags {
454 	u_int32_t	flags;
455 #define	STI_INQCONFF_WAIT	0x80000000
456 	void		*future;
457 } __packed *sti_inqconfflags_t;
458 
459 typedef struct sti_inqconfin {
460 	void	*future;
461 } __packed *sti_inqconfin_t;
462 
463 typedef struct sti_einqconfout {
464 	u_int32_t	crt_config[3];
465 	u_int32_t	crt_hw[3];
466 	void		*future;
467 } __packed *sti_einqconfout_t;
468 
469 typedef struct sti_inqconfout {
470 	u_int32_t	errno;
471 	u_int16_t	width, height, owidth, oheight, fbwidth, fbheight;
472 	u_int32_t	bpp;	/* bits per pixel */
473 	u_int32_t	bppu;	/* accessible bpp */
474 	u_int32_t	planes;
475 	u_int8_t	name[STI_DEVNAME_LEN];
476 	u_int32_t	attributes;
477 #define	STI_INQCONF_Y2X		0x0001	/* pixel is higher than wider */
478 #define	STI_INQCONF_HWBLKMV	0x0002	/* hw blkmv is present */
479 #define	STI_INQCONF_AHW		0x0004	/* adv hw accel */
480 #define	STI_INQCONF_INT		0x0008	/* can interrupt */
481 #define	STI_INQCONF_GONOFF	0x0010	/* supports on/off */
482 #define	STI_INQCONF_AONOFF	0x0020	/* supports alpha on/off */
483 #define	STI_INQCONF_VARY	0x0040	/* variable fb height */
484 #define	STI_INQCONF_ODDBYTES	0x0080	/* use only odd fb bytes */
485 #define	STI_INQCONF_FLUSH	0x0100	/* fb cache requires flushing */
486 #define	STI_INQCONF_DMA		0x0200	/* supports dma */
487 #define	STI_INQCONF_VDMA	0x0400	/* supports vdma */
488 #define	STI_INQCONF_YUV1	0x2000	/* supports YUV type 1 */
489 #define	STI_INQCONF_YUV2	0x4000	/* supports YUV type 2 */
490 #define	STI_INQCONF_BITS \
491     "\020\001y2x\002hwblkmv\003ahw\004int\005gonoff\006aonoff\007vary"\
492     "\010oddb\011flush\012dma\013vdma\016yuv1\017yuv2"
493 	sti_einqconfout_t ext;
494 } __packed *sti_inqconfout_t;
495 
496 STI_DEP(inqconf);
497 
498 typedef struct sti_scmentflags {
499 	u_int32_t	flags;
500 #define	STI_SCMENTF_WAIT	0x80000000
501 	void		*future;
502 } __packed *sti_scmentflags_t;
503 
504 typedef struct sti_scmentin {
505 	u_int32_t	entry;
506 	u_int32_t	value;
507 	void		*future;
508 } __packed *sti_scmentin_t;
509 
510 typedef struct sti_scmentout {
511 	u_int32_t	errno;
512 	void		*future;
513 } __packed *sti_scmentout_t;
514 
515 STI_DEP(scment);
516 
517 typedef struct sti_dmacflags {
518 	u_int32_t	flags;
519 #define	STI_DMACF_WAIT	0x80000000
520 #define	STI_DMACF_PRIV	0x40000000	/* priv dma */
521 #define	STI_DMACF_DIS	0x20000000	/* disable */
522 #define	STI_DMACF_BUF	0x10000000	/* buffered */
523 #define	STI_DMACF_MRK	0x08000000	/* write a marker */
524 #define	STI_DMACF_ABRT	0x04000000	/* abort dma xfer */
525 	void		*future;
526 } __packed *sti_dmacflags_t;
527 
528 typedef struct sti_dmacin {
529 	u_int32_t	pa_upper;
530 	u_int32_t	pa_lower;
531 	u_int32_t	len;
532 	u_int32_t	mrk_data;
533 	u_int32_t	mrk_off;
534 	void		*future;
535 } __packed *sti_dmacin_t;
536 
537 typedef struct sti_dmacout {
538 	u_int32_t	errno;
539 	void		*future;
540 } __packed *sti_dmacout_t;
541 
542 STI_DEP(dmac);
543 
544 typedef struct sti_flowcflags {
545 	u_int32_t	flags;
546 #define	STI_FLOWCF_WAIT	0x80000000
547 #define	STI_FLOWCF_CHW	0x40000000	/* check high water */
548 #define	STI_FLOWCF_WHW	0x20000000	/* write high water */
549 #define	STI_FLOWCF_WLW	0x10000000	/* write low water */
550 #define	STI_FLOWCF_PCSE	0x08000000	/* preserve cse */
551 #define	STI_FLOWCF_CSE	0x04000000
552 #define	STI_FLOWCF_CSWF	0x02000000	/* cs write fine */
553 #define	STI_FLOWCF_CSWC	0x01000000	/* cs write coarse */
554 #define	STI_FLOWCF_CSWQ	0x00800000	/* cs write fifo */
555 	void		*future;
556 } __packed *sti_flowcflags_t;
557 
558 typedef struct sti_flowcin {
559 	u_int32_t	retry;
560 	u_int32_t	bufz;
561 	u_int32_t	hwcnt;
562 	u_int32_t	lwcnt;
563 	u_int32_t	csfv;	/* cs fine value */
564 	u_int32_t	cscv;	/* cs coarse value */
565 	u_int32_t	csqc;	/* cs fifo count */
566 	void		*future;
567 } __packed *sti_flowcin_t;
568 
569 typedef struct sti_flowcout {
570 	u_int32_t	errno;
571 	u_int32_t	retry_result;
572 	u_int32_t	fifo_size;
573 	void		*future;
574 } __packed *sti_flowcout_t;
575 
576 STI_DEP(flowc);
577 
578 typedef struct sti_utimingflags {
579 	u_int32_t	flags;
580 #define	STI_UTIMF_WAIT	0x80000000
581 #define	STI_UTIMF_HKS	0x40000000	/* has kbuf_size */
582 	void		*future;
583 } __packed *sti_utimingflags_t;
584 
585 typedef struct sti_utimingin {
586 	void		*data;
587 	void		*kbuf;
588 	void		*future;
589 } __packed *sti_utimingin_t;
590 
591 typedef struct sti_utimingout {
592 	u_int32_t	errno;
593 	u_int32_t	kbuf_size;	/* buffer required size */
594 	void		*future;
595 } __packed *sti_utimingout_t;
596 
597 STI_DEP(utiming);
598 
599 typedef struct sti_pmgrflags {
600 	u_int32_t	flags;
601 #define	STI_UTIMF_WAIT	0x80000000
602 #define	STI_UTIMOP_CLEANUP	0x00000000
603 #define	STI_UTIMOP_BAC		0x10000000
604 #define	STI_UTIMF_CRIT	0x04000000
605 #define	STI_UTIMF_BUFF	0x02000000
606 #define	STI_UTIMF_IBUFF	0x01000000
607 	void		*future;
608 } __packed *sti_pmgrflags_t;
609 
610 typedef struct sti_pmgrin {
611 	u_int32_t	reserved[4];
612 	void		*future;
613 } __packed *sti_pmgrin_t;
614 
615 typedef struct sti_pmgrout {
616 	int32_t		errno;
617 	void		*future;
618 } __packed *sti_pmgrout_t;
619 
620 STI_DEP(pmgr);
621 
622 typedef struct sti_utilflags {
623 	u_int32_t	flags;
624 #define	STI_UTILF_ROOT	0x80000000	/* was called as root */
625 	void		*future;
626 } __packed *sti_utilflags_t;
627 
628 typedef struct sti_utilin {
629 	u_int32_t	in_size;
630 	u_int32_t	out_size;
631 	u_int8_t	*buf;
632 } __packed *sti_utilin_t;
633 
634 typedef struct sti_utilout {
635 	int32_t		errno;
636 	void		*future;
637 } __packed *sti_utilout_t;
638 
639 STI_DEP(util);
640 
641 /*
642  * NGLE register layout.
643  * Based upon xc/programs/Xserver/hw/hp/ngle/dregs.h
644  */
645 #define	NGLE_REG_1		0x000118
646 #define	NGLE_REG_28		0x000420
647 #define	NGLE_REG_2		0x000480
648 #define	NGLE_REG_3		0x0004a0	/* palette index */
649 #define	NGLE_REG_22		0x0005a0
650 #define	NGLE_REG_23		0x0005c0
651 #define	NGLE_REG_4		0x000600	/* palette data */
652 #define	NGLE_REG_5		0x0006a0	/* cursor data */
653 #define	NGLE_REG_6		0x000800
654 #define	NGLE_REG_7		0x000804
655 #define	NGLE_REG_24		0x000808
656 #define	NGLE_REG_8		0x000820
657 #define	NGLE_REG_73		0x000944
658 #define	NGLE_REG_9		0x000a04
659 #define	NGLE_REG_25		0x000b00
660 #define	NGLE_REG_RAMDAC		0x001000
661 #define	NGLE_REG_10		0x018000
662 #define	NGLE_REG_11		0x018004	/* dest coords */
663 #define	NGLE_REG_12		0x01800c	/* control plane register */
664 #define	NGLE_REG_35		0x018010	/* fg color */
665 #define	NGLE_REG_36		0x018014
666 #define	NGLE_REG_13		0x018018	/* image planemask */
667 #define	NGLE_REG_14		0x01801c	/* raster op */
668 #define	NGLE_REG_15		0x200000
669 #define	NGLE_REG_15b0		0x200000	/* busy register */
670 #define	NGLE_REG_16		0x200004
671 #define	NGLE_REG_16b1		0x200005
672 #define	NGLE_REG_16b3		0x200007
673 #define	NGLE_REG_34		0x200008	/* # of fifo slots */
674 #define	NGLE_REG_17		0x200100	/* cursor coordinates */
675 #define	NGLE_REG_18		0x200104	/* cursor enable */
676 #define	NGLE_REG_26		0x200118
677 #define	NGLE_REG_19		0x200200
678 #define	NGLE_REG_20		0x200208	/* cursor geometry */
679 #define	NGLE_REG_21		0x200218	/* Artist misc video */
680 #define	NGLE_REG_27		0x200308	/* Artist misc ctrl */
681 #define	NGLE_REG_29		0x210000	/* HCRX cursor coord & enable */
682 #define	NGLE_REG_30		0x210004	/* HCRX cursor address */
683 #define	NGLE_REG_31		0x210008	/* HCRX cursor data */
684 #define	NGLE_REG_38		0x210020	/* colormap data */
685 #define	NGLE_REG_41		0x210024
686 #define	NGLE_REG_42		0x210028
687 #define	NGLE_REG_43		0x21002c
688 #define	NGLE_REG_44		0x210030
689 #define	NGLE_REG_45		0x210034
690 #define	NGLE_REG_32		0x21003c
691 #define	NGLE_REG_33		0x210040	/* HCRX misc video */
692 #define	NGLE_REG_39		0x210120
693 #define	NGLE_REG_40		0x210130
694 
695 #define	NGLE_BUFF0_CMAP0	0x00001e02
696 #define	NGLE_BUFF1_CMAP0	0x02001e02
697 #define	NGLE_BUFF1_CMAP3	0x0c001e02
698 #define	NGLE_ARTIST_CMAP0	0x00000102
699 
700 #endif /* _IC_STIREG_H_ */
701