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