\r
Copyright (c) 2011 - 2014, ARM Ltd. All rights reserved.<BR>\r
\r
- This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
#include <Base.h>\r
#include <PiDxe.h>\r
\r
+#include <Guid/EventGroup.h>\r
+\r
#include <Protocol/BlockIo.h>\r
+#include <Protocol/DiskIo.h>\r
#include <Protocol/FirmwareVolumeBlock.h>\r
\r
#include <Library/DebugLib.h>\r
#define NOR_FLASH_SIGNATURE SIGNATURE_32('n', 'o', 'r', '0')\r
#define INSTANCE_FROM_FVB_THIS(a) CR(a, NOR_FLASH_INSTANCE, FvbProtocol, NOR_FLASH_SIGNATURE)\r
#define INSTANCE_FROM_BLKIO_THIS(a) CR(a, NOR_FLASH_INSTANCE, BlockIoProtocol, NOR_FLASH_SIGNATURE)\r
+#define INSTANCE_FROM_DISKIO_THIS(a) CR(a, NOR_FLASH_INSTANCE, DiskIoProtocol, NOR_FLASH_SIGNATURE)\r
\r
typedef struct _NOR_FLASH_INSTANCE NOR_FLASH_INSTANCE;\r
\r
-typedef EFI_STATUS (*NOR_FLASH_INITIALIZE) (NOR_FLASH_INSTANCE* Instance);\r
-\r
+#pragma pack (1)\r
typedef struct {\r
VENDOR_DEVICE_PATH Vendor;\r
+ UINT8 Index;\r
EFI_DEVICE_PATH_PROTOCOL End;\r
} NOR_FLASH_DEVICE_PATH;\r
+#pragma pack ()\r
\r
struct _NOR_FLASH_INSTANCE {\r
UINT32 Signature;\r
EFI_HANDLE Handle;\r
\r
- BOOLEAN Initialized;\r
- NOR_FLASH_INITIALIZE Initialize;\r
-\r
UINTN DeviceBaseAddress;\r
UINTN RegionBaseAddress;\r
UINTN Size;\r
\r
EFI_BLOCK_IO_PROTOCOL BlockIoProtocol;\r
EFI_BLOCK_IO_MEDIA Media;\r
+ EFI_DISK_IO_PROTOCOL DiskIoProtocol;\r
\r
- BOOLEAN SupportFvb;\r
EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL FvbProtocol;\r
- VOID* FvbBuffer;\r
+ VOID* ShadowBuffer;\r
\r
- NOR_FLASH_DEVICE_PATH DevicePath;\r
+ NOR_FLASH_DEVICE_PATH DevicePath;\r
};\r
\r
EFI_STATUS\r
IN EFI_BLOCK_IO_PROTOCOL *This\r
);\r
\r
+//\r
+// DiskIO Protocol function EFI_DISK_IO_PROTOCOL.ReadDisk\r
+//\r
+EFI_STATUS\r
+EFIAPI\r
+NorFlashDiskIoReadDisk (\r
+ IN EFI_DISK_IO_PROTOCOL *This,\r
+ IN UINT32 MediaId,\r
+ IN UINT64 Offset,\r
+ IN UINTN BufferSize,\r
+ OUT VOID *Buffer\r
+ );\r
+\r
+//\r
+// DiskIO Protocol function EFI_DISK_IO_PROTOCOL.WriteDisk\r
+//\r
+EFI_STATUS\r
+EFIAPI\r
+NorFlashDiskIoWriteDisk (\r
+ IN EFI_DISK_IO_PROTOCOL *This,\r
+ IN UINT32 MediaId,\r
+ IN UINT64 Offset,\r
+ IN UINTN BufferSize,\r
+ IN VOID *Buffer\r
+ );\r
\r
//\r
// NorFlashFvbDxe.c\r
\r
EFI_STATUS\r
NorFlashWriteSingleBlock (\r
- IN NOR_FLASH_INSTANCE *Instance,\r
- IN EFI_LBA Lba,\r
- IN UINT32 *DataBuffer,\r
- IN UINT32 BlockSizeInWords\r
+ IN NOR_FLASH_INSTANCE *Instance,\r
+ IN EFI_LBA Lba,\r
+ IN UINTN Offset,\r
+ IN OUT UINTN *NumBytes,\r
+ IN UINT8 *Buffer\r
);\r
\r
EFI_STATUS\r
OUT VOID *Buffer\r
);\r
\r
+EFI_STATUS\r
+NorFlashRead (\r
+ IN NOR_FLASH_INSTANCE *Instance,\r
+ IN EFI_LBA Lba,\r
+ IN UINTN Offset,\r
+ IN UINTN BufferSizeInBytes,\r
+ OUT VOID *Buffer\r
+ );\r
+\r
+EFI_STATUS\r
+NorFlashWrite (\r
+ IN NOR_FLASH_INSTANCE *Instance,\r
+ IN EFI_LBA Lba,\r
+ IN UINTN Offset,\r
+ IN OUT UINTN *NumBytes,\r
+ IN UINT8 *Buffer\r
+ );\r
+\r
EFI_STATUS\r
NorFlashReset (\r
IN NOR_FLASH_INSTANCE *Instance\r