]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Library/BaseLib/Ipf/Synchronization.c
Initial import.
[mirror_edk2.git] / MdePkg / Library / BaseLib / Ipf / Synchronization.c
CommitLineData
878ddf1f 1/** @file\r
2 Implementation of synchronization functions on Itanium.\r
3\r
4 Copyright (c) 2006, Intel Corporation<BR>\r
5 All rights reserved. This program and the accompanying materials\r
6 are licensed and made available under the terms and conditions of the BSD License\r
7 which accompanies this distribution. The full text of the license may be found at\r
8 http://opensource.org/licenses/bsd-license.php\r
9\r
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12\r
13 Module Name: Synchronization.c\r
14\r
15**/\r
16\r
17UINT32\r
18EFIAPI\r
19InternalSyncCompareExchange32 (\r
20 IN volatile UINT32 *Value,\r
21 IN UINT32 CompareValue,\r
22 IN UINT32 ExchangeValue\r
23 );\r
24\r
25UINT32\r
26EFIAPI\r
27InternalSyncIncrement (\r
28 IN volatile UINT32 *Value\r
29 )\r
30{\r
31 UINT32 OriginalValue;\r
32\r
33 do {\r
34 OriginalValue = *Value;\r
35 } while (OriginalValue == InternalSyncCompareExchange32 (\r
36 Value,\r
37 OriginalValue,\r
38 OriginalValue + 1\r
39 ));\r
40 return OriginalValue + 1;\r
41}\r
42\r
43UINT32\r
44EFIAPI\r
45InternalSyncDecrement (\r
46 IN volatile UINT32 *Value\r
47 )\r
48{\r
49 UINT32 OriginalValue;\r
50\r
51 do {\r
52 OriginalValue = *Value;\r
53 } while (OriginalValue == InternalSyncCompareExchange32 (\r
54 Value,\r
55 OriginalValue,\r
56 OriginalValue - 1\r
57 ));\r
58 return OriginalValue - 1;\r
59}\r