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