Files
edk2-rk3588/edk2-rockchip/Silicon/Rockchip/Drivers/RkFvbDxe/RkFvbDxe.h

132 lines
4.1 KiB
C
Raw Normal View History

/** @file
*
* Copyright (c) 2011 - 2014, ARM Ltd. All rights reserved.
* Copyright (c) 2017 Marvell International Ltd.
* Copyright (c) 2021-2022 Rockchip Electronics Co., Ltd.
* Copyright (c) 2023-2024, Mario Bălănică <mariobalanica02@gmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause-Patent
*
**/
#ifndef __FVB_FLASH_DXE_H__
#define __FVB_FLASH_DXE_H__
#include <Protocol/BlockIo.h>
#include <Protocol/FirmwareVolumeBlock.h>
#include <Protocol/NorFlashProtocol.h>
#define GET_DATA_OFFSET(BaseAddr, Lba, LbaSize) ((BaseAddr) + (UINTN)((Lba) * (LbaSize)))
#define FVB_FLASH_SIGNATURE SIGNATURE_32('S', 'n', 'o', 'r')
#define INSTANCE_FROM_FVB_THIS(a) CR(a, FVB_DEVICE, FvbProtocol, FVB_FLASH_SIGNATURE)
//
// Define two helper macro to extract the Capability field or Status field in FVB
// bit fields.
//
#define EFI_FVB2_CAPABILITIES (EFI_FVB2_READ_DISABLED_CAP | \
EFI_FVB2_READ_ENABLED_CAP | \
EFI_FVB2_WRITE_DISABLED_CAP | \
EFI_FVB2_WRITE_ENABLED_CAP | \
EFI_FVB2_LOCK_CAP)
#define EFI_FVB2_STATUS (EFI_FVB2_READ_STATUS | \
EFI_FVB2_WRITE_STATUS | \
EFI_FVB2_LOCK_STATUS)
typedef struct {
VENDOR_DEVICE_PATH Vendor;
EFI_DEVICE_PATH_PROTOCOL End;
} FVB_DEVICE_PATH;
typedef struct {
UNI_NOR_FLASH_PROTOCOL *SpiFlashProtocol;
BOOLEAN IsSpiFlashAvailable;
BOOLEAN IsFvbHeaderValid;
EFI_DEVICE_PATH_PROTOCOL *DiskDevice;
UINT32 DiskMediaId;
BOOLEAN DiskDataInvalidated;
EFI_HANDLE Handle;
UINT32 Signature;
UINTN DeviceBaseAddress;
UINTN RegionBaseAddress;
UINTN Size;
UINTN FvbOffset;
UINTN FvbSize;
EFI_LBA StartLba;
EFI_BLOCK_IO_MEDIA Media;
EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL FvbProtocol;
FVB_DEVICE_PATH DevicePath;
} FVB_DEVICE;
typedef struct {
UINT32 AtagBootDevType;
UINT32 ControllerBaseAddress;
} FVB_RK_BOOT_DEVICE;
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,
...
);
#endif /* __FVB_FLASH_DXE_H__ */