forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'x86-efi-for-linus' of git://git.kernel.org/pub/scm/linu…
…x/kernel/git/tip/tip Pull x86/EFI changes from Ingo Molnar: "EFI loader robustness enhancements plus smaller fixes" * 'x86-efi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: efi: Fix the ACPI BGRT driver for images located in EFI boot services memory efi: Add a function to look up existing IO memory mappings efi: Defer freeing boot services memory until after ACPI init x86, EFI: Calculate the EFI framebuffer size instead of trusting the firmware efifb: Skip DMI checks if the bootloader knows what it's doing efi: initialize efi.runtime_version to make query_variable_info/update_capsule workable efi: Build EFI stub with EFI-appropriate options X86: Improve GOP detection in the EFI boot stub
- Loading branch information
Showing
13 changed files
with
207 additions
and
97 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,2 @@ | ||
obj-$(CONFIG_EFI) += efi.o efi_$(BITS).o efi_stub_$(BITS).o | ||
obj-$(CONFIG_ACPI_BGRT) += efi-bgrt.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
/* | ||
* Copyright 2012 Intel Corporation | ||
* Author: Josh Triplett <[email protected]> | ||
* | ||
* Based on the bgrt driver: | ||
* Copyright 2012 Red Hat, Inc <[email protected]> | ||
* Author: Matthew Garrett | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
*/ | ||
#include <linux/kernel.h> | ||
#include <linux/acpi.h> | ||
#include <linux/efi.h> | ||
#include <linux/efi-bgrt.h> | ||
|
||
struct acpi_table_bgrt *bgrt_tab; | ||
void *bgrt_image; | ||
size_t bgrt_image_size; | ||
|
||
struct bmp_header { | ||
u16 id; | ||
u32 size; | ||
} __packed; | ||
|
||
void efi_bgrt_init(void) | ||
{ | ||
acpi_status status; | ||
void __iomem *image; | ||
bool ioremapped = false; | ||
struct bmp_header bmp_header; | ||
|
||
if (acpi_disabled) | ||
return; | ||
|
||
status = acpi_get_table("BGRT", 0, | ||
(struct acpi_table_header **)&bgrt_tab); | ||
if (ACPI_FAILURE(status)) | ||
return; | ||
|
||
if (bgrt_tab->version != 1) | ||
return; | ||
if (bgrt_tab->image_type != 0 || !bgrt_tab->image_address) | ||
return; | ||
|
||
image = efi_lookup_mapped_addr(bgrt_tab->image_address); | ||
if (!image) { | ||
image = ioremap(bgrt_tab->image_address, sizeof(bmp_header)); | ||
ioremapped = true; | ||
if (!image) | ||
return; | ||
} | ||
|
||
memcpy_fromio(&bmp_header, image, sizeof(bmp_header)); | ||
if (ioremapped) | ||
iounmap(image); | ||
bgrt_image_size = bmp_header.size; | ||
|
||
bgrt_image = kmalloc(bgrt_image_size, GFP_KERNEL); | ||
if (!bgrt_image) | ||
return; | ||
|
||
if (ioremapped) { | ||
image = ioremap(bgrt_tab->image_address, bmp_header.size); | ||
if (!image) { | ||
kfree(bgrt_image); | ||
bgrt_image = NULL; | ||
return; | ||
} | ||
} | ||
|
||
memcpy_fromio(bgrt_image, image, bgrt_image_size); | ||
if (ioremapped) | ||
iounmap(image); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.