xref: /aosp_15_r20/external/coreboot/src/include/vbe.h (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
1 /* SPDX-License-Identifier: BSD-2-Clause */
2 
3 /******************************************************************************
4  * Copyright (c) 2004, 2008 IBM Corporation
5  * Copyright (c) 2009 Pattrick Hueper <[email protected]>
6  * All rights reserved.
7  * This program and the accompanying materials
8  * are made available under the terms of the BSD License
9  * which accompanies this distribution, and is available at
10  * http://www.opensource.org/licenses/bsd-license.php
11  *
12  * Contributors:
13  *     IBM Corporation - initial implementation
14  *****************************************************************************/
15 #ifndef VBE_H
16 #define VBE_H
17 
18 #include <stdint.h>
19 
20 // these structs are for input from and output to OF
21 typedef struct {
22 	u8 display_type;	// 0 = NONE, 1 = analog, 2 = digital
23 	u16 screen_width;
24 	u16 screen_height;
25 	u16 screen_linebytes;	// bytes per line in framebuffer, may be more
26 				// than screen_width
27 	u8 color_depth;	// color depth in bits per pixel
28 	u32 framebuffer_address;
29 	u8 edid_block_zero[128];
30 } __packed screen_info_t;
31 
32 typedef struct {
33 	u8 signature[4];
34 	u16 size_reserved;
35 	u8 monitor_number;
36 	u16 max_screen_width;
37 	u8 color_depth;
38 } __packed screen_info_input_t;
39 
40 typedef struct {
41 	u16 mode_attributes; // 00
42 	u8 win_a_attributes; // 02
43 	u8 win_b_attributes; // 03
44 	u16 win_granularity; // 04
45 	u16 win_size;        // 06
46 	u16 win_a_segment;   // 08
47 	u16 win_b_segment;   // 0a
48 	u32 win_func_ptr;    // 0c
49 	u16 bytes_per_scanline; // 10
50 	u16 x_resolution;    // 12
51 	u16 y_resolution;    // 14
52 	u8 x_charsize;       // 16
53 	u8 y_charsize;       // 17
54 	u8 number_of_planes; // 18
55 	u8 bits_per_pixel;   // 19
56 	u8 number_of_banks;  // 20
57 	u8 memory_model;     // 21
58 	u8 bank_size;        // 22
59 	u8 number_of_image_pages; // 23
60 	u8 reserved_page;
61 	u8 red_mask_size;
62 	u8 red_mask_pos;
63 	u8 green_mask_size;
64 	u8 green_mask_pos;
65 	u8 blue_mask_size;
66 	u8 blue_mask_pos;
67 	u8 reserved_mask_size;
68 	u8 reserved_mask_pos;
69 	u8 direct_color_mode_info;
70 	u32 phys_base_ptr;
71 	u32 offscreen_mem_offset;
72 	u16 offscreen_mem_size;
73 	u8 reserved[206];
74 } __packed vesa_mode_info_t;
75 
76 typedef struct {
77 	u16 video_mode;
78 	union {
79 		vesa_mode_info_t vesa;
80 		u8 mode_info_block[256];
81 	};
82 	// our crap
83 	//u16 attributes;
84 	//u16 linebytes;
85 	//u16 x_resolution;
86 	//u16 y_resolution;
87 	//u8 x_charsize;
88 	//u8 y_charsize;
89 	//u8 bits_per_pixel;
90 	//u8 memory_model;
91 	//u32 framebuffer_address;
92 } vbe_mode_info_t;
93 
94 typedef struct {
95 	u8 port_number;	// i.e. monitor number
96 	u8 edid_transfer_time;
97 	u8 ddc_level;
98 	u8 edid_block_zero[128];
99 } vbe_ddc_info_t;
100 
101 #define VESA_GET_INFO		0x4f00
102 #define VESA_GET_MODE_INFO	0x4f01
103 #define VESA_SET_MODE		0x4f02
104 
105 void vbe_set_graphics(void);
106 void vbe_textmode_console(void);
107 
108 /**
109  * Returns the mode_info struct from the vbe context,
110  * if initialized. NULL on invalid mode_infos.
111  */
112 const vbe_mode_info_t *vbe_mode_info(void);
113 
114 #endif // VBE_H
115