xref: /titanic_53/usr/src/uts/common/io/vgasubr.c (revision 7c478bd95313f5f23a4c958a745db2134aa03244)
1*7c478bd9Sstevel@tonic-gate /*
2*7c478bd9Sstevel@tonic-gate  * CDDL HEADER START
3*7c478bd9Sstevel@tonic-gate  *
4*7c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5*7c478bd9Sstevel@tonic-gate  * Common Development and Distribution License, Version 1.0 only
6*7c478bd9Sstevel@tonic-gate  * (the "License").  You may not use this file except in compliance
7*7c478bd9Sstevel@tonic-gate  * with the License.
8*7c478bd9Sstevel@tonic-gate  *
9*7c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*7c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
11*7c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
12*7c478bd9Sstevel@tonic-gate  * and limitations under the License.
13*7c478bd9Sstevel@tonic-gate  *
14*7c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
15*7c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*7c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
17*7c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
18*7c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
19*7c478bd9Sstevel@tonic-gate  *
20*7c478bd9Sstevel@tonic-gate  * CDDL HEADER END
21*7c478bd9Sstevel@tonic-gate  */
22*7c478bd9Sstevel@tonic-gate /*
23*7c478bd9Sstevel@tonic-gate  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
24*7c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
25*7c478bd9Sstevel@tonic-gate  */
26*7c478bd9Sstevel@tonic-gate 
27*7c478bd9Sstevel@tonic-gate #pragma ident	"%Z%%M%	%I%	%E% SMI"
28*7c478bd9Sstevel@tonic-gate 
29*7c478bd9Sstevel@tonic-gate /*
30*7c478bd9Sstevel@tonic-gate  * Support routines for VGA drivers
31*7c478bd9Sstevel@tonic-gate  */
32*7c478bd9Sstevel@tonic-gate 
33*7c478bd9Sstevel@tonic-gate #include <sys/debug.h>
34*7c478bd9Sstevel@tonic-gate #include <sys/types.h>
35*7c478bd9Sstevel@tonic-gate #include <sys/param.h>
36*7c478bd9Sstevel@tonic-gate #include <sys/time.h>
37*7c478bd9Sstevel@tonic-gate #include <sys/buf.h>
38*7c478bd9Sstevel@tonic-gate #include <sys/errno.h>
39*7c478bd9Sstevel@tonic-gate #include <sys/systm.h>
40*7c478bd9Sstevel@tonic-gate #include <sys/conf.h>
41*7c478bd9Sstevel@tonic-gate 
42*7c478bd9Sstevel@tonic-gate #include <sys/vgareg.h>
43*7c478bd9Sstevel@tonic-gate #include <sys/vgasubr.h>
44*7c478bd9Sstevel@tonic-gate #include <sys/cmn_err.h>
45*7c478bd9Sstevel@tonic-gate 
46*7c478bd9Sstevel@tonic-gate #include <sys/kmem.h>
47*7c478bd9Sstevel@tonic-gate #include <sys/conf.h>
48*7c478bd9Sstevel@tonic-gate #include <sys/ddi.h>
49*7c478bd9Sstevel@tonic-gate #include <sys/devops.h>
50*7c478bd9Sstevel@tonic-gate #include <sys/sunddi.h>
51*7c478bd9Sstevel@tonic-gate 
52*7c478bd9Sstevel@tonic-gate #include <sys/modctl.h>
53*7c478bd9Sstevel@tonic-gate 
54*7c478bd9Sstevel@tonic-gate #define	GET_HORIZ_END(c)	vga_get_crtc(c, VGA_CRTC_H_D_END)
55*7c478bd9Sstevel@tonic-gate #define	GET_VERT_END(c)	(vga_get_crtc(c, VGA_CRTC_VDE) \
56*7c478bd9Sstevel@tonic-gate 	+ (((vga_get_crtc(c, VGA_CRTC_OVFL_REG) >> \
57*7c478bd9Sstevel@tonic-gate 	    VGA_CRTC_OVFL_REG_VDE8) & 1) << 8) \
58*7c478bd9Sstevel@tonic-gate 	+ (((vga_get_crtc(c, VGA_CRTC_OVFL_REG) >> \
59*7c478bd9Sstevel@tonic-gate 	    VGA_CRTC_OVFL_REG_VDE9) & 1) << 9))
60*7c478bd9Sstevel@tonic-gate 
61*7c478bd9Sstevel@tonic-gate #define	GET_VERT_X2(c)	\
62*7c478bd9Sstevel@tonic-gate 	(vga_get_crtc(c, VGA_CRTC_CRT_MD) & VGA_CRTC_CRT_MD_VT_X2)
63*7c478bd9Sstevel@tonic-gate 
64*7c478bd9Sstevel@tonic-gate unsigned char VGA_CRTC_TEXT[NUM_CRTC_REG] = {
65*7c478bd9Sstevel@tonic-gate 	0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
66*7c478bd9Sstevel@tonic-gate 	0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x05, 0x00,
67*7c478bd9Sstevel@tonic-gate 	0x9c, 0x8e, 0x8f, 0x28, 0x1f, 0x96, 0xb9, 0xa3,
68*7c478bd9Sstevel@tonic-gate 	0xff };
69*7c478bd9Sstevel@tonic-gate unsigned char VGA_SEQ_TEXT[NUM_SEQ_REG] = {
70*7c478bd9Sstevel@tonic-gate 	0x03, 0x00, 0x03, 0x00, 0x02 };
71*7c478bd9Sstevel@tonic-gate unsigned char VGA_GRC_TEXT[NUM_GRC_REG] = {
72*7c478bd9Sstevel@tonic-gate 	0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x00, 0xff };
73*7c478bd9Sstevel@tonic-gate unsigned char VGA_ATR_TEXT[NUM_ATR_REG] = {
74*7c478bd9Sstevel@tonic-gate 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
75*7c478bd9Sstevel@tonic-gate 	0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
76*7c478bd9Sstevel@tonic-gate 	0x0c, 0x00, 0x0f, 0x08, 0x00 };
77*7c478bd9Sstevel@tonic-gate 
78*7c478bd9Sstevel@tonic-gate void
79*7c478bd9Sstevel@tonic-gate vga_get_hardware_settings(struct vgaregmap *reg, int *width, int *height)
80*7c478bd9Sstevel@tonic-gate {
81*7c478bd9Sstevel@tonic-gate 	*width = (GET_HORIZ_END(reg)+1)*8;
82*7c478bd9Sstevel@tonic-gate 	*height = GET_VERT_END(reg)+1;
83*7c478bd9Sstevel@tonic-gate 	if (GET_VERT_X2(reg)) *height *= 2;
84*7c478bd9Sstevel@tonic-gate }
85*7c478bd9Sstevel@tonic-gate 
86*7c478bd9Sstevel@tonic-gate #define	PUTB(reg, off, v) ddi_io_put8(reg->handle, reg->addr + (off), v)
87*7c478bd9Sstevel@tonic-gate #define	GETB(reg, off) ddi_io_get8(reg->handle, reg->addr + (off))
88*7c478bd9Sstevel@tonic-gate 
89*7c478bd9Sstevel@tonic-gate int
90*7c478bd9Sstevel@tonic-gate vga_get_reg(struct vgaregmap *reg, int indexreg)
91*7c478bd9Sstevel@tonic-gate {
92*7c478bd9Sstevel@tonic-gate 	return (GETB(reg, indexreg));
93*7c478bd9Sstevel@tonic-gate }
94*7c478bd9Sstevel@tonic-gate 
95*7c478bd9Sstevel@tonic-gate void
96*7c478bd9Sstevel@tonic-gate vga_set_reg(struct vgaregmap *reg, int indexreg, int v)
97*7c478bd9Sstevel@tonic-gate {
98*7c478bd9Sstevel@tonic-gate 	PUTB(reg, indexreg, v);
99*7c478bd9Sstevel@tonic-gate }
100*7c478bd9Sstevel@tonic-gate 
101*7c478bd9Sstevel@tonic-gate int
102*7c478bd9Sstevel@tonic-gate vga_get_crtc(struct vgaregmap *reg, int i)
103*7c478bd9Sstevel@tonic-gate {
104*7c478bd9Sstevel@tonic-gate 	return (vga_get_indexed(reg, VGA_CRTC_ADR, VGA_CRTC_DATA, i));
105*7c478bd9Sstevel@tonic-gate }
106*7c478bd9Sstevel@tonic-gate 
107*7c478bd9Sstevel@tonic-gate void
108*7c478bd9Sstevel@tonic-gate vga_set_crtc(struct vgaregmap *reg, int i, int v)
109*7c478bd9Sstevel@tonic-gate {
110*7c478bd9Sstevel@tonic-gate 	vga_set_indexed(reg, VGA_CRTC_ADR, VGA_CRTC_DATA, i, v);
111*7c478bd9Sstevel@tonic-gate }
112*7c478bd9Sstevel@tonic-gate 
113*7c478bd9Sstevel@tonic-gate int
114*7c478bd9Sstevel@tonic-gate vga_get_seq(struct vgaregmap *reg, int i)
115*7c478bd9Sstevel@tonic-gate {
116*7c478bd9Sstevel@tonic-gate 	return (vga_get_indexed(reg, VGA_SEQ_ADR, VGA_SEQ_DATA, i));
117*7c478bd9Sstevel@tonic-gate }
118*7c478bd9Sstevel@tonic-gate 
119*7c478bd9Sstevel@tonic-gate void
120*7c478bd9Sstevel@tonic-gate vga_set_seq(struct vgaregmap *reg, int i, int v)
121*7c478bd9Sstevel@tonic-gate {
122*7c478bd9Sstevel@tonic-gate 	vga_set_indexed(reg, VGA_SEQ_ADR, VGA_SEQ_DATA, i, v);
123*7c478bd9Sstevel@tonic-gate }
124*7c478bd9Sstevel@tonic-gate 
125*7c478bd9Sstevel@tonic-gate int
126*7c478bd9Sstevel@tonic-gate vga_get_grc(struct vgaregmap *reg, int i)
127*7c478bd9Sstevel@tonic-gate {
128*7c478bd9Sstevel@tonic-gate 	return (vga_get_indexed(reg, VGA_GRC_ADR, VGA_GRC_DATA, i));
129*7c478bd9Sstevel@tonic-gate }
130*7c478bd9Sstevel@tonic-gate 
131*7c478bd9Sstevel@tonic-gate void
132*7c478bd9Sstevel@tonic-gate vga_set_grc(struct vgaregmap *reg, int i, int v)
133*7c478bd9Sstevel@tonic-gate {
134*7c478bd9Sstevel@tonic-gate 	vga_set_indexed(reg, VGA_GRC_ADR, VGA_GRC_DATA, i, v);
135*7c478bd9Sstevel@tonic-gate }
136*7c478bd9Sstevel@tonic-gate 
137*7c478bd9Sstevel@tonic-gate int
138*7c478bd9Sstevel@tonic-gate vga_get_atr(struct vgaregmap *reg, int i)
139*7c478bd9Sstevel@tonic-gate {
140*7c478bd9Sstevel@tonic-gate 	int ret;
141*7c478bd9Sstevel@tonic-gate 
142*7c478bd9Sstevel@tonic-gate 	(void) GETB(reg, CGA_STAT);
143*7c478bd9Sstevel@tonic-gate 	PUTB(reg, VGA_ATR_AD, i);
144*7c478bd9Sstevel@tonic-gate 	ret = GETB(reg, VGA_ATR_DATA);
145*7c478bd9Sstevel@tonic-gate 
146*7c478bd9Sstevel@tonic-gate 	(void) GETB(reg, CGA_STAT);
147*7c478bd9Sstevel@tonic-gate 	PUTB(reg, VGA_ATR_AD, VGA_ATR_ENB_PLT);
148*7c478bd9Sstevel@tonic-gate 
149*7c478bd9Sstevel@tonic-gate 	return (ret);
150*7c478bd9Sstevel@tonic-gate }
151*7c478bd9Sstevel@tonic-gate 
152*7c478bd9Sstevel@tonic-gate void
153*7c478bd9Sstevel@tonic-gate vga_set_atr(struct vgaregmap *reg, int i, int v)
154*7c478bd9Sstevel@tonic-gate {
155*7c478bd9Sstevel@tonic-gate 	(void) GETB(reg, CGA_STAT);
156*7c478bd9Sstevel@tonic-gate 	PUTB(reg, VGA_ATR_AD, i);
157*7c478bd9Sstevel@tonic-gate 	PUTB(reg, VGA_ATR_AD, v);
158*7c478bd9Sstevel@tonic-gate 
159*7c478bd9Sstevel@tonic-gate 	(void) GETB(reg, CGA_STAT);
160*7c478bd9Sstevel@tonic-gate 	PUTB(reg, VGA_ATR_AD, VGA_ATR_ENB_PLT);
161*7c478bd9Sstevel@tonic-gate }
162*7c478bd9Sstevel@tonic-gate 
163*7c478bd9Sstevel@tonic-gate void
164*7c478bd9Sstevel@tonic-gate vga_set_indexed(
165*7c478bd9Sstevel@tonic-gate 	struct vgaregmap *reg,
166*7c478bd9Sstevel@tonic-gate 	int indexreg,
167*7c478bd9Sstevel@tonic-gate 	int datareg,
168*7c478bd9Sstevel@tonic-gate 	unsigned char index,
169*7c478bd9Sstevel@tonic-gate 	unsigned char val)
170*7c478bd9Sstevel@tonic-gate {
171*7c478bd9Sstevel@tonic-gate 	PUTB(reg, indexreg, index);
172*7c478bd9Sstevel@tonic-gate 	PUTB(reg, datareg, val);
173*7c478bd9Sstevel@tonic-gate }
174*7c478bd9Sstevel@tonic-gate 
175*7c478bd9Sstevel@tonic-gate int
176*7c478bd9Sstevel@tonic-gate vga_get_indexed(
177*7c478bd9Sstevel@tonic-gate 	struct vgaregmap *reg,
178*7c478bd9Sstevel@tonic-gate 	int indexreg,
179*7c478bd9Sstevel@tonic-gate 	int datareg,
180*7c478bd9Sstevel@tonic-gate 	unsigned char index)
181*7c478bd9Sstevel@tonic-gate {
182*7c478bd9Sstevel@tonic-gate 	PUTB(reg, indexreg, index);
183*7c478bd9Sstevel@tonic-gate 	return (GETB(reg, datareg));
184*7c478bd9Sstevel@tonic-gate }
185*7c478bd9Sstevel@tonic-gate 
186*7c478bd9Sstevel@tonic-gate /*
187*7c478bd9Sstevel@tonic-gate  * VGA DAC access functions
188*7c478bd9Sstevel@tonic-gate  * Note:  These assume a VGA-style 6-bit DAC.  Some DACs are 8 bits
189*7c478bd9Sstevel@tonic-gate  * wide.  These functions are not appropriate for those DACs.
190*7c478bd9Sstevel@tonic-gate  */
191*7c478bd9Sstevel@tonic-gate void
192*7c478bd9Sstevel@tonic-gate vga_put_cmap(
193*7c478bd9Sstevel@tonic-gate 	struct vgaregmap *reg,
194*7c478bd9Sstevel@tonic-gate 	int index,
195*7c478bd9Sstevel@tonic-gate 	unsigned char r,
196*7c478bd9Sstevel@tonic-gate 	unsigned char g,
197*7c478bd9Sstevel@tonic-gate 	unsigned char b)
198*7c478bd9Sstevel@tonic-gate {
199*7c478bd9Sstevel@tonic-gate 
200*7c478bd9Sstevel@tonic-gate 	PUTB(reg, VGA_DAC_WR_AD, index);
201*7c478bd9Sstevel@tonic-gate 	PUTB(reg, VGA_DAC_DATA, r >> 2);
202*7c478bd9Sstevel@tonic-gate 	PUTB(reg, VGA_DAC_DATA, g >> 2);
203*7c478bd9Sstevel@tonic-gate 	PUTB(reg, VGA_DAC_DATA, b >> 2);
204*7c478bd9Sstevel@tonic-gate }
205*7c478bd9Sstevel@tonic-gate 
206*7c478bd9Sstevel@tonic-gate void
207*7c478bd9Sstevel@tonic-gate vga_get_cmap(
208*7c478bd9Sstevel@tonic-gate 	struct vgaregmap *reg,
209*7c478bd9Sstevel@tonic-gate 	int index,
210*7c478bd9Sstevel@tonic-gate 	unsigned char *r,
211*7c478bd9Sstevel@tonic-gate 	unsigned char *g,
212*7c478bd9Sstevel@tonic-gate 	unsigned char *b)
213*7c478bd9Sstevel@tonic-gate {
214*7c478bd9Sstevel@tonic-gate 	PUTB(reg, VGA_DAC_RD_AD, index);
215*7c478bd9Sstevel@tonic-gate 	*r = GETB(reg, VGA_DAC_DATA) << 2;
216*7c478bd9Sstevel@tonic-gate 	*g = GETB(reg, VGA_DAC_DATA) << 2;
217*7c478bd9Sstevel@tonic-gate 	*b = GETB(reg, VGA_DAC_DATA) << 2;
218*7c478bd9Sstevel@tonic-gate }
219*7c478bd9Sstevel@tonic-gate 
220*7c478bd9Sstevel@tonic-gate #ifdef	DEBUG
221*7c478bd9Sstevel@tonic-gate 
222*7c478bd9Sstevel@tonic-gate void
223*7c478bd9Sstevel@tonic-gate vga_dump_regs(struct vgaregmap *reg,
224*7c478bd9Sstevel@tonic-gate 	int maxseq, int maxcrtc, int maxatr, int maxgrc)
225*7c478bd9Sstevel@tonic-gate {
226*7c478bd9Sstevel@tonic-gate 	int i, j;
227*7c478bd9Sstevel@tonic-gate 
228*7c478bd9Sstevel@tonic-gate 	printf("Sequencer regs:\n");
229*7c478bd9Sstevel@tonic-gate 	for (i = 0; i < maxseq; i += 0x10) {
230*7c478bd9Sstevel@tonic-gate 		printf("%2x:  ", i);
231*7c478bd9Sstevel@tonic-gate 		for (j = 0; j < 0x08; j++) {
232*7c478bd9Sstevel@tonic-gate 			printf("%2x ", vga_get_seq(reg, i+j));
233*7c478bd9Sstevel@tonic-gate 		}
234*7c478bd9Sstevel@tonic-gate 		printf("- ");
235*7c478bd9Sstevel@tonic-gate 		for (; j < 0x10; j++) {
236*7c478bd9Sstevel@tonic-gate 			printf("%2x ", vga_get_seq(reg, i+j));
237*7c478bd9Sstevel@tonic-gate 		}
238*7c478bd9Sstevel@tonic-gate 		printf("\n");
239*7c478bd9Sstevel@tonic-gate 	}
240*7c478bd9Sstevel@tonic-gate 	printf("\nCRT Controller regs:\n");
241*7c478bd9Sstevel@tonic-gate 	for (i = 0; i < maxcrtc; i += 0x10) {
242*7c478bd9Sstevel@tonic-gate 		printf("%2x:  ", i);
243*7c478bd9Sstevel@tonic-gate 		for (j = 0; j < 0x08; j++) {
244*7c478bd9Sstevel@tonic-gate 			printf("%2x ", vga_get_crtc(reg, i+j));
245*7c478bd9Sstevel@tonic-gate 		}
246*7c478bd9Sstevel@tonic-gate 		printf("- ");
247*7c478bd9Sstevel@tonic-gate 		for (; j < 0x10; j++) {
248*7c478bd9Sstevel@tonic-gate 			printf("%2x ", vga_get_crtc(reg, i+j));
249*7c478bd9Sstevel@tonic-gate 		}
250*7c478bd9Sstevel@tonic-gate 		printf("\n");
251*7c478bd9Sstevel@tonic-gate 	}
252*7c478bd9Sstevel@tonic-gate 	printf("\nAttribute Controller regs:\n");
253*7c478bd9Sstevel@tonic-gate 	for (i = 0; i < maxatr; i += 0x10) {
254*7c478bd9Sstevel@tonic-gate 		printf("%2x:  ", i);
255*7c478bd9Sstevel@tonic-gate 		for (j = 0; j < 0x08; j++) {
256*7c478bd9Sstevel@tonic-gate 			printf("%2x ", vga_get_atr(reg, i+j));
257*7c478bd9Sstevel@tonic-gate 		}
258*7c478bd9Sstevel@tonic-gate 		printf("- ");
259*7c478bd9Sstevel@tonic-gate 		for (; j < 0x10; j++) {
260*7c478bd9Sstevel@tonic-gate 			printf("%2x ", vga_get_atr(reg, i+j));
261*7c478bd9Sstevel@tonic-gate 		}
262*7c478bd9Sstevel@tonic-gate 		printf("\n");
263*7c478bd9Sstevel@tonic-gate 	}
264*7c478bd9Sstevel@tonic-gate 	printf("\nGraphics Controller regs:\n");
265*7c478bd9Sstevel@tonic-gate 	for (i = 0; i < maxgrc; i += 0x10) {
266*7c478bd9Sstevel@tonic-gate 		printf("%2x:  ", i);
267*7c478bd9Sstevel@tonic-gate 		for (j = 0; j < 0x08; j++) {
268*7c478bd9Sstevel@tonic-gate 			printf("%2x ", vga_get_grc(reg, i+j));
269*7c478bd9Sstevel@tonic-gate 		}
270*7c478bd9Sstevel@tonic-gate 		printf("- ");
271*7c478bd9Sstevel@tonic-gate 		for (; j < 0x10; j++) {
272*7c478bd9Sstevel@tonic-gate 			printf("%2x ", vga_get_grc(reg, i+j));
273*7c478bd9Sstevel@tonic-gate 		}
274*7c478bd9Sstevel@tonic-gate 		printf("\n");
275*7c478bd9Sstevel@tonic-gate 	}
276*7c478bd9Sstevel@tonic-gate }
277*7c478bd9Sstevel@tonic-gate #endif	/* DEBUG */
278*7c478bd9Sstevel@tonic-gate 
279*7c478bd9Sstevel@tonic-gate /*
280*7c478bd9Sstevel@tonic-gate  * VGA 80X25 text mode standard palette
281*7c478bd9Sstevel@tonic-gate  */
282*7c478bd9Sstevel@tonic-gate unsigned char VGA_TEXT_PALETTES[64][3] = {
283*7c478bd9Sstevel@tonic-gate 	{ 0x00, 0x00, 0x00 },
284*7c478bd9Sstevel@tonic-gate 	{ 0x00, 0x00, 0x2A },
285*7c478bd9Sstevel@tonic-gate 	{ 0x00, 0x2A, 0x00 },
286*7c478bd9Sstevel@tonic-gate 	{ 0x00, 0x2A, 0x2A },
287*7c478bd9Sstevel@tonic-gate 	{ 0x2A, 0x00, 0x00 },
288*7c478bd9Sstevel@tonic-gate 	{ 0x2A, 0x00, 0x2A },
289*7c478bd9Sstevel@tonic-gate 	{ 0x2A, 0x2A, 0x00 },
290*7c478bd9Sstevel@tonic-gate 	{ 0x2A, 0x2A, 0x2A },
291*7c478bd9Sstevel@tonic-gate 	{ 0x00, 0x00, 0x15 },
292*7c478bd9Sstevel@tonic-gate 	{ 0x00, 0x00, 0x3F },
293*7c478bd9Sstevel@tonic-gate 	{ 0x00, 0x2A, 0x15 },
294*7c478bd9Sstevel@tonic-gate 	{ 0x00, 0x2A, 0x3F },
295*7c478bd9Sstevel@tonic-gate 	{ 0x2A, 0x00, 0x15 },
296*7c478bd9Sstevel@tonic-gate 	{ 0x2A, 0x00, 0x3F },
297*7c478bd9Sstevel@tonic-gate 	{ 0x2A, 0x2A, 0x15 },
298*7c478bd9Sstevel@tonic-gate 	{ 0x2A, 0x2A, 0x3F },
299*7c478bd9Sstevel@tonic-gate 	{ 0x00, 0x15, 0x00 },
300*7c478bd9Sstevel@tonic-gate 	{ 0x00, 0x15, 0x2A },
301*7c478bd9Sstevel@tonic-gate 	{ 0x00, 0x3F, 0x00 },
302*7c478bd9Sstevel@tonic-gate 	{ 0x00, 0x3F, 0x2A },
303*7c478bd9Sstevel@tonic-gate 	{ 0x2A, 0x15, 0x00 },
304*7c478bd9Sstevel@tonic-gate 	{ 0x2A, 0x15, 0x2A },
305*7c478bd9Sstevel@tonic-gate 	{ 0x2A, 0x3F, 0x00 },
306*7c478bd9Sstevel@tonic-gate 	{ 0x2A, 0x3F, 0x2A },
307*7c478bd9Sstevel@tonic-gate 	{ 0x00, 0x15, 0x15 },
308*7c478bd9Sstevel@tonic-gate 	{ 0x00, 0x15, 0x3F },
309*7c478bd9Sstevel@tonic-gate 	{ 0x00, 0x3F, 0x15 },
310*7c478bd9Sstevel@tonic-gate 	{ 0x00, 0x3F, 0x3F },
311*7c478bd9Sstevel@tonic-gate 	{ 0x2A, 0x15, 0x15 },
312*7c478bd9Sstevel@tonic-gate 	{ 0x2A, 0x15, 0x3F },
313*7c478bd9Sstevel@tonic-gate 	{ 0x2A, 0x3F, 0x15 },
314*7c478bd9Sstevel@tonic-gate 	{ 0x2A, 0x3F, 0x3F },
315*7c478bd9Sstevel@tonic-gate 	{ 0x15, 0x00, 0x00 },
316*7c478bd9Sstevel@tonic-gate 	{ 0x15, 0x00, 0x2A },
317*7c478bd9Sstevel@tonic-gate 	{ 0x15, 0x2A, 0x00 },
318*7c478bd9Sstevel@tonic-gate 	{ 0x15, 0x2A, 0x2A },
319*7c478bd9Sstevel@tonic-gate 	{ 0x3F, 0x00, 0x00 },
320*7c478bd9Sstevel@tonic-gate 	{ 0x3F, 0x00, 0x2A },
321*7c478bd9Sstevel@tonic-gate 	{ 0x3F, 0x2A, 0x00 },
322*7c478bd9Sstevel@tonic-gate 	{ 0x3F, 0x2A, 0x2A },
323*7c478bd9Sstevel@tonic-gate 	{ 0x15, 0x00, 0x15 },
324*7c478bd9Sstevel@tonic-gate 	{ 0x15, 0x00, 0x3F },
325*7c478bd9Sstevel@tonic-gate 	{ 0x15, 0x2A, 0x15 },
326*7c478bd9Sstevel@tonic-gate 	{ 0x15, 0x2A, 0x3F },
327*7c478bd9Sstevel@tonic-gate 	{ 0x3F, 0x00, 0x15 },
328*7c478bd9Sstevel@tonic-gate 	{ 0x3F, 0x00, 0x3F },
329*7c478bd9Sstevel@tonic-gate 	{ 0x3F, 0x2A, 0x15 },
330*7c478bd9Sstevel@tonic-gate 	{ 0x3F, 0x2A, 0x3F },
331*7c478bd9Sstevel@tonic-gate 	{ 0x15, 0x15, 0x00 },
332*7c478bd9Sstevel@tonic-gate 	{ 0x15, 0x15, 0x2A },
333*7c478bd9Sstevel@tonic-gate 	{ 0x15, 0x3F, 0x00 },
334*7c478bd9Sstevel@tonic-gate 	{ 0x15, 0x3F, 0x2A },
335*7c478bd9Sstevel@tonic-gate 	{ 0x3F, 0x15, 0x00 },
336*7c478bd9Sstevel@tonic-gate 	{ 0x3F, 0x15, 0x2A },
337*7c478bd9Sstevel@tonic-gate 	{ 0x3F, 0x3F, 0x00 },
338*7c478bd9Sstevel@tonic-gate 	{ 0x3F, 0x3F, 0x2A },
339*7c478bd9Sstevel@tonic-gate 	{ 0x15, 0x15, 0x15 },
340*7c478bd9Sstevel@tonic-gate 	{ 0x15, 0x15, 0x3F },
341*7c478bd9Sstevel@tonic-gate 	{ 0x15, 0x3F, 0x15 },
342*7c478bd9Sstevel@tonic-gate 	{ 0x15, 0x3F, 0x3F },
343*7c478bd9Sstevel@tonic-gate 	{ 0x3F, 0x15, 0x15 },
344*7c478bd9Sstevel@tonic-gate 	{ 0x3F, 0x15, 0x3F },
345*7c478bd9Sstevel@tonic-gate 	{ 0x3F, 0x3F, 0x15 },
346*7c478bd9Sstevel@tonic-gate 	{ 0x3F, 0x3F, 0x3F }
347*7c478bd9Sstevel@tonic-gate };
348