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