1/*++
2
3Copyright (c) 1999  Intel Corporation
4
5Module Name:
6
7    EfiRtLib.h
8
9Abstract:
10
11    EFI Runtime library functions
12
13
14
15Revision History
16
17--*/
18
19#include "efi.h"
20#include "efilib.h"
21#include "efirtlib.h"
22
23#ifndef __GNUC__
24#pragma RUNTIME_CODE(RtZeroMem)
25#endif
26VOID
27RUNTIMEFUNCTION
28RtZeroMem (
29    IN VOID     *Buffer,
30    IN UINTN     Size
31    )
32{
33    INT8        *pt;
34
35    pt = Buffer;
36    while (Size--) {
37        *(pt++) = 0;
38    }
39}
40
41#ifndef __GNUC__
42#pragma RUNTIME_CODE(RtSetMem)
43#endif
44VOID
45RUNTIMEFUNCTION
46RtSetMem (
47    IN VOID     *Buffer,
48    IN UINTN    Size,
49    IN UINT8    Value
50    )
51{
52    INT8        *pt;
53
54    pt = Buffer;
55    while (Size--) {
56        *(pt++) = Value;
57    }
58}
59
60#ifndef __GNUC__
61#pragma RUNTIME_CODE(RtCopyMem)
62#endif
63VOID
64RUNTIMEFUNCTION
65RtCopyMem (
66    IN VOID     *Dest,
67    IN CONST VOID     *Src,
68    IN UINTN    len
69    )
70{
71    CHAR8   *d;
72    CONST CHAR8 *s = Src;
73    d = Dest;
74    while (len--) {
75        *(d++) = *(s++);
76    }
77}
78
79#ifndef __GNUC__
80#pragma RUNTIME_CODE(RtCompareMem)
81#endif
82INTN
83RUNTIMEFUNCTION
84RtCompareMem (
85    IN CONST VOID     *Dest,
86    IN CONST VOID     *Src,
87    IN UINTN    len
88    )
89{
90    CONST CHAR8    *d = Dest, *s = Src;
91    while (len--) {
92        if (*d != *s) {
93            return *d - *s;
94        }
95
96        d += 1;
97        s += 1;
98    }
99
100    return 0;
101}
102
103#ifndef __GNUC__
104#pragma RUNTIME_CODE(RtCompareGuid)
105#endif
106INTN
107RUNTIMEFUNCTION
108RtCompareGuid (
109    IN EFI_GUID     *Guid1,
110    IN EFI_GUID     *Guid2
111    )
112/*++
113
114Routine Description:
115
116    Compares to GUIDs
117
118Arguments:
119
120    Guid1       - guid to compare
121    Guid2       - guid to compare
122
123Returns:
124    = 0     if Guid1 == Guid2
125
126--*/
127{
128    INT32       *g1, *g2, r;
129
130    //
131    // Compare 32 bits at a time
132    //
133
134    g1 = (INT32 *) Guid1;
135    g2 = (INT32 *) Guid2;
136
137    r  = g1[0] - g2[0];
138    r |= g1[1] - g2[1];
139    r |= g1[2] - g2[2];
140    r |= g1[3] - g2[3];
141
142    return r;
143}
144
145
146