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