Home | History | Annotate | Line # | Download | only in runtime
efirtlib.c revision 1.1.1.1.36.1
      1  1.1.1.1.36.1  christos /*	$NetBSD: efirtlib.c,v 1.1.1.1.36.1 2019/06/10 22:08:37 christos 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  jakllsch     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  jakllsch     IN VOID     *Dest,
     69  1.1.1.1.36.1  christos     IN CONST VOID     *Src,
     70           1.1  jakllsch     IN UINTN    len
     71           1.1  jakllsch     )
     72           1.1  jakllsch {
     73  1.1.1.1.36.1  christos     CHAR8   *d;
     74  1.1.1.1.36.1  christos     CONST CHAR8 *s = Src;
     75           1.1  jakllsch     d = Dest;
     76           1.1  jakllsch     while (len--) {
     77           1.1  jakllsch         *(d++) = *(s++);
     78           1.1  jakllsch     }
     79           1.1  jakllsch }
     80           1.1  jakllsch 
     81           1.1  jakllsch #ifndef __GNUC__
     82           1.1  jakllsch #pragma RUNTIME_CODE(RtCompareMem)
     83           1.1  jakllsch #endif
     84           1.1  jakllsch INTN
     85           1.1  jakllsch RUNTIMEFUNCTION
     86           1.1  jakllsch RtCompareMem (
     87  1.1.1.1.36.1  christos     IN CONST VOID     *Dest,
     88  1.1.1.1.36.1  christos     IN CONST VOID     *Src,
     89           1.1  jakllsch     IN UINTN    len
     90           1.1  jakllsch     )
     91           1.1  jakllsch {
     92  1.1.1.1.36.1  christos     CONST CHAR8    *d = Dest, *s = Src;
     93           1.1  jakllsch     while (len--) {
     94           1.1  jakllsch         if (*d != *s) {
     95           1.1  jakllsch             return *d - *s;
     96           1.1  jakllsch         }
     97           1.1  jakllsch 
     98           1.1  jakllsch         d += 1;
     99           1.1  jakllsch         s += 1;
    100           1.1  jakllsch     }
    101           1.1  jakllsch 
    102           1.1  jakllsch     return 0;
    103           1.1  jakllsch }
    104           1.1  jakllsch 
    105           1.1  jakllsch #ifndef __GNUC__
    106           1.1  jakllsch #pragma RUNTIME_CODE(RtCompareGuid)
    107           1.1  jakllsch #endif
    108           1.1  jakllsch INTN
    109           1.1  jakllsch RUNTIMEFUNCTION
    110           1.1  jakllsch RtCompareGuid (
    111           1.1  jakllsch     IN EFI_GUID     *Guid1,
    112           1.1  jakllsch     IN EFI_GUID     *Guid2
    113           1.1  jakllsch     )
    114           1.1  jakllsch /*++
    115           1.1  jakllsch 
    116           1.1  jakllsch Routine Description:
    117           1.1  jakllsch 
    118           1.1  jakllsch     Compares to GUIDs
    119           1.1  jakllsch 
    120           1.1  jakllsch Arguments:
    121           1.1  jakllsch 
    122           1.1  jakllsch     Guid1       - guid to compare
    123           1.1  jakllsch     Guid2       - guid to compare
    124           1.1  jakllsch 
    125           1.1  jakllsch Returns:
    126           1.1  jakllsch     = 0     if Guid1 == Guid2
    127           1.1  jakllsch 
    128           1.1  jakllsch --*/
    129           1.1  jakllsch {
    130           1.1  jakllsch     INT32       *g1, *g2, r;
    131           1.1  jakllsch 
    132           1.1  jakllsch     //
    133           1.1  jakllsch     // Compare 32 bits at a time
    134           1.1  jakllsch     //
    135           1.1  jakllsch 
    136           1.1  jakllsch     g1 = (INT32 *) Guid1;
    137           1.1  jakllsch     g2 = (INT32 *) Guid2;
    138           1.1  jakllsch 
    139           1.1  jakllsch     r  = g1[0] - g2[0];
    140           1.1  jakllsch     r |= g1[1] - g2[1];
    141           1.1  jakllsch     r |= g1[2] - g2[2];
    142           1.1  jakllsch     r |= g1[3] - g2[3];
    143           1.1  jakllsch 
    144           1.1  jakllsch     return r;
    145           1.1  jakllsch }
    146           1.1  jakllsch 
    147           1.1  jakllsch 
    148