/** @file
*
*  Copyright (c) 2015, Hisilicon Limited. All rights reserved.
*  Copyright (c) 2015, Linaro Limited. All rights reserved.
*
*  This program and the accompanying materials
*  are licensed and made available under the terms and conditions of the BSD License
*  which accompanies this distribution.  The full text of the license may be found at
*  http://opensource.org/licenses/bsd-license.php
*
*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
*
**/

#ifndef _PLATFORM_SYS_CTRL_LIB_H_
#define _PLATFORM_SYS_CTRL_LIB_H_

#define PACKAGE_16CORE      0
#define PACKAGE_32CORE      1
#define PACKAGE_RESERVED    2
#define PACKAGE_TYPE_NUM    3

UINT32 PlatformGetPackageType (VOID);

VOID DisplayCpuInfo (VOID);
UINT32 CheckChipIsEc(VOID);

UINTN PlatformGetPll (UINT32 NodeId, UINTN Pll);

#define DJTAG_READ_INVALID_VALUE 0xFFFFFFFF
#define DJTAG_CHAIN_ID_AA        1
#define DJTAG_CHAIN_ID_LLC       4


#define SC_DJTAG_MSTR_EN_OFFSET             0x6800
#define SC_DJTAG_MSTR_START_EN_OFFSET       0x6804
#define SC_DJTAG_SEC_ACC_EN_OFFSET          0x6808
#define SC_DJTAG_DEBUG_MODULE_SEL_OFFSET    0x680C
#define SC_DJTAG_MSTR_WR_OFFSET             0x6810
#define SC_DJTAG_CHAIN_UNIT_CFG_EN_OFFSET   0x6814
#define SC_DJTAG_MSTR_ADDR_OFFSET           0x6818
#define SC_DJTAG_MSTR_DATA_OFFSET           0x681C
#define SC_DJTAG_TMOUT_OFFSET               0x6820
#define SC_TDRE_OP_ADDR_OFFSET              0x6824
#define SC_TDRE_WDATA_OFFSET                0x6828
#define SC_TDRE_REPAIR_EN_OFFSET            0x682C
#define SC_DJTAG_RD_DATA0_OFFSET            0xE800
#define SC_TDRE_RDATA0_OFFSET               0xE830


UINTN PlatformGetI2cBase(UINT32 Socket,UINT8 Port);

VOID PlatformAddressMapCleanUp (VOID);
VOID PlatformDisableDdrWindow (VOID);

VOID PlatformEnableArchTimer (VOID);

EFI_STATUS
DawFindFreeWindow (UINTN Socket, UINTN *DawIndex);

VOID DawSetWindow (UINTN Socket, UINTN WindowIndex, UINT32 Value);

VOID DJTAG_TDRE_WRITE(UINT32 Offset, UINT32 Value, UINT32 ChainID, UINT32 NodeId, BOOLEAN Repair);

UINT32 DJTAG_TDRE_READ(UINT32 Offset, UINT32 ChainID, UINT32 NodeId, BOOLEAN Repair);

VOID RemoveRoceReset(VOID);

UINTN PlatformGetDdrChannel (VOID);

VOID ITSCONFIG (VOID);

VOID MN_CONFIG (VOID);

VOID SmmuConfigForOS (VOID);
VOID SmmuConfigForBios (VOID);

VOID StartupAp (VOID);

VOID LlcCleanInvalidate (VOID);

UINTN PlatformGetCpuFreq (UINT8 Socket);
VOID ClearInterruptStatus(VOID);

UINTN PlatformGetCoreCount (VOID);
VOID DAWConfigEn(UINT32 socket);

VOID DResetUsb ();
UINT32 PlatformGetEhciBase ();
UINT32 PlatformGetOhciBase ();
VOID PlatformPllInit();
VOID PlatformDeviceDReset();
VOID PlatformGicdInit();
VOID PlatformLpcInit();

#endif
