]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Library/BaseLib/Unaligned.c
Code scrub:
[mirror_edk2.git] / MdePkg / Library / BaseLib / Unaligned.c
CommitLineData
e1f414b6 1/** @file\r
2 Unaligned access functions of BaseLib.\r
3\r
4 Copyright (c) 2006, Intel Corporation\r
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
e1f414b6 13**/\r
14\r
15//\r
16// Include common header file for this module.\r
17//\r
f734a10a
A
18#include <BaseLibInternals.h>\r
19\r
e1f414b6 20\r
21/**\r
22 Reads a 16-bit value from memory that may be unaligned.\r
23\r
24 This function returns the 16-bit value pointed to by Buffer. The function\r
25 guarantees that the read operation does not produce an alignment fault.\r
26\r
27 If the Buffer is NULL, then ASSERT().\r
28\r
29 @param Buffer Pointer to a 16-bit value that may be unaligned.\r
30\r
38bbd3d9 31 @return Data read from Buffer.\r
e1f414b6 32\r
33**/\r
34UINT16\r
35EFIAPI\r
36ReadUnaligned16 (\r
37 IN CONST UINT16 *Buffer\r
38 )\r
39{\r
40 ASSERT (Buffer != NULL);\r
41\r
42 return *Buffer;\r
43}\r
44\r
45/**\r
46 Writes a 16-bit value to memory that may be unaligned.\r
47\r
48 This function writes the 16-bit value specified by Value to Buffer. Value is\r
49 returned. The function guarantees that the write operation does not produce\r
50 an alignment fault.\r
51\r
52 If the Buffer is NULL, then ASSERT().\r
53\r
54 @param Buffer Pointer to a 16-bit value that may be unaligned.\r
55 @param Value 16-bit value to write to Buffer.\r
56\r
38bbd3d9 57 @return Value written to Buffer\r
e1f414b6 58\r
59**/\r
60UINT16\r
61EFIAPI\r
62WriteUnaligned16 (\r
63 OUT UINT16 *Buffer,\r
64 IN UINT16 Value\r
65 )\r
66{\r
67 ASSERT (Buffer != NULL);\r
68\r
69 return *Buffer = Value;\r
70}\r
71\r
72/**\r
73 Reads a 24-bit value from memory that may be unaligned.\r
74\r
75 This function returns the 24-bit value pointed to by Buffer. The function\r
76 guarantees that the read operation does not produce an alignment fault.\r
77\r
78 If the Buffer is NULL, then ASSERT().\r
79\r
80 @param Buffer Pointer to a 24-bit value that may be unaligned.\r
81\r
38bbd3d9 82 @return The value read from Buffer.\r
e1f414b6 83\r
84**/\r
85UINT32\r
86EFIAPI\r
87ReadUnaligned24 (\r
88 IN CONST UINT32 *Buffer\r
89 )\r
90{\r
91 ASSERT (Buffer != NULL);\r
92\r
93 return *Buffer & 0xffffff;\r
94}\r
95\r
96/**\r
97 Writes a 24-bit value to memory that may be unaligned.\r
98\r
99 This function writes the 24-bit value specified by Value to Buffer. Value is\r
100 returned. The function guarantees that the write operation does not produce\r
101 an alignment fault.\r
102\r
103 If the Buffer is NULL, then ASSERT().\r
104\r
105 @param Buffer Pointer to a 24-bit value that may be unaligned.\r
106 @param Value 24-bit value to write to Buffer.\r
107\r
38bbd3d9 108 @return The value written to Buffer.\r
e1f414b6 109\r
110**/\r
111UINT32\r
112EFIAPI\r
113WriteUnaligned24 (\r
114 OUT UINT32 *Buffer,\r
115 IN UINT32 Value\r
116 )\r
117{\r
118 ASSERT (Buffer != NULL);\r
119\r
120 *Buffer = BitFieldWrite32 (*Buffer, 0, 23, Value);\r
121 return Value;\r
122}\r
123\r
124/**\r
125 Reads a 32-bit value from memory that may be unaligned.\r
126\r
127 This function returns the 32-bit value pointed to by Buffer. The function\r
128 guarantees that the read operation does not produce an alignment fault.\r
129\r
130 If the Buffer is NULL, then ASSERT().\r
131\r
132 @param Buffer Pointer to a 32-bit value that may be unaligned.\r
133\r
38bbd3d9 134 @return Data read from Buffer.\r
e1f414b6 135\r
136**/\r
137UINT32\r
138EFIAPI\r
139ReadUnaligned32 (\r
140 IN CONST UINT32 *Buffer\r
141 )\r
142{\r
143 ASSERT (Buffer != NULL);\r
144\r
145 return *Buffer;\r
146}\r
147\r
148/**\r
149 Writes a 32-bit value to memory that may be unaligned.\r
150\r
151 This function writes the 32-bit value specified by Value to Buffer. Value is\r
152 returned. The function guarantees that the write operation does not produce\r
153 an alignment fault.\r
154\r
155 If the Buffer is NULL, then ASSERT().\r
156\r
157 @param Buffer Pointer to a 32-bit value that may be unaligned.\r
158 @param Value 32-bit value to write to Buffer.\r
159\r
38bbd3d9 160 @return Value written to Buffer\r
e1f414b6 161\r
162**/\r
163UINT32\r
164EFIAPI\r
165WriteUnaligned32 (\r
166 OUT UINT32 *Buffer,\r
167 IN UINT32 Value\r
168 )\r
169{\r
170 ASSERT (Buffer != NULL);\r
171\r
172 return *Buffer = Value;\r
173}\r
174\r
175/**\r
176 Reads a 64-bit value from memory that may be unaligned.\r
177\r
178 This function returns the 64-bit value pointed to by Buffer. The function\r
179 guarantees that the read operation does not produce an alignment fault.\r
180\r
181 If the Buffer is NULL, then ASSERT().\r
182\r
183 @param Buffer Pointer to a 64-bit value that may be unaligned.\r
184\r
38bbd3d9 185 @return Data read from Buffer.\r
e1f414b6 186\r
187**/\r
188UINT64\r
189EFIAPI\r
190ReadUnaligned64 (\r
191 IN CONST UINT64 *Buffer\r
192 )\r
193{\r
194 ASSERT (Buffer != NULL);\r
195\r
196 return *Buffer;\r
197}\r
198\r
199/**\r
200 Writes a 64-bit value to memory that may be unaligned.\r
201\r
202 This function writes the 64-bit value specified by Value to Buffer. Value is\r
203 returned. The function guarantees that the write operation does not produce\r
204 an alignment fault.\r
205\r
206 If the Buffer is NULL, then ASSERT().\r
207\r
208 @param Buffer Pointer to a 64-bit value that may be unaligned.\r
209 @param Value 64-bit value to write to Buffer.\r
210\r
38bbd3d9 211 @return Value written to Buffer.\r
e1f414b6 212\r
213**/\r
214UINT64\r
215EFIAPI\r
216WriteUnaligned64 (\r
217 OUT UINT64 *Buffer,\r
218 IN UINT64 Value\r
219 )\r
220{\r
221 ASSERT (Buffer != NULL);\r
222\r
223 return *Buffer = Value;\r
224}\r