Commit | Line | Data |
---|---|---|
db82173f M |
1 | /* |
2 | * Texas Instruments 3-Port Ethernet Switch Address Lookup Engine APIs | |
3 | * | |
4 | * Copyright (C) 2012 Texas Instruments | |
5 | * | |
6 | * This program is free software; you can redistribute it and/or | |
7 | * modify it under the terms of the GNU General Public License as | |
8 | * published by the Free Software Foundation version 2. | |
9 | * | |
10 | * This program is distributed "as is" WITHOUT ANY WARRANTY of any | |
11 | * kind, whether express or implied; without even the implied warranty | |
12 | * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | * GNU General Public License for more details. | |
14 | */ | |
15 | #ifndef __TI_CPSW_ALE_H__ | |
16 | #define __TI_CPSW_ALE_H__ | |
17 | ||
18 | struct cpsw_ale_params { | |
19 | struct device *dev; | |
20 | void __iomem *ale_regs; | |
21 | unsigned long ale_ageout; /* in secs */ | |
22 | unsigned long ale_entries; | |
23 | unsigned long ale_ports; | |
24 | }; | |
25 | ||
26 | struct cpsw_ale { | |
27 | struct cpsw_ale_params params; | |
28 | struct timer_list timer; | |
29 | unsigned long ageout; | |
30 | }; | |
31 | ||
32 | enum cpsw_ale_control { | |
33 | /* global */ | |
34 | ALE_ENABLE, | |
35 | ALE_CLEAR, | |
36 | ALE_AGEOUT, | |
37 | ALE_VLAN_NOLEARN, | |
38 | ALE_NO_PORT_VLAN, | |
39 | ALE_OUI_DENY, | |
40 | ALE_BYPASS, | |
41 | ALE_RATE_LIMIT_TX, | |
42 | ALE_VLAN_AWARE, | |
43 | ALE_AUTH_ENABLE, | |
44 | ALE_RATE_LIMIT, | |
45 | /* port controls */ | |
46 | ALE_PORT_STATE, | |
47 | ALE_PORT_DROP_UNTAGGED, | |
48 | ALE_PORT_DROP_UNKNOWN_VLAN, | |
49 | ALE_PORT_NOLEARN, | |
50 | ALE_PORT_UNKNOWN_VLAN_MEMBER, | |
51 | ALE_PORT_UNKNOWN_MCAST_FLOOD, | |
52 | ALE_PORT_UNKNOWN_REG_MCAST_FLOOD, | |
53 | ALE_PORT_UNTAGGED_EGRESS, | |
54 | ALE_PORT_BCAST_LIMIT, | |
55 | ALE_PORT_MCAST_LIMIT, | |
56 | ALE_NUM_CONTROLS, | |
57 | }; | |
58 | ||
59 | enum cpsw_ale_port_state { | |
60 | ALE_PORT_STATE_DISABLE = 0x00, | |
61 | ALE_PORT_STATE_BLOCK = 0x01, | |
62 | ALE_PORT_STATE_LEARN = 0x02, | |
63 | ALE_PORT_STATE_FORWARD = 0x03, | |
64 | }; | |
65 | ||
66 | /* ALE unicast entry flags - passed into cpsw_ale_add_ucast() */ | |
67 | #define ALE_SECURE 1 | |
68 | #define ALE_BLOCKED 2 | |
69 | ||
70 | #define ALE_MCAST_FWD 0 | |
71 | #define ALE_MCAST_BLOCK_LEARN_FWD 1 | |
72 | #define ALE_MCAST_FWD_LEARN 2 | |
73 | #define ALE_MCAST_FWD_2 3 | |
74 | ||
75 | struct cpsw_ale *cpsw_ale_create(struct cpsw_ale_params *params); | |
76 | int cpsw_ale_destroy(struct cpsw_ale *ale); | |
77 | ||
78 | void cpsw_ale_start(struct cpsw_ale *ale); | |
79 | void cpsw_ale_stop(struct cpsw_ale *ale); | |
80 | ||
81 | int cpsw_ale_set_ageout(struct cpsw_ale *ale, int ageout); | |
82 | int cpsw_ale_flush(struct cpsw_ale *ale, int port_mask); | |
83 | int cpsw_ale_add_ucast(struct cpsw_ale *ale, u8 *addr, int port, int flags); | |
84 | int cpsw_ale_del_ucast(struct cpsw_ale *ale, u8 *addr, int port); | |
85 | int cpsw_ale_add_mcast(struct cpsw_ale *ale, u8 *addr, int port_mask, | |
86 | int super, int mcast_state); | |
87 | int cpsw_ale_del_mcast(struct cpsw_ale *ale, u8 *addr, int port_mask); | |
88 | ||
89 | int cpsw_ale_control_get(struct cpsw_ale *ale, int port, int control); | |
90 | int cpsw_ale_control_set(struct cpsw_ale *ale, int port, | |
91 | int control, int value); | |
92 | ||
93 | #endif |