2012-03-18 20:17:53 +00:00
/*
* Texas Instruments 3 - Port Ethernet Switch Address Lookup Engine APIs
*
* Copyright ( C ) 2012 Texas Instruments
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation version 2.
*
* This program is distributed " as is " WITHOUT ANY WARRANTY of any
* kind , whether express or implied ; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*/
# ifndef __TI_CPSW_ALE_H__
# define __TI_CPSW_ALE_H__
struct cpsw_ale_params {
struct device * dev ;
void __iomem * ale_regs ;
unsigned long ale_ageout ; /* in secs */
unsigned long ale_entries ;
unsigned long ale_ports ;
} ;
struct cpsw_ale {
struct cpsw_ale_params params ;
struct timer_list timer ;
unsigned long ageout ;
} ;
enum cpsw_ale_control {
/* global */
ALE_ENABLE ,
ALE_CLEAR ,
ALE_AGEOUT ,
ALE_VLAN_NOLEARN ,
ALE_NO_PORT_VLAN ,
ALE_OUI_DENY ,
ALE_BYPASS ,
ALE_RATE_LIMIT_TX ,
ALE_VLAN_AWARE ,
ALE_AUTH_ENABLE ,
ALE_RATE_LIMIT ,
/* port controls */
ALE_PORT_STATE ,
ALE_PORT_DROP_UNTAGGED ,
ALE_PORT_DROP_UNKNOWN_VLAN ,
ALE_PORT_NOLEARN ,
ALE_PORT_UNKNOWN_VLAN_MEMBER ,
ALE_PORT_UNKNOWN_MCAST_FLOOD ,
ALE_PORT_UNKNOWN_REG_MCAST_FLOOD ,
ALE_PORT_UNTAGGED_EGRESS ,
ALE_PORT_BCAST_LIMIT ,
ALE_PORT_MCAST_LIMIT ,
ALE_NUM_CONTROLS ,
} ;
enum cpsw_ale_port_state {
ALE_PORT_STATE_DISABLE = 0x00 ,
ALE_PORT_STATE_BLOCK = 0x01 ,
ALE_PORT_STATE_LEARN = 0x02 ,
ALE_PORT_STATE_FORWARD = 0x03 ,
} ;
/* ALE unicast entry flags - passed into cpsw_ale_add_ucast() */
2013-02-05 08:26:47 +00:00
# define ALE_SECURE BIT(0)
# define ALE_BLOCKED BIT(1)
# define ALE_SUPER BIT(2)
# define ALE_VLAN BIT(3)
2012-03-18 20:17:53 +00:00
# define ALE_MCAST_FWD 0
# define ALE_MCAST_BLOCK_LEARN_FWD 1
# define ALE_MCAST_FWD_LEARN 2
# define ALE_MCAST_FWD_2 3
struct cpsw_ale * cpsw_ale_create ( struct cpsw_ale_params * params ) ;
int cpsw_ale_destroy ( struct cpsw_ale * ale ) ;
void cpsw_ale_start ( struct cpsw_ale * ale ) ;
void cpsw_ale_stop ( struct cpsw_ale * ale ) ;
int cpsw_ale_set_ageout ( struct cpsw_ale * ale , int ageout ) ;
int cpsw_ale_flush ( struct cpsw_ale * ale , int port_mask ) ;
2012-10-29 08:45:11 +00:00
int cpsw_ale_flush_multicast ( struct cpsw_ale * ale , int port_mask ) ;
2013-02-05 08:26:47 +00:00
int cpsw_ale_add_ucast ( struct cpsw_ale * ale , u8 * addr , int port ,
int flags , u16 vid ) ;
int cpsw_ale_del_ucast ( struct cpsw_ale * ale , u8 * addr , int port ,
int flags , u16 vid ) ;
2012-03-18 20:17:53 +00:00
int cpsw_ale_add_mcast ( struct cpsw_ale * ale , u8 * addr , int port_mask ,
2013-02-05 08:26:47 +00:00
int flags , u16 vid , int mcast_state ) ;
int cpsw_ale_del_mcast ( struct cpsw_ale * ale , u8 * addr , int port_mask ,
int flags , u16 vid ) ;
int cpsw_ale_add_vlan ( struct cpsw_ale * ale , u16 vid , int port , int untag ,
int reg_mcast , int unreg_mcast ) ;
int cpsw_ale_del_vlan ( struct cpsw_ale * ale , u16 vid , int port ) ;
2012-03-18 20:17:53 +00:00
int cpsw_ale_control_get ( struct cpsw_ale * ale , int port , int control ) ;
int cpsw_ale_control_set ( struct cpsw_ale * ale , int port ,
int control , int value ) ;
# endif