xref: /rk3399_rockchip-uboot/include/vbe.h (revision 647f56e74e398f40891b9997ae06b9fdb776825e)
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