1 /*++
2
3 Copyright (c) 1999 Intel Corporation
4
5 Module Name:
6
7 EfiRtLib.h
8
9 Abstract:
10
11 EFI Runtime library functions
12
13
14
15 Revision 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
26 VOID
27 RUNTIMEFUNCTION
RtZeroMem(IN VOID * Buffer,IN UINTN Size)28 RtZeroMem (
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
44 VOID
45 RUNTIMEFUNCTION
RtSetMem(IN VOID * Buffer,IN UINTN Size,IN UINT8 Value)46 RtSetMem (
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
63 VOID
64 RUNTIMEFUNCTION
RtCopyMem(IN VOID * Dest,IN CONST VOID * Src,IN UINTN len)65 RtCopyMem (
66 IN VOID *Dest,
67 IN CONST VOID *Src,
68 IN UINTN len
69 )
70 {
71 CHAR8 *d = (CHAR8*)Dest;
72 CHAR8 *s = (CHAR8*)Src;
73
74 if (d == NULL || s == NULL || s == d)
75 return;
76
77 // If the beginning of the destination range overlaps with the end of
78 // the source range, make sure to start the copy from the end so that
79 // we don't end up overwriting source data that we need for the copy.
80 if ((d > s) && (d < s + len)) {
81 for (d += len, s += len; len--; )
82 *--d = *--s;
83 } else {
84 while (len--)
85 *d++ = *s++;
86 }
87 }
88
89 #ifndef __GNUC__
90 #pragma RUNTIME_CODE(RtCompareMem)
91 #endif
92 INTN
93 RUNTIMEFUNCTION
RtCompareMem(IN CONST VOID * Dest,IN CONST VOID * Src,IN UINTN len)94 RtCompareMem (
95 IN CONST VOID *Dest,
96 IN CONST VOID *Src,
97 IN UINTN len
98 )
99 {
100 CONST CHAR8 *d = Dest, *s = Src;
101 while (len--) {
102 if (*d != *s) {
103 return *d - *s;
104 }
105
106 d += 1;
107 s += 1;
108 }
109
110 return 0;
111 }
112
113 #ifndef __GNUC__
114 #pragma RUNTIME_CODE(RtCompareGuid)
115 #endif
116 INTN
117 RUNTIMEFUNCTION
RtCompareGuid(IN EFI_GUID * Guid1,IN EFI_GUID * Guid2)118 RtCompareGuid (
119 IN EFI_GUID *Guid1,
120 IN EFI_GUID *Guid2
121 )
122 /*++
123
124 Routine Description:
125
126 Compares to GUIDs
127
128 Arguments:
129
130 Guid1 - guid to compare
131 Guid2 - guid to compare
132
133 Returns:
134 = 0 if Guid1 == Guid2
135
136 --*/
137 {
138 INT32 *g1, *g2, r;
139
140 //
141 // Compare 32 bits at a time
142 //
143
144 g1 = (INT32 *) Guid1;
145 g2 = (INT32 *) Guid2;
146
147 r = g1[0] - g2[0];
148 r |= g1[1] - g2[1];
149 r |= g1[2] - g2[2];
150 r |= g1[3] - g2[3];
151
152 return r;
153 }
154
155
156