/** @file
  Dci policy

  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
  SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _DCI_CONFIG_H_
#define _DCI_CONFIG_H_

#define DCI_PREMEM_CONFIG_REVISION 2
extern EFI_GUID gDciPreMemConfigGuid;

#pragma pack (push,1)

typedef enum {
  DciDbcDisabled       = 0x0,
  DciDbcUsb2           = 0x1,
  DciDbcUsb3           = 0x2,
  DciDbcBoth           = 0x3,
  DciDbcNoChange       = 0x4,
  DciDbcMax
} DCI_DBC_MODE;

typedef enum {
  Usb3TcDbgDisabled    = 0x0,
  Usb3TcDbgEnabled     = 0x1,
  Usb3TcDbgNoChange    = 0x2,
  Usb3TcDbgMax
} DCI_USB3_TYPE_C_DEBUG_MODE;

/**
  The PCH_DCI_PREMEM_CONFIG block describes policies related to Direct Connection Interface (DCI)

  <b>Revision 1</b>:
  - Initial version.
  <b>Revision 2</b>:
  - Added DciModphyPg
  - change to use data in byte unit rather than bit-field
**/
typedef struct {
  CONFIG_BLOCK_HEADER   Header;         ///< Config Block Header
  /**
    DCI enable.
    Determine if to enable DCI debug from host.
    <b>0:Disabled</b>; 1:Enabled
  **/
  UINT8    DciEn;
  /**
    USB DbC enable mode.
    Disabled: Clear both USB2/3DBCEN; USB2: Set USB2DBCEN; USB3: Set USB3DBCEN; Both: Set both USB2/3DBCEN; No Change: Comply with HW value
    Refer to definition of DCI_USB_DBC_MODE for supported settings.
    0:Disabled; 1:USB2; 2:USB3; 3:Both; <b>4:No Change</b>
  **/
  UINT8    DciDbcMode;
  /**
    Enable Modphy power gate when DCI is enable. It must be disabled for 4-wire DCI OOB. Set default to HW default : Disabled
    <b>0:Disabled</b>; 1:Enabled
  **/
  UINT8    DciModphyPg;
  /**
    USB3 Type-C UFP2DFP kenel / platform debug support. No change will do nothing to UFP2DFP configuration.
    When enabled, USB3 Type C UFP (upstream-facing port) may switch to DFP (downstream-facing port) for first connection.
    It must be enabled for USB3 kernel(kernel mode debug) and platform debug(DFx, DMA, Trace) over UFP Type-C receptacle.
    Refer to definition of DCI_USB_TYPE_C_DEBUG_MODE for supported settings.
    0:Disabled; 1:Enabled; <b>2:No Change</b>
  **/
  UINT8    DciUsb3TypecUfpDbg;
} PCH_DCI_PREMEM_CONFIG;

#pragma pack (pop)

#endif // _DCI_CONFIG_H_
