/*
* Copyright c                  Realtek Semiconductor Corporation, 2009  
* All rights reserved.
* 
* Program : Switch table basic operation driver
* Abstract :
* Author : hyking (hyking_liu@realsil.com.cn)  
*/

#ifndef RTL865X_ASICBASIC_H
#define RTL865X_ASICBASIC_H

#define RTL8651_ASICTABLE_ENTRY_LENGTH (8 * sizeof(uint32))
#if defined(RTL865X_TEST) || defined(RTL865X_MODEL_USER) || defined(RTL865X_MODEL_KERNEL)
#define RTL8651_ASICTABLE_BASE_OF_ALL_TABLES pVirtualSWTable
#else
#define RTL8651_ASICTABLE_BASE_OF_ALL_TABLES REAL_SWTBL_BASE
#endif /* RTL865X_TEST */

enum {
    TYPE_L2_SWITCH_TABLE = 0,
    TYPE_ARP_TABLE,			//1
    TYPE_L3_ROUTING_TABLE,	//2
    TYPE_MULTICAST_TABLE,	//3
    TYPE_NETINTERFACE_TABLE,//4
    TYPE_EXT_INT_IP_TABLE,	//5
    TYPE_VLAN_TABLE,		//6
    TYPE_VLAN1_TABLE, 		//7  
    TYPE_SERVER_PORT_TABLE,	//8
    TYPE_L4_TCP_UDP_TABLE,	//9
    TYPE_L4_ICMP_TABLE,		//10
    TYPE_PPPOE_TABLE,		//11
    TYPE_ACL_RULE_TABLE,	//12
    TYPE_NEXT_HOP_TABLE,	//13
    TYPE_RATE_LIMIT_TABLE,	//14
    TYPE_ALG_TABLE,			//15
#if defined(CONFIG_RTL_8685S_HWNAT)   
	// IPv6 modify
	TYPE_DS_LITE_TABLE,		//16
	TYPE_6RD_TABLE,			//17
	TYPE_IPv6_ROUTING_TABLE,//18
	TYPE_IPv6_NEXTHOP_TABLE,//19
	TYPE_IPV6_NEIGH_TABLE,	//20
	TYPE_IPv6_MULTICAST_TABLE,//21
#endif /* CONFIG_RTL_8685S_HWNAT */
#if defined(CONFIG_RTL_HW_NAPT_4KENTRY)   
	TYPE_L4_EXT_TCP_UDP_TABLE=25,//0xbb190000
#endif
};

/*#define rtl8651_asicTableAccessAddrBase(type) (RTL8651_ASICTABLE_BASE_OF_ALL_TABLES + 0x10000 * (type)) */
#define rtl8651_asicTableAccessAddrBase(type) (RTL8651_ASICTABLE_BASE_OF_ALL_TABLES + ((type)<<16) )


extern int8 RtkHomeGatewayChipName[16];
extern int32 RtkHomeGatewayChipNameID;
extern int32 RtkHomeGatewayChipRevisionID;


int32 _rtl8651_addAsicEntry(uint32 tableType, uint32 eidx, void *entryContent_P);
int32 _rtl8651_forceAddAsicEntry(uint32 tableType, uint32 eidx, void *entryContent_P);
int32 _rtl8651_readAsicEntry(uint32 tableType, uint32 eidx, void *entryContent_P);
//int32 _rtl8651_readAsicEntryStopTLU(uint32 tableType, uint32 eidx, void *entryContent_P); //No need to Stop_Table_Lookup process 
int32 _rtl8651_delAsicEntry(uint32 tableType, uint32 startEidx, uint32 endEidx);

#endif