1*83d290c5STom Rini /* SPDX-License-Identifier: BSD-2-Clause */ 2647f56e7SSimon Glass /****************************************************************************** 3647f56e7SSimon Glass * Copyright (c) 2004, 2008 IBM Corporation 4647f56e7SSimon Glass * Copyright (c) 2009 Pattrick Hueper <phueper@hueper.net> 5647f56e7SSimon Glass * All rights reserved. 6647f56e7SSimon Glass * 7647f56e7SSimon Glass * Contributors: 8647f56e7SSimon Glass * IBM Corporation - initial implementation 9647f56e7SSimon Glass *****************************************************************************/ 10647f56e7SSimon Glass #ifndef _VBE_H 11647f56e7SSimon Glass #define _VBE_H 12647f56e7SSimon Glass 13647f56e7SSimon Glass /* these structs are for input from and output to OF */ 14a4520022SBin Meng struct __packed vbe_screen_info { 15647f56e7SSimon Glass u8 display_type; /* 0=NONE, 1= analog, 2=digital */ 16647f56e7SSimon Glass u16 screen_width; 17647f56e7SSimon Glass u16 screen_height; 18647f56e7SSimon Glass /* bytes per line in framebuffer, may be more than screen_width */ 19647f56e7SSimon Glass u16 screen_linebytes; 20647f56e7SSimon Glass u8 color_depth; /* color depth in bits per pixel */ 21647f56e7SSimon Glass u32 framebuffer_address; 22647f56e7SSimon Glass u8 edid_block_zero[128]; 23647f56e7SSimon Glass }; 24647f56e7SSimon Glass 25a4520022SBin Meng struct __packed vbe_screen_info_input { 26647f56e7SSimon Glass u8 signature[4]; 27647f56e7SSimon Glass u16 size_reserved; 28647f56e7SSimon Glass u8 monitor_number; 29647f56e7SSimon Glass u16 max_screen_width; 30647f56e7SSimon Glass u8 color_depth; 31647f56e7SSimon Glass }; 32647f56e7SSimon Glass 33647f56e7SSimon Glass /* these structs only store the required a subset of the VBE-defined fields */ 34647f56e7SSimon Glass struct __packed vbe_info { 35647f56e7SSimon Glass char signature[4]; 36647f56e7SSimon Glass u16 version; 37222f25f8SSimon Glass u32 oem_string_ptr; 38647f56e7SSimon Glass u32 capabilities; 39222f25f8SSimon Glass u32 modes_ptr; 40647f56e7SSimon Glass u16 total_memory; 41222f25f8SSimon Glass u16 oem_version; 42222f25f8SSimon Glass u32 vendor_name_ptr; 43222f25f8SSimon Glass u32 product_name_ptr; 44222f25f8SSimon Glass u32 product_rev_ptr; 45647f56e7SSimon Glass }; 46647f56e7SSimon Glass 47647f56e7SSimon Glass struct __packed vesa_mode_info { 48647f56e7SSimon Glass u16 mode_attributes; /* 00 */ 49647f56e7SSimon Glass u8 win_a_attributes; /* 02 */ 50647f56e7SSimon Glass u8 win_b_attributes; /* 03 */ 51647f56e7SSimon Glass u16 win_granularity; /* 04 */ 52647f56e7SSimon Glass u16 win_size; /* 06 */ 53647f56e7SSimon Glass u16 win_a_segment; /* 08 */ 54647f56e7SSimon Glass u16 win_b_segment; /* 0a */ 55647f56e7SSimon Glass u32 win_func_ptr; /* 0c */ 56647f56e7SSimon Glass u16 bytes_per_scanline; /* 10 */ 57647f56e7SSimon Glass u16 x_resolution; /* 12 */ 58647f56e7SSimon Glass u16 y_resolution; /* 14 */ 59647f56e7SSimon Glass u8 x_charsize; /* 16 */ 60647f56e7SSimon Glass u8 y_charsize; /* 17 */ 61647f56e7SSimon Glass u8 number_of_planes; /* 18 */ 62647f56e7SSimon Glass u8 bits_per_pixel; /* 19 */ 63647f56e7SSimon Glass u8 number_of_banks; /* 20 */ 64647f56e7SSimon Glass u8 memory_model; /* 21 */ 65647f56e7SSimon Glass u8 bank_size; /* 22 */ 66647f56e7SSimon Glass u8 number_of_image_pages; /* 23 */ 67647f56e7SSimon Glass u8 reserved_page; 68647f56e7SSimon Glass u8 red_mask_size; 69647f56e7SSimon Glass u8 red_mask_pos; 70647f56e7SSimon Glass u8 green_mask_size; 71647f56e7SSimon Glass u8 green_mask_pos; 72647f56e7SSimon Glass u8 blue_mask_size; 73647f56e7SSimon Glass u8 blue_mask_pos; 74647f56e7SSimon Glass u8 reserved_mask_size; 75647f56e7SSimon Glass u8 reserved_mask_pos; 76647f56e7SSimon Glass u8 direct_color_mode_info; 77647f56e7SSimon Glass u32 phys_base_ptr; 78647f56e7SSimon Glass u32 offscreen_mem_offset; 79647f56e7SSimon Glass u16 offscreen_mem_size; 80647f56e7SSimon Glass u8 reserved[206]; 81647f56e7SSimon Glass }; 82647f56e7SSimon Glass 83647f56e7SSimon Glass struct vbe_mode_info { 84647f56e7SSimon Glass u16 video_mode; 85647f56e7SSimon Glass bool valid; 86647f56e7SSimon Glass union { 87647f56e7SSimon Glass struct vesa_mode_info vesa; 88647f56e7SSimon Glass u8 mode_info_block[256]; 89647f56e7SSimon Glass }; 90647f56e7SSimon Glass }; 91647f56e7SSimon Glass 92647f56e7SSimon Glass struct vbe_ddc_info { 93647f56e7SSimon Glass u8 port_number; /* i.e. monitor number */ 94647f56e7SSimon Glass u8 edid_transfer_time; 95647f56e7SSimon Glass u8 ddc_level; 96647f56e7SSimon Glass u8 edid_block_zero[128]; 97647f56e7SSimon Glass }; 98647f56e7SSimon Glass 99647f56e7SSimon Glass #define VESA_GET_INFO 0x4f00 100647f56e7SSimon Glass #define VESA_GET_MODE_INFO 0x4f01 101647f56e7SSimon Glass #define VESA_SET_MODE 0x4f02 102222f25f8SSimon Glass #define VESA_GET_CUR_MODE 0x4f03 103647f56e7SSimon Glass 104153e1ddaSBin Meng extern struct vbe_mode_info mode_info; 105153e1ddaSBin Meng 106ee87ee82SSimon Glass struct video_priv; 1075f6ad029SBin Meng struct video_uc_platdata; 1085f6ad029SBin Meng int vbe_setup_video_priv(struct vesa_mode_info *vesa, 1095f6ad029SBin Meng struct video_priv *uc_priv, 1105f6ad029SBin Meng struct video_uc_platdata *plat); 111ee87ee82SSimon Glass int vbe_setup_video(struct udevice *dev, int (*int15_handler)(void)); 112647f56e7SSimon Glass 113647f56e7SSimon Glass #endif 114