#ifndef RTK_RG_MAPPING_API_H
#define RTK_RG_MAPPING_API_H

#if defined(CONFIG_APOLLO)
#include <rtk/svlan.h>
#endif

/* for set age of lut entry to 1 */
#if defined(CONFIG_RTL9600_SERIES)		
#else	//support lut traffic bit
int32 _rtk_rg_l2_trafficBit_reset(rtk_l2_ucastAddr_t *pL2Addr);
#endif

#if defined(CONFIG_RG_FLOW_BASED_PLATFORM)
rtk_rg_err_code_t RTK_RG_ASIC_GLOBALSTATE_SET(rtk_rg_asic_globalStateType_t stateType, rtk_enable_t state);
rtk_rg_err_code_t RTK_RG_ASIC_PREHASHPTN_SET(rtk_rg_asic_preHashPtn_t ptnType, uint32 code);
rtk_rg_err_code_t RTK_RG_ASIC_FLOWPATH_DEL(uint32 idx);
rtk_rg_err_code_t RTK_RG_ASIC_FLOWPATH1_ADD(uint32 *idx, rtk_rg_asic_path1_entry_t *pP1Data, uint16 igrSVID, uint16 igrCVID);
rtk_rg_err_code_t RTK_RG_ASIC_FLOWPATH1_SET(uint32 idx, rtk_rg_asic_path1_entry_t *pP1Data);
rtk_rg_err_code_t RTK_RG_ASIC_FLOWPATH2_ADD(uint32 *idx, rtk_rg_asic_path2_entry_t *pP2Data, uint16 igrSVID, uint16 igrCVID);
rtk_rg_err_code_t RTK_RG_ASIC_FLOWPATH2_SET(uint32 idx, rtk_rg_asic_path2_entry_t *pP2Data);
rtk_rg_err_code_t RTK_RG_ASIC_FLOWPATH3DAHASH_ADD(uint32 * idx, rtk_rg_asic_path3_entry_t * pP3Data, uint16 igrSVID, uint16 igrCVID, uint16 lutDaIdx);
rtk_rg_err_code_t RTK_RG_ASIC_FLOWPATH3_ADD(uint32 *idx, rtk_rg_asic_path3_entry_t *pP3Data, uint16 igrSVID, uint16 igrCVID);
rtk_rg_err_code_t RTK_RG_ASIC_FLOWPATH3_SET(uint32 idx, rtk_rg_asic_path3_entry_t *pP3Data);
rtk_rg_err_code_t RTK_RG_ASIC_FLOWPATH4DAHASH_ADD(uint32 * idx, rtk_rg_asic_path4_entry_t * pP4Data, uint16 igrSVID, uint16 igrCVID, uint16 lutDaIdx);
rtk_rg_err_code_t RTK_RG_ASIC_FLOWPATH4_ADD(uint32 *idx, rtk_rg_asic_path4_entry_t *pP4Data, uint16 igrSVID, uint16 igrCVID);
rtk_rg_err_code_t RTK_RG_ASIC_FLOWPATH4_SET(uint32 idx, rtk_rg_asic_path4_entry_t *pP4Data);
rtk_rg_err_code_t RTK_RG_ASIC_FLOWPATH5_ADD(uint32 *idx, rtk_rg_asic_path5_entry_t *pP5Data, uint16 igrSVID, uint16 igrCVID);
rtk_rg_err_code_t RTK_RG_ASIC_FLOWPATH5_SET(uint32 idx, rtk_rg_asic_path5_entry_t *pP5Data);
rtk_rg_err_code_t RTK_RG_ASIC_FLOWPATH6_ADD(uint32 *idx, rtk_rg_asic_path6_entry_t *pP6Data, uint16 igrSVID, uint16 igrCVID);
rtk_rg_err_code_t RTK_RG_ASIC_FLOWPATH6_SET(uint32 idx, rtk_rg_asic_path6_entry_t *pP6Data);
rtk_rg_err_code_t RTK_RG_ASIC_EXTPORTMASKTABLE_ADD(uint32 extPMask, int32 *extPMaskIdx);
rtk_rg_err_code_t RTK_RG_ASIC_EXTPORTMASKTABLE_DEL(int32 extPMaskIdx);
rtk_rg_err_code_t RTK_RG_ASIC_INDIRECTMACTABLE_ADD(int32 l2Idx, int32 *indMacIdx);
rtk_rg_err_code_t RTK_RG_ASIC_INDIRECTMACTABLE_DEL(int32 indMacIdx);
#endif

