From 8322634459ac602d9fbcca30e96b24ff098acb3c Mon Sep 17 00:00:00 2001 From: Leif Lindholm Date: Wed, 3 May 2017 14:48:15 +0100 Subject: Platform,Silicon: Import Hisilicon D02,D03,D05 and HiKey Imported from commit efd798c1eb of https://git.linaro.org/uefi/OpenPlatformPkg.git Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Leif Lindholm --- .../Hisilicon/Drivers/FlashFvbDxe/FlashFvbDxe.h | 228 +++++++++++++++++++++ 1 file changed, 228 insertions(+) create mode 100644 Silicon/Hisilicon/Drivers/FlashFvbDxe/FlashFvbDxe.h (limited to 'Silicon/Hisilicon/Drivers/FlashFvbDxe/FlashFvbDxe.h') diff --git a/Silicon/Hisilicon/Drivers/FlashFvbDxe/FlashFvbDxe.h b/Silicon/Hisilicon/Drivers/FlashFvbDxe/FlashFvbDxe.h new file mode 100644 index 0000000000..76385b6b65 --- /dev/null +++ b/Silicon/Hisilicon/Drivers/FlashFvbDxe/FlashFvbDxe.h @@ -0,0 +1,228 @@ +/** @file +* +* Copyright (c) 2011-2015, ARM Limited. All rights reserved. +* Copyright (c) 2015, Hisilicon Limited. All rights reserved. +* Copyright (c) 2015, Linaro Limited. All rights reserved. +* +* 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 __FLASH_FVB_DXE_H__ +#define __FLASH_FVB_DXE_H__ + + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + + +#define FLASH_ERASE_RETRY 10 +#define FLASH_DEVICE_COUNT 1 + +// Device access macros +// These are necessary because we use 2 x 16bit parts to make up 32bit data +typedef struct +{ + UINTN DeviceBaseAddress; // Start address of the Device Base Address (DBA) + UINTN RegionBaseAddress; // Start address of one single region + UINTN Size; + UINTN BlockSize; + EFI_GUID Guid; +} FLASH_DESCRIPTION; + +#define GET_BLOCK_ADDRESS(BaseAddr,Lba,LbaSize)( BaseAddr + (UINTN)((Lba) * LbaSize) ) + +#define FLASH_SIGNATURE SIGNATURE_32('s', 'p', 'i', '0') +#define INSTANCE_FROM_FVB_THIS(a) CR(a, FLASH_INSTANCE, FvbProtocol, FLASH_SIGNATURE) +#define INSTANCE_FROM_BLKIO_THIS(a) CR(a, FLASH_INSTANCE, BlockIoProtocol, FLASH_SIGNATURE) + +typedef struct _FLASH_INSTANCE FLASH_INSTANCE; + +typedef EFI_STATUS (*FLASH_INITIALIZE) (FLASH_INSTANCE* Instance); + +typedef struct +{ + VENDOR_DEVICE_PATH Vendor; + EFI_DEVICE_PATH_PROTOCOL End; +} FLASH_DEVICE_PATH; + +struct _FLASH_INSTANCE +{ + UINT32 Signature; + EFI_HANDLE Handle; + + BOOLEAN Initialized; + FLASH_INITIALIZE Initialize; + + UINTN DeviceBaseAddress; + UINTN RegionBaseAddress; + UINTN Size; + EFI_LBA StartLba; + + EFI_BLOCK_IO_PROTOCOL BlockIoProtocol; + EFI_BLOCK_IO_MEDIA Media; + + BOOLEAN SupportFvb; + EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL FvbProtocol; + + FLASH_DEVICE_PATH DevicePath; +}; + + +// +// BlockIO Protocol function EFI_BLOCK_IO_PROTOCOL.ReadBlocks +// +EFI_STATUS +EFIAPI +FlashBlockIoReadBlocks ( + IN EFI_BLOCK_IO_PROTOCOL* This, + IN UINT32 MediaId, + IN EFI_LBA Lba, + IN UINTN BufferSizeInBytes, + OUT VOID* Buffer +); + +// +// BlockIO Protocol function EFI_BLOCK_IO_PROTOCOL.WriteBlocks +// +EFI_STATUS +EFIAPI +FlashBlockIoWriteBlocks ( + IN EFI_BLOCK_IO_PROTOCOL* This, + IN UINT32 MediaId, + IN EFI_LBA Lba, + IN UINTN BufferSizeInBytes, + IN VOID* Buffer +); + +// +// BlockIO Protocol function EFI_BLOCK_IO_PROTOCOL.FlushBlocks +// +EFI_STATUS +EFIAPI +FlashBlockIoFlushBlocks ( + IN EFI_BLOCK_IO_PROTOCOL* This +); + + +// +// FvbHw.c +// + +EFI_STATUS +EFIAPI +FvbInitialize ( + IN FLASH_INSTANCE* Instance +); + +EFI_STATUS +EFIAPI +FvbGetAttributes( + IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL* This, + OUT EFI_FVB_ATTRIBUTES_2* Attributes +); + +EFI_STATUS +EFIAPI +FvbSetAttributes( + IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL* This, + IN OUT EFI_FVB_ATTRIBUTES_2* Attributes +); + +EFI_STATUS +EFIAPI +FvbGetPhysicalAddress( + IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL* This, + OUT EFI_PHYSICAL_ADDRESS* Address +); + +EFI_STATUS +EFIAPI +FvbGetBlockSize( + IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL* This, + IN EFI_LBA Lba, + OUT UINTN* BlockSize, + OUT UINTN* NumberOfBlocks +); + +EFI_STATUS +EFIAPI +FvbRead( + IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL* This, + IN EFI_LBA Lba, + IN UINTN Offset, + IN OUT UINTN* NumBytes, + IN OUT UINT8* Buffer +); + +EFI_STATUS +EFIAPI +FvbWrite( + IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL* This, + IN EFI_LBA Lba, + IN UINTN Offset, + IN OUT UINTN* NumBytes, + IN UINT8* Buffer +); + +EFI_STATUS +EFIAPI +FvbEraseBlocks( + IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL* This, + ... +); + +// +// FlashFvbDxe.c +// + +EFI_STATUS +FlashUnlockAndEraseSingleBlock ( + IN FLASH_INSTANCE* Instance, + IN UINTN BlockAddress +); + +EFI_STATUS +FlashWriteBlocks ( + IN FLASH_INSTANCE* Instance, + IN EFI_LBA Lba, + IN UINTN BufferSizeInBytes, + IN VOID* Buffer +); + +EFI_STATUS +FlashReadBlocks ( + IN FLASH_INSTANCE* Instance, + IN EFI_LBA Lba, + IN UINTN BufferSizeInBytes, + OUT VOID* Buffer +); + +#endif -- cgit v1.2.3