From patchwork Fri Dec 3 10:56:32 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 12654833 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 12C70C433F5 for ; Fri, 3 Dec 2021 10:57:01 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.237341.411644 (Exim 4.92) (envelope-from ) id 1mt6F5-0007t1-JR; Fri, 03 Dec 2021 10:56:39 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 237341.411644; Fri, 03 Dec 2021 10:56:39 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mt6F5-0007su-G8; Fri, 03 Dec 2021 10:56:39 +0000 Received: by outflank-mailman (input) for mailman id 237341; Fri, 03 Dec 2021 10:56:39 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mt6F4-0007sk-UW for xen-devel@lists.xenproject.org; Fri, 03 Dec 2021 10:56:39 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.109.102]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id b0033287-5427-11ec-976b-d102b41d0961; Fri, 03 Dec 2021 11:56:37 +0100 (CET) Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-he1eur02lp2051.outbound.protection.outlook.com [104.47.5.51]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-13-w61jVg3JMDK7ZefYJVqMhw-1; Fri, 03 Dec 2021 11:56:36 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR0402MB3391.eurprd04.prod.outlook.com (2603:10a6:803:3::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4734.23; Fri, 3 Dec 2021 10:56:35 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe%5]) with mapi id 15.20.4734.028; Fri, 3 Dec 2021 10:56:34 +0000 Received: from [10.156.60.236] (37.24.206.209) by AM6P193CA0132.EURP193.PROD.OUTLOOK.COM (2603:10a6:209:85::37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.17 via Frontend Transport; Fri, 3 Dec 2021 10:56:33 +0000 X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: b0033287-5427-11ec-976b-d102b41d0961 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1638528997; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QD9We1Cx5H7zmR7/ANXcnQ1Rln6q7zD3LKt1U64J4VU=; b=awNekeR3AE3BFT+EhaUWUD/0Iy/eaxKqbkla6/7tlbblbe2MEzbrBiBtWujaD3/8uuxGL8 Lm9fso7KVP5sINjmJml5rROYDWwbLSkDVAdbRR4P5Hvwv9VzNyzWVd8T1dhjAPoqcH91bm H6Y5ux4vIQp75ag7GW5GLslRDgxJBPQ= X-MC-Unique: w61jVg3JMDK7ZefYJVqMhw-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Cypgf/yfxOH2eOVbElMvsTcMbRRiENLi2VQLrmaLcdUxYgpjxiHM78q3O838shZfCPo1gEkKkHkNAkIuvtYqM1YLooA8B1x9+mLxzFHLZpCSMPs3IbfyDtnXhwq1zOfy9wIhvSepPJhE5i7NvLKBcPxOavBXH+htj2v5j5m1upPJgT0L24M2Nwqi8PKqF9AkU9fvX37Xfu+s4trfAjw4JB4YcJkxHh2aJgpSRIZeDChh1eKIjfdMDaidwBeCLyvVQ7r90DgFfsdiY4Cso19vgANNPFpXuqewylr/cApQB16lgkxs080Agx14pv2v8GQYPdVC5Es1uldkZUuVGbg/Gg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=QD9We1Cx5H7zmR7/ANXcnQ1Rln6q7zD3LKt1U64J4VU=; b=BOJhsg9LDei6THoSrvTUPkyaWYf04eapTH6s0WyRQyMx3AEFGbFbEhVyoEuUzOJXQ9CQCtYBvrHcDZaoZQjoVxu1R9ZKLVMX+FQcoodb7g0IkGz8xyCPEfoiWfzTaN+YtN1Hhq0ykgj0eQsth3fYXPPXwb7X5gq+Spbjzuz0m2R4okZleGvSQHmVR97aHlylJc1L9tizMw7x0MPdvFLG6Om54FwMmhXNMXOIgX5zfgRx8KwBEAuX8V03IBYIKuvt8ATcTQZnLuSqK6ws0y0QZcfIbSPCYU4wk/oxxFzjkde1KBdZrwJgNTx6/C92U6WYlGKxWAoMzlkkjvbGEDdzjw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <8b369fc8-8f9e-c350-95de-790d47fd9aae@suse.com> Date: Fri, 3 Dec 2021 11:56:32 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.3.2 Subject: [PATCH 1/3] EFI: move efi-boot.h inclusion point Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , George Dunlap , Ian Jackson , Julien Grall , Stefano Stabellini , Wei Liu References: <46de3a57-76d0-1538-ec3b-79290d1bfb70@suse.com> In-Reply-To: <46de3a57-76d0-1538-ec3b-79290d1bfb70@suse.com> X-ClientProxiedBy: AM6P193CA0132.EURP193.PROD.OUTLOOK.COM (2603:10a6:209:85::37) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0e6c7a3d-642a-4a54-f908-08d9b64b9284 X-MS-TrafficTypeDiagnostic: VI1PR0402MB3391: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:949; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 6ZIsJhoj2chQ+jrQgpTPKQPD5tod0g7pz9mCDVRBT+rf2Pl57+We61xQpfO8ZXOvlhoxTy8fKbVxNiHXLqZ12iZUZlSYKzox5g1eLSZGW0ZQJidtjBlkL/DwS+yzByv39w4DrdrXBdLhtWgYGAyFZbM5Us/j6xrLb9UZkaxLZFCwSZLxLkgrPc47RsmrAHUXv3OR5kKlZhuZyPoLCpyiim2cpFvg1LbzKcoeYbrOXvZvZGFjIWQsFNsiSQ5uWFb/sBL0T2TojIvH8nSXceBN6Y6904oFV99Y3De0d0K4hq941NVffAWUBcK3MDZDai7URwenjrH+dDPwiwzAwV37Grc5tZo3qGWutEl7z7G59FH7Eq4Yv6uDDrPi3OANjIt0vFEpml+OhwvJ1tGP8C/zIZ8jmDTAqzmhkp1ZLWyfPCVyJD+Ygzn+XV5y3pRwY0rs4BUEK+41RQAm0/fqZkHgZ/WUcV5lIJGOipyfUoL0GNjT11u4ki50jVJefBRaEofBr3qEZO5Loek9wruwxxFldRxdXxPSGgaDEQwjbMjbQNfHyWgR5TXJ0GxpBiXeuc8NRwx8wq9sh7W7yA05tkSfR7bYyBbPr8NYgR3S/WoPpZHXwxZDgOHKqpjrNJXucictf9Rp96sYqOJS5BXx0K2PgQOBdJ83xOzref61nWq9UpPX330ZVB/hMYRgshO0nPNfCXR2qo1p8WqpyPOvIMpxbnnNPBvPPaYwKYsDucmw0JKCEZXZjOmQhjdX6ReJ+wFr X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(6916009)(4326008)(186003)(2906002)(54906003)(66476007)(5660300002)(66556008)(31696002)(2616005)(16576012)(6486002)(508600001)(66946007)(36756003)(86362001)(8936002)(316002)(26005)(956004)(8676002)(38100700002)(31686004)(83380400001)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?K7Yv/F4D8btCdWdl07dUPtLjqlHe?= =?utf-8?q?9PZZq91PwvKmRAlAFamXqpNbCd/Xb+4l3NH3EAXp70cesfALqRetvpVz0xE3+Tc8a?= =?utf-8?q?cqJ5Vkxl7ZCvmI0uYeyjcyGoF0cD9Q70eo9UMTzwTz8N30wWW+UFI425koZRN0du3?= =?utf-8?q?Wk+4DKeiUj5z7LQAzWaTA8ufNKEypLz98lz//rkZN/b243xuETlis9Nuyh49rpBPq?= =?utf-8?q?xgRWQwpY8WHIdVEf/vPOnom6WBvSnW58lLbuKOkX9l7BnELd1p0EzBgcPW/+JAtlX?= =?utf-8?q?Ne9jseAKePJfXtwe4FdVhuFaENkDqwzslqZNQY+L9r4e0gXsTySQodzINSz9sHTwd?= =?utf-8?q?bTlh6+cX03TeoCgZJ84/oEsgRE0EqGygcPAvQf4h0uWMVSIWb+0mlu24S/fZWJaHD?= =?utf-8?q?X/vmTCuJe0l4IofkrR9LbFSj4wl+JKqZQxwCPIKJTrn5vS0K9qdAideDqgjZ3wKJo?= =?utf-8?q?sVdZ3UMapUqE9nUXpyM99AahgysLFbRy52c7X68EJeHZu8NruyHds3SQzAksOFE6I?= =?utf-8?q?RAf8sZwPmRUGmrZ6Pw/dY+Cf0WJrQENm3ysd5uNFavMuFLSg1PwMA/cpiCEFWt6Qv?= =?utf-8?q?W+x/ZS3J5+qQVRf1ZzVkFaosrYeS5ThYKaMbNlcjSnsFYDhRdey7xA7ofCoNNtynh?= =?utf-8?q?e+zbUFPVg7YY27tN6N/vZ2ds09I1H+8JK89tAadHnKmbxf22iHJfDvXOgp3+3NJdZ?= =?utf-8?q?uosqmHO03lRlEcGngy49SaHezz1fTRpfb4okvaVNEn5d1JUHb44Xa+alLaW2A7h9A?= =?utf-8?q?N2QjZL/kg22DP0jW+vwuzGDNm9N2nIKAibfDy3CnvIuFvZSEJCgB2duf35s6A9j6Z?= =?utf-8?q?RzmTmbWCETHQlTJW8pvIFZ0Pj9/XvfE4nI06SZx8Pp3T6lxNBYBurqVtT7tTVRq6H?= =?utf-8?q?hGg11GuFbnUFgSheHOL6TQbV+8dk4FIE3yj5IcTkOJUkbJI0WZSD1/9VFTGHDLkh7?= =?utf-8?q?YIgFmY2jsAql3G5b1dXDpUffnmUvIWEy3TlpJaYm8hDWalgLvHyiA7C1R0PN33LlP?= =?utf-8?q?AJdI6CjD3F5qfHqlQTf07pvVfWCwviB6We1SD9w2XglYzpYY+Bq9mqVD68ehZ127q?= =?utf-8?q?Q2LKfQPYKjfQBJpYQMFS9zHB4r3hTxeaDjnphCzkvlihg6eFAp6pueaaqpupda+By?= =?utf-8?q?5kgjFQY+loQGY5T1vj1eZBWaqSkYpmpAU/r/mu+vJNIj3VBz0oURtFwc9MnlR+qRF?= =?utf-8?q?lTpW19GCgssPqDg03jIoclGLVfJ0PPLJ8I6EFNKTJhlbzUf601sAHlW3QQhFhfjGy?= =?utf-8?q?aX6AzpuLPTPeyNpNtc6hjy4QKujKjzBysv60r3vsMspLQsqAZ4dSH59gNrV+iz83m?= =?utf-8?q?Hfroz9zkMH0TGhA6WOoV9UV856Cltwi0FU2TDl3hliWhRI1zxMPiLD2Phc1fzzDK5?= =?utf-8?q?Ao99rmjnEcfgT62nf1cehGVvRYl4AryDa3tCrL0VnkUgSFBkwd814HMTSgUqTpgY6?= =?utf-8?q?oUUIN+w4kXmvqiPG1FKyxSv6dVtn+XSHq3ZslDpIKmywzKQMWa5AM5wZrquongQYo?= =?utf-8?q?L346JFQcrBgt5t80LHc1VvLK107nkXNRvI00+Li4WpVAhZa0gkH2hbU=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0e6c7a3d-642a-4a54-f908-08d9b64b9284 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Dec 2021 10:56:34.8135 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 5UneFSaI4BqUH1QBy9++ApcIU1pxPAQ7JfZ48vU7fZPBpZSF+6un+UgSQvrypJ2WBPM18FrvGR/MBvAQP72VOg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3391 When it was introduced, it was imo placed way too high up, making it necessary to forward-declare way too many static functions. Move it down together with - the efi_check_dt_boot() stub, which afaict was deliberately placed immediately ahead of the #include, - blexit(), because of its use of the efi_arch_blexit() hook. Move up get_value() and set_color() to before the inclusion so their forward declarations can also be zapped. Signed-off-by: Jan Beulich Acked-by: Andrew Cooper Reviewed-by: Luca Fancellu --- a/xen/common/efi/boot.c +++ b/xen/common/efi/boot.c @@ -111,25 +111,10 @@ struct file { }; }; -static CHAR16 *FormatDec(UINT64 Val, CHAR16 *Buffer); -static CHAR16 *FormatHex(UINT64 Val, UINTN Width, CHAR16 *Buffer); -static void DisplayUint(UINT64 Val, INTN Width); -static CHAR16 *wstrcpy(CHAR16 *d, const CHAR16 *s); -static void PrintErrMesg(const CHAR16 *mesg, EFI_STATUS ErrCode); -static char *get_value(const struct file *cfg, const char *section, - const char *item); -static char *split_string(char *s); -static CHAR16 *s2w(union string *str); -static char *w2s(const union string *str); -static EFI_FILE_HANDLE get_parent_handle(EFI_LOADED_IMAGE *loaded_image, - CHAR16 **leaf); static bool read_file(EFI_FILE_HANDLE dir_handle, CHAR16 *name, struct file *file, const char *options); static bool read_section(const EFI_LOADED_IMAGE *image, const CHAR16 *name, struct file *file, const char *options); -static size_t wstrlen(const CHAR16 * s); -static int set_color(u32 mask, int bpp, u8 *pos, u8 *sz); -static bool match_guid(const EFI_GUID *guid1, const EFI_GUID *guid2); static void efi_init(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable); static void efi_console_set_mode(void); @@ -168,19 +153,6 @@ static void __init PrintErr(const CHAR16 StdErr->OutputString(StdErr, (CHAR16 *)s ); } -#ifndef CONFIG_HAS_DEVICE_TREE -static int __init efi_check_dt_boot(EFI_LOADED_IMAGE *loaded_image) -{ - return 0; -} -#endif - -/* - * Include architecture specific implementation here, which references the - * static globals defined above. - */ -#include "efi-boot.h" - static CHAR16 *__init FormatDec(UINT64 Val, CHAR16 *Buffer) { if ( Val >= 10 ) @@ -291,30 +263,6 @@ static bool __init match_guid(const EFI_ !memcmp(guid1->Data4, guid2->Data4, sizeof(guid1->Data4)); } -void __init noreturn blexit(const CHAR16 *str) -{ - if ( str ) - PrintStr(str); - PrintStr(newline); - - if ( !efi_bs ) - efi_arch_halt(); - - if ( cfg.need_to_free ) - efi_bs->FreePages(cfg.addr, PFN_UP(cfg.size)); - if ( kernel.need_to_free ) - efi_bs->FreePages(kernel.addr, PFN_UP(kernel.size)); - if ( ramdisk.need_to_free ) - efi_bs->FreePages(ramdisk.addr, PFN_UP(ramdisk.size)); - if ( xsm.need_to_free ) - efi_bs->FreePages(xsm.addr, PFN_UP(xsm.size)); - - efi_arch_blexit(); - - efi_bs->Exit(efi_ih, EFI_SUCCESS, 0, NULL); - unreachable(); /* not reached */ -} - /* generic routine for printing error messages */ static void __init PrintErrMesg(const CHAR16 *mesg, EFI_STATUS ErrCode) { @@ -542,6 +490,7 @@ static CHAR16 *__init point_tail(CHAR16 break; } } + /* * Truncate string at first space, and return pointer * to remainder of string, if any/ NULL returned if @@ -559,6 +508,95 @@ static char * __init split_string(char * return NULL; } +static char *__init get_value(const struct file *cfg, const char *section, + const char *item) +{ + char *ptr = cfg->str, *end = ptr + cfg->size; + size_t slen = section ? strlen(section) : 0, ilen = strlen(item); + bool match = !slen; + + for ( ; ptr < end; ++ptr ) + { + switch ( *ptr ) + { + case 0: + continue; + case '[': + if ( !slen ) + break; + if ( match ) + return NULL; + match = strncmp(++ptr, section, slen) == 0 && ptr[slen] == ']'; + break; + default: + if ( match && strncmp(ptr, item, ilen) == 0 && ptr[ilen] == '=' ) + { + ptr += ilen + 1; + /* strip off any leading spaces */ + while ( *ptr && isspace(*ptr) ) + ptr++; + return ptr; + } + break; + } + ptr += strlen(ptr); + } + return NULL; +} + +static int __init __maybe_unused set_color(uint32_t mask, int bpp, + uint8_t *pos, uint8_t *sz) +{ + if ( bpp < 0 ) + return bpp; + if ( !mask ) + return -EINVAL; + for ( *pos = 0; !(mask & 1); ++*pos ) + mask >>= 1; + for ( *sz = 0; mask & 1; ++*sz) + mask >>= 1; + if ( mask ) + return -EINVAL; + return max(*pos + *sz, bpp); +} + +#ifndef CONFIG_HAS_DEVICE_TREE +static int __init efi_check_dt_boot(EFI_LOADED_IMAGE *loaded_image) +{ + return 0; +} +#endif + +/* + * Include architecture specific implementation here, which references the + * static globals defined above. + */ +#include "efi-boot.h" + +void __init noreturn blexit(const CHAR16 *str) +{ + if ( str ) + PrintStr(str); + PrintStr(newline); + + if ( !efi_bs ) + efi_arch_halt(); + + if ( cfg.need_to_free ) + efi_bs->FreePages(cfg.addr, PFN_UP(cfg.size)); + if ( kernel.need_to_free ) + efi_bs->FreePages(kernel.addr, PFN_UP(kernel.size)); + if ( ramdisk.need_to_free ) + efi_bs->FreePages(ramdisk.addr, PFN_UP(ramdisk.size)); + if ( xsm.need_to_free ) + efi_bs->FreePages(xsm.addr, PFN_UP(xsm.size)); + + efi_arch_blexit(); + + efi_bs->Exit(efi_ih, EFI_SUCCESS, 0, NULL); + unreachable(); /* not reached */ +} + static void __init handle_file_info(const CHAR16 *name, const struct file *file, const char *options) { @@ -685,42 +723,6 @@ static void __init pre_parse(const struc " last line will be ignored.\r\n"); } -static char *__init get_value(const struct file *cfg, const char *section, - const char *item) -{ - char *ptr = cfg->str, *end = ptr + cfg->size; - size_t slen = section ? strlen(section) : 0, ilen = strlen(item); - bool match = !slen; - - for ( ; ptr < end; ++ptr ) - { - switch ( *ptr ) - { - case 0: - continue; - case '[': - if ( !slen ) - break; - if ( match ) - return NULL; - match = strncmp(++ptr, section, slen) == 0 && ptr[slen] == ']'; - break; - default: - if ( match && strncmp(ptr, item, ilen) == 0 && ptr[ilen] == '=' ) - { - ptr += ilen + 1; - /* strip off any leading spaces */ - while ( *ptr && isspace(*ptr) ) - ptr++; - return ptr; - } - break; - } - ptr += strlen(ptr); - } - return NULL; -} - static void __init efi_init(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) { efi_ih = ImageHandle; @@ -1114,21 +1116,6 @@ static void __init efi_exit_boot(EFI_HAN efi_fw_vendor = (void *)efi_fw_vendor + DIRECTMAP_VIRT_START; } -static int __init __maybe_unused set_color(u32 mask, int bpp, u8 *pos, u8 *sz) -{ - if ( bpp < 0 ) - return bpp; - if ( !mask ) - return -EINVAL; - for ( *pos = 0; !(mask & 1); ++*pos ) - mask >>= 1; - for ( *sz = 0; mask & 1; ++*sz) - mask >>= 1; - if ( mask ) - return -EINVAL; - return max(*pos + *sz, bpp); -} - void EFIAPI __init noreturn efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) {