int32 RTK_L2_ADDR_ADD(rtk_l2_ucastAddr_t *pL2Addr);
int32 RTK_L2_ADDR_DEL(rtk_l2_ucastAddr_t *pL2Addr);
int32 RTK_L2_IPMCASTADDR_ADD(rtk_l2_ipMcastAddr_t *pIpmcastAddr);
int32 RTK_L2_IPMCASTADDR_DEL(rtk_l2_ipMcastAddr_t *pIpmcastAddr);
int32 RTK_L2_MCASTADDR_ADD(rtk_l2_mcastAddr_t *pMcastAddr);
int32 RTK_L2_MCASTADDR_DEL(rtk_l2_mcastAddr_t *pMcastAddr);
int32 RTK_L2_IPMCSIPFILTER_ADD(ipaddr_t filterIp,int32 *idx);
int32 RTK_L2_IPMCSIPFILTER_DEL(ipaddr_t filterIp,int32 *delIdx);
int32 RTK_L2_IPMCGROUP_ADD(ipaddr_t gip, rtk_portmask_t *pPortmask,int32 *idx);
int32 RTK_L2_IPMCGROUP_DEL(ipaddr_t gip,int32 *delIdx);
int32 RTK_L2_PORTLIMITLEARNINGCNT_SET(rtk_port_t port, uint32 macCnt);
int32 RTK_L2_PORTLIMITLEARNINGCNTACTION_SET(rtk_port_t port, rtk_l2_limitLearnCntAction_t learningAction);
int32 RTK_L2_PORTLOOKUPMISSACTION_SET(rtk_port_t port, rtk_l2_lookupMissType_t type, rtk_action_t action);
int32 RTK_L2_SRCPORTEGRFILTERMASK_SET(rtk_portmask_t * pFilter_portmask);
int32 RTK_L34_NETIFTABLE_SET(uint32 idx, rtk_l34_netif_entry_t *entry);
int32 RTK_L34_ROUTINGTABLE_SET(uint32 idx, rtk_l34_routing_entry_t *entry);
int32 RTK_L34_EXTINTIPTABLE_SET(uint32 idx, rtk_l34_ext_intip_entry_t *entry);
int32 RTK_L34_NEXTHOPTABLE_SET(uint32 idx, rtk_l34_nexthop_entry_t *entry);
int32 RTK_L34_PPPOETABLE_SET(uint32 idx, rtk_l34_pppoe_entry_t *entry);
int32 RTK_L34_ARPTABLE_SET(uint32 idx, rtk_l34_arp_entry_t *entry);
int32 RTK_L34_NAPTINBOUNDTABLE_SET(int8 forced,uint32 idx, rtk_l34_naptInbound_entry_t *entry);
int32 RTK_L34_NAPTOUTBOUNDTABLE_SET(int8 forced,uint32 idx, rtk_l34_naptOutbound_entry_t *entry);
int32 RTK_L34_WANTYPETABLE_SET(uint32 idx,rtk_wanType_entry_t * entry);
int32 RTK_L34_BINDINGACTION_SET(rtk_l34_bindType_t bindType,rtk_l34_bindAct_t bindAction);
#if !defined(CONFIG_RG_FLOW_BASED_PLATFORM)
int32 RTK_L34_GLOBALSTATE_SET(rtk_l34_globalStateType_t stateType,rtk_enable_t state);
#endif
int32 RTK_L34_BINDINGTABLE_SET(uint32 idx,rtk_binding_entry_t * bindEntry);
int32 RTK_L34_IPV6ROUTINGTABLE_SET(uint32 idx,rtk_ipv6Routing_entry_t * ipv6RoutEntry);
int32 RTK_L34_IPV6NEIGHBORTABLE_SET(uint32 idx,rtk_ipv6Neighbor_entry_t * ipv6NeighborEntry);
#if defined(CONFIG_RTL9602C_SERIES)
int32 RTK_L34_DSLITEINFTABLE_SET(rtk_l34_dsliteInf_entry_t *pDsliteInfEntry);
#endif
int32 RTK_L34_DSLITEMULTICAST_SET(rtk_l34_dsliteMc_entry_t *pDsliteMcEntry);
int32 RTK_CLASSIFY_CFSEL_SET(rtk_port_t port, rtk_classify_cf_sel_t cfSel);
int32 RTK_VLAN_CREATE(rtk_vlan_t vid);
int32 RTK_VLAN_PORT_SET(rtk_vlan_t vid,rtk_portmask_t * pMember_portmask,rtk_portmask_t * pUntag_portmask);
int32 RTK_VLAN_EXTPORT_SET(rtk_vlan_t vid,rtk_portmask_t * pExt_portmask);
int32 RTK_VLAN_FID_SET(rtk_vlan_t vid,rtk_fid_t fid);
int32 RTK_VLAN_FIDMODE_SET(rtk_vlan_t vid,rtk_fidMode_t mode);
int32 RTK_VLAN_PRIORITY_SET(rtk_vlan_t vid,rtk_pri_t priority);
int32 RTK_VLAN_PRIORITYENABLE_SET(rtk_vlan_t vid,rtk_enable_t enable);
int32 RTK_VLAN_DESTROY(rtk_vlan_t vid);
int32 RTK_VLAN_PORTPVID_SET(rtk_port_t port,uint32 pvid);
int32 RTK_VLAN_EXTPORTPVID_SET(uint32 extPort,uint32 pvid);
int32 RTK_VLAN_PROTOGROUP_SET(uint32 protoGroupIdx,rtk_vlan_protoGroup_t *pProtoGroup);
int32 RTK_VLAN_PORTPROTOVLAN_SET(rtk_port_t port,uint32 protoGroupIdx,rtk_vlan_protoVlanCfg_t * pVlanCfg);
int32 RTK_VLAN_PORTIGRFILTERENABLE_SET(rtk_port_t port, rtk_enable_t igr_filter);
int32 RTK_QOS_1PPRIREMAPGROUP_SET(uint32 grpIdx, rtk_pri_t dot1pPri, rtk_pri_t intPri, uint32 dp);;
int32 RTK_QOS_DSCPPRIREMAPDROUP_SET(uint32 grpIdx, uint32 dscp, rtk_pri_t intPri, uint32 dp);
int32 RTK_QOS_PORTPRI_SET(rtk_port_t port, rtk_pri_t intPri);
int32 RTK_QOS_PRISELGROUP_SET(uint32 grpIdx, rtk_qos_priSelWeight_t *pWeightOfPriSel);
int32 RTK_QOS_DSCPREMARKENABLE_SET(rtk_port_t port, rtk_enable_t enable);
int32 RTK_QOS_PORTDSCPREMARKSRCSEL_SET(rtk_port_t port, rtk_qos_dscpRmkSrc_t type);
int32 RTK_QOS_PORTPRIMAP_SET(rtk_port_t port, uint32 group);
/*avoid L2 CF directly call rtk classify api & using wrong index. it should call rtk_rg_classify_cfgEntry_add()*/;
int32 RTK_CLASSIFY_CFGENTRY_ADD(rtk_classify_cfg_t *pClassifyCfg);
/*avoid L2 CF directly call rtk classify api & using wrong index. it should call rtk_rg_classify_cfgEntry_add()*/;
int32 RTK_SVLAN_TPIDENTRY_SET(uint32 svlan_index, uint32 svlan_tag_id);
int32 RTK_SVLAN_TPIDENABLE_SET(uint32 svlanIndex, rtk_enable_t enable);
int32 RTK_SVLAN_SERVICEPORT_SET(rtk_port_t port, rtk_enable_t enable);
int32 RTK_SVLAN_SERVICEPORT_GET(rtk_port_t port, rtk_enable_t *pEnable);
int32 RTK_SVLAN_DMACVIDSELSTATE_SET(rtk_port_t port, rtk_enable_t enable);
int32 RTK_SVLAN_MEMBERPORT_SET(rtk_vlan_t svid, rtk_portmask_t * pSvlanPortmask, rtk_portmask_t * pSvlanUntagPortmask);
int32 RTK_ACL_IGRSTATE_SET(rtk_port_t port, rtk_enable_t state);
int32 RTK_ACL_IGRUNMATCHACTION_SET(rtk_port_t port, rtk_filter_unmatch_action_type_t action);
int32 RTK_TRAP_PORTIGMPMLDCTRLPKTACTION_SET(rtk_port_t port, rtk_trap_igmpMld_type_t igmpMldType, rtk_action_t action);
int32 RTK_PORT_ISOLATIONIPMCLEAKY_SET(rtk_port_t port, rtk_enable_t enable);
int32 RTK_PORT_ISOLATIONENTRY_SET(rtk_port_isoConfig_t mode, rtk_port_t port, rtk_portmask_t * pPortmask, rtk_portmask_t * pExtPortmask);
int32 RTK_PORT_ISOLATIONENTRYEXT_SET(rtk_port_isoConfig_t mode, rtk_port_t port, rtk_portmask_t *pPortmask, rtk_portmask_t *pExtPortmask);
int32 RTK_PORT_MACFORCEABILITY_GET(rtk_port_t port, rtk_port_macAbility_t * pMacAbility);
int32 RTK_PORT_MACFORCEABILITY_SET(rtk_port_t port,rtk_port_macAbility_t macAbility);
int32 RTK_PORT_MACFORCEABILITYSTATE_SET(rtk_port_t port,rtk_enable_t state);
int32 RTK_SWITCH_MAXPKTLENBYPORT_SET(rtk_port_t port, int pktlen);



