]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Core/Dxe/Library/Library.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdeModulePkg / Core / Dxe / Library / Library.c
CommitLineData
162ed594 1/** @file\r
797a9d67 2 DXE Core library services.\r
23c98c94 3\r
cd5ebaa0 4Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>\r
9d510e61 5SPDX-License-Identifier: BSD-2-Clause-Patent\r
28a00297 6\r
797a9d67 7**/\r
28a00297 8\r
9c4ac31c 9#include "DxeMain.h"\r
28a00297 10\r
28a00297 11//\r
12// Lock Stuff\r
13//\r
1436aea4 14\r
162ed594 15/**\r
28a00297 16 Initialize a basic mutual exclusion lock. Each lock\r
17 provides mutual exclusion access at it's task priority\r
18 level. Since there is no-premption (at any TPL) or\r
19 multiprocessor support, acquiring the lock only consists\r
20 of raising to the locks TPL.\r
21\r
022c6d45 22 @param Lock The EFI_LOCK structure to initialize\r
28a00297 23\r
022c6d45 24 @retval EFI_SUCCESS Lock Owned.\r
162ed594 25 @retval EFI_ACCESS_DENIED Reentrant Lock Acquisition, Lock not Owned.\r
28a00297 26\r
162ed594 27**/\r
28EFI_STATUS\r
29CoreAcquireLockOrFail (\r
30 IN EFI_LOCK *Lock\r
31 )\r
28a00297 32{\r
33 ASSERT (Lock != NULL);\r
34 ASSERT (Lock->Lock != EfiLockUninitialized);\r
35\r
36 if (Lock->Lock == EfiLockAcquired) {\r
37 //\r
38 // Lock is already owned, so bail out\r
39 //\r
40 return EFI_ACCESS_DENIED;\r
41 }\r
42\r
43 Lock->OwnerTpl = CoreRaiseTpl (Lock->Tpl);\r
44\r
45 Lock->Lock = EfiLockAcquired;\r
46 return EFI_SUCCESS;\r
47}\r
48\r
162ed594 49/**\r
28a00297 50 Raising to the task priority level of the mutual exclusion\r
51 lock, and then acquires ownership of the lock.\r
52\r
022c6d45 53 @param Lock The lock to acquire\r
28a00297 54\r
162ed594 55 @return Lock owned\r
28a00297 56\r
162ed594 57**/\r
58VOID\r
59CoreAcquireLock (\r
60 IN EFI_LOCK *Lock\r
61 )\r
28a00297 62{\r
63 ASSERT (Lock != NULL);\r
64 ASSERT (Lock->Lock == EfiLockReleased);\r
65\r
66 Lock->OwnerTpl = CoreRaiseTpl (Lock->Tpl);\r
67 Lock->Lock = EfiLockAcquired;\r
68}\r
69\r
162ed594 70/**\r
71 Releases ownership of the mutual exclusion lock, and\r
72 restores the previous task priority level.\r
28a00297 73\r
022c6d45 74 @param Lock The lock to release\r
28a00297 75\r
162ed594 76 @return Lock unowned\r
28a00297 77\r
162ed594 78**/\r
79VOID\r
80CoreReleaseLock (\r
81 IN EFI_LOCK *Lock\r
82 )\r
28a00297 83{\r
1436aea4 84 EFI_TPL Tpl;\r
28a00297 85\r
86 ASSERT (Lock != NULL);\r
87 ASSERT (Lock->Lock == EfiLockAcquired);\r
88\r
89 Tpl = Lock->OwnerTpl;\r
90\r
91 Lock->Lock = EfiLockReleased;\r
92\r
93 CoreRestoreTpl (Tpl);\r
94}\r