From patchwork Fri Sep 26 04:42:08 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roy Franz X-Patchwork-Id: 37939 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-ee0-f71.google.com (mail-ee0-f71.google.com [74.125.83.71]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 3F81D20DE0 for ; Fri, 26 Sep 2014 04:44:33 +0000 (UTC) Received: by mail-ee0-f71.google.com with SMTP id b57sf5598165eek.2 for ; Thu, 25 Sep 2014 21:44:32 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:from:to:date:message-id:in-reply-to :references:cc:subject:precedence:list-id:list-unsubscribe:list-post :list-help:list-subscribe:mime-version:sender:errors-to :x-original-sender:x-original-authentication-results:mailing-list :list-archive:content-type:content-transfer-encoding; bh=eI+2ZJZC1zHS1Fd+TCrvwpdsG2dpDHgZvP5F1XVB20A=; b=fBsqe4qPeX2xVF6ovfxsM+CWYF1ZkVdIO4j6y+mWT3Csl9fQOAwpgfqaItkMawn3S9 DBWUiMsqDO3wPMil8I7u5aKpVcQrEX8AcVj1UeoEdE/FDU3j5Ur9wOIEAwv9aJ/VQSDD TZAULxQrYWZtC4CRlgERT9D0yZNpg2nqDz+xHxJM3WobJ+A6hDyCpn2Ii+VWNn4PshN/ 1484YnNlvkTgrfXvu0dOW3jyYRMN2jm8UF9Oyd3Vmij7Gire7Ie0DeB0wG3ck12AcKSq 7UBJ+WmnWC95kBeKybmvPqQXpm3xBjNnSSsfqgas0CiPGtQVIxaej6MU8n4fbTTR3S19 dObg== X-Gm-Message-State: ALoCoQm0b5jESFnqdqRDuioY/GBdod/RNLoeilnRHoax64VKYfP7t0DknTnsxtpCfCeORj90/EoQ X-Received: by 10.152.6.9 with SMTP id w9mr202562law.7.1411706672428; Thu, 25 Sep 2014 21:44:32 -0700 (PDT) X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.197.68 with SMTP id is4ls28652lac.6.gmail; Thu, 25 Sep 2014 21:44:32 -0700 (PDT) X-Received: by 10.112.200.134 with SMTP id js6mr16698369lbc.0.1411706672325; Thu, 25 Sep 2014 21:44:32 -0700 (PDT) Received: from mail-la0-f54.google.com (mail-la0-f54.google.com [209.85.215.54]) by mx.google.com with ESMTPS id z7si5612490lag.18.2014.09.25.21.44.32 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 25 Sep 2014 21:44:32 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.54 as permitted sender) client-ip=209.85.215.54; Received: by mail-la0-f54.google.com with SMTP id ty20so1268079lab.41 for ; Thu, 25 Sep 2014 21:44:32 -0700 (PDT) X-Received: by 10.112.62.200 with SMTP id a8mr16647576lbs.34.1411706672215; Thu, 25 Sep 2014 21:44:32 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.112.130.169 with SMTP id of9csp2525lbb; Thu, 25 Sep 2014 21:44:31 -0700 (PDT) X-Received: by 10.221.65.74 with SMTP id xl10mr425514vcb.30.1411706670448; Thu, 25 Sep 2014 21:44:30 -0700 (PDT) Received: from lists.xen.org (lists.xen.org. [50.57.142.19]) by mx.google.com with ESMTPS id jz15si1979843vdb.94.2014.09.25.21.44.29 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Thu, 25 Sep 2014 21:44:30 -0700 (PDT) Received-SPF: none (google.com: xen-devel-bounces@lists.xen.org does not designate permitted sender hosts) client-ip=50.57.142.19; Received: from localhost ([127.0.0.1] helo=lists.xen.org) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1XXNMP-00050m-Qi; Fri, 26 Sep 2014 04:42:25 +0000 Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1XXNMO-00050V-LZ for xen-devel@lists.xen.org; Fri, 26 Sep 2014 04:42:24 +0000 Received: from [85.158.137.68:18257] by server-8.bemta-3.messagelabs.com id CF/56-31195-FAEE4245; Fri, 26 Sep 2014 04:42:23 +0000 X-Env-Sender: roy.franz@linaro.org X-Msg-Ref: server-5.tower-31.messagelabs.com!1411706541!12169061!1 X-Originating-IP: [209.85.220.53] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 6.12.2; banners=-,-,- X-VirusChecked: Checked Received: (qmail 19189 invoked from network); 26 Sep 2014 04:42:22 -0000 Received: from mail-pa0-f53.google.com (HELO mail-pa0-f53.google.com) (209.85.220.53) by server-5.tower-31.messagelabs.com with RC4-SHA encrypted SMTP; 26 Sep 2014 04:42:22 -0000 Received: by mail-pa0-f53.google.com with SMTP id kq14so241910pab.26 for ; Thu, 25 Sep 2014 21:42:20 -0700 (PDT) X-Received: by 10.70.16.2 with SMTP id b2mr36927978pdd.36.1411706540764; Thu, 25 Sep 2014 21:42:20 -0700 (PDT) Received: from rfranz-i7.local (c-24-10-97-91.hsd1.ca.comcast.net. [24.10.97.91]) by mx.google.com with ESMTPSA id tv4sm3654788pab.28.2014.09.25.21.42.19 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 25 Sep 2014 21:42:20 -0700 (PDT) From: Roy Franz To: xen-devel@lists.xen.org, ian.campbell@citrix.com, stefano.stabellini@citrix.com, tim@xen.org, jbeulich@suse.com, keir@xen.org Date: Thu, 25 Sep 2014 21:42:08 -0700 Message-Id: <1411706529-8765-4-git-send-email-roy.franz@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1411706529-8765-1-git-send-email-roy.franz@linaro.org> References: <1411706529-8765-1-git-send-email-roy.franz@linaro.org> Cc: Roy Franz , fu.wei@linaro.org Subject: [Xen-devel] [PATCH for-4.5 V8 3/4] Add efi_arch_use_config_file() function to control use of config file X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: List-Unsubscribe: , List-Post: , List-Help: , List-Subscribe: , MIME-Version: 1.0 Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: roy.franz@linaro.org X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.54 as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 List-Archive: 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 Acked-by: Jan Beulich --- xen/arch/x86/efi/efi-boot.h | 14 ++++ xen/common/efi/boot.c | 177 +++++++++++++++++++++++--------------------- 2 files changed, 106 insertions(+), 85 deletions(-) diff --git a/xen/arch/x86/efi/efi-boot.h b/xen/arch/x86/efi/efi-boot.h index 9c9cdaf..b44746f 100644 --- a/xen/arch/x86/efi/efi-boot.h +++ b/xen/arch/x86/efi/efi-boot.h @@ -622,3 +622,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 7446a26..3d3d76b 100644 --- a/xen/common/efi/boot.c +++ b/xen/common/efi/boot.c @@ -691,7 +691,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; @@ -715,9 +714,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 && @@ -813,107 +809,118 @@ 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 ) - { - read_file(dir_handle, s2w(&name), &ramdisk, NULL); + option_str = split_string(name.s); + 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 ) - { - read_file(dir_handle, s2w(&name), &xsm, NULL); - 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 ) + { + read_file(dir_handle, s2w(&name), &ramdisk, NULL); + 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; + read_file(dir_handle, s2w(&name), &xsm, NULL); + efi_bs->FreePool(name.w); } - } - efi_arch_cfg_file_late(dir_handle, section.s); - efi_bs->FreePages(cfg.addr, PFN_UP(cfg.size)); - cfg.addr = 0; + 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; + } + } - dir_handle->Close(dir_handle); + efi_arch_cfg_file_late(dir_handle, section.s); + + efi_bs->FreePages(cfg.addr, PFN_UP(cfg.size)); + cfg.addr = 0; + + dir_handle->Close(dir_handle); + + } if ( gop && !base_video ) {