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 <syslinux/firmware.h> 32#include <inttypes.h> 33#include <com32.h> 34 35/* VESA General Information table */ 36struct vesa_general_info { 37 uint32_t signature; /* Magic number = "VESA" */ 38 uint16_t version; 39 far_ptr_t vendor_string; 40 uint8_t capabilities[4]; 41 far_ptr_t video_mode_ptr; 42 uint16_t total_memory; 43 44 uint16_t oem_software_rev; 45 far_ptr_t oem_vendor_name_ptr; 46 far_ptr_t oem_product_name_ptr; 47 far_ptr_t oem_product_rev_ptr; 48 49 uint8_t reserved[222]; 50 uint8_t oem_data[256]; 51} __attribute__ ((packed)); 52 53#define VESA_MAGIC ('V' + ('E' << 8) + ('S' << 16) + ('A' << 24)) 54#define VBE2_MAGIC ('V' + ('B' << 8) + ('E' << 16) + ('2' << 24)) 55 56struct vesa_mode_info { 57 uint16_t mode_attr; 58 uint8_t win_attr[2]; 59 uint16_t win_grain; 60 uint16_t win_size; 61 uint16_t win_seg[2]; 62 far_ptr_t win_scheme; 63 uint16_t logical_scan; 64 65 uint16_t h_res; 66 uint16_t v_res; 67 uint8_t char_width; 68 uint8_t char_height; 69 uint8_t memory_planes; 70 uint8_t bpp; 71 uint8_t banks; 72 uint8_t memory_layout; 73 uint8_t bank_size; 74 uint8_t image_pages; 75 uint8_t page_function; 76 77 uint8_t rmask; 78 uint8_t rpos; 79 uint8_t gmask; 80 uint8_t gpos; 81 uint8_t bmask; 82 uint8_t bpos; 83 uint8_t resv_mask; 84 uint8_t resv_pos; 85 uint8_t dcm_info; 86 87 uint8_t *lfb_ptr; /* Linear frame buffer address */ 88 uint8_t *offscreen_ptr; /* Offscreen memory address */ 89 uint16_t offscreen_size; 90 91 uint8_t reserved[206]; 92} __attribute__ ((packed)); 93 94struct vesa_info { 95 struct vesa_general_info gi; 96 struct vesa_mode_info mi; 97}; 98 99extern struct vesa_info __vesa_info; 100 101#if 0 102static inline void vesa_debug(uint32_t color, int pos) 103{ 104 uint32_t *stp = (uint32_t *) __vesa_info.mi.lfb_ptr; 105 stp[pos * 3] = color; 106} 107#else 108static inline void vesa_debug(uint32_t color, int pos) 109{ 110 (void)color; 111 (void)pos; 112} 113#endif 114 115#endif /* LIB_SYS_VESA_H */ 116