mirror of https://github.com/acidanthera/audk.git
ArmPlatformPkg/NorFlashDxe: Make the driver more compliant with the UEFI specification
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin <olivier.martin@arm.com> git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@14263 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
09f2cf8295
commit
3d783074e1
|
@ -1,6 +1,6 @@
|
||||||
/** @file NorFlashBlockIoDxe.c
|
/** @file NorFlashBlockIoDxe.c
|
||||||
|
|
||||||
Copyright (c) 2011-2012, ARM Ltd. All rights reserved.<BR>
|
Copyright (c) 2011-2013, ARM Ltd. All rights reserved.<BR>
|
||||||
|
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
|
@ -51,17 +51,27 @@ NorFlashBlockIoReadBlocks (
|
||||||
{
|
{
|
||||||
NOR_FLASH_INSTANCE *Instance;
|
NOR_FLASH_INSTANCE *Instance;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
EFI_BLOCK_IO_MEDIA *Media;
|
||||||
|
|
||||||
|
if (This == NULL) {
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
Instance = INSTANCE_FROM_BLKIO_THIS(This);
|
Instance = INSTANCE_FROM_BLKIO_THIS(This);
|
||||||
|
Media = This->Media;
|
||||||
|
|
||||||
DEBUG ((DEBUG_BLKIO, "NorFlashBlockIoReadBlocks(MediaId=0x%x, Lba=%ld, BufferSize=0x%x bytes (%d kB), BufferPtr @ 0x%08x)\n", MediaId, Lba, BufferSizeInBytes, Buffer));
|
DEBUG ((DEBUG_BLKIO, "NorFlashBlockIoReadBlocks(MediaId=0x%x, Lba=%ld, BufferSize=0x%x bytes (%d kB), BufferPtr @ 0x%08x)\n", MediaId, Lba, BufferSizeInBytes, Buffer));
|
||||||
|
|
||||||
if( !This->Media->MediaPresent ) {
|
if (!Media) {
|
||||||
|
Status = EFI_INVALID_PARAMETER;
|
||||||
|
} else if (!Media->MediaPresent) {
|
||||||
Status = EFI_NO_MEDIA;
|
Status = EFI_NO_MEDIA;
|
||||||
} else if( This->Media->MediaId != MediaId ) {
|
} else if (Media->MediaId != MediaId) {
|
||||||
Status = EFI_MEDIA_CHANGED;
|
Status = EFI_MEDIA_CHANGED;
|
||||||
|
} else if ((Media->IoAlign > 2) && (((UINTN)Buffer & (Media->IoAlign - 1)) != 0)) {
|
||||||
|
Status = EFI_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
Status = NorFlashReadBlocks (Instance,Lba,BufferSizeInBytes,Buffer);
|
Status = NorFlashReadBlocks (Instance, Lba, BufferSizeInBytes, Buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/** @file NorFlashDxe.c
|
/** @file NorFlashDxe.c
|
||||||
|
|
||||||
Copyright (c) 2011-2012, ARM Ltd. All rights reserved.<BR>
|
Copyright (c) 2011-2013, ARM Ltd. All rights reserved.<BR>
|
||||||
|
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
|
@ -721,19 +721,20 @@ NorFlashReadBlocks (
|
||||||
UINT32 NumBlocks;
|
UINT32 NumBlocks;
|
||||||
UINTN StartAddress;
|
UINTN StartAddress;
|
||||||
|
|
||||||
|
DEBUG((DEBUG_BLKIO, "NorFlashReadBlocks: BufferSize=0x%xB BlockSize=0x%xB LastBlock=%ld, Lba=%ld.\n",
|
||||||
|
BufferSizeInBytes, Instance->Media.BlockSize, Instance->Media.LastBlock, Lba));
|
||||||
|
|
||||||
// The buffer must be valid
|
// The buffer must be valid
|
||||||
if (Buffer == NULL) {
|
if (Buffer == NULL) {
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
// We must have some bytes to read
|
// Return if we have not any byte to read
|
||||||
DEBUG((DEBUG_BLKIO, "NorFlashReadBlocks: BufferSize=0x%x bytes.\n", BufferSizeInBytes));
|
if (BufferSizeInBytes == 0) {
|
||||||
if(BufferSizeInBytes == 0) {
|
return EFI_SUCCESS;
|
||||||
return EFI_BAD_BUFFER_SIZE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// The size of the buffer must be a multiple of the block size
|
// The size of the buffer must be a multiple of the block size
|
||||||
DEBUG((DEBUG_BLKIO, "NorFlashReadBlocks: BlockSize=0x%x bytes.\n", Instance->Media.BlockSize));
|
|
||||||
if ((BufferSizeInBytes % Instance->Media.BlockSize) != 0) {
|
if ((BufferSizeInBytes % Instance->Media.BlockSize) != 0) {
|
||||||
return EFI_BAD_BUFFER_SIZE;
|
return EFI_BAD_BUFFER_SIZE;
|
||||||
}
|
}
|
||||||
|
@ -741,8 +742,6 @@ NorFlashReadBlocks (
|
||||||
// All blocks must be within the device
|
// All blocks must be within the device
|
||||||
NumBlocks = ((UINT32)BufferSizeInBytes) / Instance->Media.BlockSize ;
|
NumBlocks = ((UINT32)BufferSizeInBytes) / Instance->Media.BlockSize ;
|
||||||
|
|
||||||
DEBUG((DEBUG_BLKIO, "NorFlashReadBlocks: NumBlocks=%d, LastBlock=%ld, Lba=%ld\n", NumBlocks, Instance->Media.LastBlock, Lba));
|
|
||||||
|
|
||||||
if ((Lba + NumBlocks) > (Instance->Media.LastBlock + 1)) {
|
if ((Lba + NumBlocks) > (Instance->Media.LastBlock + 1)) {
|
||||||
DEBUG((EFI_D_ERROR, "NorFlashReadBlocks: ERROR - Read will exceed last block\n"));
|
DEBUG((EFI_D_ERROR, "NorFlashReadBlocks: ERROR - Read will exceed last block\n"));
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
|
|
Loading…
Reference in New Issue