1/*-
2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3 *
4 * Copyright (c) 1998 Michael Smith and Kazutaka YOKOTA
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 as
12 *    the first lines of this file unmodified.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 *    notice, this list of conditions and the following disclaimer in the
15 *    documentation and/or other materials provided with the distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 * $FreeBSD$
29 */
30
31#ifndef _DEV_FB_VESA_H_
32#define _DEV_FB_VESA_H_
33
34struct vesa_info
35{
36    /* mandatory fields */
37    u_int8_t		v_sig[4];	/* VESA */
38    u_int16_t		v_version;	/* ver in BCD */
39    u_int32_t		v_oemstr;	/* OEM string */
40    u_int32_t		v_flags;	/* flags */
41#define V_DAC8		(1<<0)
42#define V_NONVGA	(1<<1)
43#define V_SNOW		(1<<2)
44    u_int32_t		v_modetable;	/* modes */
45    u_int16_t		v_memsize;	/* in 64K */
46    /* 2.0 */
47    u_int16_t		v_revision;	/* software rev */
48    u_int32_t		v_venderstr;	/* vender */
49    u_int32_t		v_prodstr;	/* product name */
50    u_int32_t		v_revstr;	/* product rev */
51    u_int8_t		v_strach[222];
52    u_int8_t		v_oemdata[256];
53} __packed;
54
55struct vesa_mode
56{
57    /* mandatory fields */
58    u_int16_t		v_modeattr;
59#define V_MODESUPP	(1<<0)	/* VESA mode attributes */
60#define V_MODEOPTINFO	(1<<1)
61#define V_MODEBIOSOUT	(1<<2)
62#define V_MODECOLOR	(1<<3)
63#define V_MODEGRAPHICS	(1<<4)
64#define V_MODENONVGA	(1<<5)
65#define V_MODENONBANK	(1<<6)
66#define V_MODELFB	(1<<7)
67#define V_MODEVESA	(1<<16)	/* Private attributes */
68    u_int8_t		v_waattr;
69    u_int8_t		v_wbattr;
70#define V_WATTREXIST	(1<<0)
71#define V_WATTRREAD	(1<<1)
72#define V_WATTRWRITE	(1<<2)
73    u_int16_t		v_wgran;
74    u_int16_t		v_wsize;
75    u_int16_t		v_waseg;
76    u_int16_t		v_wbseg;
77    u_int32_t		v_posfunc;
78    u_int16_t		v_bpscanline;
79    /* fields optional for 1.0/1.1 implementations */
80    u_int16_t		v_width;
81    u_int16_t		v_height;
82    u_int8_t		v_cwidth;
83    u_int8_t		v_cheight;
84    u_int8_t		v_planes;
85    u_int8_t		v_bpp;
86    u_int8_t		v_banks;
87    u_int8_t		v_memmodel;
88#define V_MMTEXT	0
89#define V_MMCGA		1
90#define V_MMHGC		2
91#define V_MMEGA		3
92#define V_MMPACKED	4
93#define V_MMSEQU256	5
94#define V_MMDIRCOLOR	6
95#define V_MMYUV		7
96    u_int8_t		v_banksize;
97    u_int8_t		v_ipages;
98    u_int8_t		v_reserved0;
99    /* fields for 1.2+ implementations */
100    u_int8_t		v_redmasksize;
101    u_int8_t		v_redfieldpos;
102    u_int8_t		v_greenmasksize;
103    u_int8_t		v_greenfieldpos;
104    u_int8_t		v_bluemasksize;
105    u_int8_t		v_bluefieldpos;
106    u_int8_t		v_resmasksize;
107    u_int8_t		v_resfieldpos;
108    u_int8_t		v_dircolormode;
109    /* 2.0 implementations */
110    u_int32_t		v_lfb;
111    u_int32_t		v_offscreen;
112    u_int16_t		v_offscreensize;
113    /* 3.0 implementations */
114    u_int16_t		v_linbpscanline;
115    u_int8_t		v_bankipages;
116    u_int8_t		v_linipages;
117    u_int8_t		v_linredmasksize;
118    u_int8_t		v_linredfieldpos;
119    u_int8_t		v_lingreenmasksize;
120    u_int8_t		v_lingreenfieldpos;
121    u_int8_t		v_linbluemasksize;
122    u_int8_t		v_linbluefieldpos;
123    u_int8_t		v_linresmasksize;
124    u_int8_t		v_linresfieldpos;
125    u_int32_t		v_maxpixelclock;
126    u_int8_t		v_reserved1[190];
127} __packed;
128
129#ifdef _KERNEL
130
131#define VESA_MODE(x)	((x) >= M_VESA_BASE && (x) <= M_VESA_MODE_MAX)
132
133int vesa_load_ioctl(void);
134int vesa_unload_ioctl(void);
135
136#endif
137
138#endif /* !_DEV_FB_VESA_H_ */
139