1 /** @file 2 Declaration of internal functions for Base Memory Library. 3 4 Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR> 5 This program and the accompanying materials 6 are licensed and made available under the terms and conditions of the BSD License 7 which accompanies this distribution. The full text of the license may be found at 8 http://opensource.org/licenses/bsd-license.php. 9 10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12 13 **/ 14 15 #ifndef __MEM_LIB_INTERNALS__ 16 #define __MEM_LIB_INTERNALS__ 17 18 #include <Uefi.h> 19 20 #include <Library/BaseMemoryLib.h> 21 #include <Library/BaseLib.h> 22 #include <Library/DebugLib.h> 23 #include <Library/UefiBootServicesTableLib.h> 24 25 /** 26 Copies a source buffer to a destination buffer, and returns the destination buffer. 27 28 This function wraps the gBS->CopyMem(). 29 30 @param DestinationBuffer The pointer to the destination buffer of the memory copy. 31 @param SourceBuffer The pointer to the source buffer of the memory copy. 32 @param Length The number of bytes to copy from SourceBuffer to DestinationBuffer. 33 34 @return DestinationBuffer. 35 36 **/ 37 VOID * 38 EFIAPI 39 InternalMemCopyMem ( 40 OUT VOID *Destination, 41 IN CONST VOID *Source, 42 IN UINTN Length 43 ); 44 45 /** 46 Fills a target buffer with a byte value, and returns the target buffer. 47 48 This function wraps the gBS->SetMem(). 49 50 @param Buffer Memory to set. 51 @param Size The number of bytes to set. 52 @param Value Value of the set operation. 53 54 @return Buffer. 55 56 **/ 57 VOID * 58 EFIAPI 59 InternalMemSetMem ( 60 OUT VOID *Buffer, 61 IN UINTN Size, 62 IN UINT8 Value 63 ); 64 65 /** 66 Fills a target buffer with a 16-bit value, and returns the target buffer. 67 68 @param Buffer The pointer to the target buffer to fill. 69 @param Length The count of 16-bit value to fill. 70 @param Value The value with which to fill Length bytes of Buffer. 71 72 @return Buffer 73 74 **/ 75 VOID * 76 EFIAPI 77 InternalMemSetMem16 ( 78 OUT VOID *Buffer, 79 IN UINTN Length, 80 IN UINT16 Value 81 ); 82 83 /** 84 Fills a target buffer with a 32-bit value, and returns the target buffer. 85 86 @param Buffer The pointer to the target buffer to fill. 87 @param Length The count of 32-bit value to fill. 88 @param Value The value with which to fill Length bytes of Buffer. 89 90 @return Buffer 91 92 **/ 93 VOID * 94 EFIAPI 95 InternalMemSetMem32 ( 96 OUT VOID *Buffer, 97 IN UINTN Length, 98 IN UINT32 Value 99 ); 100 101 /** 102 Fills a target buffer with a 64-bit value, and returns the target buffer. 103 104 @param Buffer The pointer to the target buffer to fill. 105 @param Length The count of 64-bit value to fill. 106 @param Value The value with which to fill Length bytes of Buffer. 107 108 @return Buffer 109 110 **/ 111 VOID * 112 EFIAPI 113 InternalMemSetMem64 ( 114 OUT VOID *Buffer, 115 IN UINTN Length, 116 IN UINT64 Value 117 ); 118 119 /** 120 Set Buffer to 0 for Size bytes. 121 122 @param Buffer The memory to set. 123 @param Length The number of bytes to set 124 125 @return Buffer 126 127 **/ 128 VOID * 129 EFIAPI 130 InternalMemZeroMem ( 131 OUT VOID *Buffer, 132 IN UINTN Length 133 ); 134 135 /** 136 Compares two memory buffers of a given length. 137 138 @param DestinationBuffer The first memory buffer 139 @param SourceBuffer The second memory buffer 140 @param Length The length of DestinationBuffer and SourceBuffer memory 141 regions to compare. Must be non-zero. 142 143 @return 0 All Length bytes of the two buffers are identical. 144 @retval Non-zero The first mismatched byte in SourceBuffer subtracted from the first 145 mismatched byte in DestinationBuffer. 146 147 **/ 148 INTN 149 EFIAPI 150 InternalMemCompareMem ( 151 IN CONST VOID *DestinationBuffer, 152 IN CONST VOID *SourceBuffer, 153 IN UINTN Length 154 ); 155 156 /** 157 Scans a target buffer for an 8-bit value, and returns a pointer to the 158 matching 8-bit value in the target buffer. 159 160 @param Buffer The pointer to the target buffer to scan. 161 @param Length The count of 8-bit value to scan. Must be non-zero. 162 @param Value The value to search for in the target buffer. 163 164 @return The pointer to the first occurrence or NULL if not found. 165 166 **/ 167 CONST VOID * 168 EFIAPI 169 InternalMemScanMem8 ( 170 IN CONST VOID *Buffer, 171 IN UINTN Length, 172 IN UINT8 Value 173 ); 174 175 /** 176 Scans a target buffer for a 16-bit value, and returns a pointer to the 177 matching 16-bit value in the target buffer. 178 179 @param Buffer The pointer to the target buffer to scan. 180 @param Length The count of 16-bit value to scan. Must be non-zero. 181 @param Value The value to search for in the target buffer. 182 183 @return The pointer to the first occurrence or NULL if not found. 184 185 **/ 186 CONST VOID * 187 EFIAPI 188 InternalMemScanMem16 ( 189 IN CONST VOID *Buffer, 190 IN UINTN Length, 191 IN UINT16 Value 192 ); 193 194 /** 195 Scans a target buffer for a 32-bit value, and returns a pointer to the 196 matching 32-bit value in the target buffer. 197 198 @param Buffer The pointer to the target buffer to scan. 199 @param Length The count of 32-bit value to scan. Must be non-zero. 200 @param Value The value to search for in the target buffer. 201 202 @return The pointer to the first occurrence or NULL if not found. 203 204 **/ 205 CONST VOID * 206 EFIAPI 207 InternalMemScanMem32 ( 208 IN CONST VOID *Buffer, 209 IN UINTN Length, 210 IN UINT32 Value 211 ); 212 213 /** 214 Scans a target buffer for a 64-bit value, and returns a pointer to the 215 matching 64-bit value in the target buffer. 216 217 @param Buffer The pointer to the target buffer to scan. 218 @param Length The count of 64-bit value to scan. Must be non-zero. 219 @param Value The value to search for in the target buffer. 220 221 @return The pointer to the first occurrence or NULL if not found. 222 223 **/ 224 CONST VOID * 225 EFIAPI 226 InternalMemScanMem64 ( 227 IN CONST VOID *Buffer, 228 IN UINTN Length, 229 IN UINT64 Value 230 ); 231 232 /** 233 Checks whether the contents of a buffer are all zeros. 234 235 @param Buffer The pointer to the buffer to be checked. 236 @param Length The size of the buffer (in bytes) to be checked. 237 238 @retval TRUE Contents of the buffer are all zeros. 239 @retval FALSE Contents of the buffer are not all zeros. 240 241 **/ 242 BOOLEAN 243 EFIAPI 244 InternalMemIsZeroBuffer ( 245 IN CONST VOID *Buffer, 246 IN UINTN Length 247 ); 248 249 #endif 250