#define rtk_l2_addr_add PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_l2_addr_del PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_l2_ipMcastAddr_add PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_l2_ipMcastAddr_del PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_l2_mcastAddr_add PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_l2_mcastAddr_del PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_l2_portLimitLearningCnt_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_l2_ipmcgroup_add PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_l2_ipmcgroup_del PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_l2_portLimitLearningCnt_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_l2_portLimitLearningCntAction_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_l2_portLookupMissAction_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_l2_srcPortEgrFilterMask_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_l34_netifTable_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_l34_routingTable_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_l34_extIntIPTable_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_l34_nexthopTable_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_l34_pppoeTable_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_l34_arpTable_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_l34_naptInboundTable_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_l34_naptOutboundTable_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_l34_wanTypeTable_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_l34_bindingAction_set PLEASE_USE_RTK_RG_APOLLO_API()
#if !defined(CONFIG_RG_FLOW_BASED_PLATFORM)
#define rtk_l34_globalState_set PLEASE_USE_RTK_RG_APOLLO_API()
#endif
#define rtk_l34_bindingTable_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_l34_ipv6RoutingTable_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_l34_ipv6NeighborTable_set PLEASE_USE_RTK_RG_APOLLO_API()
#if defined(CONFIG_RTL9602C_SERIES)
#define rtk_l34_dsliteInfTable_set PLEASE_USE_RTK_RG_APOLLO_API()
#endif
#define rtk_classify_cfSel_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_vlan_create PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_vlan_port_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_vlan_extport_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_vlan_fid_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_vlan_fidMode_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_vlan_priority_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_vlan_priorityEnable_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_vlan_destroy PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_vlan_portPvid_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_vlan_extPortPvid_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_vlan_protoGroup_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_vlan_portProtoVlan_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_vlan_portIgrFilterEnable_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_qos_1pPriRemapGroup_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_qos_dscpPriRemapGroup_set  PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_qos_portPri_set  PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_qos_priSelGroup_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_qos_dscpRemarkEnable_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_qos_portDscpRemarkSrcSel_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_qos_portPriMap_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_classify_cfgEntry_add PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_svlan_tpidEntry_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_svlan_serviceport_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_svlan_serviceport_get PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_svlan_dmacVidSelState_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_svlan_memberPort_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_acl_igrState_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_acl_igrUnmatchAction_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_trap_portIgmpMldCtrlPktAction_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_port_isolationIpmcLeaky_set	PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_port_isolationEntry_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_port_isolationEntryExt_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_port_macForceAbility_get PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_port_macForceAbility_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_port_macForceAbilityState_set PLEASE_USE_RTK_RG_APOLLO_API()
#if defined(CONFIG_RG_FLOW_BASED_PLATFORM)
#define rtk_rg_asic_globalState_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_rg_asic_preHashPtn_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_rg_asic_flowPath_del PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_rg_asic_flowPath1_add PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_rg_asic_flowPath1_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_rg_asic_flowPath2_add PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_rg_asic_flowPath2_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_rg_asic_flowPath3DAHash_add PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_rg_asic_flowPath3_add PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_rg_asic_flowPath3_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_rg_asic_flowPath4DAHash_add PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_rg_asic_flowPath4_add PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_rg_asic_flowPath4_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_rg_asic_flowPath5_add PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_rg_asic_flowPath5_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_rg_asic_flowPath6_add PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_rg_asic_flowPath6_set PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_rg_asic_extPortMaskTable_add PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_rg_asic_extPortMaskTable_del PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_rg_asic_indirectMacTable_add PLEASE_USE_RTK_RG_APOLLO_API()
#define rtk_rg_asic_indirectMacTable_del PLEASE_USE_RTK_RG_APOLLO_API()
#endif

#endif