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