TianoCore EDK2 master
Loading...
Searching...
No Matches
Unaligned.c
Go to the documentation of this file.
1
9#include "BaseLibInternals.h"
10
11#pragma pack(1)
12typedef union {
13 UINT16 Val16;
14 UINT32 Val32;
15 UINT64 Val64;
17#pragma pack()
18
19STATIC_ASSERT (ALIGNOF (MISALIGNED) == 1, "Alignment error");
20
34UINT16
35EFIAPI
37 IN CONST VOID *Buffer
38 )
39{
40 ASSERT (Buffer != NULL);
41
42 return ((CONST MISALIGNED *)Buffer)->Val16;
43}
44
60UINT16
61EFIAPI
63 OUT VOID *Buffer,
64 IN UINT16 Value
65 )
66{
67 ASSERT (Buffer != NULL);
68
69 return ((MISALIGNED *)Buffer)->Val16 = Value;
70}
71
85UINT32
86EFIAPI
88 IN CONST VOID *Buffer
89 )
90{
91 ASSERT (Buffer != NULL);
92
93 return ((UINT32)((UINT8 *)Buffer)[2] << 16) | ReadUnaligned16 (Buffer);
94}
95
111UINT32
112EFIAPI
114 OUT VOID *Buffer,
115 IN UINT32 Value
116 )
117{
118 ASSERT (Buffer != NULL);
119
120 WriteUnaligned16 (Buffer, (UINT16)Value);
121 ((UINT8 *)Buffer)[2] = (UINT8)(Value >> 16);
122 return Value & 0xffffff;
123}
124
138UINT32
139EFIAPI
141 IN CONST VOID *Buffer
142 )
143{
144 ASSERT (Buffer != NULL);
145
146 return ((CONST MISALIGNED *)Buffer)->Val32;
147}
148
164UINT32
165EFIAPI
167 OUT VOID *Buffer,
168 IN UINT32 Value
169 )
170{
171 ASSERT (Buffer != NULL);
172
173 return ((MISALIGNED *)Buffer)->Val32 = Value;
174}
175
189UINT64
190EFIAPI
192 IN CONST VOID *Buffer
193 )
194{
195 ASSERT (Buffer != NULL);
196
197 return ((CONST MISALIGNED *)Buffer)->Val64;
198}
199
215UINT64
216EFIAPI
218 OUT VOID *Buffer,
219 IN UINT64 Value
220 )
221{
222 ASSERT (Buffer != NULL);
223
224 return ((MISALIGNED *)Buffer)->Val64 = Value;
225}
#define NULL
Definition: Base.h:319
#define CONST
Definition: Base.h:259
#define VOID
Definition: Base.h:269
#define IN
Definition: Base.h:279
#define ALIGNOF(TYPE)
Definition: Base.h:792
#define OUT
Definition: Base.h:284
UINT64 EFIAPI ReadUnaligned64(IN CONST VOID *Buffer)
Definition: Unaligned.c:191
UINT16 EFIAPI WriteUnaligned16(OUT VOID *Buffer, IN UINT16 Value)
Definition: Unaligned.c:62
UINT32 EFIAPI ReadUnaligned24(IN CONST VOID *Buffer)
Definition: Unaligned.c:87
UINT32 EFIAPI WriteUnaligned24(OUT VOID *Buffer, IN UINT32 Value)
Definition: Unaligned.c:113
UINT32 EFIAPI WriteUnaligned32(OUT VOID *Buffer, IN UINT32 Value)
Definition: Unaligned.c:166
UINT32 EFIAPI ReadUnaligned32(IN CONST VOID *Buffer)
Definition: Unaligned.c:140
UINT64 EFIAPI WriteUnaligned64(OUT VOID *Buffer, IN UINT64 Value)
Definition: Unaligned.c:217
UINT16 EFIAPI ReadUnaligned16(IN CONST VOID *Buffer)
Definition: Unaligned.c:36