EFIAPI get_first_guid_hob( CONST EFI_GUID * guid ) { return get_next_guid_hob(guid, get_hob_list()); }
int fill_lb_framebuffer(struct lb_framebuffer *framebuffer) { VOID *hob_list_ptr; hob_list_ptr = get_hob_list(); const EFI_GUID vbt_guid = EFI_PEI_GRAPHICS_INFO_HOB_GUID; u32 *vbt_hob; EFI_PEI_GRAPHICS_INFO_HOB *vbt_gop; vbt_hob = get_next_guid_hob(&vbt_guid, hob_list_ptr); if (vbt_hob == NULL) { printk(BIOS_ERR, "FSP_ERR: Graphics Data HOB is not present\n"); return -1; } printk(BIOS_DEBUG, "FSP_DEBUG: Graphics Data HOB present\n"); vbt_gop = GET_GUID_HOB_DATA(vbt_hob); framebuffer->physical_address = vbt_gop->FrameBufferBase; framebuffer->x_resolution = vbt_gop->GraphicsMode.HorizontalResolution; framebuffer->y_resolution = vbt_gop->GraphicsMode.VerticalResolution; framebuffer->bytes_per_line = vbt_gop->GraphicsMode.PixelsPerScanLine * 4; framebuffer->bits_per_pixel = 32; framebuffer->red_mask_pos = 16; framebuffer->red_mask_size = 8; framebuffer->green_mask_pos = 8; framebuffer->green_mask_size = 8; framebuffer->blue_mask_pos = 0; framebuffer->blue_mask_size = 8; framebuffer->reserved_mask_pos = 24; framebuffer->reserved_mask_size = 8; return 0; }
EFIAPI get_first_hob( UINT16 type ) { VOID *hob_list; hob_list = get_hob_list(); return get_next_hob(type, hob_list); }
static void find_fsp_hob_update_mrc(void *unused) { void *hob_list_ptr; /* 0x0000: Print all types */ hob_list_ptr = get_hob_list(); #if IS_ENABLED(CONFIG_DISPLAY_HOBS) print_hob_type_structure(0x000, hob_list_ptr); #endif #if IS_ENABLED(CONFIG_ENABLE_MRC_CACHE) if (save_mrc_data(hob_list_ptr)) update_mrc_cache(NULL); else printk(BIOS_DEBUG, "Not updating MRC data in flash.\n"); #endif }
static void display_hob_info(FSP_INFO_HEADER *fsp_info_header) { const EFI_GUID graphics_info_guid = EFI_PEI_GRAPHICS_INFO_HOB_GUID; int missing_hob = 0; void *hob_list_ptr = get_hob_list(); if (!IS_ENABLED(CONFIG_DISPLAY_HOBS)) return; /* Verify the HOBs */ if (hob_list_ptr == NULL) { printk(BIOS_INFO, "ERROR - HOB pointer is NULL!\n"); return; } print_hob_type_structure(0, hob_list_ptr); /* * Verify that FSP is generating the required HOBs: * 7.1: FSP_BOOTLOADER_TEMP_MEMORY_HOB only produced for FSP 1.0 * 7.2: FSP_RESERVED_MEMORY_RESOURCE_HOB verified by raminit * 7.3: FSP_NON_VOLATILE_STORAGE_HOB verified by raminit * 7.4: FSP_BOOTLOADER_TOLUM_HOB verified by raminit * 7.5: EFI_PEI_GRAPHICS_INFO_HOB verified below, * if the ImageAttribute bit is set * FSP_SMBIOS_MEMORY_INFO HOB verified by raminit */ if ((fsp_info_header->ImageAttribute & GRAPHICS_SUPPORT_BIT) && !get_next_guid_hob(&graphics_info_guid, hob_list_ptr)) { printk(BIOS_INFO, "7.5: EFI_PEI_GRAPHICS_INFO_HOB missing!\n"); missing_hob = 1; } if (missing_hob) printk(BIOS_INFO, "ERROR - Missing one or more required FSP HOBs!\n"); }
/* * Returns the first instance of the matched GUID HOB among the whole HOB list. */ void *get_first_guid_hob(const EFI_GUID *guid) { return get_next_guid_hob(guid, get_hob_list()); }
/* Returns the first instance of a HOB type among the whole HOB list. */ void *get_first_hob(uint16_t type) { return get_next_hob(type, get_hob_list()); }
static void fsp_run_silicon_init(int is_s3_wakeup) { FSP_INFO_HEADER *fsp_info_header; FSP_SILICON_INIT fsp_silicon_init; SILICON_INIT_UPD *original_params; SILICON_INIT_UPD silicon_init_params; EFI_STATUS status; UPD_DATA_REGION *upd_ptr; VPD_DATA_REGION *vpd_ptr; /* Find the FSP image */ fsp_info_header = fsp_get_fih(); if (fsp_info_header == NULL) { printk(BIOS_ERR, "FSP_INFO_HEADER not set!\n"); return; } print_fsp_info(fsp_info_header); /* Initialize the UPD values */ vpd_ptr = (VPD_DATA_REGION *)(fsp_info_header->CfgRegionOffset + fsp_info_header->ImageBase); printk(BIOS_DEBUG, "0x%p: VPD Data\n", vpd_ptr); upd_ptr = (UPD_DATA_REGION *)(vpd_ptr->PcdUpdRegionOffset + fsp_info_header->ImageBase); printk(BIOS_DEBUG, "0x%p: UPD Data\n", upd_ptr); original_params = (void *)((u8 *)upd_ptr + upd_ptr->SiliconInitUpdOffset); memcpy(&silicon_init_params, original_params, sizeof(silicon_init_params)); soc_silicon_init_params(&silicon_init_params); /* Locate VBT and pass to FSP GOP */ if (IS_ENABLED(CONFIG_GOP_SUPPORT)) load_vbt(is_s3_wakeup, &silicon_init_params); mainboard_silicon_init_params(&silicon_init_params); /* Display the UPD data */ if (IS_ENABLED(CONFIG_DISPLAY_UPD_DATA)) soc_display_silicon_init_params(original_params, &silicon_init_params); /* Perform silicon initialization after RAM is configured */ printk(BIOS_DEBUG, "Calling FspSiliconInit\n"); fsp_silicon_init = (FSP_SILICON_INIT)(fsp_info_header->ImageBase + fsp_info_header->FspSiliconInitEntryOffset); timestamp_add_now(TS_FSP_SILICON_INIT_START); printk(BIOS_DEBUG, "Calling FspSiliconInit(0x%p) at 0x%p\n", &silicon_init_params, fsp_silicon_init); status = fsp_silicon_init(&silicon_init_params); timestamp_add_now(TS_FSP_SILICON_INIT_END); printk(BIOS_DEBUG, "FspSiliconInit returned 0x%08x\n", status); #if IS_ENABLED(CONFIG_DISPLAY_HOBS) /* Verify the HOBs */ const EFI_GUID graphics_info_guid = EFI_PEI_GRAPHICS_INFO_HOB_GUID; void *hob_list_ptr = get_hob_list(); int missing_hob = 0; if (hob_list_ptr == NULL) die("ERROR - HOB pointer is NULL!\n"); print_hob_type_structure(0, hob_list_ptr); /* * Verify that FSP is generating the required HOBs: * 7.1: FSP_BOOTLOADER_TEMP_MEMORY_HOB only produced for FSP 1.0 * 7.2: FSP_RESERVED_MEMORY_RESOURCE_HOB verified by raminit * 7.3: FSP_NON_VOLATILE_STORAGE_HOB verified by raminit * 7.4: FSP_BOOTLOADER_TOLUM_HOB verified by raminit * 7.5: EFI_PEI_GRAPHICS_INFO_HOB verified below, * if the ImageAttribute bit is set * FSP_SMBIOS_MEMORY_INFO HOB verified by raminit */ if ((fsp_info_header->ImageAttribute & GRAPHICS_SUPPORT_BIT) && !get_next_guid_hob(&graphics_info_guid, hob_list_ptr)) { printk(BIOS_ERR, "7.5: EFI_PEI_GRAPHICS_INFO_HOB missing!\n"); missing_hob = 1; } if (missing_hob) die("ERROR - Missing one or more required FSP HOBs!\n"); #endif soc_after_silicon_init(); }