From: Roy Franz <roy.franz@linaro.org>
To: xen-devel@lists.xen.org, ian.campbell@citrix.com,
stefano.stabellini@citrix.com, tim@xen.org, jbeulich@suse.com,
keir@xen.org
Cc: Roy Franz <roy.franz@linaro.org>, fu.wei@linaro.org
Subject: [PATCH for-4.5 V6 12/14] Add efi_arch_use_config_file() function to control use of config file
Date: Tue, 23 Sep 2014 22:03:10 -0700 [thread overview]
Message-ID: <1411534992-27443-13-git-send-email-roy.franz@linaro.org> (raw)
In-Reply-To: <1411534992-27443-1-git-send-email-roy.franz@linaro.org>
The x86 EFI build of Xen always uses a configuration file to load modules, but
the ARM version can either use a config file to specify the modules, or be
loaded by GRUB in which case GRUB loads the modules and adds them to the DTB
that is passed to Xen. Add the efi_arch_use_config_file() to indicate if a
configuration file is required. For x86, this will always be true. ARM will
examine the DTB passed via EFI configuration table (if any), and if it contains
module information will use that that not use the configuration file at all.
Add Emacs footer to efi-boot.h and boot.c
Signed-off-by: Roy Franz <roy.franz@linaro.org>
Acked-by: Jan Beulich <jbeulich@suse.com>
---
xen/arch/x86/efi/efi-boot.h | 14 ++++
xen/common/efi/boot.c | 179 +++++++++++++++++++++++---------------------
2 files changed, 107 insertions(+), 86 deletions(-)
diff --git a/xen/arch/x86/efi/efi-boot.h b/xen/arch/x86/efi/efi-boot.h
index e2c9e87..72037a5 100644
--- a/xen/arch/x86/efi/efi-boot.h
+++ b/xen/arch/x86/efi/efi-boot.h
@@ -619,3 +619,17 @@ static void __init efi_arch_load_addr_check(EFI_LOADED_IMAGE *loaded_image)
blexit(L"Xen must be loaded at a 2Mb boundary.");
trampoline_xen_phys_start = xen_phys_start;
}
+
+static bool_t __init efi_arch_use_config_file(EFI_SYSTEM_TABLE *SystemTable)
+{
+ return 1; /* x86 always uses a config file */
+}
+
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: "BSD"
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/xen/common/efi/boot.c b/xen/common/efi/boot.c
index 4352b48..d5c9355 100644
--- a/xen/common/efi/boot.c
+++ b/xen/common/efi/boot.c
@@ -687,7 +687,6 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
EFI_SHIM_LOCK_PROTOCOL *shim_lock;
EFI_GRAPHICS_OUTPUT_PROTOCOL *gop = NULL;
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *mode_info;
- EFI_FILE_HANDLE dir_handle;
union string section = { NULL }, name;
bool_t base_video = 0;
char *option_str;
@@ -711,9 +710,6 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
efi_arch_load_addr_check(loaded_image);
- /* Get the file system interface. */
- dir_handle = get_parent_handle(loaded_image, &file_name);
-
argc = get_argv(0, NULL, loaded_image->LoadOptions,
loaded_image->LoadOptionsSize, NULL);
if ( argc > 0 &&
@@ -809,109 +805,120 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
if ( EFI_ERROR(status) )
gop = NULL;
- /* Read and parse the config file. */
- if ( !cfg_file_name )
+ cols = rows = depth = 0;
+ if ( efi_arch_use_config_file(SystemTable) )
{
- CHAR16 *tail;
+ EFI_FILE_HANDLE dir_handle;
- while ( (tail = point_tail(file_name)) != NULL )
+ /* Get the file system interface. */
+ dir_handle = get_parent_handle(loaded_image, &file_name);
+
+ /* Read and parse the config file. */
+ if ( !cfg_file_name )
{
- wstrcpy(tail, L".cfg");
- if ( read_file(dir_handle, file_name, &cfg, NULL) )
- break;
- *tail = 0;
+ CHAR16 *tail;
+
+ while ( (tail = point_tail(file_name)) != NULL )
+ {
+ wstrcpy(tail, L".cfg");
+ if ( read_file(dir_handle, file_name, &cfg, NULL) )
+ break;
+ *tail = 0;
+ }
+ if ( !tail )
+ blexit(L"No configuration file found.");
+ PrintStr(L"Using configuration file '");
+ PrintStr(file_name);
+ PrintStr(L"'\r\n");
}
- if ( !tail )
- blexit(L"No configuration file found.");
- PrintStr(L"Using configuration file '");
- PrintStr(file_name);
- PrintStr(L"'\r\n");
- }
- else if ( !read_file(dir_handle, cfg_file_name, &cfg, NULL) )
- blexit(L"Configuration file not found.");
- pre_parse(&cfg);
+ else if ( !read_file(dir_handle, cfg_file_name, &cfg, NULL) )
+ blexit(L"Configuration file not found.");
+ pre_parse(&cfg);
- if ( section.w )
- w2s(§ion);
- else
- section.s = get_value(&cfg, "global", "default");
+ if ( section.w )
+ w2s(§ion);
+ else
+ section.s = get_value(&cfg, "global", "default");
- for ( ; ; )
- {
- name.s = get_value(&cfg, section.s, "kernel");
- if ( name.s )
- break;
- name.s = get_value(&cfg, "global", "chain");
- if ( !name.s )
- break;
- efi_bs->FreePages(cfg.addr, PFN_UP(cfg.size));
- cfg.addr = 0;
- if ( !read_file(dir_handle, s2w(&name), &cfg, NULL) )
+ for ( ; ; )
{
- PrintStr(L"Chained configuration file '");
- PrintStr(name.w);
+ name.s = get_value(&cfg, section.s, "kernel");
+ if ( name.s )
+ break;
+ name.s = get_value(&cfg, "global", "chain");
+ if ( !name.s )
+ break;
+ efi_bs->FreePages(cfg.addr, PFN_UP(cfg.size));
+ cfg.addr = 0;
+ if ( !read_file(dir_handle, s2w(&name), &cfg, NULL) )
+ {
+ PrintStr(L"Chained configuration file '");
+ PrintStr(name.w);
+ efi_bs->FreePool(name.w);
+ blexit(L"'not found.");
+ }
+ pre_parse(&cfg);
efi_bs->FreePool(name.w);
- blexit(L"'not found.");
}
- pre_parse(&cfg);
- efi_bs->FreePool(name.w);
- }
- if ( !name.s )
- blexit(L"No Dom0 kernel image specified.");
-
- efi_arch_cfg_file_early(dir_handle, section.s);
- option_str = split_string(name.s);
- read_file(dir_handle, s2w(&name), &kernel, option_str);
- efi_bs->FreePool(name.w);
+ if ( !name.s )
+ blexit(L"No Dom0 kernel image specified.");
- if ( !EFI_ERROR(efi_bs->LocateProtocol(&shim_lock_guid, NULL,
- (void **)&shim_lock)) &&
- (status = shim_lock->Verify(kernel.ptr, kernel.size)) != EFI_SUCCESS )
- PrintErrMesg(L"Dom0 kernel image could not be verified", status);
+ efi_arch_cfg_file_early(dir_handle, section.s);
- name.s = get_value(&cfg, section.s, "ramdisk");
- if ( name.s )
- {
option_str = split_string(name.s);
- read_file(dir_handle, s2w(&name), &ramdisk, option_str);
+ read_file(dir_handle, s2w(&name), &kernel, option_str);
efi_bs->FreePool(name.w);
- }
- name.s = get_value(&cfg, section.s, "xsm");
- if ( name.s )
- {
- option_str = split_string(name.s);
- read_file(dir_handle, s2w(&name), &xsm, option_str);
- efi_bs->FreePool(name.w);
- }
+ if ( !EFI_ERROR(efi_bs->LocateProtocol(&shim_lock_guid, NULL,
+ (void **)&shim_lock)) &&
+ (status = shim_lock->Verify(kernel.ptr, kernel.size)) != EFI_SUCCESS )
+ PrintErrMesg(L"Dom0 kernel image could not be verified", status);
- name.s = get_value(&cfg, section.s, "options");
- efi_arch_handle_cmdline(argc ? *argv : NULL, options, name.s);
+ name.s = get_value(&cfg, section.s, "ramdisk");
+ if ( name.s )
+ {
+ option_str = split_string(name.s);
+ read_file(dir_handle, s2w(&name), &ramdisk, option_str);
+ efi_bs->FreePool(name.w);
+ }
- cols = rows = depth = 0;
- if ( !base_video )
- {
- name.cs = get_value(&cfg, section.s, "video");
- if ( !name.cs )
- name.cs = get_value(&cfg, "global", "video");
- if ( name.cs && !strncmp(name.cs, "gfx-", 4) )
+ name.s = get_value(&cfg, section.s, "xsm");
+ if ( name.s )
{
- cols = simple_strtoul(name.cs + 4, &name.cs, 10);
- if ( *name.cs == 'x' )
- rows = simple_strtoul(name.cs + 1, &name.cs, 10);
- if ( *name.cs == 'x' )
- depth = simple_strtoul(name.cs + 1, &name.cs, 10);
- if ( *name.cs )
- cols = rows = depth = 0;
+ option_str = split_string(name.s);
+ read_file(dir_handle, s2w(&name), &xsm, option_str);
+ efi_bs->FreePool(name.w);
+ }
+
+ name.s = get_value(&cfg, section.s, "options");
+ efi_arch_handle_cmdline(argc ? *argv : NULL, options, name.s);
+
+ if ( !base_video )
+ {
+ name.cs = get_value(&cfg, section.s, "video");
+ if ( !name.cs )
+ name.cs = get_value(&cfg, "global", "video");
+ if ( name.cs && !strncmp(name.cs, "gfx-", 4) )
+ {
+ cols = simple_strtoul(name.cs + 4, &name.cs, 10);
+ if ( *name.cs == 'x' )
+ rows = simple_strtoul(name.cs + 1, &name.cs, 10);
+ if ( *name.cs == 'x' )
+ depth = simple_strtoul(name.cs + 1, &name.cs, 10);
+ if ( *name.cs )
+ cols = rows = depth = 0;
+ }
}
- }
- efi_arch_cfg_file_late(dir_handle, section.s);
- efi_bs->FreePages(cfg.addr, PFN_UP(cfg.size));
- cfg.addr = 0;
+ efi_arch_cfg_file_late(dir_handle, section.s);
- dir_handle->Close(dir_handle);
+ efi_bs->FreePages(cfg.addr, PFN_UP(cfg.size));
+ cfg.addr = 0;
+
+ dir_handle->Close(dir_handle);
+
+ }
if ( gop && !base_video )
{
--
2.1.0
next prev parent reply other threads:[~2014-09-24 5:03 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-24 5:02 [PATCH for-4.5 V6 00/14] arm64 EFI stub Roy Franz
2014-09-24 5:02 ` [PATCH for-4.5 V6 01/14] move x86 EFI boot/runtime code to common/efi Roy Franz
2014-09-24 15:50 ` Jan Beulich
2014-09-24 19:41 ` Roy Franz
2014-09-24 5:03 ` [PATCH for-4.5 V6 02/14] Move x86 specific funtions/variables to arch header Roy Franz
2014-09-24 15:56 ` Jan Beulich
2014-09-24 19:45 ` Roy Franz
2014-09-25 8:12 ` Jan Beulich
2014-09-24 5:03 ` [PATCH for-4.5 V6 03/14] create arch functions to allocate memory for and process EFI memory map Roy Franz
2014-09-24 15:57 ` Jan Beulich
2014-09-24 5:03 ` [PATCH for-4.5 V6 04/14] Add architecture functions for pre/post ExitBootServices Roy Franz
2014-09-24 5:03 ` [PATCH for-4.5 V6 05/14] Add efi_arch_cfg_file_early/late() to handle arch specific cfg file fields Roy Franz
2014-09-24 5:03 ` [PATCH for-4.5 V6 06/14] Add efi_arch_handle_cmdline() for processing commandline Roy Franz
2014-09-24 5:03 ` [PATCH for-4.5 V6 07/14] Move x86 specific disk probing code Roy Franz
2014-09-24 5:03 ` [PATCH for-4.5 V6 08/14] Create arch functions for console and video init Roy Franz
2014-09-24 5:03 ` [PATCH for-4.5 V6 09/14] Add efi_arch_memory() for arch specific memory setup Roy Franz
2014-09-24 5:03 ` [PATCH for-4.5 V6 10/14] Add arch specific module handling to read_file() Roy Franz
2014-09-24 16:02 ` Jan Beulich
2014-09-24 5:03 ` [PATCH for-4.5 V6 11/14] Add several misc. arch functions for EFI boot code Roy Franz
2014-09-24 5:03 ` Roy Franz [this message]
2014-09-24 5:03 ` [PATCH for-4.5 V6 13/14] Fix freeing of uninitialized pointer Roy Franz
2014-09-24 9:07 ` Jan Beulich
2014-09-24 19:22 ` Roy Franz
2014-09-25 8:13 ` Jan Beulich
2014-09-25 15:46 ` Roy Franz
2014-09-24 5:03 ` [PATCH for-4.5 V6 14/14] Add ARM EFI boot support Roy Franz
2014-09-24 16:11 ` Julien Grall
2014-09-24 19:53 ` Roy Franz
2014-09-24 8:55 ` [PATCH for-4.5 V6 00/14] arm64 EFI stub Jan Beulich
2014-09-24 19:37 ` Roy Franz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1411534992-27443-13-git-send-email-roy.franz@linaro.org \
--to=roy.franz@linaro.org \
--cc=fu.wei@linaro.org \
--cc=ian.campbell@citrix.com \
--cc=jbeulich@suse.com \
--cc=keir@xen.org \
--cc=stefano.stabellini@citrix.com \
--cc=tim@xen.org \
--cc=xen-devel@lists.xen.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).