1*dd165a65SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */ 296ae6ea0SThomas Gleixner /* ----------------------------------------------------------------------- * 396ae6ea0SThomas Gleixner * 496ae6ea0SThomas Gleixner * Copyright 1999-2007 H. Peter Anvin - All Rights Reserved 596ae6ea0SThomas Gleixner * 696ae6ea0SThomas Gleixner * ----------------------------------------------------------------------- */ 796ae6ea0SThomas Gleixner 896ae6ea0SThomas Gleixner #ifndef BOOT_VESA_H 996ae6ea0SThomas Gleixner #define BOOT_VESA_H 1096ae6ea0SThomas Gleixner 1196ae6ea0SThomas Gleixner typedef struct { 1296ae6ea0SThomas Gleixner u16 off, seg; 1396ae6ea0SThomas Gleixner } far_ptr; 1496ae6ea0SThomas Gleixner 1596ae6ea0SThomas Gleixner /* VESA General Information table */ 1696ae6ea0SThomas Gleixner struct vesa_general_info { 1796ae6ea0SThomas Gleixner u32 signature; /* 0 Magic number = "VESA" */ 1896ae6ea0SThomas Gleixner u16 version; /* 4 */ 1996ae6ea0SThomas Gleixner far_ptr vendor_string; /* 6 */ 2096ae6ea0SThomas Gleixner u32 capabilities; /* 10 */ 2196ae6ea0SThomas Gleixner far_ptr video_mode_ptr; /* 14 */ 2296ae6ea0SThomas Gleixner u16 total_memory; /* 18 */ 2396ae6ea0SThomas Gleixner 241722770fSPeter Korsgaard u8 reserved[236]; /* 20 */ 2596ae6ea0SThomas Gleixner } __attribute__ ((packed)); 2696ae6ea0SThomas Gleixner 2796ae6ea0SThomas Gleixner #define VESA_MAGIC ('V' + ('E' << 8) + ('S' << 16) + ('A' << 24)) 2896ae6ea0SThomas Gleixner 2996ae6ea0SThomas Gleixner struct vesa_mode_info { 3096ae6ea0SThomas Gleixner u16 mode_attr; /* 0 */ 3196ae6ea0SThomas Gleixner u8 win_attr[2]; /* 2 */ 3296ae6ea0SThomas Gleixner u16 win_grain; /* 4 */ 3396ae6ea0SThomas Gleixner u16 win_size; /* 6 */ 3496ae6ea0SThomas Gleixner u16 win_seg[2]; /* 8 */ 3596ae6ea0SThomas Gleixner far_ptr win_scheme; /* 12 */ 3696ae6ea0SThomas Gleixner u16 logical_scan; /* 16 */ 3796ae6ea0SThomas Gleixner 3896ae6ea0SThomas Gleixner u16 h_res; /* 18 */ 3996ae6ea0SThomas Gleixner u16 v_res; /* 20 */ 4096ae6ea0SThomas Gleixner u8 char_width; /* 22 */ 4196ae6ea0SThomas Gleixner u8 char_height; /* 23 */ 4296ae6ea0SThomas Gleixner u8 memory_planes; /* 24 */ 4396ae6ea0SThomas Gleixner u8 bpp; /* 25 */ 4496ae6ea0SThomas Gleixner u8 banks; /* 26 */ 4596ae6ea0SThomas Gleixner u8 memory_layout; /* 27 */ 4696ae6ea0SThomas Gleixner u8 bank_size; /* 28 */ 4796ae6ea0SThomas Gleixner u8 image_planes; /* 29 */ 4896ae6ea0SThomas Gleixner u8 page_function; /* 30 */ 4996ae6ea0SThomas Gleixner 5096ae6ea0SThomas Gleixner u8 rmask; /* 31 */ 5196ae6ea0SThomas Gleixner u8 rpos; /* 32 */ 5296ae6ea0SThomas Gleixner u8 gmask; /* 33 */ 5396ae6ea0SThomas Gleixner u8 gpos; /* 34 */ 5496ae6ea0SThomas Gleixner u8 bmask; /* 35 */ 5596ae6ea0SThomas Gleixner u8 bpos; /* 36 */ 5696ae6ea0SThomas Gleixner u8 resv_mask; /* 37 */ 5796ae6ea0SThomas Gleixner u8 resv_pos; /* 38 */ 5896ae6ea0SThomas Gleixner u8 dcm_info; /* 39 */ 5996ae6ea0SThomas Gleixner 6096ae6ea0SThomas Gleixner u32 lfb_ptr; /* 40 Linear frame buffer address */ 6196ae6ea0SThomas Gleixner u32 offscreen_ptr; /* 44 Offscreen memory address */ 6296ae6ea0SThomas Gleixner u16 offscreen_size; /* 48 */ 6396ae6ea0SThomas Gleixner 6496ae6ea0SThomas Gleixner u8 reserved[206]; /* 50 */ 6596ae6ea0SThomas Gleixner } __attribute__ ((packed)); 6696ae6ea0SThomas Gleixner 6796ae6ea0SThomas Gleixner #endif /* LIB_SYS_VESA_H */ 68