/** @file

Capsule format guid for Quark capsule image.

Copyright (c) 2013-2015 Intel Corporation.

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

**/

#ifndef _QUARK_CAPSULE_GUID_H_
#define _QUARK_CAPSULE_GUID_H_

#define QUARK_CAPSULE_GUID \
  { 0xd400d1e4, 0xa314, 0x442b, { 0x89, 0xed, 0xa9, 0x2e, 0x4c, 0x81, 0x97, 0xcb } }

#define SMI_INPUT_UPDATE_CAP 0x27
#define SMI_INPUT_GET_CAP    0x28

#define SMI_CAP_FUNCTION     0xEF

#pragma pack(1)
typedef struct {
   UINT64  Address;
   UINT32  BufferOffset;
   UINT32  Size;
   UINT32  Flags;
   UINT32  Reserved;
} CAPSULE_FRAGMENT;

typedef struct {
  UINTN         CapsuleLocation;  // Top of the capsule that point to structure CAPSULE_FRAGMENT
  UINTN         CapsuleSize;    // Size of the capsule
  EFI_STATUS   Status;      // Returned status
} CAPSULE_INFO_PACKET;

typedef struct {
  UINTN           BlocksCompleted;  // # of blocks processed
  UINTN           TotalBlocks;      // Total # of blocks to be processed
  EFI_STATUS      Status;            // returned status
} UPDATE_STATUS_PACKET;
#pragma pack()

extern EFI_GUID gEfiQuarkCapsuleGuid;

#endif
