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