/** @file

Copyright (c) 2018, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef _PLATFORM_TYPES_H_
#define _PLATFORM_TYPES_H_

#include <PiDxe.h>
#include <Library/DebugLib.h>
#include <Library/BaseLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/UefiLib.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/HobLib.h>
#include <Library/UefiRuntimeServicesTableLib.h>
#include <Protocol/VariableWrite.h>
#include <Protocol/CpuIo2.h>
#include <Protocol/Spi.h>
#include <Protocol/IioUds.h>
#include <Library/MemoryAllocationLib.h>

#include <Guid/HobList.h>
#include <Register/PchRegsSpi.h>
#include <Register/PchRegsLpc.h>
#include <PchAccess.h>
#include <Platform.h>




#define EFI_PLATFORM_TYPE_DRIVER_PRIVATE_SIGNATURE  SIGNATURE_32 ('T', 'Y', 'P', 'P')
#define EFI_IIO_UDS_DRIVER_PRIVATE_SIGNATURE  SIGNATURE_32 ('S', 'D', 'U', 'I')


typedef unsigned char BYTE;     //!<  8-bit quantities
typedef unsigned short WORD;    //!< 16-bit quantities
typedef unsigned long DWORD;    //!< 32-bit quantities

typedef enum
{
#ifndef SUCCESS
    SUCCESS = 0x00,             //!< Packet it good! .data[] is valid
#endif
    DEFER = 0x01,               //!< Packet is defered. .data[1] = BufID
    W_EARLY_NACK = 0x02,        //!< Packet mastered on the SMBus by the MCU was NACKed earlier than expected
    NOT_RESP = 0x03,            //!< Packet mastered on the SMBus by the MCU was NACKed during the address byte
    BUFFER_OVERRUN = 0x04,      //!< Too many BYTE s were stuffed into the buffer.
    NO_BUFFER = 0x05,           //!< All the buffers are used
    INVALID_BUF = 0x06,         //!< Command passed a buffer id that was not in range
    BUF_NOT_IN_QUEUE = 0x07,    //!< Command passed a buffer id is not being used.
    ARBITRATION_LOST = 0x08,    //!< While the MCU was mastering a packet on the SMBus it lost arbitration.
    TIMEOUT = 0x0B,             //!< SMBus timed out.
    CHECKSUM_ERR = 0x0C,        //!< Operation encountered a checksum mismatch
    DATA_NACK = 0x0D,           //!< Still don't know what these mean?
    BUS_ERR = 0x0E,             //!< ?
    FAIL = 0x0F,                //!< Generic error
    BUSY = 0x10,                //!< ?
    R_EARLY_NACK = 0x11,        //!< ?
    INVALID_LCD_COL_OFF = 0x12, //!< The cursor on the LCD was set to a column that was out of range.
    INVALID_LCD_ROW_OFF = 0x13, //!< The cursor on the LCD was set to a row that was out of range.
    INVALID_CK410_SEL = 0x14,   //!< ?
    CMD_NOT_SUPPORTED = 0x15,   //!< This command is not supported
    MORE_DATA_AVAILABLE = 0x16, //!< Do the command again to get more data
} STATUS;

typedef struct {
  BYTE byte_count; 
  STATUS status;
  BYTE data[31];
} BUFFER_RSLT;

typedef struct {
  UINTN                               Signature;
  EFI_HANDLE                          Handle;         // Handle for protocol this driver installs on
  EFI_IIO_UDS_PROTOCOL                IioUds;         // Policy protocol this driver installs
} EFI_IIO_UDS_DRIVER_PRIVATE;

#endif
