summaryrefslogtreecommitdiff
path: root/sys/arch/sgi/dev/gbereg.h
blob: ef8ff324115993aa4f4d0422d69f00699bb87c1b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
/*	$OpenBSD: gbereg.h,v 1.4 2009/02/24 14:37:29 jsing Exp $ */

/*
 * Copyright (c) 2007, Joel Sing <jsing@openbsd.org>
 *
 * Permission to use, copy, modify, and distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */

/*
 * GBE Framebuffer for SGI O2.
 */

#define GBE_BASE		0x16000000
#define GBE_REG_SIZE		0x100000
#define GBE_TLB_SIZE		128

#define GBE_TILE_SHIFT		16
#define GBE_TILE_SIZE		(1 << GBE_TILE_SHIFT)

#define GBE_TILE_WIDTH		512		/* Width of tile in bytes. */
#define GBE_TILE_WIDTH_SHIFT	9
#define GBE_TILE_HEIGHT		128		/* Height of tile in bytes. */
#define GBE_TILE_HEIGHT_SHIFT	7

/* 
 * GBE Registers.
 */

#define GBE_CTRL_STAT		0x00000000	/* General control/status */
#define	GBE_CURSOR_ON		0x00000001
#define GBE_DOTCLOCK		0x00000004	/* Dotclock */
#define   GBE_DOTCLOCK_RUN	0x00100000	/* Enable dotclock */
#define GBE_VT_XY		0x00010000	/* Current dot coordinates */
#define   GBE_VT_XY_X_SHIFT	0
#define   GBE_VT_XY_X_MASK	0x00000fff
#define   GBE_VT_XY_Y_SHIFT	12
#define   GBE_VT_XY_Y_MASK	0x00fff000
#define   GBE_VT_XY_FREEZE	0x80000000	/* Freeze pixel counter */
#define GBE_VT_MAXXY		0x00010004	/* */
#define GBE_VT_VSYNC		0x00010008	/* Vertical sync on/off */
#define GBE_VT_HSYNC		0x0001000c	/* Horizontal sync on/off */
#define GBE_VT_VBLANK		0x00010010	/* Vertical blanking */
#define GBE_VT_HBLANK		0x00010014	/* Horizontal blanking */
#define GBE_VT_FLAGS		0x00010018	/* Video timing flags */
#define   GBE_VT_SYNC_LOW	0x00000010	/* Sync on green */
#define GBE_VT_HPIX		0x00010034	/* Horizontal pixel on/off */
#define GBE_VT_VPIX		0x00010038	/* Vertical pixel on/off */
#define   GBE_VT_VPIX_OFF_MASK	0x00000fff
#define   GBE_VT_VPIX_OFF_SHIFT	0
#define   GBE_VT_VPIX_ON_MASK	0x00fff000
#define   GBE_VT_VPIX_ON_SHIFT	12
#define GBE_VT_HCMAP		0x0001003c	/* Horizontal cmap write */
#define   GBE_VT_HCMAP_ON_SHIFT	12
#define GBE_VT_VCMAP		0x00010040	/* Vertical cmap write */
#define   GBE_VT_VCMAP_ON_SHIFT	12
#define GBE_VT_DIDSTARTXY	0x00010044	/* DID reset at x/y */
#define GBE_VT_CRSSTARTXY	0x00010048	/* CRS reset at x/y */
#define GBE_VT_VCSTARTXY	0x0001004c	/* VC reset at x/y */
#define GBE_OVERLAY_TILE	0x00020000	/* Overlay plane - tile width */
#define GBE_OVERLAY_HW_CTRL	0x00020004	/* Overlay plane - h/w control */
#define GBE_OVERLAY_CTRL	0x00020008	/* Overlay plane - control */
#define   GBE_OVERLAY_CTRL_DMA_ENABLE	0x00000001
#define GBE_FB_SIZE_TILE	0x00030000	/* Framebuffer - tile size */
#define   GBE_FB_SIZE_TILE_WIDTH_SHIFT		5
#define   GBE_FB_SIZE_TILE_DEPTH_SHIFT		13
#define   GBE_FB_SIZE_TILE_FIFO_RESET_SHIFT	15
#define GBE_FB_SIZE_PIXEL	0x00030004	/* Framebuffer - pixel size */
#define   GBE_FB_SIZE_PIXEL_HEIGHT_SHIFT	16
#define GBE_FB_HW_CTRL		0x00030008	/* Framebuffer - hardware control */
#define GBE_FB_CTRL		0x0003000c	/* Framebuffer - control */
#define   GBE_FB_CTRL_TILE_PTR_SHIFT	9
#define   GBE_FB_CTRL_DMA_ENABLE	0x00000001
#define GBE_DID_HW_CTRL		0x00040000	/* DID hardware control */
#define GBE_DID_CTRL		0x00040004	/* DID control */
#define GBE_MODE		0x00048000	/* Colour mode */
#define   GBE_WID_MODE_SHIFT	2
#define GBE_CMAP		0x050000	/* Colourmap */
#define   GBE_CMAP_ENTRIES	6144
#define GBE_CMAP_FIFO		0x058000	/* Colourmap FIFO status */
#define   GBE_CMAP_FIFO_ENTRIES	63
#define GBE_GMAP		0x060000	/* Gammamap */
#define   GBE_GMAP_ENTRIES	256
#define GBE_CURSOR_POS		0x00070000	/* Cursor position */
#define GBE_CURSOR_CTRL		0x00070004	/* Cursor control */

/* 
 * GBE Constants.
 */

#define GBE_FB_DEPTH_8		0
#define GBE_FB_DEPTH_16		1
#define GBE_FB_DEPTH_32		2

