
#ifndef DRV_VRR_H
#define DRV_VRR_H

typedef enum
{
    E_VRR_FSC = 0,
    E_VRR_PSC,
    E_VRR_GFX,
    E_VRR_REF,
    E_VRR_ALL
}E_VRR_MODULE_TYPE;

typedef enum
{
    E_VRR_SYNC_MODE_NORMAL = 0,
    E_VRR_SYNC_MODE_FREERUN,
    E_VRR_SYNC_MODE_DIRECT,
    E_VRR_SYNC_MODE_NA
}E_VRR_SYNC_MODE_TYPE;

typedef enum
{
    E_VRR_LL_MODE_OFF = 0,
    E_VRR_LL_MODE_4k120_60, //4k120 pnl with base frame rate 60.
    E_VRR_LL_MODE_4k120_120,
    E_VRR_LL_MODE_4k60_60,
    E_VRR_LL_MODE_4k60_120,//BE model 4k1k120 output
    E_VRR_LL_MODE_NA
}E_VRR_LL_MODE_TYPE; // low latency 

// Main Flags
#define VRR_FLG_SCPIP_MODCHG  (0x1L<<0)
#define VRR_FLG_PSC_MODCHG    (0x1L<<1)
#define VRR_FLG_MLOOP_MODCHG  (0x1L<<2)

BOOL bIsSupportVRRMode(VOID);
BOOL bIsSupportCNMVRR(VOID);
BOOL bIsSupportCinemaVRR(VOID);
BOOL bIsSupportFVA(VOID);
BOOL bIsSupportALLM(VOID);

UINT16 u2GetVRRMdelta(VOID);

UINT8 u1GetVRRMaxFR(VOID);

UINT8 u1GetVRRMinFR(VOID);

BOOL bIsSupportQMS(VOID);

BOOL bVRRGetOnOff(E_VRR_MODULE_TYPE eModule);

VOID vVRRSetOnOff(E_VRR_MODULE_TYPE eModule, BOOL bOnOff);

VOID vVRRProc(VOID);

VOID vVRRInit(VOID);

VOID vVRRStatusQuery(VOID);

VOID vVRRSetDoubleFROnOff(E_VRR_MODULE_TYPE eType,BOOL bOnOff);

VOID vVRRSetSyncMode(E_VRR_SYNC_MODE_TYPE eMode);

E_VRR_SYNC_MODE_TYPE eVRRGetSyncMode(VOID);

VOID vVRRModeChg(VOID);

UINT32 u4VRRGetRealInFR(VOID);

UINT32 u4VRRGetRealOutFR(VOID);

VOID vVRRSetDbgSta(BOOL bOnOff, UINT8 u1Type, BOOL bProtOnOff);

VOID vVRRMainProc(VOID);

VOID vVRRStartProc(VOID);

VOID vVRREndProc(void);

BOOL fgIsVRRModChg(UINT32 u4Type);
VOID vVRRModChg(UINT32 u4Type);
VOID vVRRModChgDone(UINT32 u4Type);

UINT8 u1VRRLowLatencyModeType(VOID);

VOID vVRRSuspend(void);

VOID vVRRResume(void);

UINT16 u2VrrVideoGetVTotal(void);

#endif

