Home | History | Annotate | Line # | Download | only in runtime
      1  1.1  jakllsch /*	$NetBSD: rtlock.c,v 1.1.1.1 2014/04/01 16:16:07 jakllsch Exp $	*/
      2  1.1  jakllsch 
      3  1.1  jakllsch /*++
      4  1.1  jakllsch 
      5  1.1  jakllsch Copyright (c) 1998  Intel Corporation
      6  1.1  jakllsch 
      7  1.1  jakllsch Module Name:
      8  1.1  jakllsch 
      9  1.1  jakllsch     lock.c
     10  1.1  jakllsch 
     11  1.1  jakllsch Abstract:
     12  1.1  jakllsch 
     13  1.1  jakllsch     Implements FLOCK
     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 
     22  1.1  jakllsch #include "lib.h"
     23  1.1  jakllsch 
     24  1.1  jakllsch 
     25  1.1  jakllsch 
     26  1.1  jakllsch #ifndef __GNUC__
     27  1.1  jakllsch #pragma RUNTIME_CODE(RtAcquireLock)
     28  1.1  jakllsch #endif
     29  1.1  jakllsch VOID
     30  1.1  jakllsch RtAcquireLock (
     31  1.1  jakllsch     IN FLOCK    *Lock
     32  1.1  jakllsch     )
     33  1.1  jakllsch /*++
     34  1.1  jakllsch 
     35  1.1  jakllsch Routine Description:
     36  1.1  jakllsch 
     37  1.1  jakllsch     Raising to the task priority level of the mutual exclusion
     38  1.1  jakllsch     lock, and then acquires ownership of the lock.
     39  1.1  jakllsch 
     40  1.1  jakllsch Arguments:
     41  1.1  jakllsch 
     42  1.1  jakllsch     Lock        - The lock to acquire
     43  1.1  jakllsch 
     44  1.1  jakllsch Returns:
     45  1.1  jakllsch 
     46  1.1  jakllsch     Lock owned
     47  1.1  jakllsch 
     48  1.1  jakllsch --*/
     49  1.1  jakllsch {
     50  1.1  jakllsch     if (BS) {
     51  1.1  jakllsch         if (BS->RaiseTPL != NULL) {
     52  1.1  jakllsch             Lock->OwnerTpl = uefi_call_wrapper(BS->RaiseTPL, 1, Lock->Tpl);
     53  1.1  jakllsch         }
     54  1.1  jakllsch     }
     55  1.1  jakllsch     else {
     56  1.1  jakllsch         if (LibRuntimeRaiseTPL != NULL) {
     57  1.1  jakllsch             Lock->OwnerTpl = LibRuntimeRaiseTPL(Lock->Tpl);
     58  1.1  jakllsch         }
     59  1.1  jakllsch     }
     60  1.1  jakllsch     Lock->Lock += 1;
     61  1.1  jakllsch     ASSERT (Lock->Lock == 1);
     62  1.1  jakllsch }
     63  1.1  jakllsch 
     64  1.1  jakllsch 
     65  1.1  jakllsch #ifndef __GNUC__
     66  1.1  jakllsch #pragma RUNTIME_CODE(RtAcquireLock)
     67  1.1  jakllsch #endif
     68  1.1  jakllsch VOID
     69  1.1  jakllsch RtReleaseLock (
     70  1.1  jakllsch     IN FLOCK    *Lock
     71  1.1  jakllsch     )
     72  1.1  jakllsch /*++
     73  1.1  jakllsch 
     74  1.1  jakllsch Routine Description:
     75  1.1  jakllsch 
     76  1.1  jakllsch     Releases ownership of the mutual exclusion lock, and
     77  1.1  jakllsch     restores the previous task priority level.
     78  1.1  jakllsch 
     79  1.1  jakllsch Arguments:
     80  1.1  jakllsch 
     81  1.1  jakllsch     Lock        - The lock to release
     82  1.1  jakllsch 
     83  1.1  jakllsch Returns:
     84  1.1  jakllsch 
     85  1.1  jakllsch     Lock unowned
     86  1.1  jakllsch 
     87  1.1  jakllsch --*/
     88  1.1  jakllsch {
     89  1.1  jakllsch     EFI_TPL     Tpl;
     90  1.1  jakllsch 
     91  1.1  jakllsch     Tpl = Lock->OwnerTpl;
     92  1.1  jakllsch     ASSERT(Lock->Lock == 1);
     93  1.1  jakllsch     Lock->Lock -= 1;
     94  1.1  jakllsch     if (BS) {
     95  1.1  jakllsch         if (BS->RestoreTPL != NULL) {
     96  1.1  jakllsch             uefi_call_wrapper(BS->RestoreTPL, 1, Tpl);
     97  1.1  jakllsch         }
     98  1.1  jakllsch     }
     99  1.1  jakllsch     else {
    100  1.1  jakllsch         if (LibRuntimeRestoreTPL != NULL) {
    101  1.1  jakllsch             LibRuntimeRestoreTPL(Tpl);
    102  1.1  jakllsch         }
    103  1.1  jakllsch     }
    104  1.1  jakllsch }
    105