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