:pserver:cvsanon@mok.lvcm.com:/CVS/ReactOS reactos
[reactos.git] / hal / halx86 / spinlock.c
1 /* $Id$
2  *
3  * COPYRIGHT:       See COPYING in the top level directory
4  * PROJECT:         ReactOS kernel
5  * FILE:            ntoskrnl/hal/x86/spinlock.c
6  * PURPOSE:         Implements spinlocks
7  * PROGRAMMER:      David Welch (welch@cwcom.net)
8  *                  Eric Kohl (ekohl@rz-online.de)
9  * UPDATE HISTORY:
10  *                  09/06/2000 Created
11  */
12
13 /*
14  * NOTE: On a uniprocessor machine spinlocks are implemented by raising
15  * the irq level
16  */
17
18 /* INCLUDES ****************************************************************/
19
20 #include <ddk/ntddk.h>
21
22 #include <internal/debug.h>
23
24 /* FUNCTIONS ***************************************************************/
25
26 VOID STDCALL
27 KeAcquireSpinLock (
28         PKSPIN_LOCK     SpinLock,
29         PKIRQL          OldIrql
30         )
31 /*
32  * FUNCTION: Acquires a spinlock
33  * ARGUMENTS:
34  *         SpinLock = Spinlock to acquire
35  *         OldIrql (OUT) = Caller supplied storage for the previous irql
36  */
37 {
38    KeRaiseIrql(DISPATCH_LEVEL,OldIrql);
39    KeAcquireSpinLockAtDpcLevel(SpinLock);
40 }
41
42 KIRQL FASTCALL
43 KeAcquireSpinLockRaiseToSynch (
44         PKSPIN_LOCK     SpinLock
45         )
46 {
47    UNIMPLEMENTED;
48 }
49
50 VOID STDCALL
51 KeReleaseSpinLock (
52         PKSPIN_LOCK     SpinLock,
53         KIRQL           NewIrql
54         )
55 /*
56  * FUNCTION: Releases a spinlock
57  * ARGUMENTS:
58  *        SpinLock = Spinlock to release
59  *        NewIrql = Irql level before acquiring the spinlock
60  */
61 {
62    KeReleaseSpinLockFromDpcLevel(SpinLock);
63    KeLowerIrql(NewIrql);
64 }
65
66 KIRQL FASTCALL
67 KfAcquireSpinLock (
68         PKSPIN_LOCK     SpinLock
69         )
70 {
71    KIRQL OldIrql;
72
73    KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
74    KeAcquireSpinLockAtDpcLevel(SpinLock);
75
76    return OldIrql;
77 }
78
79 VOID FASTCALL
80 KfReleaseSpinLock (
81         PKSPIN_LOCK     SpinLock,
82         KIRQL           NewIrql
83         )
84 /*
85  * FUNCTION: Releases a spinlock
86  * ARGUMENTS:
87  *        SpinLock = Spinlock to release
88  *        NewIrql = Irql level before acquiring the spinlock
89  */
90 {
91    KeReleaseSpinLockFromDpcLevel(SpinLock);
92    KeLowerIrql(NewIrql);
93 }
94
95 /* EOF */