1 /****************************************************************************** 2 * Copyright (c) 2004, 2008 IBM Corporation 3 * Copyright (c) 2009 Pattrick Hueper <phueper@hueper.net> 4 * All rights reserved. 5 * 6 * SPDX-License-Identifier: BSD-2-Clause 7 * 8 * Contributors: 9 * IBM Corporation - initial implementation 10 *****************************************************************************/ 11 #ifndef _VBE_H 12 #define _VBE_H 13 14 /* these structs are for input from and output to OF */ 15 struct __packed screen_info { 16 u8 display_type; /* 0=NONE, 1= analog, 2=digital */ 17 u16 screen_width; 18 u16 screen_height; 19 /* bytes per line in framebuffer, may be more than screen_width */ 20 u16 screen_linebytes; 21 u8 color_depth; /* color depth in bits per pixel */ 22 u32 framebuffer_address; 23 u8 edid_block_zero[128]; 24 }; 25 26 struct __packed screen_info_input { 27 u8 signature[4]; 28 u16 size_reserved; 29 u8 monitor_number; 30 u16 max_screen_width; 31 u8 color_depth; 32 }; 33 34 /* these structs only store the required a subset of the VBE-defined fields */ 35 struct __packed vbe_info { 36 char signature[4]; 37 u16 version; 38 u8 *oem_string_ptr; 39 u32 capabilities; 40 u16 video_mode_list[256]; 41 u16 total_memory; 42 }; 43 44 struct __packed vesa_mode_info { 45 u16 mode_attributes; /* 00 */ 46 u8 win_a_attributes; /* 02 */ 47 u8 win_b_attributes; /* 03 */ 48 u16 win_granularity; /* 04 */ 49 u16 win_size; /* 06 */ 50 u16 win_a_segment; /* 08 */ 51 u16 win_b_segment; /* 0a */ 52 u32 win_func_ptr; /* 0c */ 53 u16 bytes_per_scanline; /* 10 */ 54 u16 x_resolution; /* 12 */ 55 u16 y_resolution; /* 14 */ 56 u8 x_charsize; /* 16 */ 57 u8 y_charsize; /* 17 */ 58 u8 number_of_planes; /* 18 */ 59 u8 bits_per_pixel; /* 19 */ 60 u8 number_of_banks; /* 20 */ 61 u8 memory_model; /* 21 */ 62 u8 bank_size; /* 22 */ 63 u8 number_of_image_pages; /* 23 */ 64 u8 reserved_page; 65 u8 red_mask_size; 66 u8 red_mask_pos; 67 u8 green_mask_size; 68 u8 green_mask_pos; 69 u8 blue_mask_size; 70 u8 blue_mask_pos; 71 u8 reserved_mask_size; 72 u8 reserved_mask_pos; 73 u8 direct_color_mode_info; 74 u32 phys_base_ptr; 75 u32 offscreen_mem_offset; 76 u16 offscreen_mem_size; 77 u8 reserved[206]; 78 }; 79 80 struct vbe_mode_info { 81 u16 video_mode; 82 bool valid; 83 union { 84 struct vesa_mode_info vesa; 85 u8 mode_info_block[256]; 86 }; 87 }; 88 89 struct vbe_ddc_info { 90 u8 port_number; /* i.e. monitor number */ 91 u8 edid_transfer_time; 92 u8 ddc_level; 93 u8 edid_block_zero[128]; 94 }; 95 96 #define VESA_GET_INFO 0x4f00 97 #define VESA_GET_MODE_INFO 0x4f01 98 #define VESA_SET_MODE 0x4f02 99 100 struct graphic_device; 101 int vbe_get_video_info(struct graphic_device *gdev); 102 103 #endif 104