[chore] Use gnu-efi as a part of project
This commit is contained in:
@@ -0,0 +1,203 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 1999 Intel Corporation
|
||||
|
||||
Module Name:
|
||||
|
||||
EfiRtLib.h
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI Runtime library functions
|
||||
|
||||
|
||||
|
||||
Revision History
|
||||
|
||||
--*/
|
||||
|
||||
#include "efi.h"
|
||||
#include "efilib.h"
|
||||
#include "efirtlib.h"
|
||||
|
||||
#ifndef __GNUC__
|
||||
#pragma RUNTIME_CODE(RtZeroMem)
|
||||
#endif
|
||||
VOID
|
||||
RUNTIMEFUNCTION
|
||||
RtZeroMem (
|
||||
IN VOID *Buffer,
|
||||
IN UINTN Size
|
||||
)
|
||||
{
|
||||
UINT8 *pt;
|
||||
|
||||
pt = Buffer;
|
||||
while (Size--) {
|
||||
*(pt++) = 0;
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef __GNUC__
|
||||
#pragma RUNTIME_CODE(RtSetMem)
|
||||
#endif
|
||||
VOID
|
||||
EFIAPI
|
||||
RUNTIMEFUNCTION
|
||||
RtSetMem (
|
||||
IN VOID *Buffer,
|
||||
IN UINTN Size,
|
||||
IN UINT8 Value
|
||||
)
|
||||
{
|
||||
UINT8 *pt;
|
||||
|
||||
pt = Buffer;
|
||||
while (Size--) {
|
||||
*(pt++) = Value;
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef __GNUC__
|
||||
#pragma RUNTIME_CODE(RtCopyMem)
|
||||
#endif
|
||||
VOID
|
||||
EFIAPI
|
||||
RUNTIMEFUNCTION
|
||||
RtCopyMem (
|
||||
IN VOID *Dest,
|
||||
IN VOID *Src,
|
||||
IN UINTN len
|
||||
)
|
||||
{
|
||||
UINT8 *d, *s;
|
||||
|
||||
d = Dest;
|
||||
s = Src;
|
||||
|
||||
if (d == NULL || s == NULL || s == d)
|
||||
return;
|
||||
|
||||
// If the beginning of the destination range overlaps with the end of
|
||||
// the source range, make sure to start the copy from the end so that
|
||||
// we don't end up overwriting source data that we need for the copy.
|
||||
if ((d > s) && (d < s + len)) {
|
||||
for (d += len, s += len; len--; )
|
||||
*--d = *--s;
|
||||
} else {
|
||||
while (len--)
|
||||
*d++ = *s++;
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef __GNUC__
|
||||
#pragma RUNTIME_CODE(RtCopyMemC)
|
||||
#endif
|
||||
VOID
|
||||
EFIAPI
|
||||
RUNTIMEFUNCTION
|
||||
RtCopyMemC (
|
||||
IN VOID *Dest,
|
||||
IN CONST VOID *Src,
|
||||
IN UINTN len
|
||||
)
|
||||
{
|
||||
/* CopyMem matches ISO C apart from the change to NON-CONST Src
|
||||
Overwriting Src is an intended outcome if overlapping occurs (per memmove)
|
||||
This function is useful to avoid GCC dying in changing pointer setup
|
||||
*/
|
||||
RtCopyMem(Dest, (VOID*)Src, len);
|
||||
}
|
||||
|
||||
#ifndef __GNUC__
|
||||
#pragma RUNTIME_CODE(RtCompareMem)
|
||||
#endif
|
||||
INTN
|
||||
RUNTIMEFUNCTION
|
||||
RtCompareMem (
|
||||
IN CONST VOID *Dest,
|
||||
IN CONST VOID *Src,
|
||||
IN UINTN len
|
||||
)
|
||||
{
|
||||
CONST UINT8 *d, *s;
|
||||
|
||||
d = Dest;
|
||||
s = Src;
|
||||
|
||||
while (len--) {
|
||||
if (*d != *s) {
|
||||
return *d - *s;
|
||||
}
|
||||
|
||||
d += 1;
|
||||
s += 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
typedef UINT32 QUAD_UINT32[4]; /* EFI_GUID is 128 bits so 32 x 4 */
|
||||
|
||||
#ifndef __GNUC__
|
||||
#pragma RUNTIME_CODE(RtCompareGuid)
|
||||
#endif
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
RUNTIMEFUNCTION
|
||||
RtCompareGuid (
|
||||
IN CONST EFI_GUID *Guid1,
|
||||
IN CONST EFI_GUID *Guid2
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Compares two GUIDs
|
||||
|
||||
Arguments:
|
||||
|
||||
Guid1 - guid to compare
|
||||
Guid2 - guid to compare
|
||||
|
||||
Returns:
|
||||
= 1 if Guid1 == Guid2
|
||||
|
||||
--*/
|
||||
{
|
||||
CONST QUAD_UINT32 *g1, *g2;
|
||||
UINT32 r;
|
||||
|
||||
//
|
||||
// Compare 32 bits at a time
|
||||
//
|
||||
|
||||
g1 = (CONST QUAD_UINT32*)Guid1;
|
||||
g2 = (CONST QUAD_UINT32*)Guid2;
|
||||
|
||||
r = (*g1)[0] - (*g2)[0];
|
||||
r |= (*g1)[1] - (*g2)[1];
|
||||
r |= (*g1)[2] - (*g2)[2];
|
||||
r |= (*g1)[3] - (*g2)[3];
|
||||
|
||||
if (r==0) {
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef __GNUC__
|
||||
#pragma RUNTIME_CODE(RtIsZeroGuid)
|
||||
#endif
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
RUNTIMEFUNCTION
|
||||
RtIsZeroGuid (
|
||||
IN CONST EFI_GUID *Guid1
|
||||
)
|
||||
{
|
||||
return RtCompareGuid(Guid1, &gZeroGuid);
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user