1 /* ----------------------------------------------------------------------- * 2 * 3 * Copyright 1999-2008 H. Peter Anvin - All Rights Reserved 4 * 5 * Permission is hereby granted, free of charge, to any person 6 * obtaining a copy of this software and associated documentation 7 * files (the "Software"), to deal in the Software without 8 * restriction, including without limitation the rights to use, 9 * copy, modify, merge, publish, distribute, sublicense, and/or 10 * sell copies of the Software, and to permit persons to whom 11 * the Software is furnished to do so, subject to the following 12 * conditions: 13 * 14 * The above copyright notice and this permission notice shall 15 * be included in all copies or substantial portions of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 18 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 19 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 20 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 21 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 22 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 23 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 24 * OTHER DEALINGS IN THE SOFTWARE. 25 * 26 * ----------------------------------------------------------------------- */ 27 28 #ifndef LIB_SYS_VESA_H 29 #define LIB_SYS_VESA_H 30 31 #include <inttypes.h> 32 #include <com32.h> 33 34 /* VESA General Information table */ 35 struct vesa_general_info { 36 uint32_t signature; /* Magic number = "VESA" */ 37 uint16_t version; 38 far_ptr_t vendor_string; 39 uint8_t capabilities[4]; 40 far_ptr_t video_mode_ptr; 41 uint16_t total_memory; 42 43 uint16_t oem_software_rev; 44 far_ptr_t oem_vendor_name_ptr; 45 far_ptr_t oem_product_name_ptr; 46 far_ptr_t oem_product_rev_ptr; 47 48 uint8_t reserved[222]; 49 uint8_t oem_data[256]; 50 } __attribute__ ((packed)); 51 52 #define VESA_MAGIC ('V' + ('E' << 8) + ('S' << 16) + ('A' << 24)) 53 #define VBE2_MAGIC ('V' + ('B' << 8) + ('E' << 16) + ('2' << 24)) 54 55 struct vesa_mode_info { 56 uint16_t mode_attr; 57 uint8_t win_attr[2]; 58 uint16_t win_grain; 59 uint16_t win_size; 60 uint16_t win_seg[2]; 61 far_ptr_t win_scheme; 62 uint16_t logical_scan; 63 64 uint16_t h_res; 65 uint16_t v_res; 66 uint8_t char_width; 67 uint8_t char_height; 68 uint8_t memory_planes; 69 uint8_t bpp; 70 uint8_t banks; 71 uint8_t memory_layout; 72 uint8_t bank_size; 73 uint8_t image_pages; 74 uint8_t page_function; 75 76 uint8_t rmask; 77 uint8_t rpos; 78 uint8_t gmask; 79 uint8_t gpos; 80 uint8_t bmask; 81 uint8_t bpos; 82 uint8_t resv_mask; 83 uint8_t resv_pos; 84 uint8_t dcm_info; 85 86 uint8_t *lfb_ptr; /* Linear frame buffer address */ 87 uint8_t *offscreen_ptr; /* Offscreen memory address */ 88 uint16_t offscreen_size; 89 90 uint8_t reserved[206]; 91 } __attribute__ ((packed)); 92 93 struct vesa_info { 94 struct vesa_general_info gi; 95 struct vesa_mode_info mi; 96 }; 97 98 extern struct vesa_info vesa_info; 99 100 #endif /* LIB_SYS_VESA_H */ 101