From patchwork Wed Sep 24 05:03:10 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roy Franz X-Patchwork-Id: 37790 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-ee0-f72.google.com (mail-ee0-f72.google.com [74.125.83.72]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 7AA2320792 for ; Wed, 24 Sep 2014 05:05:43 +0000 (UTC) Received: by mail-ee0-f72.google.com with SMTP id c13sf3537311eek.7 for ; Tue, 23 Sep 2014 22:05:42 -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=L7AGeu/mI550xGwrP4LBP+KspXebkXleHd1uiBReTc8=; b=dsZD5j4KZJBRi12T5RL1RBfmiED0L1oaPHHWKkfdHY/HA6NSdBc940CNmSn04wSDLx OVr1BvpwrkvAnwJnQLcb1KeGqtxnjzdIWoDkuet1iKZS8QQq/ToJGhdO/KRXidUug5M5 wbXIc3sf2iDkH1YMNNB74+NGh327pUQWvkVRtZP5jfX330UJTn3m1OTwrjBMZtv4TFb7 lE1fuyr+u2ZlmqQBcsZfy+mI16j+Z0v6BqccJYkypt9/q0re98LEvlPM4gk2GL5xBg/h 8eDxT2TPZm5VOSlFaF6EFKSoTiyZDKhsZi82TsGTWqqeLFjZeqV+R7JO3vDyP9+gR0jz SIhA== X-Gm-Message-State: ALoCoQlAhZiodV8smycyDW/liR9nem9utsUSSN92PRNb7HvlqmXEkJ/VFrZXrf1XtRtxYmdvU7fs X-Received: by 10.180.81.226 with SMTP id d2mr3671868wiy.5.1411535142675; Tue, 23 Sep 2014 22:05:42 -0700 (PDT) X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.87.132 with SMTP id ay4ls115105lab.46.gmail; Tue, 23 Sep 2014 22:05:42 -0700 (PDT) X-Received: by 10.112.134.101 with SMTP id pj5mr3601260lbb.47.1411535142517; Tue, 23 Sep 2014 22:05:42 -0700 (PDT) Received: from mail-la0-f48.google.com (mail-la0-f48.google.com [209.85.215.48]) by mx.google.com with ESMTPS id zc9si18478736lbb.17.2014.09.23.22.05.41 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 23 Sep 2014 22:05:41 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.48 as permitted sender) client-ip=209.85.215.48; Received: by mail-la0-f48.google.com with SMTP id ty20so9784486lab.21 for ; Tue, 23 Sep 2014 22:05:41 -0700 (PDT) X-Received: by 10.112.163.103 with SMTP id yh7mr3576813lbb.73.1411535141754; Tue, 23 Sep 2014 22:05:41 -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 of9csp526263lbb; Tue, 23 Sep 2014 22:05:41 -0700 (PDT) X-Received: by 10.52.162.74 with SMTP id xy10mr3084833vdb.51.1411535139216; Tue, 23 Sep 2014 22:05:39 -0700 (PDT) Received: from lists.xen.org (lists.xen.org. [50.57.142.19]) by mx.google.com with ESMTPS id ee1si2576967vdb.67.2014.09.23.22.05.38 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Tue, 23 Sep 2014 22:05:39 -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 1XWejz-0006OY-Br; Wed, 24 Sep 2014 05:03:47 +0000 Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1XWejx-0006Mf-Ea for xen-devel@lists.xen.org; Wed, 24 Sep 2014 05:03:45 +0000 Received: from [85.158.139.211:10041] by server-14.bemta-5.messagelabs.com id 6A/D8-12422-0B052245; Wed, 24 Sep 2014 05:03:44 +0000 X-Env-Sender: roy.franz@linaro.org X-Msg-Ref: server-13.tower-206.messagelabs.com!1411535022!11691752!1 X-Originating-IP: [209.85.213.174] 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 28662 invoked from network); 24 Sep 2014 05:03:43 -0000 Received: from mail-ig0-f174.google.com (HELO mail-ig0-f174.google.com) (209.85.213.174) by server-13.tower-206.messagelabs.com with RC4-SHA encrypted SMTP; 24 Sep 2014 05:03:43 -0000 Received: by mail-ig0-f174.google.com with SMTP id r10so5905934igi.7 for ; Tue, 23 Sep 2014 22:03:42 -0700 (PDT) X-Received: by 10.50.30.199 with SMTP id u7mr9625058igh.48.1411535022442; Tue, 23 Sep 2014 22:03:42 -0700 (PDT) Received: from rfranz-v430.caveonetworks.com (64.2.3.195.ptr.us.xo.net. [64.2.3.195]) by mx.google.com with ESMTPSA id ig9sm3477662igb.13.2014.09.23.22.03.41 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 23 Sep 2014 22:03:41 -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: Tue, 23 Sep 2014 22:03:10 -0700 Message-Id: <1411534992-27443-13-git-send-email-roy.franz@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1411534992-27443-1-git-send-email-roy.franz@linaro.org> References: <1411534992-27443-1-git-send-email-roy.franz@linaro.org> Cc: Roy Franz , fu.wei@linaro.org Subject: [Xen-devel] [PATCH for-4.5 V6 12/14] 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.48 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 | 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 ) {