/** @file
  Interface definition for GopPolicy Protocol.

  Copyright (c) 2019 Intel Corporation. All rights reserved. <BR>

  SPDX-License-Identifier: BSD-2-Clause-Patent
**/

#ifndef _GOP_POLICY_PROTOCOL_H_
#define _GOP_POLICY_PROTOCOL_H_


#define GOP_POLICY_PROTOCOL_REVISION_01  0x01
#define GOP_POLICY_PROTOCOL_REVISION_03  0x03

typedef enum {
  LidClosed,
  LidOpen,
  LidStatusMax
} LID_STATUS;

typedef enum {
  Docked,
  UnDocked,
  DockStatusMax
} DOCK_STATUS;

///
/// Function to retrieve LID status
///
typedef
EFI_STATUS
(EFIAPI *GET_PLATFORM_LID_STATUS) (
  OUT LID_STATUS * CurrentLidStatus
  );

///
/// Function to retrieve Dock status
///
typedef
EFI_STATUS
(EFIAPI *GET_PLATFORM_DOCK_STATUS) (
 OUT DOCK_STATUS  CurrentDockStatus
);

///
/// Function to retrieve VBT table address and size
///
typedef
EFI_STATUS
(EFIAPI *GET_VBT_DATA) (
  OUT EFI_PHYSICAL_ADDRESS * VbtAddress,
  OUT UINT32               *VbtSize
  );

/**
  System Agent Graphics Output Protocol (GOP) - Policy Protocol\n
  Graphics Output Protocol (GOP) is a UEFI API replacing legacy Video ROMs for EFI boot\n
  When GOP Driver is used this protocol can be consumed by GOP driver or platform code for GOP relevant initialization\n
  All functions in this protocol should be initialized by platform code basing on platform implementation\n
**/
typedef struct {
  UINT32                    Revision;              ///< Protocol revision
  GET_PLATFORM_LID_STATUS   GetPlatformLidStatus;  ///< Protocol function to get Lid Status. Platform code should provide this function basing on design.
  GET_VBT_DATA              GetVbtData;            ///< Protocol function to get Vbt Data address and size. Platform code should provide this function basing on design.
  GET_PLATFORM_DOCK_STATUS  GetPlatformDockStatus;  ///< Function pointer for get platform dock status.
  EFI_GUID                  GopOverrideGuid;        ///< A GUID provided by BIOS in case GOP is to be overridden.
} GOP_POLICY_PROTOCOL;

extern EFI_GUID gGopPolicyProtocolGuid;
extern EFI_GUID gIntelGraphicsVbtGuid;

#endif