#define GBE_CMODE_I8		0	/* 8 bit indexed */
#define GBE_CMODE_I12		1	/* 12 bit indexed */
#define GBE_CMODE_RG3B2		2	/* 3:3:2 direct */
#define GBE_CMODE_RGB4		3	/* 4:4:4 direct */
#define GBE_CMODE_ARGB5		4	/* 1:5:5:5 direct */
#define GBE_CMODE_RGB8		5	/* 8:8:8 direct */
#define GBE_CMODE_RGBA5		6	/* 5:5:5:5 direct */
#define GBE_CMODE_RGB10		7	/* 10:10:10 direct */

#define GBE_BMODE_BOTH		3

/*
 * Rendering Engine Registers.
 */

#define RE_BASE			0x15000000
#define RE_REG_SIZE		0x5000
#define RE_START		0x00000800	/* Start rendering operation. */

/* TLB Registers. */
#define RE_TLB_A		0x00001000	/* 256 16-bit tile entries. */
#define	RE_TLB_B		0x00001200
#define	RE_TLB_C		0x00001400
#define	RE_TLB_TEX		0x00001600
#define	RE_TLB_CLIP_ID		0x000016e0
#define	RE_TLB_LINEAR_A		0x00001700
#define	RE_TLB_LINEAR_B		0x00001780

/* Pixel Pipeline Registers. */
#define RE_PP_BUFMODE_SRC	0x00002000
#define RE_PP_BUFMODE_DST	0x00002008
#define RE_PP_CLIPMODE		0x00002010
#define RE_PP_DRAWMODE		0x00002018
#define   DRAWMODE_STENCIL	0x1 << 0
#define   DRAWMODE_DEPTH_MASK	0x1 << 1
#define   DRAWMODE_DEPTH_TEST   0x1 << 2
#define   DRAWMODE_BYTEMASK	0xf << 3
#define   DRAWMODE_BITMASK	0x1 << 7
#define   DRAWMODE_DITHER	0x1 << 8
#define   DRAWMODE_LOGIC_OP	0x1 << 9
#define   DRAWMODE_ALPHA_BLEND  0x1 << 10
#define   DRAWMODE_PIXEL_XFER	0x1 << 21
#define RE_PP_WINOFFSET_SRC	0x00002050
#define RE_PP_WINOFFSET_DST	0x00002058
#define RE_PP_PRIMITIVE		0x00002060	/* Drawing primitive. */
#define   PRIMITIVE_POINT	0x0 << 24
#define   PRIMITIVE_LINE	0x1 << 24
#define   PRIMITIVE_TRIANGLE	0x2 << 24
#define   PRIMITIVE_RECTANGLE	0x3 << 24
#define   PRIMITIVE_LRBT	0x0 << 16
#define   PRIMITIVE_RLBT	0x1 << 16
#define   PRIMITIVE_LRTB	0x2 << 16
#define   PRIMITIVE_RLTB	0x3 << 16
#define RE_PP_VERTEX_X_0	0x00002070	/* (x0,y0) vertex. */
#define RE_PP_VERTEX_X_1	0x00002074	/* (x1,y1) vertex. */
#define RE_PP_VERTEX_X_2	0x00002078	/* (x2,y2) vertex. */
#define RE_PP_PIXEL_XFER_SRC	0x000020a0	/* Pixel transfer source. */
#define RE_PP_PIXEL_XFER_X_STEP	0x000020a8
#define RE_PP_PIXEL_XFER_Y_STEP	0x000020ac
#define RE_PP_STIPPLE_MODE	0x000020c0
#define RE_PP_STIPPLE_PATTERN	0x000020c4
#define RE_PP_SHADE_FG_COLOUR	0x000020d0
#define RE_PP_SHADE_BG_COLOUR	0x000020d8
#define RE_PP_LOGIC_OP		0x000021b0	/* Logic operation. */
#define   LOGIC_OP_NONE		0x00
#define   LOGIC_OP_XOR		0x0c
#define RE_PP_COLOUR_MASK	0x000021b8	/* Colour buffer plane mask. */
#define   COLOUR_MASK_NONE	0xffffffff
#define RE_PP_NULL		0x000021f0
#define RE_PP_FLUSH		0x000021f8

#define BUFMODE_PIXDEPTH_SHIFT	2		/* Pixel colour depth. */
#define BUFMODE_PIXTYPE_SHIFT	4		/* Pixel format. */
#define BUFMODE_BUFDEPTH_SHIFT	8		/* Buffer colour depth. */
#define BUFMODE_BUFTYPE_SHIFT	10		/* Source or destination. */

/* Status Registers. */
#define RE_PP_STATUS		0x00004000
#define   RE_PP_STATUS_IDLE	0x10000000
#define   RE_PP_STATUS_READY	0x02000000

/*
 * Rendering Engine Constants.
 */ 

#define COLOUR_DEPTH_8		0x0
#define COLOUR_DEPTH_16		0x1
#define COLOUR_DEPTH_32		0x2

#define PIXEL_TYPE_CI		0x0
#define PIXEL_TYPE_RGB		0x1
#define PIXEL_TYPE_RGBA		0x2
#define PIXEL_TYPE_ABGR		0x3

#define BUF_TYPE_TLB_A		0x0
#define BUF_TYPE_TLB_B		0x1
#define BUF_TYPE_TLB_C		0x2
#define BUF_TYPE_LINEAR_A	0x4
#define BUF_TYPE_LINEAR_B	0x5

/*
 * Console functions.
 */
int	gbe_cnprobe(bus_space_tag_t, bus_addr_t addr);
int	gbe_cnattach(bus_space_tag_t, bus_addr_t addr);