Home | History | Annotate | Line # | Download | only in lib
lock.c revision 1.1.1.1.10.2
      1  1.1.1.1.10.2  tls /*	$NetBSD: lock.c,v 1.1.1.1.10.2 2014/08/20 00:04:24 tls Exp $	*/
      2  1.1.1.1.10.2  tls 
      3  1.1.1.1.10.2  tls /*++
      4  1.1.1.1.10.2  tls 
      5  1.1.1.1.10.2  tls Copyright (c) 1998  Intel Corporation
      6  1.1.1.1.10.2  tls 
      7  1.1.1.1.10.2  tls Module Name:
      8  1.1.1.1.10.2  tls 
      9  1.1.1.1.10.2  tls     lock.c
     10  1.1.1.1.10.2  tls 
     11  1.1.1.1.10.2  tls Abstract:
     12  1.1.1.1.10.2  tls 
     13  1.1.1.1.10.2  tls     Implements FLOCK
     14  1.1.1.1.10.2  tls 
     15  1.1.1.1.10.2  tls 
     16  1.1.1.1.10.2  tls 
     17  1.1.1.1.10.2  tls Revision History
     18  1.1.1.1.10.2  tls 
     19  1.1.1.1.10.2  tls --*/
     20  1.1.1.1.10.2  tls 
     21  1.1.1.1.10.2  tls 
     22  1.1.1.1.10.2  tls #include "lib.h"
     23  1.1.1.1.10.2  tls 
     24  1.1.1.1.10.2  tls 
     25  1.1.1.1.10.2  tls VOID
     26  1.1.1.1.10.2  tls InitializeLock (
     27  1.1.1.1.10.2  tls     IN OUT FLOCK    *Lock,
     28  1.1.1.1.10.2  tls     IN EFI_TPL      Priority
     29  1.1.1.1.10.2  tls     )
     30  1.1.1.1.10.2  tls /*++
     31  1.1.1.1.10.2  tls 
     32  1.1.1.1.10.2  tls Routine Description:
     33  1.1.1.1.10.2  tls 
     34  1.1.1.1.10.2  tls     Initialize a basic mutual exclusion lock.   Each lock
     35  1.1.1.1.10.2  tls     provides mutual exclusion access at it's task priority
     36  1.1.1.1.10.2  tls     level.  Since there is no-premption (at any TPL) or
     37  1.1.1.1.10.2  tls     multiprocessor support, acquiring the lock only consists
     38  1.1.1.1.10.2  tls     of raising to the locks TPL.
     39  1.1.1.1.10.2  tls 
     40  1.1.1.1.10.2  tls     Note on a debug build the lock is acquired and released
     41  1.1.1.1.10.2  tls     to help ensure proper usage.
     42  1.1.1.1.10.2  tls 
     43  1.1.1.1.10.2  tls Arguments:
     44  1.1.1.1.10.2  tls 
     45  1.1.1.1.10.2  tls     Lock        - The FLOCK structure to initialize
     46  1.1.1.1.10.2  tls 
     47  1.1.1.1.10.2  tls     Priority    - The task priority level of the lock
     48  1.1.1.1.10.2  tls 
     49  1.1.1.1.10.2  tls 
     50  1.1.1.1.10.2  tls Returns:
     51  1.1.1.1.10.2  tls 
     52  1.1.1.1.10.2  tls     An initialized F Lock structure.
     53  1.1.1.1.10.2  tls 
     54  1.1.1.1.10.2  tls --*/
     55  1.1.1.1.10.2  tls {
     56  1.1.1.1.10.2  tls     Lock->Tpl = Priority;
     57  1.1.1.1.10.2  tls     Lock->OwnerTpl = 0;
     58  1.1.1.1.10.2  tls     Lock->Lock = 0;
     59  1.1.1.1.10.2  tls }
     60  1.1.1.1.10.2  tls 
     61  1.1.1.1.10.2  tls 
     62  1.1.1.1.10.2  tls VOID
     63  1.1.1.1.10.2  tls AcquireLock (
     64  1.1.1.1.10.2  tls     IN FLOCK    *Lock
     65  1.1.1.1.10.2  tls     )
     66  1.1.1.1.10.2  tls /*++
     67  1.1.1.1.10.2  tls 
     68  1.1.1.1.10.2  tls Routine Description:
     69  1.1.1.1.10.2  tls 
     70  1.1.1.1.10.2  tls     Raising to the task priority level of the mutual exclusion
     71  1.1.1.1.10.2  tls     lock, and then acquires ownership of the lock.
     72  1.1.1.1.10.2  tls 
     73  1.1.1.1.10.2  tls Arguments:
     74  1.1.1.1.10.2  tls 
     75  1.1.1.1.10.2  tls     Lock        - The lock to acquire
     76  1.1.1.1.10.2  tls 
     77  1.1.1.1.10.2  tls Returns:
     78  1.1.1.1.10.2  tls 
     79  1.1.1.1.10.2  tls     Lock owned
     80  1.1.1.1.10.2  tls 
     81  1.1.1.1.10.2  tls --*/
     82  1.1.1.1.10.2  tls {
     83  1.1.1.1.10.2  tls     RtAcquireLock (Lock);
     84  1.1.1.1.10.2  tls }
     85  1.1.1.1.10.2  tls 
     86  1.1.1.1.10.2  tls 
     87  1.1.1.1.10.2  tls VOID
     88  1.1.1.1.10.2  tls ReleaseLock (
     89  1.1.1.1.10.2  tls     IN FLOCK    *Lock
     90  1.1.1.1.10.2  tls     )
     91  1.1.1.1.10.2  tls /*++
     92  1.1.1.1.10.2  tls 
     93  1.1.1.1.10.2  tls Routine Description:
     94  1.1.1.1.10.2  tls 
     95  1.1.1.1.10.2  tls     Releases ownership of the mutual exclusion lock, and
     96  1.1.1.1.10.2  tls     restores the previous task priority level.
     97  1.1.1.1.10.2  tls 
     98  1.1.1.1.10.2  tls Arguments:
     99  1.1.1.1.10.2  tls 
    100  1.1.1.1.10.2  tls     Lock        - The lock to release
    101  1.1.1.1.10.2  tls 
    102  1.1.1.1.10.2  tls Returns:
    103  1.1.1.1.10.2  tls 
    104  1.1.1.1.10.2  tls     Lock unowned
    105  1.1.1.1.10.2  tls 
    106  1.1.1.1.10.2  tls --*/
    107  1.1.1.1.10.2  tls {
    108  1.1.1.1.10.2  tls     RtReleaseLock (Lock);
    109  1.1.1.1.10.2  tls }
    110