#ifndef _RTL8370_ASICDRV_PORTSECURITY_H_
#define _RTL8370_ASICDRV_PORTSECURITY_H_

#include <rtl8370_asicdrv.h>
#include <rtl8370_asicdrv_unknownMulticast.h>

/****************************************************************/
/* Type Definition                                              */
/****************************************************************/

#define	RTL8370_MAC7		7
#define    RTL8370_EXTNO       2


/* enum for port current link speed */
enum SPEEDMODE
{
	SPD_10M = 0,
	SPD_100M,
	SPD_1000M
};

/* enum for mac link mode */
enum LINKMODE
{
	MAC_NORMAL = 0,
	MAC_FORCE,
};

/* enum for port current link duplex mode */
enum DUPLEXMODE
{
	HALF_DUPLEX = 0,
	FULL_DUPLEX
};

/* enum for port current MST mode */
enum MSTMODE
{
	SLAVE_MODE= 0,
	MASTER_MODE
};

enum EXTMODE
{
    EXT_DISABLE = 0,
    EXT_RGMII,
    EXT_MII_MAC,
    EXT_MII_PHY, 
    EXT_TMII_MAC,
    EXT_TMII_PHY, 
    EXT_GMII,
    EXT_RGMII_33V
};

typedef struct  rtl8370_port_ability_s{
#ifdef _LITTLE_ENDIAN
    uint16 speed:2;
    uint16 duplex:1;
    uint16 reserve1:1;
    uint16 link:1;
    uint16 rxpause:1;
    uint16 txpause:1;
    uint16 nway:1;	
    uint16 mstmode:1;
    uint16 mstfault:1;	
    uint16 lpi100:1;
    uint16 lpi1000:1;
    uint16 forcemode:1;
    uint16 reserve3:3;
#else
    uint16 reserve3:3;
    uint16 forcemode:1;
    uint16 lpi1000:1;
    uint16 lpi100:1;
    uint16 mstfault:1; 
    uint16 mstmode:1;
    uint16 nway:1;	
    uint16 txpause:1;
    uint16 rxpause:1;
    uint16 link:1;
    uint16 reserve1:1;	
    uint16 duplex:1;	
    uint16 speed:2;
	
#endif
}rtl8370_port_ability_t;

typedef struct  rtl8370_port_status_s{
#ifdef _LITTLE_ENDIAN
    uint16 speed:2;
    uint16 duplex:1;
    uint16 reserve1:1;
    uint16 link:1;
    uint16 rxpause:1;
    uint16 txpause:1;
    uint16 nway:1;	
    uint16 mstmode:1;
    uint16 mstfault:1;	
    uint16 lpi100:1;
    uint16 lpi1000:1;
    uint16 reserve2:4;
#else
    uint16 reserve2:4;
    uint16 lpi1000:1;
    uint16 lpi100:1;
    uint16 mstfault:1; 
    uint16 mstmode:1;
    uint16 nway:1;	
    uint16 txpause:1;
    uint16 rxpause:1;
    uint16 link:1;
    uint16 reserve1:1;	
    uint16 duplex:1;	
    uint16 speed:2;

#endif
}rtl8370_port_status_t;


/****************************************************************/
/* Driver Proto Type Definition                                 */
/****************************************************************/
extern ret_t rtl8370_setAsicPortForceFlush(uint32 pmsk);
extern ret_t rtl8370_getAsicPortForceFlush(uint32 *pmsk);
extern ret_t rtl8370_setAsicPortDisableAging(uint32 port, uint32 disable);
extern ret_t rtl8370_getAsicPortDisableAging(uint32 port, uint32 *disable);
extern ret_t rtl8370_setAsicPortUnknownDaBehavior(uint32 behavior);
extern ret_t rtl8370_getAsicPortUnknownDaBehavior(uint32 *behavior);
extern ret_t rtl8370_setAsicPortUnknownSaBehavior(uint32 behavior);
extern ret_t rtl8370_getAsicPortUnknownSaBehavior(uint32 *behavior);
extern ret_t rtl8370_setAsicPortUnmatchedSaBehavior(uint32 behavior);
extern ret_t rtl8370_getAsicPortUnmatchedSaBehavior(uint32 *behavior);
extern ret_t rtl8370_setAsicPortUnknownDaFloodingPortmask(uint32 pmsk);
extern ret_t rtl8370_getAsicPortUnknownDaFloodingPortmask(uint32 *pmsk);
extern ret_t rtl8370_setAsicPortUnknownMulticastFloodingPortmask(uint32 pmsk);
extern ret_t rtl8370_getAsicPortUnknownMulticastFloodingPortmask(uint32 *pmsk);
extern ret_t rtl8370_setAsicPortBcastFloodingPortmask(uint32 pmsk);
extern ret_t rtl8370_getAsicPortBcastFloodingPortmask(uint32 *pmsk);
extern ret_t rtl8370_setAsicPortBlockSpa(uint32 port, uint32 block);
extern ret_t rtl8370_getAsicPortBlockSpa(uint32 port, uint32 *block);
extern ret_t rtl8370_setAsicPortForceLink(uint32 port, rtl8370_port_ability_t *portability);
extern ret_t rtl8370_getAsicPortForceLink(uint32 port, rtl8370_port_ability_t *portability);
extern ret_t rtl8370_getAsicPortStatus(uint32 port, rtl8370_port_status_t *portstatus);
extern ret_t rtl8370_setAsicPortForceLinkExt(uint32 id, rtl8370_port_ability_t *portability);
extern ret_t rtl8370_getAsicPortForceLinkExt(uint32 id, rtl8370_port_ability_t *portability);
extern ret_t rtl8370_setAsicPortExtMode(uint32 id, uint32 mode);
extern ret_t rtl8370_getAsicPortExtMode(uint32 id, uint32 *mode);
extern ret_t rtl8370_setAsicPortEnableAll(uint32 enable);
extern ret_t rtl8370_getAsicPortEnableAll(uint32 *enable);

#endif /*_RTL8370_ASICDRV_PORTSECURITY_H_*/