/** @file
  This file declares the internal Framework Boot Script format used by
  the PI implementation of Script Saver and Executor.

  Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>

  SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef _BOOT_SCRIPT_INTERNAL_FORMAT_H_
#define _BOOT_SCRIPT_INTERNAL_FORMAT_H_

#pragma pack(1)

//
// Boot Script Opcode Header Structure Definitions
//

typedef struct {
  UINT16    OpCode;
  UINT8     Length;
} EFI_BOOT_SCRIPT_GENERIC_HEADER;

typedef struct {
  UINT16    OpCode;
  UINT8     Length;
  UINT16    Version;
  UINT32    TableLength;
  UINT16    Reserved[2];
} EFI_BOOT_SCRIPT_TABLE_HEADER;

typedef struct {
  UINT16    OpCode;
  UINT8     Length;
  UINT32    Width;
} EFI_BOOT_SCRIPT_COMMON_HEADER;

typedef struct {
  UINT16    OpCode;
  UINT8     Length;
  UINT32    Width;
  UINT32    Count;
  UINT64    Address;
} EFI_BOOT_SCRIPT_IO_WRITE;

typedef struct {
  UINT16    OpCode;
  UINT8     Length;
  UINT32    Width;
  UINT64    Address;
} EFI_BOOT_SCRIPT_IO_READ_WRITE;

typedef struct {
  UINT16    OpCode;
  UINT8     Length;
  UINT32    Width;
  UINT32    Count;
  UINT64    Address;
} EFI_BOOT_SCRIPT_MEM_WRITE;

typedef struct {
  UINT16    OpCode;
  UINT8     Length;
  UINT32    Width;
  UINT64    Address;
} EFI_BOOT_SCRIPT_MEM_READ_WRITE;

typedef struct {
  UINT16    OpCode;
  UINT8     Length;
  UINT32    Width;
  UINT32    Count;
  UINT64    Address;
} EFI_BOOT_SCRIPT_PCI_CONFIG_WRITE;

typedef struct {
  UINT16    OpCode;
  UINT8     Length;
  UINT32    Width;
  UINT32    Count;
  UINT64    Address;
  UINT16    Segment;
} EFI_BOOT_SCRIPT_PCI_CONFIG2_WRITE;

typedef struct {
  UINT16    OpCode;
  UINT8     Length;
  UINT32    Width;
  UINT64    Address;
} EFI_BOOT_SCRIPT_PCI_CONFIG_READ_WRITE;

typedef struct {
  UINT16    OpCode;
  UINT8     Length;
  UINT32    Width;
  UINT64    Address;
  UINT16    Segment;
} EFI_BOOT_SCRIPT_PCI_CONFIG2_READ_WRITE;

typedef struct {
  UINT16    OpCode;
  UINT8     Length;
  UINT64    SmBusAddress;
  UINT32    Operation;
  UINT32    DataSize;
} EFI_BOOT_SCRIPT_SMBUS_EXECUTE;

typedef struct {
  UINT16    OpCode;
  UINT8     Length;
  UINT64    Duration;
} EFI_BOOT_SCRIPT_STALL;

typedef struct {
  UINT16                  OpCode;
  UINT8                   Length;
  EFI_PHYSICAL_ADDRESS    EntryPoint;
} EFI_BOOT_SCRIPT_DISPATCH;

typedef struct {
  UINT16                  OpCode;
  UINT8                   Length;
  EFI_PHYSICAL_ADDRESS    EntryPoint;
  EFI_PHYSICAL_ADDRESS    Context;
} EFI_BOOT_SCRIPT_DISPATCH_2;

typedef struct {
  UINT16    OpCode;
  UINT8     Length;
  UINT32    Width;
  UINT64    Address;
  UINT64    Duration;
  UINT64    LoopTimes;
} EFI_BOOT_SCRIPT_MEM_POLL;

typedef struct {
  UINT16    OpCode;
  UINT8     Length;
  UINT32    InformationLength;
  // UINT8   InformationData[InformationLength];
} EFI_BOOT_SCRIPT_INFORMATION;

typedef struct {
  UINT16    OpCode;
  UINT8     Length;
  UINT32    Width;
  UINT64    Address;
  UINT64    Delay;
} EFI_BOOT_SCRIPT_IO_POLL;

typedef struct {
  UINT16    OpCode;
  UINT8     Length;
  UINT32    Width;
  UINT64    Address;
  UINT64    Delay;
} EFI_BOOT_SCRIPT_PCI_CONFIG_POLL;

typedef struct {
  UINT16    OpCode;
  UINT8     Length;
  UINT32    Width;
  UINT64    Address;
  UINT16    Segment;
  UINT64    Delay;
} EFI_BOOT_SCRIPT_PCI_CONFIG2_POLL;

typedef struct {
  UINT16    OpCode;
  UINT8     Length;
} EFI_BOOT_SCRIPT_TERMINATE;

#pragma pack()

#define BOOT_SCRIPT_NODE_MAX_LENGTH  1024

#define BOOT_SCRIPT_TABLE_VERSION  0x0001

#endif
