reactosized: libcaptive/halcaptive/spinlock.c -> hal/halx86/spinlock.c
[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 #ifndef LIBCAPTIVE
43
44 KIRQL FASTCALL
45 KeAcquireSpinLockRaiseToSynch (
46         PKSPIN_LOCK     SpinLock
47         )
48 {
49    UNIMPLEMENTED;
50 }
51
52 #endif /* LIBCAPTIVE */
53
54 VOID STDCALL
55 KeReleaseSpinLock (
56         PKSPIN_LOCK     SpinLock,
57         KIRQL           NewIrql
58         )
59 /*
60  * FUNCTION: Releases a spinlock
61  * ARGUMENTS:
62  *        SpinLock = Spinlock to release
63  *        NewIrql = Irql level before acquiring the spinlock
64  */
65 {
66    KeReleaseSpinLockFromDpcLevel(SpinLock);
67    KeLowerIrql(NewIrql);
68 }
69
70 #ifndef LIBCAPTIVE
71
72 KIRQL FASTCALL
73 KfAcquireSpinLock (
74         PKSPIN_LOCK     SpinLock
75         )
76 {
77    KIRQL OldIrql;
78
79    KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
80    KeAcquireSpinLockAtDpcLevel(SpinLock);
81
82    return OldIrql;
83 }
84
85 VOID FASTCALL
86 KfReleaseSpinLock (
87         PKSPIN_LOCK     SpinLock,
88         KIRQL           NewIrql
89         )
90 /*
91  * FUNCTION: Releases a spinlock
92  * ARGUMENTS:
93  *        SpinLock = Spinlock to release
94  *        NewIrql = Irql level before acquiring the spinlock
95  */
96 {
97    KeReleaseSpinLockFromDpcLevel(SpinLock);
98    KeLowerIrql(NewIrql);
99 }
100
101 #endif /* LIBCAPTIVE */
102
103 /* EOF */