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