1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* ----------------------------------------------------------------------- * 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Copyright 1999-2007 H. Peter Anvin - All Rights Reserved 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * ----------------------------------------------------------------------- */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #ifndef BOOT_VESA_H 9*4882a593Smuzhiyun #define BOOT_VESA_H 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun typedef struct { 12*4882a593Smuzhiyun u16 off, seg; 13*4882a593Smuzhiyun } far_ptr; 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun /* VESA General Information table */ 16*4882a593Smuzhiyun struct vesa_general_info { 17*4882a593Smuzhiyun u32 signature; /* 0 Magic number = "VESA" */ 18*4882a593Smuzhiyun u16 version; /* 4 */ 19*4882a593Smuzhiyun far_ptr vendor_string; /* 6 */ 20*4882a593Smuzhiyun u32 capabilities; /* 10 */ 21*4882a593Smuzhiyun far_ptr video_mode_ptr; /* 14 */ 22*4882a593Smuzhiyun u16 total_memory; /* 18 */ 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun u8 reserved[236]; /* 20 */ 25*4882a593Smuzhiyun } __attribute__ ((packed)); 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun #define VESA_MAGIC ('V' + ('E' << 8) + ('S' << 16) + ('A' << 24)) 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun struct vesa_mode_info { 30*4882a593Smuzhiyun u16 mode_attr; /* 0 */ 31*4882a593Smuzhiyun u8 win_attr[2]; /* 2 */ 32*4882a593Smuzhiyun u16 win_grain; /* 4 */ 33*4882a593Smuzhiyun u16 win_size; /* 6 */ 34*4882a593Smuzhiyun u16 win_seg[2]; /* 8 */ 35*4882a593Smuzhiyun far_ptr win_scheme; /* 12 */ 36*4882a593Smuzhiyun u16 logical_scan; /* 16 */ 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun u16 h_res; /* 18 */ 39*4882a593Smuzhiyun u16 v_res; /* 20 */ 40*4882a593Smuzhiyun u8 char_width; /* 22 */ 41*4882a593Smuzhiyun u8 char_height; /* 23 */ 42*4882a593Smuzhiyun u8 memory_planes; /* 24 */ 43*4882a593Smuzhiyun u8 bpp; /* 25 */ 44*4882a593Smuzhiyun u8 banks; /* 26 */ 45*4882a593Smuzhiyun u8 memory_layout; /* 27 */ 46*4882a593Smuzhiyun u8 bank_size; /* 28 */ 47*4882a593Smuzhiyun u8 image_planes; /* 29 */ 48*4882a593Smuzhiyun u8 page_function; /* 30 */ 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun u8 rmask; /* 31 */ 51*4882a593Smuzhiyun u8 rpos; /* 32 */ 52*4882a593Smuzhiyun u8 gmask; /* 33 */ 53*4882a593Smuzhiyun u8 gpos; /* 34 */ 54*4882a593Smuzhiyun u8 bmask; /* 35 */ 55*4882a593Smuzhiyun u8 bpos; /* 36 */ 56*4882a593Smuzhiyun u8 resv_mask; /* 37 */ 57*4882a593Smuzhiyun u8 resv_pos; /* 38 */ 58*4882a593Smuzhiyun u8 dcm_info; /* 39 */ 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun u32 lfb_ptr; /* 40 Linear frame buffer address */ 61*4882a593Smuzhiyun u32 offscreen_ptr; /* 44 Offscreen memory address */ 62*4882a593Smuzhiyun u16 offscreen_size; /* 48 */ 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun u8 reserved[206]; /* 50 */ 65*4882a593Smuzhiyun } __attribute__ ((packed)); 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun #endif /* LIB_SYS_VESA_H */ 68