Reverted latest changes.
[reactos.git] / reactos / hal / halx86 / spinlock.c
1 /* $Id: spinlock.c,v 1.3 2002/09/08 10:22:24 chorns Exp $
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 */