+++ /dev/null
-/** @file NorFlashBlockIoDxe.c\r
-\r
- Copyright (c) 2011-2013, ARM Ltd. All rights reserved.<BR>\r
-\r
- SPDX-License-Identifier: BSD-2-Clause-Patent\r
-\r
-**/\r
-\r
-#include <Library/BaseMemoryLib.h>\r
-#include <Library/UefiBootServicesTableLib.h>\r
-\r
-#include "NorFlash.h"\r
-\r
-//\r
-// BlockIO Protocol function EFI_BLOCK_IO_PROTOCOL.Reset\r
-//\r
-EFI_STATUS\r
-EFIAPI\r
-NorFlashBlockIoReset (\r
- IN EFI_BLOCK_IO_PROTOCOL *This,\r
- IN BOOLEAN ExtendedVerification\r
- )\r
-{\r
- NOR_FLASH_INSTANCE *Instance;\r
-\r
- Instance = INSTANCE_FROM_BLKIO_THIS(This);\r
-\r
- DEBUG ((DEBUG_BLKIO, "NorFlashBlockIoReset(MediaId=0x%x)\n", This->Media->MediaId));\r
-\r
- return NorFlashReset (Instance);\r
-}\r
-\r
-//\r
-// BlockIO Protocol function EFI_BLOCK_IO_PROTOCOL.ReadBlocks\r
-//\r
-EFI_STATUS\r
-EFIAPI\r
-NorFlashBlockIoReadBlocks (\r
- IN EFI_BLOCK_IO_PROTOCOL *This,\r
- IN UINT32 MediaId,\r
- IN EFI_LBA Lba,\r
- IN UINTN BufferSizeInBytes,\r
- OUT VOID *Buffer\r
- )\r
-{\r
- NOR_FLASH_INSTANCE *Instance;\r
- EFI_STATUS Status;\r
- EFI_BLOCK_IO_MEDIA *Media;\r
-\r
- if (This == NULL) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- Instance = INSTANCE_FROM_BLKIO_THIS(This);\r
- Media = This->Media;\r
-\r
- DEBUG ((DEBUG_BLKIO, "NorFlashBlockIoReadBlocks(MediaId=0x%x, Lba=%ld, BufferSize=0x%x bytes (%d kB), BufferPtr @ 0x%08x)\n", MediaId, Lba, BufferSizeInBytes, Buffer));\r
-\r
- if (!Media) {\r
- Status = EFI_INVALID_PARAMETER;\r
- } else if (!Media->MediaPresent) {\r
- Status = EFI_NO_MEDIA;\r
- } else if (Media->MediaId != MediaId) {\r
- Status = EFI_MEDIA_CHANGED;\r
- } else if ((Media->IoAlign > 2) && (((UINTN)Buffer & (Media->IoAlign - 1)) != 0)) {\r
- Status = EFI_INVALID_PARAMETER;\r
- } else {\r
- Status = NorFlashReadBlocks (Instance, Lba, BufferSizeInBytes, Buffer);\r
- }\r
-\r
- return Status;\r
-}\r
-\r
-//\r
-// BlockIO Protocol function EFI_BLOCK_IO_PROTOCOL.WriteBlocks\r
-//\r
-EFI_STATUS\r
-EFIAPI\r
-NorFlashBlockIoWriteBlocks (\r
- IN EFI_BLOCK_IO_PROTOCOL *This,\r
- IN UINT32 MediaId,\r
- IN EFI_LBA Lba,\r
- IN UINTN BufferSizeInBytes,\r
- IN VOID *Buffer\r
- )\r
-{\r
- NOR_FLASH_INSTANCE *Instance;\r
- EFI_STATUS Status;\r
-\r
- Instance = INSTANCE_FROM_BLKIO_THIS(This);\r
-\r
- DEBUG ((DEBUG_BLKIO, "NorFlashBlockIoWriteBlocks(MediaId=0x%x, Lba=%ld, BufferSize=0x%x bytes (%d kB), BufferPtr @ 0x%08x)\n", MediaId, Lba, BufferSizeInBytes, Buffer));\r
-\r
- if( !This->Media->MediaPresent ) {\r
- Status = EFI_NO_MEDIA;\r
- } else if( This->Media->MediaId != MediaId ) {\r
- Status = EFI_MEDIA_CHANGED;\r
- } else if( This->Media->ReadOnly ) {\r
- Status = EFI_WRITE_PROTECTED;\r
- } else {\r
- Status = NorFlashWriteBlocks (Instance,Lba,BufferSizeInBytes,Buffer);\r
- }\r
-\r
- return Status;\r
-}\r
-\r
-//\r
-// BlockIO Protocol function EFI_BLOCK_IO_PROTOCOL.FlushBlocks\r
-//\r
-EFI_STATUS\r
-EFIAPI\r
-NorFlashBlockIoFlushBlocks (\r
- IN EFI_BLOCK_IO_PROTOCOL *This\r
- )\r
-{\r
- // No Flush required for the NOR Flash driver\r
- // because cache operations are not permitted.\r
-\r
- DEBUG ((DEBUG_BLKIO, "NorFlashBlockIoFlushBlocks: Function NOT IMPLEMENTED (not required).\n"));\r
-\r
- // Nothing to do so just return without error\r
- return EFI_SUCCESS;\r
-}\r