Home | History | Annotate | Line # | Download | only in lib
lock.c revision 1.1.1.1.6.2
      1  1.1.1.1.6.2  yamt /*	$NetBSD: lock.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 VOID
     26  1.1.1.1.6.2  yamt InitializeLock (
     27  1.1.1.1.6.2  yamt     IN OUT FLOCK    *Lock,
     28  1.1.1.1.6.2  yamt     IN EFI_TPL      Priority
     29  1.1.1.1.6.2  yamt     )
     30  1.1.1.1.6.2  yamt /*++
     31  1.1.1.1.6.2  yamt 
     32  1.1.1.1.6.2  yamt Routine Description:
     33  1.1.1.1.6.2  yamt 
     34  1.1.1.1.6.2  yamt     Initialize a basic mutual exclusion lock.   Each lock
     35  1.1.1.1.6.2  yamt     provides mutual exclusion access at it's task priority
     36  1.1.1.1.6.2  yamt     level.  Since there is no-premption (at any TPL) or
     37  1.1.1.1.6.2  yamt     multiprocessor support, acquiring the lock only consists
     38  1.1.1.1.6.2  yamt     of raising to the locks TPL.
     39  1.1.1.1.6.2  yamt 
     40  1.1.1.1.6.2  yamt     Note on a debug build the lock is acquired and released
     41  1.1.1.1.6.2  yamt     to help ensure proper usage.
     42  1.1.1.1.6.2  yamt 
     43  1.1.1.1.6.2  yamt Arguments:
     44  1.1.1.1.6.2  yamt 
     45  1.1.1.1.6.2  yamt     Lock        - The FLOCK structure to initialize
     46  1.1.1.1.6.2  yamt 
     47  1.1.1.1.6.2  yamt     Priority    - The task priority level of the lock
     48  1.1.1.1.6.2  yamt 
     49  1.1.1.1.6.2  yamt 
     50  1.1.1.1.6.2  yamt Returns:
     51  1.1.1.1.6.2  yamt 
     52  1.1.1.1.6.2  yamt     An initialized F Lock structure.
     53  1.1.1.1.6.2  yamt 
     54  1.1.1.1.6.2  yamt --*/
     55  1.1.1.1.6.2  yamt {
     56  1.1.1.1.6.2  yamt     Lock->Tpl = Priority;
     57  1.1.1.1.6.2  yamt     Lock->OwnerTpl = 0;
     58  1.1.1.1.6.2  yamt     Lock->Lock = 0;
     59  1.1.1.1.6.2  yamt }
     60  1.1.1.1.6.2  yamt 
     61  1.1.1.1.6.2  yamt 
     62  1.1.1.1.6.2  yamt VOID
     63  1.1.1.1.6.2  yamt AcquireLock (
     64  1.1.1.1.6.2  yamt     IN FLOCK    *Lock
     65  1.1.1.1.6.2  yamt     )
     66  1.1.1.1.6.2  yamt /*++
     67  1.1.1.1.6.2  yamt 
     68  1.1.1.1.6.2  yamt Routine Description:
     69  1.1.1.1.6.2  yamt 
     70  1.1.1.1.6.2  yamt     Raising to the task priority level of the mutual exclusion
     71  1.1.1.1.6.2  yamt     lock, and then acquires ownership of the lock.
     72  1.1.1.1.6.2  yamt 
     73  1.1.1.1.6.2  yamt Arguments:
     74  1.1.1.1.6.2  yamt 
     75  1.1.1.1.6.2  yamt     Lock        - The lock to acquire
     76  1.1.1.1.6.2  yamt 
     77  1.1.1.1.6.2  yamt Returns:
     78  1.1.1.1.6.2  yamt 
     79  1.1.1.1.6.2  yamt     Lock owned
     80  1.1.1.1.6.2  yamt 
     81  1.1.1.1.6.2  yamt --*/
     82  1.1.1.1.6.2  yamt {
     83  1.1.1.1.6.2  yamt     RtAcquireLock (Lock);
     84  1.1.1.1.6.2  yamt }
     85  1.1.1.1.6.2  yamt 
     86  1.1.1.1.6.2  yamt 
     87  1.1.1.1.6.2  yamt VOID
     88  1.1.1.1.6.2  yamt ReleaseLock (
     89  1.1.1.1.6.2  yamt     IN FLOCK    *Lock
     90  1.1.1.1.6.2  yamt     )
     91  1.1.1.1.6.2  yamt /*++
     92  1.1.1.1.6.2  yamt 
     93  1.1.1.1.6.2  yamt Routine Description:
     94  1.1.1.1.6.2  yamt 
     95  1.1.1.1.6.2  yamt     Releases ownership of the mutual exclusion lock, and
     96  1.1.1.1.6.2  yamt     restores the previous task priority level.
     97  1.1.1.1.6.2  yamt 
     98  1.1.1.1.6.2  yamt Arguments:
     99  1.1.1.1.6.2  yamt 
    100  1.1.1.1.6.2  yamt     Lock        - The lock to release
    101  1.1.1.1.6.2  yamt 
    102  1.1.1.1.6.2  yamt Returns:
    103  1.1.1.1.6.2  yamt 
    104  1.1.1.1.6.2  yamt     Lock unowned
    105  1.1.1.1.6.2  yamt 
    106  1.1.1.1.6.2  yamt --*/
    107  1.1.1.1.6.2  yamt {
    108  1.1.1.1.6.2  yamt     RtReleaseLock (Lock);
    109  1.1.1.1.6.2  yamt }
    110