From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=pass header.i=@linaro.org header.s=google header.b=qMmsCogw; spf=pass (domain: linaro.org, ip: 209.85.128.65, mailfrom: leif.lindholm@linaro.org) Received: from mail-wm1-f65.google.com (mail-wm1-f65.google.com [209.85.128.65]) by groups.io with SMTP; Thu, 26 Sep 2019 15:44:27 -0700 Received: by mail-wm1-f65.google.com with SMTP id 5so4499539wmg.0 for ; Thu, 26 Sep 2019 15:44:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=iyTd76Gd2gjqnFd2WsGNXfP0P2mKVoAc2SWJPJFBphE=; b=qMmsCogwvWFnXF9nQ1ekFo33A0t5ST1g6pXv4gxy30eIQL6p/cFEH4EY8PFiN6GOq0 P5MpKcU1Cl7+G5BsRkUO9qn6P/ITH90tp4x3J7NH2cBYOnXYSMcEpLGNGeeZoZWDQ3eY RRywPTk7IH+hTQEaDJg+iM+xiggQUQCabe9XrheK0i5FSxSOX+Kt0wTApAmajRMUV+p8 20O/qimGUZtGBjnaxYrPNAckhZy+TTdqCxvmn+BNaClAC+ss4wJkMH75dBrNkXTu1hLl xCTEE0PBK1956hw+GYWgBYDUzmmMXSJBXSdhIoe6lKck3adfQ6LK1I/YVg22YvvY6ohh BBLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=iyTd76Gd2gjqnFd2WsGNXfP0P2mKVoAc2SWJPJFBphE=; b=E1p0EN2JyPfZNuJ/LQsHjd2qTKYXsRgr2Y2VOR/Uc/4it/NvT4BGce80OpmJQrPNM6 wmccxWDbOLputaf0Aw/Ub5X4nltI8OX6NFTl1fosKwcEth+KFbbeAJuJuODab7lI1jgc ZPc2H2Tp+aionS/qEap/q0VvbwpnJgKAufLR2JpKXmgYBye95XtqqeAZ1szJOWvDzSSN ySAc7qJsn0FrIT+2T7PzEA2z7APJukm0fzs5AHlE/owpkk3nylnLENRxWXzWrvYOqnoE P/GSip8MIHHDgStN5hvQet2FY0LpKlhRAtt4b2ffJyG9aQ2KbB+R22behIqi0S+sfzd0 TqEg== X-Gm-Message-State: APjAAAUI3weuTeyuxDUDuYPGdo5BOMW+0+lCPWrdYpcZoRmHKMAMK7bH U6BS8wq3c+/SRpGXjpUEO+6Bv1BTkV7COw== X-Google-Smtp-Source: APXvYqz8UbB5/6Vkcyge21+t3mAkKrBW1sB6eITLMA1IoKoovG3A0eURN4FFEU3ZuDmNMQTtI4KMEQ== X-Received: by 2002:a1c:99d4:: with SMTP id b203mr4417745wme.148.1569537865665; Thu, 26 Sep 2019 15:44:25 -0700 (PDT) Return-Path: Received: from bivouac.eciton.net (bivouac.eciton.net. [2a00:1098:0:86:1000:23:0:2]) by smtp.gmail.com with ESMTPSA id b22sm5084198wmj.36.2019.09.26.15.44.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Sep 2019 15:44:24 -0700 (PDT) Date: Thu, 26 Sep 2019 23:44:23 +0100 From: "Leif Lindholm" To: devel@edk2.groups.io, abner.chang@hpe.com Subject: Re: [edk2-devel] [edk2-staging/RISC-V-V2 PATCH v2 04/29] MdePkg: RISC-V RV64 binding in MdePkg Message-ID: <20190926224423.GF25504@bivouac.eciton.net> References: <1569198715-31552-1-git-send-email-abner.chang@hpe.com> <1569198715-31552-5-git-send-email-abner.chang@hpe.com> MIME-Version: 1.0 In-Reply-To: <1569198715-31552-5-git-send-email-abner.chang@hpe.com> User-Agent: Mutt/1.10.1 (2018-07-13) Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Mon, Sep 23, 2019 at 08:31:29AM +0800, Abner Chang wrote: > Add RISCV64 sections in MdePkg.dec and RISCV64 ProcessorBind.h > Signed-off-by: Abner Chang Reviewed-by: Leif Lindholm > --- > MdePkg/Include/RiscV64/ProcessorBind.h | 173 +++++++++++++++++++++++++++++++++ > MdePkg/MdePkg.dec | 5 +- > 2 files changed, 177 insertions(+), 1 deletion(-) > create mode 100644 MdePkg/Include/RiscV64/ProcessorBind.h > > diff --git a/MdePkg/Include/RiscV64/ProcessorBind.h b/MdePkg/Include/RiscV64/ProcessorBind.h > new file mode 100644 > index 0000000..c3d4ef7 > --- /dev/null > +++ b/MdePkg/Include/RiscV64/ProcessorBind.h > @@ -0,0 +1,173 @@ > +/** @file > + Processor or Compiler specific defines and types for RISC-V > + > + Copyright (c) 2016 - 2019, Hewlett Packard Enterprise Development LP. All rights reserved.
> + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#ifndef __PROCESSOR_BIND_H__ > +#define __PROCESSOR_BIND_H__ > + > +/// > +/// Define the processor type so other code can make processor based choices > +/// > +#define MDE_CPU_RISCV64 > + > +// > +// Make sure we are using the correct packing rules per EFI specification > +// > +#if !defined(__GNUC__) > +#pragma pack() > +#endif > + > +/// > +/// 8-byte unsigned value > +/// > +typedef unsigned long long UINT64 __attribute__ ((aligned (8))); > +/// > +/// 8-byte signed value > +/// > +typedef long long INT64 __attribute__ ((aligned (8))); > +/// > +/// 4-byte unsigned value > +/// > +typedef unsigned int UINT32 __attribute__ ((aligned (4))); > +/// > +/// 4-byte signed value > +/// > +typedef int INT32 __attribute__ ((aligned (4))); > +/// > +/// 2-byte unsigned value > +/// > +typedef unsigned short UINT16 __attribute__ ((aligned (2))); > +/// > +/// 2-byte Character. Unless otherwise specified all strings are stored in the > +/// UTF-16 encoding format as defined by Unicode 2.1 and ISO/IEC 10646 standards. > +/// > +typedef unsigned short CHAR16 __attribute__ ((aligned (2))); > +/// > +/// 2-byte signed value > +/// > +typedef short INT16 __attribute__ ((aligned (2))); > +/// > +/// Logical Boolean. 1-byte value containing 0 for FALSE or a 1 for TRUE. Other > +/// values are undefined. > +/// > +typedef unsigned char BOOLEAN; > +/// > +/// 1-byte unsigned value > +/// > +typedef unsigned char UINT8; > +/// > +/// 1-byte Character > +/// > +typedef char CHAR8; > +/// > +/// 1-byte signed value > +/// > +typedef signed char INT8; > +/// > +/// Unsigned value of native width. (4 bytes on supported 32-bit processor instructions, > +/// 8 bytes on supported 64-bit processor instructions) > +/// > +typedef UINT64 UINTN __attribute__ ((aligned (8))); > +/// > +/// Signed value of native width. (4 bytes on supported 32-bit processor instructions, > +/// 8 bytes on supported 64-bit processor instructions) > +/// > +typedef INT64 INTN __attribute__ ((aligned (8))); > + > +// > +// Processor specific defines > +// > + > +/// > +/// A value of native width with the highest bit set. > +/// > +#define MAX_BIT 0x8000000000000000ULL > +/// > +/// A value of native width with the two highest bits set. > +/// > +#define MAX_2_BITS 0xC000000000000000ULL > + > +/// > +/// Maximum legal RV64 address > +/// > +#define MAX_ADDRESS 0xFFFFFFFFFFFFFFFFULL > + > +/// > +/// Maximum usable address at boot time (48 bits using 4 KB pages in Supervisor mode) > +/// > +#define MAX_ALLOC_ADDRESS 0xFFFFFFFFFFFFULL > + > +/// > +/// Maximum legal RISC-V INTN and UINTN values. > +/// > +#define MAX_INTN ((INTN)0x7FFFFFFFFFFFFFFFULL) > +#define MAX_UINTN ((UINTN)0xFFFFFFFFFFFFFFFFULL) > + > +/// > +/// The stack alignment required for RISC-V > +/// > +#define CPU_STACK_ALIGNMENT 16 > + > +/// > +/// Page allocation granularity for RISC-V > +/// > +#define DEFAULT_PAGE_ALLOCATION_GRANULARITY (0x1000) > +#define RUNTIME_PAGE_ALLOCATION_GRANULARITY (0x1000) > + > +// > +// Modifier to ensure that all protocol member functions and EFI intrinsics > +// use the correct C calling convention. All protocol member functions and > +// EFI intrinsics are required to modify their member functions with EFIAPI. > +// > +#ifdef EFIAPI > + /// > + /// If EFIAPI is already defined, then we use that definition. > + /// > +#elif defined(__GNUC__) > + /// > + /// Define the standard calling convention regardless of optimization level > + /// The GCC support assumes a GCC compiler that supports the EFI ABI. The EFI > + /// ABI is much closer to the x64 Microsoft* ABI than standard x64 (x86-64) > + /// GCC ABI. Thus a standard x64 (x86-64) GCC compiler can not be used for > + /// x64. Warning the assembly code in the MDE x64 does not follow the correct > + /// ABI for the standard x64 (x86-64) GCC. > + /// > + #define EFIAPI > +#else > + /// > + /// The default for a non Microsoft* or GCC compiler is to assume the EFI ABI > + /// is the standard. > + /// > + #define EFIAPI > +#endif > + > +#if defined(__GNUC__) > + /// > + /// For GNU assembly code, .global or .globl can declare global symbols. > + /// Define this macro to unify the usage. > + /// > + #define ASM_GLOBAL .globl > +#endif > + > +/** > + Return the pointer to the first instruction of a function given a function pointer. > + On x64 CPU architectures, these two pointer values are the same, > + so the implementation of this macro is very simple. > + > + @param FunctionPointer A pointer to a function. > + > + @return The pointer to the first instruction of a function given a function pointer. > + > +**/ > +#define FUNCTION_ENTRY_POINT(FunctionPointer) (VOID *)(UINTN)(FunctionPointer) > + > +#ifndef __USER_LABEL_PREFIX__ > +#define __USER_LABEL_PREFIX__ > +#endif > + > +#endif > diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec > index 3fd7d16..1aaa97d 100644 > --- a/MdePkg/MdePkg.dec > +++ b/MdePkg/MdePkg.dec > @@ -6,7 +6,7 @@ > # > # Copyright (c) 2007 - 2019, Intel Corporation. All rights reserved.
> # Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.
> -# (C) Copyright 2016 Hewlett Packard Enterprise Development LP
> +# (C) Copyright 2016 - 2019 Hewlett Packard Enterprise Development LP
> # > # SPDX-License-Identifier: BSD-2-Clause-Patent > # > @@ -39,6 +39,9 @@ > [Includes.AARCH64] > Include/AArch64 > > +[Includes.RISCV64] > + Include/RiscV64 > + > [LibraryClasses] > ## @libraryclass Provides most usb APIs to support the Hid requests defined in Usb Hid 1.1 spec > # and the standard requests defined in Usb 1.1 spec. > -- > 2.7.4 > > > >