diff options
author | Bin Meng | 2017-08-15 22:41:52 -0700 |
---|---|---|
committer | Bin Meng | 2017-09-16 14:57:44 +0800 |
commit | 4ff333b7dd0f0d541225f87ebb2523beb7eefcad (patch) | |
tree | ef0df116b69a0d168aad46c3c030a29f20a628fd /arch/x86 | |
parent | bb737ced7fc8c6d49554fb431971df87720b0e00 (diff) |
x86: fsp: Add FSP_GRAPHICS_INFO_HOB
This adds a new HOB type for graphics information introduced in FSP
spec 1.1. When graphics capability is included in FSP and enabled,
FSP produces an FSP_GRAPHICS_INFO_HOB as described in the EFI PI
specification which provides information about the graphics mode and
framebuffer.
Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/include/asm/fsp/fsp_hob.h | 26 | ||||
-rw-r--r-- | arch/x86/include/asm/fsp/fsp_support.h | 12 | ||||
-rw-r--r-- | arch/x86/lib/fsp/fsp_support.c | 7 |
3 files changed, 45 insertions, 0 deletions
diff --git a/arch/x86/include/asm/fsp/fsp_hob.h b/arch/x86/include/asm/fsp/fsp_hob.h index 8ce665e512f..244f86ef3d4 100644 --- a/arch/x86/include/asm/fsp/fsp_hob.h +++ b/arch/x86/include/asm/fsp/fsp_hob.h @@ -127,6 +127,26 @@ struct hob_guid { /* GUID specific data goes here */ }; +enum pixel_format { + pixel_rgbx_8bpc, /* RGB 8 bit per color */ + pixel_bgrx_8bpc, /* BGR 8 bit per color */ + pixel_bitmask, +}; + +struct __packed hob_graphics_info { + phys_addr_t fb_base; /* framebuffer base address */ + u32 fb_size; /* framebuffer size */ + u32 version; + u32 width; + u32 height; + enum pixel_format pixel_format; + u32 red_mask; + u32 green_mask; + u32 blue_mask; + u32 reserved_mask; + u32 pixels_per_scanline; +}; + /** * get_next_hob() - return a pointer to the next HOB in the HOB list * @@ -250,4 +270,10 @@ static inline u16 get_guid_hob_data_size(const struct hob_header *hdr) { 0xb3, 0x16, 0x36, 0x35, 0x36, 0x67, 0xad, 0x44 } \ } +#define FSP_GRAPHICS_INFO_HOB_GUID \ + { \ + 0x39f62cce, 0x6825, 0x4669, \ + { 0xbb, 0x56, 0x54, 0x1a, 0xba, 0x75, 0x3a, 0x07 } \ + } + #endif diff --git a/arch/x86/include/asm/fsp/fsp_support.h b/arch/x86/include/asm/fsp/fsp_support.h index 61d811f70e0..97a50b0a73d 100644 --- a/arch/x86/include/asm/fsp/fsp_support.h +++ b/arch/x86/include/asm/fsp/fsp_support.h @@ -191,6 +191,18 @@ void *fsp_get_nvs_data(const void *hob_list, u32 *len); void *fsp_get_bootloader_tmp_mem(const void *hob_list, u32 *len); /** + * This function retrieves graphics information. + * + * @hob_list: A HOB list pointer. + * @len: A pointer to the graphics info HOB length. + * If the HOB is located, the length will be updated. + * + * @retval NULL: Failed to find the graphics info HOB. + * @retval others: A pointer to struct hob_graphics_info. + */ +void *fsp_get_graphics_info(const void *hob_list, u32 *len); + +/** * This function overrides the default configurations of FSP. * * @config: A pointer to the FSP configuration data structure diff --git a/arch/x86/lib/fsp/fsp_support.c b/arch/x86/lib/fsp/fsp_support.c index ab8340c8715..e0c49be6357 100644 --- a/arch/x86/lib/fsp/fsp_support.c +++ b/arch/x86/lib/fsp/fsp_support.c @@ -425,3 +425,10 @@ void *fsp_get_bootloader_tmp_mem(const void *hob_list, u32 *len) return fsp_get_guid_hob_data(hob_list, len, (struct efi_guid *)&guid); } + +void *fsp_get_graphics_info(const void *hob_list, u32 *len) +{ + const struct efi_guid guid = FSP_GRAPHICS_INFO_HOB_GUID; + + return fsp_get_guid_hob_data(hob_list, len, (struct efi_guid *)&guid); +} |