Home | History | Annotate | Line # | Download | only in runtime
      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