]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe.h
ArmPlatformPkg/Drivers/NorFlashDxe: Directly implement DiskIO protocol
[mirror_edk2.git] / ArmPlatformPkg / Drivers / NorFlashDxe / NorFlashDxe.h
index 424d63925bf0a78f5cc2b87514be0e38a0a128ab..a6854aa3ccb3d14db03a93841245b7ca00a31e46 100644 (file)
 #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
@@ -139,10 +143,11 @@ struct _NOR_FLASH_INSTANCE {
 \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
 };\r
@@ -208,6 +213,31 @@ NorFlashBlockIoFlushBlocks (
   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
@@ -288,10 +318,11 @@ NorFlashUnlockAndEraseSingleBlock (
 \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
@@ -310,9 +341,33 @@ NorFlashReadBlocks (
   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
   );\r
 \r
+EFI_STATUS\r
+NorFlashUnlockSingleBlockIfNecessary (\r
+  IN NOR_FLASH_INSTANCE     *Instance,\r
+  IN UINTN                  BlockAddress\r
+  );\r
+\r
 #endif /* __NOR_FLASH_DXE_H__ */\r