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