1f45c063aSXin LI /*- 2*4d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause 3718cf2ccSPedro 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 29ee5e90daSXin LI #ifndef _DEV_FB_VESA_H_ 30ee5e90daSXin LI #define _DEV_FB_VESA_H_ 31f45c063aSXin LI 32f45c063aSXin LI struct vesa_info 33f45c063aSXin LI { 34f45c063aSXin LI /* mandatory fields */ 35f45c063aSXin LI u_int8_t v_sig[4]; /* VESA */ 36f45c063aSXin LI u_int16_t v_version; /* ver in BCD */ 37f45c063aSXin LI u_int32_t v_oemstr; /* OEM string */ 38f45c063aSXin LI u_int32_t v_flags; /* flags */ 39f45c063aSXin LI #define V_DAC8 (1<<0) 40f45c063aSXin LI #define V_NONVGA (1<<1) 41f45c063aSXin LI #define V_SNOW (1<<2) 42f45c063aSXin LI u_int32_t v_modetable; /* modes */ 43f45c063aSXin LI u_int16_t v_memsize; /* in 64K */ 44f45c063aSXin LI /* 2.0 */ 45f45c063aSXin LI u_int16_t v_revision; /* software rev */ 46f45c063aSXin LI u_int32_t v_venderstr; /* vender */ 47f45c063aSXin LI u_int32_t v_prodstr; /* product name */ 48f45c063aSXin LI u_int32_t v_revstr; /* product rev */ 49ee5e90daSXin LI u_int8_t v_strach[222]; 50ee5e90daSXin LI u_int8_t v_oemdata[256]; 51f45c063aSXin LI } __packed; 52f45c063aSXin LI 53f45c063aSXin LI struct vesa_mode 54f45c063aSXin LI { 55f45c063aSXin LI /* mandatory fields */ 56f45c063aSXin LI u_int16_t v_modeattr; 57f45c063aSXin LI #define V_MODESUPP (1<<0) /* VESA mode attributes */ 58f45c063aSXin LI #define V_MODEOPTINFO (1<<1) 59f45c063aSXin LI #define V_MODEBIOSOUT (1<<2) 60f45c063aSXin LI #define V_MODECOLOR (1<<3) 61f45c063aSXin LI #define V_MODEGRAPHICS (1<<4) 62f45c063aSXin LI #define V_MODENONVGA (1<<5) 63f45c063aSXin LI #define V_MODENONBANK (1<<6) 64f45c063aSXin LI #define V_MODELFB (1<<7) 65f45c063aSXin LI #define V_MODEVESA (1<<16) /* Private attributes */ 66f45c063aSXin LI u_int8_t v_waattr; 67f45c063aSXin LI u_int8_t v_wbattr; 68f45c063aSXin LI #define V_WATTREXIST (1<<0) 69f45c063aSXin LI #define V_WATTRREAD (1<<1) 70f45c063aSXin LI #define V_WATTRWRITE (1<<2) 71f45c063aSXin LI u_int16_t v_wgran; 72f45c063aSXin LI u_int16_t v_wsize; 73f45c063aSXin LI u_int16_t v_waseg; 74f45c063aSXin LI u_int16_t v_wbseg; 75f45c063aSXin LI u_int32_t v_posfunc; 76f45c063aSXin LI u_int16_t v_bpscanline; 77f45c063aSXin LI /* fields optional for 1.0/1.1 implementations */ 78f45c063aSXin LI u_int16_t v_width; 79f45c063aSXin LI u_int16_t v_height; 80f45c063aSXin LI u_int8_t v_cwidth; 81f45c063aSXin LI u_int8_t v_cheight; 82f45c063aSXin LI u_int8_t v_planes; 83f45c063aSXin LI u_int8_t v_bpp; 84f45c063aSXin LI u_int8_t v_banks; 85f45c063aSXin LI u_int8_t v_memmodel; 86f45c063aSXin LI #define V_MMTEXT 0 87f45c063aSXin LI #define V_MMCGA 1 88f45c063aSXin LI #define V_MMHGC 2 89f45c063aSXin LI #define V_MMEGA 3 90f45c063aSXin LI #define V_MMPACKED 4 91f45c063aSXin LI #define V_MMSEQU256 5 92f45c063aSXin LI #define V_MMDIRCOLOR 6 93f45c063aSXin LI #define V_MMYUV 7 94f45c063aSXin LI u_int8_t v_banksize; 95f45c063aSXin LI u_int8_t v_ipages; 96f45c063aSXin LI u_int8_t v_reserved0; 97f45c063aSXin LI /* fields for 1.2+ implementations */ 98f45c063aSXin LI u_int8_t v_redmasksize; 99f45c063aSXin LI u_int8_t v_redfieldpos; 100f45c063aSXin LI u_int8_t v_greenmasksize; 101f45c063aSXin LI u_int8_t v_greenfieldpos; 102f45c063aSXin LI u_int8_t v_bluemasksize; 103f45c063aSXin LI u_int8_t v_bluefieldpos; 104f45c063aSXin LI u_int8_t v_resmasksize; 105f45c063aSXin LI u_int8_t v_resfieldpos; 106f45c063aSXin LI u_int8_t v_dircolormode; 107f45c063aSXin LI /* 2.0 implementations */ 108f45c063aSXin LI u_int32_t v_lfb; 109f45c063aSXin LI u_int32_t v_offscreen; 110f45c063aSXin LI u_int16_t v_offscreensize; 111a0ce3346SJung-uk Kim /* 3.0 implementations */ 112a0ce3346SJung-uk Kim u_int16_t v_linbpscanline; 113a0ce3346SJung-uk Kim u_int8_t v_bankipages; 114a0ce3346SJung-uk Kim u_int8_t v_linipages; 115a0ce3346SJung-uk Kim u_int8_t v_linredmasksize; 116a0ce3346SJung-uk Kim u_int8_t v_linredfieldpos; 117a0ce3346SJung-uk Kim u_int8_t v_lingreenmasksize; 118a0ce3346SJung-uk Kim u_int8_t v_lingreenfieldpos; 119a0ce3346SJung-uk Kim u_int8_t v_linbluemasksize; 120a0ce3346SJung-uk Kim u_int8_t v_linbluefieldpos; 121a0ce3346SJung-uk Kim u_int8_t v_linresmasksize; 122a0ce3346SJung-uk Kim u_int8_t v_linresfieldpos; 123a0ce3346SJung-uk Kim u_int32_t v_maxpixelclock; 124a0ce3346SJung-uk Kim u_int8_t v_reserved1[190]; 125a0ce3346SJung-uk Kim } __packed; 126f45c063aSXin LI 127f45c063aSXin LI #ifdef _KERNEL 128f45c063aSXin LI 12960474b7bSJung-uk Kim #define VESA_MODE(x) ((x) >= M_VESA_BASE && (x) <= M_VESA_MODE_MAX) 130f45c063aSXin LI 131f45c063aSXin LI int vesa_load_ioctl(void); 132f45c063aSXin LI int vesa_unload_ioctl(void); 133f45c063aSXin LI 134f45c063aSXin LI #endif 135f45c063aSXin LI 136ee5e90daSXin LI #endif /* !_DEV_FB_VESA_H_ */ 137