/** @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

**/

#ifndef __EVENT_H__
#define __EVENT_H__

#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
  );

#endif
