/** @file\r
Produce EFI_BLOCK_IO_PROTOCOL on a RAM disk device.\r
\r
- Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>\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
+ Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
EFI_BLOCK_IO_PROTOCOL *BlockIo;\r
EFI_BLOCK_IO2_PROTOCOL *BlockIo2;\r
EFI_BLOCK_IO_MEDIA *Media;\r
+ UINT32 Remainder;\r
\r
BlockIo = &PrivateData->BlockIo;\r
BlockIo2 = &PrivateData->BlockIo2;\r
Media->LogicalPartition = FALSE;\r
Media->ReadOnly = FALSE;\r
Media->WriteCaching = FALSE;\r
- Media->BlockSize = RAM_DISK_BLOCK_SIZE;\r
- Media->LastBlock = DivU64x32 (\r
- PrivateData->Size + RAM_DISK_BLOCK_SIZE - 1,\r
- RAM_DISK_BLOCK_SIZE\r
- ) - 1;\r
+\r
+ for (Media->BlockSize = RAM_DISK_DEFAULT_BLOCK_SIZE;\r
+ Media->BlockSize >= 1;\r
+ Media->BlockSize = Media->BlockSize >> 1) {\r
+ Media->LastBlock = DivU64x32Remainder (PrivateData->Size, Media->BlockSize, &Remainder) - 1;\r
+ if (Remainder == 0) {\r
+ break;\r
+ }\r
+ }\r
+ ASSERT (Media->BlockSize != 0);\r
+\r
+ return;\r
}\r
\r
\r
RAM_DISK_PRIVATE_DATA *PrivateData;\r
UINTN NumberOfBlocks;\r
\r
+ PrivateData = RAM_DISK_PRIVATE_FROM_BLKIO (This);\r
+\r
+ if (MediaId != PrivateData->Media.MediaId) {\r
+ return EFI_MEDIA_CHANGED;\r
+ }\r
+\r
if (Buffer == NULL) {\r
return EFI_INVALID_PARAMETER;\r
}\r
return EFI_SUCCESS;\r
}\r
\r
- PrivateData = RAM_DISK_PRIVATE_FROM_BLKIO (This);\r
-\r
- if (MediaId != PrivateData->Media.MediaId) {\r
- return EFI_MEDIA_CHANGED;\r
- }\r
-\r
if ((BufferSize % PrivateData->Media.BlockSize) != 0) {\r
return EFI_BAD_BUFFER_SIZE;\r
}\r
RAM_DISK_PRIVATE_DATA *PrivateData;\r
UINTN NumberOfBlocks;\r
\r
- if (Buffer == NULL) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- if (BufferSize == 0) {\r
- return EFI_SUCCESS;\r
- }\r
-\r
PrivateData = RAM_DISK_PRIVATE_FROM_BLKIO (This);\r
\r
if (MediaId != PrivateData->Media.MediaId) {\r
return EFI_WRITE_PROTECTED;\r
}\r
\r
+ if (Buffer == NULL) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ if (BufferSize == 0) {\r
+ return EFI_SUCCESS;\r
+ }\r
+\r
if ((BufferSize % PrivateData->Media.BlockSize) != 0) {\r
return EFI_BAD_BUFFER_SIZE;\r
}\r