From: Jun Nie <jun.nie@linaro.org>
To: Leif Lindholm <leif.lindholm@linaro.org>
Cc: haojian.zhuang@linaro.org, ard.biesheuvel@linaro.org,
linaro-uefi@lists.linaro.org, shawn.guo@linaro.org,
jason.liu@linaro.org, edk2-devel@lists.01.org
Subject: Re: [PATCH 3/4] Platforms/zx: Add boot manager lib and entries
Date: Thu, 17 Aug 2017 23:45:52 +0800 [thread overview]
Message-ID: <199e58f3-e6d5-6717-1798-4eb48f565f7c@linaro.org> (raw)
In-Reply-To: <20170810144126.nwezbmz5kjmrbqgs@bivouac.eciton.net>
On 2017年08月10日 22:41, Leif Lindholm wrote:
> On Wed, Aug 09, 2017 at 10:12:38PM +0800, Jun Nie wrote:
>> Add boot manager lib and entries, including Android and Grub.
>>
>> Contributed-under: TianoCore Contribution Agreement 1.0
>> Signed-off-by: Jun Nie <jun.nie@linaro.org>
>> ---
>> .../Drivers/Zx296718EvbDxe/Zx296718EvbDxe.c | 105 ++++++
>> .../Drivers/Zx296718EvbDxe/Zx296718EvbDxe.inf | 66 ++++
>> .../Library/PlatformBootManagerLib/PlatformBm.c | 404 +++++++++++++++++++++
>> .../Library/PlatformBootManagerLib/PlatformBm.h | 30 ++
>> .../PlatformBootManagerLib.inf | 91 +++++
>> Silicon/Sanchip/SanchipPkg.dec | 29 ++
>> 6 files changed, 725 insertions(+)
>> create mode 100644 Platform/Sanchip/Zx296718Evb/Drivers/Zx296718EvbDxe/Zx296718EvbDxe.c
>> create mode 100644 Platform/Sanchip/Zx296718Evb/Drivers/Zx296718EvbDxe/Zx296718EvbDxe.inf
>> create mode 100644 Silicon/Sanchip/Library/PlatformBootManagerLib/PlatformBm.c
>> create mode 100644 Silicon/Sanchip/Library/PlatformBootManagerLib/PlatformBm.h
>> create mode 100644 Silicon/Sanchip/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
>> create mode 100644 Silicon/Sanchip/SanchipPkg.dec
>>
>> diff --git a/Platform/Sanchip/Zx296718Evb/Drivers/Zx296718EvbDxe/Zx296718EvbDxe.c b/Platform/Sanchip/Zx296718Evb/Drivers/Zx296718EvbDxe/Zx296718EvbDxe.c
>> new file mode 100644
>> index 0000000..47d02bf
>> --- /dev/null
>> +++ b/Platform/Sanchip/Zx296718Evb/Drivers/Zx296718EvbDxe/Zx296718EvbDxe.c
>> @@ -0,0 +1,105 @@
>> +/** @file
>> +*
>> +* Copyright (C) 2017 Sanechips Technology Co., Ltd.
>> +* Copyright (c) 2017, Linaro Ltd.
>> +*
>> +* This program and the accompanying materials
>> +* are licensed and made available under the terms and conditions of the BSD License
>> +* which accompanies this distribution. The full text of the license may be found at
>> +* http://opensource.org/licenses/bsd-license.php
>> +*
>> +* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
>> +* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
>> +*
>> +**/
>> +
>> +#include <Library/BaseMemoryLib.h>
>> +#include <Library/BdsLib.h>
>> +#include <Library/CacheMaintenanceLib.h>
>> +#include <Library/DebugLib.h>
>> +#include <Library/DevicePathLib.h>
>> +#include <Library/MemoryAllocationLib.h>
>> +#include <Library/PrintLib.h>
>> +#include <Library/UefiBootServicesTableLib.h>
>> +#include <Library/UefiLib.h>
>> +#include <Library/UefiRuntimeServicesTableLib.h>
>> +
>> +#include <Protocol/AndroidBootImg.h>
>> +#include <Protocol/BlockIo.h>
>
> Which aspect of BlockIo is used here?
> On the whole, several of the above includes look unused - could you
> prune them back a bit?
Sure.
>
>> +
>> +#include <libfdt.h>
>> +
>> +EFI_STATUS
>> +EFIAPI
>> +AndroidBootImgAppendKernelArgs (
>> + IN CHAR16 *Args,
>> + IN UINTN Size
>> + )
>> +{
>> + UnicodeSPrint (
>> + Args + StrLen (Args), Size - StrLen (Args), L" efi=noruntime");
>
> I am not sure what your intent is here, but I am entirely convinced
> there is a better way to achieve it. Can you give some background,
> please?
RTC driver is lack of runtime service, so register access result kernel
panic. After RTC driver support runtime service, I already delete this
function in later version.
>
>> + return EFI_SUCCESS;
>> +}
>> +
>> +EFI_STATUS
>> +EFIAPI
>> +AndroidBootImgUpdateDtb (
>> + IN EFI_PHYSICAL_ADDRESS OrigFdtBase,
>> + OUT EFI_PHYSICAL_ADDRESS *NewFdtBase
>> + )
>> +{
>> + UINTN FdtSize, NumPages;
>> + INTN err;
>> + EFI_STATUS Status;
>> +
>> + //
>> + // Store the FDT as Runtime Service Data to prevent the Kernel from
>> + // overwritting its data.
>> + //
>
> This should really not be necessary and has never been needed
> elsewhere. Have you seen this cause any change in behaviour in an
> actual system?
This is copied from Hisilicon code and I had thought it is for safety. I
already delete this function in later version.
>
>> + FdtSize = fdt_totalsize ((VOID *)(UINTN)OrigFdtBase);
>> + NumPages = EFI_SIZE_TO_PAGES (FdtSize) + 20;
>> + Status = gBS->AllocatePages (
>> + AllocateAnyPages, EfiRuntimeServicesData,
>> + NumPages, NewFdtBase);
>> + if (EFI_ERROR (Status)) {
>> + return EFI_BUFFER_TOO_SMALL;
>> + }
>> +
>> + CopyMem (
>> + (VOID*)(UINTN)*NewFdtBase,
>> + (VOID*)(UINTN)OrigFdtBase,
>> + FdtSize
>> + );
>> +
>> + fdt_pack ((VOID*)(UINTN)*NewFdtBase);
>> + err = fdt_check_header ((VOID*)(UINTN)*NewFdtBase);
>
> This does not feel like it belongs here. Check it when you first load
> it, by all means, but there is no need to keep checking it did not get
> destroyed by normal execution.
Yes, it can be removed after check logic is added in library.
>
>> + if (err != 0) {
>> + DEBUG ((DEBUG_ERROR, "ERROR: Device Tree header not valid (err:%d)\n", err));
>> + gBS->FreePages (*NewFdtBase, NumPages);
>> + return EFI_INVALID_PARAMETER;
>> + }
>> + return EFI_SUCCESS;
>> +}
>> +
>> +ANDROID_BOOTIMG_PROTOCOL mAndroidBootImg = {
>> + AndroidBootImgAppendKernelArgs,
>> + AndroidBootImgUpdateDtb
>> +};
>> +
>> +EFI_STATUS
>> +EFIAPI
>> +Zx296718EvbEntryPoint (
>> + IN EFI_HANDLE ImageHandle,
>> + IN EFI_SYSTEM_TABLE *SystemTable
>> + )
>> +{
>> + EFI_STATUS Status;
>> +
>> + Status = gBS->InstallProtocolInterface (
>> + &ImageHandle,
>> + &gAndroidBootImgProtocolGuid,
>> + EFI_NATIVE_INTERFACE,
>> + &mAndroidBootImg
>> + );
>> + return Status;
>> +}
>> diff --git a/Platform/Sanchip/Zx296718Evb/Drivers/Zx296718EvbDxe/Zx296718EvbDxe.inf b/Platform/Sanchip/Zx296718Evb/Drivers/Zx296718EvbDxe/Zx296718EvbDxe.inf
>> new file mode 100644
>> index 0000000..03982d1
>> --- /dev/null
>> +++ b/Platform/Sanchip/Zx296718Evb/Drivers/Zx296718EvbDxe/Zx296718EvbDxe.inf
>> @@ -0,0 +1,66 @@
>> +#
>> +# Copyright (C) 2017 Sanechips Technology Co., Ltd.
>> +# Copyright (c) 2017, Linaro Ltd.
>> +#
>> +# This program and the accompanying materials
>> +# are licensed and made available under the terms and conditions of the BSD License
>> +# which accompanies this distribution. The full text of the license may be found at
>> +# http://opensource.org/licenses/bsd-license.php
>> +#
>> +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
>> +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
>> +#
>> +
>> +[Defines]
>> + INF_VERSION = 0x00010005
>
> 0x00010019/1.25.
>
>> + BASE_NAME = Zx296718EvbDxe
>> + FILE_GUID = db154b2a-031f-4f3c-9315-c4697ff33e6c
>> + MODULE_TYPE = DXE_DRIVER
>> + VERSION_STRING = 1.0
>> + ENTRY_POINT = Zx296718EvbEntryPoint
>> +
>> +[Sources.common]
>> + Zx296718EvbDxe.c
>> +
>> +[Packages]
>> + ArmPkg/ArmPkg.dec
>> + EmbeddedPkg/EmbeddedPkg.dec
>> + MdePkg/MdePkg.dec
>> + MdeModulePkg/MdeModulePkg.dec
>
> M (MdeM) before P (MdeP).
>
>> + Platform/Sanchip/Zx296718Evb/Zx296718Evb.dec
>> +
>> +[LibraryClasses]
>> + BaseMemoryLib
>> + BdsLib
>> + CacheMaintenanceLib
>> + DebugLib
>> + DxeServicesLib
>> + DxeServicesTableLib
>> + FdtLib
>> + IoLib
>> + PcdLib
>> + PrintLib
>> + SerialPortLib
>> + TimerLib
>> + UefiBootServicesTableLib
>> + UefiRuntimeServicesTableLib
>> + UefiLib
>
> L before R.
>
>> + UefiDriverEntryPoint
>
> But D before L.
>
> But also, how many of these LibraryClasses are actually used by this
> driver?
>
>> +
>> +[Guids]
>> + gEfiEndOfDxeEventGroupGuid
>> + gEfiFileInfoGuid
>> + gEfiGlobalVariableGuid
>> + gFdtTableGuid
>> + gFdtVariableGuid
>
> How many of these Guids are actually used by this driver?
>
>> +
>> +[Protocols]
>> + gAndroidBootImgProtocolGuid
>> + gEfiBlockIoProtocolGuid
>> + gEfiDevicePathFromTextProtocolGuid
>> + gEfiDevicePathToTextProtocolGuid
>> + gEfiDevicePathProtocolGuid
>> + gEfiSimpleFileSystemProtocolGuid
>
> How many of these protocols are actually used by this driver?
Lots of code are removed from previous version. So most of them can be
deleted now.
>
>> +
>> +[Depex]
>> + TRUE
>> diff --git a/Silicon/Sanchip/Library/PlatformBootManagerLib/PlatformBm.c b/Silicon/Sanchip/Library/PlatformBootManagerLib/PlatformBm.c
>
> It looks to me like this implementation (perhaps with a few small
> modifications) should be reusable across multiple implementations.
>
> That does not need to happen for this to be merged, but it would be
> good if you and Haojian could discuss between yourselves. (Also,
> perhaps we should all sit down and discuss this at Linaro Connect next
> month.)
It is good idea and I will collect your comments later when code is ready.
>
>> new file mode 100644
>> index 0000000..41861e2
>> --- /dev/null
>> +++ b/Silicon/Sanchip/Library/PlatformBootManagerLib/PlatformBm.c
>> @@ -0,0 +1,404 @@
>> +/** @file
>> + Implementation for PlatformBootManagerLib library class interfaces.
>> +
>> + Copyright (C) 2015-2016, Red Hat, Inc.
>> + Copyright (c) 2014, ARM Ltd. All rights reserved.<BR>
>> + Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR>
>> + Copyright (c) 2016-2017, Linaro Ltd. All rights reserved.<BR>
>> +
>> + This program and the accompanying materials are licensed and made available
>> + under the terms and conditions of the BSD License which accompanies this
>> + distribution. The full text of the license may be found at
>> + http://opensource.org/licenses/bsd-license.php
>> +
>> + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT
>> + WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
>> +
>> +**/
>> +
>> +#include <Library/DevicePathLib.h>
>> +#include <Library/PcdLib.h>
>> +#include <Library/UefiBootManagerLib.h>
>> +#include <Library/UefiLib.h>
>> +#include <Protocol/BlockIo.h>
>> +#include <Protocol/DevicePath.h>
>> +#include <Protocol/DevicePathFromText.h>
>> +#include <Protocol/DevicePathToText.h>
>> +#include <Protocol/LoadedImage.h>
>> +#include <Guid/EventGroup.h>
>> +#include <Guid/TtyTerm.h>
>
> Can you verify all of the above are actually used by this file?
Sure.
>
>> +
>> +#include "PlatformBm.h"
>> +
>> +#define DP_NODE_LEN(Type) { (UINT8)sizeof (Type), (UINT8)(sizeof (Type) >> 8) }
>> +
>> +#define GRUB_FILE_NAME L"\\EFI\\BOOT\\GRUBAA64.EFI"
>> +
>> +
>> +#pragma pack (1)
>> +typedef struct {
>> + VENDOR_DEVICE_PATH SerialDxe;
>> + UART_DEVICE_PATH Uart;
>> + VENDOR_DEFINED_DEVICE_PATH TermType;
>> + EFI_DEVICE_PATH_PROTOCOL End;
>> +} PLATFORM_SERIAL_CONSOLE;
>> +#pragma pack ()
>> +
>> +#define SERIAL_DXE_FILE_GUID { \
>> + 0xD3987D4B, 0x971A, 0x435F, \
>> + { 0x8C, 0xAF, 0x49, 0x67, 0xEB, 0x62, 0x72, 0x41 } \
>> + }
>> +
>> +STATIC PLATFORM_SERIAL_CONSOLE mSerialConsole = {
>> + //
>> + // VENDOR_DEVICE_PATH SerialDxe
>> + //
>> + {
>> + { HARDWARE_DEVICE_PATH, HW_VENDOR_DP, DP_NODE_LEN (VENDOR_DEVICE_PATH) },
>> + SERIAL_DXE_FILE_GUID
>> + },
>> +
>> + //
>> + // UART_DEVICE_PATH Uart
>> + //
>> + {
>> + { MESSAGING_DEVICE_PATH, MSG_UART_DP, DP_NODE_LEN (UART_DEVICE_PATH) },
>> + 0, // Reserved
>> + FixedPcdGet64 (PcdUartDefaultBaudRate), // BaudRate
>> + FixedPcdGet8 (PcdUartDefaultDataBits), // DataBits
>> + FixedPcdGet8 (PcdUartDefaultParity), // Parity
>> + FixedPcdGet8 (PcdUartDefaultStopBits) // StopBits
>> + },
>> +
>> + //
>> + // VENDOR_DEFINED_DEVICE_PATH TermType
>> + //
>> + {
>> + {
>> + MESSAGING_DEVICE_PATH, MSG_VENDOR_DP,
>> + DP_NODE_LEN (VENDOR_DEFINED_DEVICE_PATH)
>> + }
>> + //
>> + // Guid to be filled in dynamically
>> + //
>> + },
>> +
>> + //
>> + // EFI_DEVICE_PATH_PROTOCOL End
>> + //
>> + {
>> + END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE,
>> + DP_NODE_LEN (EFI_DEVICE_PATH_PROTOCOL)
>> + }
>> +};
>> +
>> +/**
>> + Check if the handle satisfies a particular condition.
>> +
>> + @param[in] Handle The handle to check.
>> + @param[in] ReportText A caller-allocated string passed in for reporting
>> + purposes. It must never be NULL.
>> +
>> + @retval TRUE The condition is satisfied.
>> + @retval FALSE Otherwise. This includes the case when the condition could not
>> + be fully evaluated due to an error.
>> +**/
>> +typedef
>> +BOOLEAN
>> +(EFIAPI *FILTER_FUNCTION) (
>> + IN EFI_HANDLE Handle,
>> + IN CONST CHAR16 *ReportText
>> + );
>> +
>> +
>> +/**
>> + Process a handle.
>> +
>> + @param[in] Handle The handle to process.
>> + @param[in] ReportText A caller-allocated string passed in for reporting
>> + purposes. It must never be NULL.
>> +**/
>> +typedef
>> +VOID
>> +(EFIAPI *CALLBACK_FUNCTION) (
>> + IN EFI_HANDLE Handle,
>> + IN CONST CHAR16 *ReportText
>> + );
>> +
>> +STATIC
>> +VOID
>> +PlatformRegisterFvBootOption (
>> + EFI_GUID *FileGuid,
>> + CHAR16 *Description,
>> + UINT32 Attributes
>> + )
>> +{
>> + EFI_STATUS Status;
>> + INTN OptionIndex;
>> + EFI_BOOT_MANAGER_LOAD_OPTION NewOption;
>> + EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions;
>> + UINTN BootOptionCount;
>> + MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FileNode;
>> + EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;
>> + EFI_DEVICE_PATH_PROTOCOL *DevicePath;
>> +
>> + Status = gBS->HandleProtocol (
>> + gImageHandle,
>> + &gEfiLoadedImageProtocolGuid,
>> + (VOID **) &LoadedImage
>> + );
>> + ASSERT_EFI_ERROR (Status);
>> +
>> + EfiInitializeFwVolDevicepathNode (&FileNode, FileGuid);
>> + DevicePath = DevicePathFromHandle (LoadedImage->DeviceHandle);
>> + ASSERT (DevicePath != NULL);
>> + DevicePath = AppendDevicePathNode (
>> + DevicePath,
>> + (EFI_DEVICE_PATH_PROTOCOL *) &FileNode
>> + );
>> + ASSERT (DevicePath != NULL);
>> +
>> + Status = EfiBootManagerInitializeLoadOption (
>> + &NewOption,
>> + LoadOptionNumberUnassigned,
>> + LoadOptionTypeBoot,
>> + Attributes,
>> + Description,
>> + DevicePath,
>> + NULL,
>> + 0
>> + );
>> + ASSERT_EFI_ERROR (Status);
>> + FreePool (DevicePath);
>> +
>> + BootOptions = EfiBootManagerGetLoadOptions (
>> + &BootOptionCount, LoadOptionTypeBoot
>> + );
>> +
>> + OptionIndex = EfiBootManagerFindLoadOption (
>> + &NewOption, BootOptions, BootOptionCount
>> + );
>> +
>> + if (OptionIndex == -1) {
>> + Status = EfiBootManagerAddLoadOptionVariable (&NewOption, MAX_UINTN);
>> + ASSERT_EFI_ERROR (Status);
>> + }
>> +
>> + EfiBootManagerFreeLoadOption (&NewOption);
>> + EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount);
>> +}
>> +
>> +
>> +STATIC
>> +VOID
>> +PlatformRegisterBootGrub (
>> + VOID
>> + )
>> +{
>> + EFI_STATUS Status;
>> + CHAR16 *BootPathStr;
>> + EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL *EfiDevicePathFromTextProtocol;
>> + EFI_DEVICE_PATH *DevicePath;
>> + EFI_DEVICE_PATH *FileDevicePath;
>> + FILEPATH_DEVICE_PATH *FilePath;
>> + UINTN Size;
>> + EFI_BOOT_MANAGER_LOAD_OPTION NewOption;
>> + EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions;
>> + UINTN BootOptionCount;
>> + INTN OptionIndex;
>> +
>> + //
>> + // Get PcdAndroidBootDevicePath
>> + //
>> + BootPathStr = (CHAR16 *)PcdGetPtr (PcdAndroidBootDevicePath);
>> + ASSERT (BootPathStr != NULL);
>> + Status = gBS->LocateProtocol (&gEfiDevicePathFromTextProtocolGuid, NULL,
>> + (VOID **)&EfiDevicePathFromTextProtocol);
>> + ASSERT_EFI_ERROR(Status);
>> + DevicePath = (EFI_DEVICE_PATH *)EfiDevicePathFromTextProtocol->ConvertTextToDevicePath (BootPathStr);
>> + ASSERT (DevicePath != NULL);
>> +
>> + Size = StrSize (GRUB_FILE_NAME);
>> + FileDevicePath = AllocatePool (Size + SIZE_OF_FILEPATH_DEVICE_PATH + END_DEVICE_PATH_LENGTH);
>> + if (FileDevicePath != NULL) {
>> + FilePath = (FILEPATH_DEVICE_PATH *) FileDevicePath;
>> + FilePath->Header.Type = MEDIA_DEVICE_PATH;
>> + FilePath->Header.SubType = MEDIA_FILEPATH_DP;
>> + CopyMem (&FilePath->PathName, GRUB_FILE_NAME, Size);
>> + SetDevicePathNodeLength (&FilePath->Header, Size + SIZE_OF_FILEPATH_DEVICE_PATH);
>> + SetDevicePathEndNode (NextDevicePathNode (&FilePath->Header));
>> +
>> + DevicePath = AppendDevicePath (DevicePath, FileDevicePath);
>> + FreePool (FileDevicePath);
>> + }
>> + Status = EfiBootManagerInitializeLoadOption (
>> + &NewOption,
>> + LoadOptionNumberUnassigned,
>> + LoadOptionTypeBoot,
>> + LOAD_OPTION_ACTIVE,
>> + L"Grub",
>> + DevicePath,
>> + NULL,
>> + 0
>> + );
>> + ASSERT_EFI_ERROR (Status);
>> + FreePool (DevicePath);
>> +
>> + BootOptions = EfiBootManagerGetLoadOptions (
>> + &BootOptionCount, LoadOptionTypeBoot
>> + );
>> +
>> + OptionIndex = EfiBootManagerFindLoadOption (
>> + &NewOption, BootOptions, BootOptionCount
>> + );
>> +
>> + if (OptionIndex == -1) {
>> + Status = EfiBootManagerAddLoadOptionVariable (&NewOption, MAX_UINTN);
>> + ASSERT_EFI_ERROR (Status);
>> + }
>> +
>> + EfiBootManagerFreeLoadOption (&NewOption);
>> + EfiBootManagerFreeLoadOptions (BootOptions, BootOptionCount);
>> +
>> +}
>> +
>> +STATIC
>> +VOID
>> +PlatformRegisterOptionsAndKeys (
>> + VOID
>> + )
>> +{
>> + EFI_STATUS Status;
>> + EFI_INPUT_KEY Enter;
>> + EFI_INPUT_KEY Esc;
>> + EFI_BOOT_MANAGER_LOAD_OPTION BootOption;
>> +
>> + //
>> + // Register Boot. OptionNumber is 1.
>> + //
>> + PlatformRegisterBootGrub ();
>> +
>> + //
>> + // Register Android Boot. OptionNumber is 2.
>> + //
>> + PlatformRegisterFvBootOption (
>> + PcdGetPtr (PcdAndroidBootFile), L"Android Boot", LOAD_OPTION_ACTIVE
>> + );
>> +
>> + //
>> + // Register ENTER as CONTINUE key
>> + //
>> + Enter.ScanCode = SCAN_NULL;
>> + Enter.UnicodeChar = CHAR_CARRIAGE_RETURN;
>> + Status = EfiBootManagerRegisterContinueKeyOption (0, &Enter, NULL);
>> + ASSERT_EFI_ERROR (Status);
>> +
>> + //
>> + // Map ESC to Boot Manager Menu
>> + //
>> + Esc.ScanCode = SCAN_ESC;
>> + Esc.UnicodeChar = CHAR_NULL;
>> + Status = EfiBootManagerGetBootManagerMenu (&BootOption);
>> + ASSERT_EFI_ERROR (Status);
>> + Status = EfiBootManagerAddKeyOptionVariable (
>> + NULL, (UINT16) BootOption.OptionNumber, 0, &Esc, NULL
>> + );
>> + ASSERT (Status == EFI_SUCCESS || Status == EFI_ALREADY_STARTED);
>> +}
>> +
>> +
>> +//
>> +// BDS Platform Functions
>> +//
>> +/**
>> + Do the platform init, can be customized by OEM/IBV
>> + Possible things that can be done in PlatformBootManagerBeforeConsole:
>> + > Update console variable: 1. include hot-plug devices;
>> + > 2. Clear ConIn and add SOL for AMT
>> + > Register new Driver#### or Boot####
>> + > Register new Key####: e.g.: F12
>> + > Signal ReadyToLock event
>> + > Authentication action: 1. connect Auth devices;
>> + > 2. Identify auto logon user.
>> +**/
>> +VOID
>> +EFIAPI
>> +PlatformBootManagerBeforeConsole (
>> + VOID
>> + )
>> +{
>> + //
>> + // Signal EndOfDxe PI Event
>> + //
>> + EfiEventGroupSignal (&gEfiEndOfDxeEventGroupGuid);
>> +
>> + //
>> + // Add the hardcoded serial console device path to ConIn, ConOut, ErrOut.
>> + //
>> + ASSERT (FixedPcdGet8 (PcdDefaultTerminalType) == 4);
>> + CopyGuid (&mSerialConsole.TermType.Guid, &gEfiTtyTermGuid);
>> +
>> + EfiBootManagerUpdateConsoleVariable (ConIn,
>> + (EFI_DEVICE_PATH_PROTOCOL *)&mSerialConsole, NULL);
>> + EfiBootManagerUpdateConsoleVariable (ConOut,
>> + (EFI_DEVICE_PATH_PROTOCOL *)&mSerialConsole, NULL);
>> + EfiBootManagerUpdateConsoleVariable (ErrOut,
>> + (EFI_DEVICE_PATH_PROTOCOL *)&mSerialConsole, NULL);
>> +
>> + //
>> + // Register platform-specific boot options and keyboard shortcuts.
>> + //
>> + PlatformRegisterOptionsAndKeys ();
>> +}
>> +
>> +/**
>> + Do the platform specific action after the console is ready
>> + Possible things that can be done in PlatformBootManagerAfterConsole:
>> + > Console post action:
>> + > Dynamically switch output mode from 100x31 to 80x25 for certain senarino
>> + > Signal console ready platform customized event
>> + > Run diagnostics like memory testing
>> + > Connect certain devices
>> + > Dispatch aditional option roms
>> + > Special boot
>> +**/
>> +VOID
>> +EFIAPI
>> +PlatformBootManagerAfterConsole (
>> + VOID
>> + )
>> +{
>> + Print (L"Press ESCAPE for boot options ");
>> +
>> + //
>> + // Connect the rest of the devices.
>> + //
>> + EfiBootManagerConnectAll ();
>> +
>> + //
>> + // Enumerate all possible boot options.
>> + //
>> + EfiBootManagerRefreshAllBootOption ();
>> +
>> + //
>> + // Register UEFI Shell
>> + //
>> + PlatformRegisterFvBootOption (
>> + PcdGetPtr (PcdShellFile), L"UEFI Shell", LOAD_OPTION_ACTIVE
>> + );
>> +}
>> +
>> +/**
>> + This function is called each second during the boot manager waits the
>> + timeout.
>> +
>> + @param TimeoutRemain The remaining timeout.
>> +**/
>> +VOID
>> +EFIAPI
>> +PlatformBootManagerWaitCallback (
>> + UINT16 TimeoutRemain
>> + )
>> +{
>> + Print (L".");
>> +}
>> diff --git a/Silicon/Sanchip/Library/PlatformBootManagerLib/PlatformBm.h b/Silicon/Sanchip/Library/PlatformBootManagerLib/PlatformBm.h
>> new file mode 100644
>> index 0000000..de52a9c
>> --- /dev/null
>> +++ b/Silicon/Sanchip/Library/PlatformBootManagerLib/PlatformBm.h
>> @@ -0,0 +1,30 @@
>> +/** @file
>> + Head file for BDS Platform specific code
>> +
>> + Copyright (C) 2015-2016, Red Hat, Inc.
>> + Copyright (c) 2004 - 2008, Intel Corporation. All rights reserved.<BR>
>> + Copyright (c) 2016-2017, Linaro Ltd. All rights reserved.<BR>
>> +
>> + This program and the accompanying materials are licensed and made available
>> + under the terms and conditions of the BSD License which accompanies this
>> + distribution. The full text of the license may be found at
>> + http://opensource.org/licenses/bsd-license.php
>> +
>> + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT
>> + WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
>> +
>> +**/
>> +
>> +#ifndef _PLATFORM_BM_H_
>> +#define _PLATFORM_BM_H_
>> +
>> +#include <Library/BaseLib.h>
>> +#include <Library/BaseMemoryLib.h>
>> +#include <Library/DebugLib.h>
>> +#include <Library/DevicePathLib.h>
>> +#include <Library/MemoryAllocationLib.h>
>> +#include <Library/UefiBootServicesTableLib.h>
>> +#include <Library/UefiLib.h>
>> +#include <Library/UefiRuntimeServicesTableLib.h>
>
> If all this holds is a set of include files for a single source file,
> may they not just go directly into the .c file?
Sure.
>
>> +
>> +#endif // _PLATFORM_BM_H_
>> diff --git a/Silicon/Sanchip/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf b/Silicon/Sanchip/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
>> new file mode 100644
>> index 0000000..b9c6aaa
>> --- /dev/null
>> +++ b/Silicon/Sanchip/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
>> @@ -0,0 +1,91 @@
>> +## @file
>> +# Implementation for PlatformBootManagerLib library class interfaces.
>> +#
>> +# Copyright (C) 2015-2016, Red Hat, Inc.
>> +# Copyright (c) 2014, ARM Ltd. All rights reserved.<BR>
>> +# Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>
>> +# Copyright (c) 2017, Linaro Ltd. All rights reserved.<BR>
>> +#
>> +# This program and the accompanying materials are licensed and made available
>> +# under the terms and conditions of the BSD License which accompanies this
>> +# distribution. The full text of the license may be found at
>> +# http://opensource.org/licenses/bsd-license.php
>> +#
>> +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
>> +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR
>> +# IMPLIED.
>> +#
>> +##
>> +
>> +[Defines]
>> + INF_VERSION = 0x00010005
>
> 0x00010019/1.25.
>
>> + BASE_NAME = PlatformBootManagerLib
>> + FILE_GUID = 9001ec12-8757-4638-b6d0-e0863dddddb0
>> + MODULE_TYPE = DXE_DRIVER
>> + VERSION_STRING = 1.0
>> + LIBRARY_CLASS = PlatformBootManagerLib|DXE_DRIVER
>> +
>> +#
>> +# The following information is for reference only and not required by the build tools.
>> +#
>> +# VALID_ARCHITECTURES = ARM AARCH64
>> +#
>> +
>> +[Sources]
>> + PlatformBm.c
>> +
>> +[Packages]
>> + EmbeddedPkg/EmbeddedPkg.dec
>> + IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec
>> + MdeModulePkg/MdeModulePkg.dec
>> + MdePkg/MdePkg.dec
>> + Silicon/Sanchip/SanchipPkg.dec
>
> Are all of these actually used?
>
>> +
>> +[LibraryClasses]
>> + BaseLib
>> + BaseMemoryLib
>> + DebugLib
>> + DevicePathLib
>> + DxeServicesLib
>> + MemoryAllocationLib
>> + PcdLib
>> + PrintLib
>> + UefiBootManagerLib
>> + UefiBootServicesTableLib
>> + UefiLib
>
> Are all of these actually used?
>
>> +
>> +[FeaturePcd]
>> + gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdBootlogoOnlyEnable
>> + gEfiMdePkgTokenSpaceGuid.PcdUgaConsumeSupport
>
> Are all of these actually used?
>
>> +
>> +[FixedPcd]
>> + gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLogoFile
>> + gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdShellFile
>> + gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate
>> + gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits
>> + gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity
>> + gEfiMdePkgTokenSpaceGuid.PcdUartDefaultStopBits
>> + gEfiMdePkgTokenSpaceGuid.PcdDefaultTerminalType
>
> Are all of these actually used?
>
>> +
>> +[Pcd]
>> + gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut
>> + gSanchipTokenSpaceGuid.PcdAndroidBootFile
>
> Are all of these actually used?
>
>> +
>> +[Guids]
>> + gEfiFileInfoGuid
>> + gEfiFileSystemInfoGuid
>> + gEfiFileSystemVolumeLabelInfoIdGuid
>> + gEfiEndOfDxeEventGroupGuid
>> + gEfiTtyTermGuid
>
> Are all of these actually used?
>
>> +
>> +[Protocols]
>> + gEfiDevicePathFromTextProtocolGuid
>> + gEfiDevicePathProtocolGuid
>> + gEfiLoadedImageProtocolGuid
>> + gEfiOEMBadgingProtocolGuid
>> + gEfiPciRootBridgeIoProtocolGuid
>> + gEfiSimpleFileSystemProtocolGuid
>> + gEfiDevicePathToTextProtocolGuid
>
> Are all of these actually used?
Will clean it after this library rewrite for sharing.
>
>> +
>> +[Pcd]
>> + gEmbeddedTokenSpaceGuid.PcdAndroidBootDevicePath
>> diff --git a/Silicon/Sanchip/SanchipPkg.dec b/Silicon/Sanchip/SanchipPkg.dec
>> new file mode 100644
>> index 0000000..92d439d
>> --- /dev/null
>> +++ b/Silicon/Sanchip/SanchipPkg.dec
>> @@ -0,0 +1,29 @@
>> +#
>> +# Copyright (C) 2017 Sanechips Technology Co., Ltd.
>> +# Copyright (c) 2017, Linaro Ltd.
>> +#
>> +# This program and the accompanying materials
>> +# are licensed and made available under the terms and conditions of the BSD License
>> +# which accompanies this distribution. The full text of the license may be found at
>> +# http://opensource.org/licenses/bsd-license.php
>> +#
>> +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
>> +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
>> +#
>> +
>> +[Defines]
>> + DEC_SPECIFICATION = 0x00010005
>
> 0x00010019/1.25.
>
>> + PACKAGE_NAME = SanchipPkg
>> + PACKAGE_GUID = f991248f-9e21-4e4f-b344-eaad28e42ec0
>> + PACKAGE_VERSION = 0.1
>> +
>> +[Includes.common]
>> + Include # Root include for the package
>
> This directory does not exist, causing compliation to fail.
Test shows that this include entry is unnecessary.
>
>> +
>> +[Guids.common]
>> + gSanchipTokenSpaceGuid = { 0x9589ba86, 0x58e6, 0x426c, { 0xbb, 0x39, 0x21, 0xf5, 0x68, 0x78, 0xe4, 0x27 } }
>> +
>> +[PcdsFixedAtBuild.common]
>> + gSanchipTokenSpaceGuid.PcdAndroidBootFile|{ 0x36, 0x8b, 0x73, 0x3a, 0xc5, 0xb9, 0x63, 0x47, 0xab, 0xbd, 0x6c, 0xbd, 0x4b, 0x25, 0xf9, 0xff }|VOID*|0x00000003
>
> What?
PcdAndroidBootFile is FileGuid for AndroidBoot app file, as PcdShellFile
Guid in other places. Do you want to hardcode the Guid in PlatformBm.c
library code?
>
>> + gSanchipTokenSpaceGuid.PcdZxRtcClockBase|0|UINT64|0x00000002
>> + gSanchipTokenSpaceGuid.PcdZxRtcClockFreq|24000|UINT64|0x00000001
>> --
>> 1.9.1
>>
next prev parent reply other threads:[~2017-08-17 15:43 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1502287959-16806-1-git-send-email-jun.nie@linaro.org>
2017-08-10 13:04 ` [PATCH 1/4] Platforms: Add Sanchip Zx296718 basic library Leif Lindholm
2017-08-10 14:16 ` Laszlo Ersek
[not found] ` <e3573cc7-875f-6b44-12dd-b76ec8c9272a@linaro.org>
2017-08-17 15:51 ` Leif Lindholm
[not found] ` <1502287959-16806-3-git-send-email-jun.nie@linaro.org>
2017-08-10 14:41 ` [PATCH 3/4] Platforms/zx: Add boot manager lib and entries Leif Lindholm
2017-08-17 15:45 ` Jun Nie [this message]
2017-08-17 18:53 ` Leif Lindholm
[not found] ` <1502287959-16806-4-git-send-email-jun.nie@linaro.org>
2017-08-10 15:00 ` [PATCH 4/4] Platforms/zx: Add platform build system files Leif Lindholm
2017-08-17 15:46 ` Jun Nie
[not found] ` <1502287959-16806-2-git-send-email-jun.nie@linaro.org>
2017-08-10 14:03 ` [PATCH 2/4] Platforms: Add ZX RTC driver for Sanchip SoC Leif Lindholm
2017-08-17 15:43 ` Jun Nie
2017-08-17 15:55 ` Leif Lindholm
2017-08-10 15:15 ` Leif Lindholm
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-list 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=199e58f3-e6d5-6717-1798-4eb48f565f7c@linaro.org \
--to=devel@edk2.groups.io \
/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