/** @file
  UEFI Event support functions and structure.

Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
(C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#pragma once

#define VALID_TPL(a)  ((a) <= TPL_HIGH_LEVEL)
extern  UINTN  gEventPending;

///
/// Set if Event is part of an event group
///
#define EVT_EXFLAG_EVENT_GROUP  0x01
///
/// Set if Event is registered on a protocol notify
///
#define EVT_EXFLAG_EVENT_PROTOCOL_NOTIFICATION  0x02

//
// EFI_EVENT
//

///
/// Timer event information
///
typedef struct {
  LIST_ENTRY    Link;
  UINT64        TriggerTime;
  UINT64        Period;
} TIMER_EVENT_INFO;

#define EVENT_SIGNATURE  SIGNATURE_32('e','v','n','t')
typedef struct {
  UINTN                      Signature;
  UINT32                     Type;
  UINT32                     SignalCount;
  ///
  /// Entry if the event is registered to be signalled
  ///
  LIST_ENTRY                 SignalLink;
  ///
  /// Notification information for this event
  ///
  EFI_TPL                    NotifyTpl;
  EFI_EVENT_NOTIFY           NotifyFunction;
  VOID                       *NotifyContext;
  EFI_GUID                   EventGroup;
  LIST_ENTRY                 NotifyLink;
  UINT8                      ExFlag;
  ///
  /// A list of all runtime events
  ///
  EFI_RUNTIME_EVENT_ENTRY    RuntimeData;
  TIMER_EVENT_INFO           Timer;
} IEVENT;

//
// Internal prototypes
//

/**
  Dispatches all pending events.

  @param  Priority               The task priority level of event notifications
                                 to dispatch

**/
VOID
CoreDispatchEventNotifies (
  IN EFI_TPL  Priority
  );

/**
  Initializes timer support.

**/
VOID
CoreInitializeTimer (
  VOID
  );
