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