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