\r
**/\r
\r
-\r
#include "DxeMain.h"\r
#include "Event.h"\r
\r
///\r
/// gEventQueueLock - Protects the event queues\r
///\r
-EFI_LOCK gEventQueueLock = EFI_INITIALIZE_LOCK_VARIABLE (TPL_HIGH_LEVEL);\r
+EFI_LOCK gEventQueueLock = EFI_INITIALIZE_LOCK_VARIABLE (TPL_HIGH_LEVEL);\r
\r
///\r
/// gEventQueue - A list of event's to notify for each priority level\r
///\r
-LIST_ENTRY gEventQueue[TPL_HIGH_LEVEL + 1];\r
+LIST_ENTRY gEventQueue[TPL_HIGH_LEVEL + 1];\r
\r
///\r
/// gEventPending - A bitmask of the EventQueues that are pending\r
///\r
-UINTN gEventPending = 0;\r
+UINTN gEventPending = 0;\r
\r
///\r
/// gEventSignalQueue - A list of events to signal based on EventGroup type\r
///\r
-LIST_ENTRY gEventSignalQueue = INITIALIZE_LIST_HEAD_VARIABLE (gEventSignalQueue);\r
+LIST_ENTRY gEventSignalQueue = INITIALIZE_LIST_HEAD_VARIABLE (gEventSignalQueue);\r
\r
///\r
/// Enumerate the valid types\r
///\r
-UINT32 mEventTable[] = {\r
+UINT32 mEventTable[] = {\r
///\r
/// 0x80000200 Timer event with a notification function that is\r
/// queue when the event is signaled with SignalEvent()\r
///\r
/// gIdleLoopEvent - Event which is signalled when the core is idle\r
///\r
-EFI_EVENT gIdleLoopEvent = NULL;\r
-\r
+EFI_EVENT gIdleLoopEvent = NULL;\r
\r
/**\r
Enter critical section by acquiring the lock on gEventQueueLock.\r
CoreAcquireLock (&gEventQueueLock);\r
}\r
\r
-\r
/**\r
Exit critical section by releasing the lock on gEventQueueLock.\r
\r
CoreReleaseLock (&gEventQueueLock);\r
}\r
\r
-\r
-\r
/**\r
Initializes "event" support.\r
\r
VOID\r
)\r
{\r
- UINTN Index;\r
+ UINTN Index;\r
\r
- for (Index=0; Index <= TPL_HIGH_LEVEL; Index++) {\r
+ for (Index = 0; Index <= TPL_HIGH_LEVEL; Index++) {\r
InitializeListHead (&gEventQueue[Index]);\r
}\r
\r
return EFI_SUCCESS;\r
}\r
\r
-\r
-\r
/**\r
Dispatches all pending events.\r
\r
**/\r
VOID\r
CoreDispatchEventNotifies (\r
- IN EFI_TPL Priority\r
+ IN EFI_TPL Priority\r
)\r
{\r
- IEVENT *Event;\r
- LIST_ENTRY *Head;\r
+ IEVENT *Event;\r
+ LIST_ENTRY *Head;\r
\r
CoreAcquireEventLock ();\r
ASSERT (gEventQueueLock.OwnerTpl == Priority);\r
// Dispatch all the pending notifications\r
//\r
while (!IsListEmpty (Head)) {\r
-\r
Event = CR (Head->ForwardLink, IEVENT, NotifyLink, EVENT_SIGNATURE);\r
RemoveEntryList (&Event->NotifyLink);\r
\r
CoreReleaseEventLock ();\r
}\r
\r
-\r
-\r
/**\r
Queues the event's notification function to fire.\r
\r
**/\r
VOID\r
CoreNotifyEvent (\r
- IN IEVENT *Event\r
+ IN IEVENT *Event\r
)\r
{\r
-\r
//\r
// Event database must be locked\r
//\r
gEventPending |= (UINTN)(1 << Event->NotifyTpl);\r
}\r
\r
-\r
-\r
-\r
/**\r
Signals all events in the EventGroup.\r
\r
**/\r
VOID\r
CoreNotifySignalList (\r
- IN EFI_GUID *EventGroup\r
+ IN EFI_GUID *EventGroup\r
)\r
{\r
- LIST_ENTRY *Link;\r
- LIST_ENTRY *Head;\r
- IEVENT *Event;\r
+ LIST_ENTRY *Link;\r
+ LIST_ENTRY *Head;\r
+ IEVENT *Event;\r
\r
CoreAcquireEventLock ();\r
\r
CoreReleaseEventLock ();\r
}\r
\r
-\r
/**\r
Creates an event.\r
\r
EFI_STATUS\r
EFIAPI\r
CoreCreateEvent (\r
- IN UINT32 Type,\r
- IN EFI_TPL NotifyTpl,\r
- IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL,\r
- IN VOID *NotifyContext OPTIONAL,\r
- OUT EFI_EVENT *Event\r
+ IN UINT32 Type,\r
+ IN EFI_TPL NotifyTpl,\r
+ IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL,\r
+ IN VOID *NotifyContext OPTIONAL,\r
+ OUT EFI_EVENT *Event\r
)\r
{\r
return CoreCreateEventEx (Type, NotifyTpl, NotifyFunction, NotifyContext, NULL, Event);\r
}\r
\r
-\r
-\r
/**\r
Creates an event in a group.\r
\r
EFI_STATUS\r
EFIAPI\r
CoreCreateEventEx (\r
- IN UINT32 Type,\r
- IN EFI_TPL NotifyTpl,\r
- IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL,\r
- IN CONST VOID *NotifyContext OPTIONAL,\r
- IN CONST EFI_GUID *EventGroup OPTIONAL,\r
- OUT EFI_EVENT *Event\r
+ IN UINT32 Type,\r
+ IN EFI_TPL NotifyTpl,\r
+ IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL,\r
+ IN CONST VOID *NotifyContext OPTIONAL,\r
+ IN CONST EFI_GUID *EventGroup OPTIONAL,\r
+ OUT EFI_EVENT *Event\r
)\r
{\r
//\r
// If it's a notify type of event, check for invalid NotifyTpl\r
//\r
if ((Type & (EVT_NOTIFY_WAIT | EVT_NOTIFY_SIGNAL)) != 0) {\r
- if (NotifyTpl != TPL_APPLICATION &&\r
- NotifyTpl != TPL_CALLBACK &&\r
- NotifyTpl != TPL_NOTIFY) {\r
+ if ((NotifyTpl != TPL_APPLICATION) &&\r
+ (NotifyTpl != TPL_CALLBACK) &&\r
+ (NotifyTpl != TPL_NOTIFY))\r
+ {\r
return EFI_INVALID_PARAMETER;\r
}\r
}\r
EFI_STATUS\r
EFIAPI\r
CoreCreateEventInternal (\r
- IN UINT32 Type,\r
- IN EFI_TPL NotifyTpl,\r
- IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL,\r
- IN CONST VOID *NotifyContext OPTIONAL,\r
- IN CONST EFI_GUID *EventGroup OPTIONAL,\r
- OUT EFI_EVENT *Event\r
+ IN UINT32 Type,\r
+ IN EFI_TPL NotifyTpl,\r
+ IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL,\r
+ IN CONST VOID *NotifyContext OPTIONAL,\r
+ IN CONST EFI_GUID *EventGroup OPTIONAL,\r
+ OUT EFI_EVENT *Event\r
)\r
{\r
- EFI_STATUS Status;\r
- IEVENT *IEvent;\r
- INTN Index;\r
-\r
+ EFI_STATUS Status;\r
+ IEVENT *IEvent;\r
+ INTN Index;\r
\r
if (Event == NULL) {\r
return EFI_INVALID_PARAMETER;\r
//\r
Status = EFI_INVALID_PARAMETER;\r
for (Index = 0; Index < (sizeof (mEventTable) / sizeof (UINT32)); Index++) {\r
- if (Type == mEventTable[Index]) {\r
- Status = EFI_SUCCESS;\r
- break;\r
- }\r
+ if (Type == mEventTable[Index]) {\r
+ Status = EFI_SUCCESS;\r
+ break;\r
+ }\r
}\r
- if(EFI_ERROR (Status)) {\r
+\r
+ if (EFI_ERROR (Status)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
if ((Type == EVT_SIGNAL_EXIT_BOOT_SERVICES) || (Type == EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
+\r
if (CompareGuid (EventGroup, &gEfiEventExitBootServicesGuid)) {\r
Type = EVT_SIGNAL_EXIT_BOOT_SERVICES;\r
} else if (CompareGuid (EventGroup, &gEfiEventVirtualAddressChangeGuid)) {\r
//\r
if ((NotifyFunction == NULL) ||\r
(NotifyTpl <= TPL_APPLICATION) ||\r
- (NotifyTpl >= TPL_HIGH_LEVEL)) {\r
+ (NotifyTpl >= TPL_HIGH_LEVEL))\r
+ {\r
return EFI_INVALID_PARAMETER;\r
}\r
-\r
} else {\r
//\r
// No notification needed, zero ignored values\r
//\r
- NotifyTpl = 0;\r
+ NotifyTpl = 0;\r
NotifyFunction = NULL;\r
- NotifyContext = NULL;\r
+ NotifyContext = NULL;\r
}\r
\r
//\r
} else {\r
IEvent = AllocateZeroPool (sizeof (IEVENT));\r
}\r
+\r
if (IEvent == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
IEvent->Signature = EVENT_SIGNATURE;\r
- IEvent->Type = Type;\r
+ IEvent->Type = Type;\r
\r
IEvent->NotifyTpl = NotifyTpl;\r
IEvent->NotifyFunction = NotifyFunction;\r
IEvent->RuntimeData.Type = Type;\r
IEvent->RuntimeData.NotifyTpl = NotifyTpl;\r
IEvent->RuntimeData.NotifyFunction = NotifyFunction;\r
- IEvent->RuntimeData.NotifyContext = (VOID *) NotifyContext;\r
+ IEvent->RuntimeData.NotifyContext = (VOID *)NotifyContext;\r
//\r
// Work around the bug in the Platform Init specification (v1.7), reported\r
// as Mantis#2017: "EFI_RUNTIME_EVENT_ENTRY.Event" should have type\r
// doesn't match the natural language description. Therefore we need an\r
// explicit cast here.\r
//\r
- IEvent->RuntimeData.Event = (EFI_EVENT *) IEvent;\r
+ IEvent->RuntimeData.Event = (EFI_EVENT *)IEvent;\r
InsertTailList (&gRuntime->EventHead, &IEvent->RuntimeData.Link);\r
}\r
\r
return EFI_SUCCESS;\r
}\r
\r
-\r
-\r
-\r
/**\r
Signals the event. Queues the event to be notified if needed.\r
\r
EFI_STATUS\r
EFIAPI\r
CoreSignalEvent (\r
- IN EFI_EVENT UserEvent\r
+ IN EFI_EVENT UserEvent\r
)\r
{\r
- IEVENT *Event;\r
+ IEVENT *Event;\r
\r
Event = UserEvent;\r
\r
CoreReleaseEventLock ();\r
CoreNotifySignalList (&Event->EventGroup);\r
CoreAcquireEventLock ();\r
- } else {\r
+ } else {\r
CoreNotifyEvent (Event);\r
}\r
}\r
return EFI_SUCCESS;\r
}\r
\r
-\r
-\r
/**\r
Check the status of an event.\r
\r
EFI_STATUS\r
EFIAPI\r
CoreCheckEvent (\r
- IN EFI_EVENT UserEvent\r
+ IN EFI_EVENT UserEvent\r
)\r
{\r
IEVENT *Event;\r
Status = EFI_NOT_READY;\r
\r
if ((Event->SignalCount == 0) && ((Event->Type & EVT_NOTIFY_WAIT) != 0)) {\r
-\r
//\r
// Queue the wait notify function\r
//\r
if (Event->SignalCount == 0) {\r
CoreNotifyEvent (Event);\r
}\r
+\r
CoreReleaseEventLock ();\r
}\r
\r
\r
if (Event->SignalCount != 0) {\r
Event->SignalCount = 0;\r
- Status = EFI_SUCCESS;\r
+ Status = EFI_SUCCESS;\r
}\r
\r
CoreReleaseEventLock ();\r
return Status;\r
}\r
\r
-\r
-\r
/**\r
Stops execution until an event is signaled.\r
\r
EFI_STATUS\r
EFIAPI\r
CoreWaitForEvent (\r
- IN UINTN NumberOfEvents,\r
- IN EFI_EVENT *UserEvents,\r
- OUT UINTN *UserIndex\r
+ IN UINTN NumberOfEvents,\r
+ IN EFI_EVENT *UserEvents,\r
+ OUT UINTN *UserIndex\r
)\r
{\r
- EFI_STATUS Status;\r
- UINTN Index;\r
+ EFI_STATUS Status;\r
+ UINTN Index;\r
\r
//\r
// Can only WaitForEvent at TPL_APPLICATION\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- for(;;) {\r
-\r
- for(Index = 0; Index < NumberOfEvents; Index++) {\r
-\r
+ for ( ; ;) {\r
+ for (Index = 0; Index < NumberOfEvents; Index++) {\r
Status = CoreCheckEvent (UserEvents[Index]);\r
\r
//\r
if (UserIndex != NULL) {\r
*UserIndex = Index;\r
}\r
+\r
return Status;\r
}\r
}\r
}\r
}\r
\r
-\r
/**\r
Closes an event and frees the event structure.\r
\r
EFI_STATUS\r
EFIAPI\r
CoreCloseEvent (\r
- IN EFI_EVENT UserEvent\r
+ IN EFI_EVENT UserEvent\r
)\r
{\r
EFI_STATUS Status;\r
// clear the Signature of Event before free pool.\r
//\r
Event->Signature = 0;\r
- Status = CoreFreePool (Event);\r
+ Status = CoreFreePool (Event);\r
ASSERT_EFI_ERROR (Status);\r
\r
return Status;\r