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