+FSCTL_DISMOUNT_VOLUME define
[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 KIRQL FASTCALL
71 KfAcquireSpinLock (
72         PKSPIN_LOCK     SpinLock
73         )
74 {
75    KIRQL OldIrql;
76
77    KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
78    KeAcquireSpinLockAtDpcLevel(SpinLock);
79
80    return OldIrql;
81 }
82
83 VOID FASTCALL
84 KfReleaseSpinLock (
85         PKSPIN_LOCK     SpinLock,
86         KIRQL           NewIrql
87         )
88 /*
89  * FUNCTION: Releases a spinlock
90  * ARGUMENTS:
91  *        SpinLock = Spinlock to release
92  *        NewIrql = Irql level before acquiring the spinlock
93  */
94 {
95    KeReleaseSpinLockFromDpcLevel(SpinLock);
96    KeLowerIrql(NewIrql);
97 }
98
99 /* EOF */