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**/
37VOID *
38EFIAPI
39InternalMemCopyMem (
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**/
57VOID *
58EFIAPI
59InternalMemSetMem (
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**/
75VOID *
76EFIAPI
77InternalMemSetMem16 (
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**/
93VOID *
94EFIAPI
95InternalMemSetMem32 (
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**/
111VOID *
112EFIAPI
113InternalMemSetMem64 (
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**/
128VOID *
129EFIAPI
130InternalMemZeroMem (
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**/
148INTN
149EFIAPI
150InternalMemCompareMem (
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**/
167CONST VOID *
168EFIAPI
169InternalMemScanMem8 (
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**/
186CONST VOID *
187EFIAPI
188InternalMemScanMem16 (
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**/
205CONST VOID *
206EFIAPI
207InternalMemScanMem32 (
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**/
224CONST VOID *
225EFIAPI
226InternalMemScanMem64 (
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**/
242BOOLEAN
243EFIAPI
244InternalMemIsZeroBuffer (
245  IN CONST VOID  *Buffer,
246  IN UINTN       Length
247  );
248
249#endif
250