|
@@ -13,6 +13,7 @@
|
|
|
* GNU General Public License for more details.
|
|
|
*/
|
|
|
#include <linux/kernel.h>
|
|
|
+#include <linux/module.h>
|
|
|
#include <linux/platform_device.h>
|
|
|
#include <linux/seq_file.h>
|
|
|
#include <linux/slab.h>
|
|
@@ -146,7 +147,7 @@ static int cpsw_ale_write(struct cpsw_ale *ale, int idx, u32 *ale_entry)
|
|
|
return idx;
|
|
|
}
|
|
|
|
|
|
-int cpsw_ale_match_addr(struct cpsw_ale *ale, u8 *addr, u16 vid)
|
|
|
+static int cpsw_ale_match_addr(struct cpsw_ale *ale, u8 *addr, u16 vid)
|
|
|
{
|
|
|
u32 ale_entry[ALE_ENTRY_WORDS];
|
|
|
int type, idx;
|
|
@@ -167,7 +168,7 @@ int cpsw_ale_match_addr(struct cpsw_ale *ale, u8 *addr, u16 vid)
|
|
|
return -ENOENT;
|
|
|
}
|
|
|
|
|
|
-int cpsw_ale_match_vlan(struct cpsw_ale *ale, u16 vid)
|
|
|
+static int cpsw_ale_match_vlan(struct cpsw_ale *ale, u16 vid)
|
|
|
{
|
|
|
u32 ale_entry[ALE_ENTRY_WORDS];
|
|
|
int type, idx;
|
|
@@ -265,6 +266,7 @@ int cpsw_ale_flush_multicast(struct cpsw_ale *ale, int port_mask, int vid)
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
|
+EXPORT_SYMBOL_GPL(cpsw_ale_flush_multicast);
|
|
|
|
|
|
static void cpsw_ale_flush_ucast(struct cpsw_ale *ale, u32 *ale_entry,
|
|
|
int port_mask)
|
|
@@ -297,6 +299,7 @@ int cpsw_ale_flush(struct cpsw_ale *ale, int port_mask)
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
|
+EXPORT_SYMBOL_GPL(cpsw_ale_flush);
|
|
|
|
|
|
static inline void cpsw_ale_set_vlan_entry_type(u32 *ale_entry,
|
|
|
int flags, u16 vid)
|
|
@@ -334,6 +337,7 @@ int cpsw_ale_add_ucast(struct cpsw_ale *ale, u8 *addr, int port,
|
|
|
cpsw_ale_write(ale, idx, ale_entry);
|
|
|
return 0;
|
|
|
}
|
|
|
+EXPORT_SYMBOL_GPL(cpsw_ale_add_ucast);
|
|
|
|
|
|
int cpsw_ale_del_ucast(struct cpsw_ale *ale, u8 *addr, int port,
|
|
|
int flags, u16 vid)
|
|
@@ -349,6 +353,7 @@ int cpsw_ale_del_ucast(struct cpsw_ale *ale, u8 *addr, int port,
|
|
|
cpsw_ale_write(ale, idx, ale_entry);
|
|
|
return 0;
|
|
|
}
|
|
|
+EXPORT_SYMBOL_GPL(cpsw_ale_del_ucast);
|
|
|
|
|
|
int cpsw_ale_add_mcast(struct cpsw_ale *ale, u8 *addr, int port_mask,
|
|
|
int flags, u16 vid, int mcast_state)
|
|
@@ -380,6 +385,7 @@ int cpsw_ale_add_mcast(struct cpsw_ale *ale, u8 *addr, int port_mask,
|
|
|
cpsw_ale_write(ale, idx, ale_entry);
|
|
|
return 0;
|
|
|
}
|
|
|
+EXPORT_SYMBOL_GPL(cpsw_ale_add_mcast);
|
|
|
|
|
|
int cpsw_ale_del_mcast(struct cpsw_ale *ale, u8 *addr, int port_mask,
|
|
|
int flags, u16 vid)
|
|
@@ -401,6 +407,7 @@ int cpsw_ale_del_mcast(struct cpsw_ale *ale, u8 *addr, int port_mask,
|
|
|
cpsw_ale_write(ale, idx, ale_entry);
|
|
|
return 0;
|
|
|
}
|
|
|
+EXPORT_SYMBOL_GPL(cpsw_ale_del_mcast);
|
|
|
|
|
|
int cpsw_ale_add_vlan(struct cpsw_ale *ale, u16 vid, int port, int untag,
|
|
|
int reg_mcast, int unreg_mcast)
|
|
@@ -430,6 +437,7 @@ int cpsw_ale_add_vlan(struct cpsw_ale *ale, u16 vid, int port, int untag,
|
|
|
cpsw_ale_write(ale, idx, ale_entry);
|
|
|
return 0;
|
|
|
}
|
|
|
+EXPORT_SYMBOL_GPL(cpsw_ale_add_vlan);
|
|
|
|
|
|
int cpsw_ale_del_vlan(struct cpsw_ale *ale, u16 vid, int port_mask)
|
|
|
{
|
|
@@ -450,6 +458,7 @@ int cpsw_ale_del_vlan(struct cpsw_ale *ale, u16 vid, int port_mask)
|
|
|
cpsw_ale_write(ale, idx, ale_entry);
|
|
|
return 0;
|
|
|
}
|
|
|
+EXPORT_SYMBOL_GPL(cpsw_ale_del_vlan);
|
|
|
|
|
|
void cpsw_ale_set_allmulti(struct cpsw_ale *ale, int allmulti)
|
|
|
{
|
|
@@ -479,6 +488,7 @@ void cpsw_ale_set_allmulti(struct cpsw_ale *ale, int allmulti)
|
|
|
cpsw_ale_write(ale, idx, ale_entry);
|
|
|
}
|
|
|
}
|
|
|
+EXPORT_SYMBOL_GPL(cpsw_ale_set_allmulti);
|
|
|
|
|
|
struct ale_control_info {
|
|
|
const char *name;
|
|
@@ -704,6 +714,7 @@ int cpsw_ale_control_set(struct cpsw_ale *ale, int port, int control,
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
+EXPORT_SYMBOL_GPL(cpsw_ale_control_set);
|
|
|
|
|
|
int cpsw_ale_control_get(struct cpsw_ale *ale, int port, int control)
|
|
|
{
|
|
@@ -727,6 +738,7 @@ int cpsw_ale_control_get(struct cpsw_ale *ale, int port, int control)
|
|
|
tmp = __raw_readl(ale->params.ale_regs + offset) >> shift;
|
|
|
return tmp & BITMASK(info->bits);
|
|
|
}
|
|
|
+EXPORT_SYMBOL_GPL(cpsw_ale_control_get);
|
|
|
|
|
|
static void cpsw_ale_timer(unsigned long arg)
|
|
|
{
|
|
@@ -750,6 +762,7 @@ int cpsw_ale_set_ageout(struct cpsw_ale *ale, int ageout)
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
|
+EXPORT_SYMBOL_GPL(cpsw_ale_set_ageout);
|
|
|
|
|
|
void cpsw_ale_start(struct cpsw_ale *ale)
|
|
|
{
|
|
@@ -769,11 +782,13 @@ void cpsw_ale_start(struct cpsw_ale *ale)
|
|
|
add_timer(&ale->timer);
|
|
|
}
|
|
|
}
|
|
|
+EXPORT_SYMBOL_GPL(cpsw_ale_start);
|
|
|
|
|
|
void cpsw_ale_stop(struct cpsw_ale *ale)
|
|
|
{
|
|
|
del_timer_sync(&ale->timer);
|
|
|
}
|
|
|
+EXPORT_SYMBOL_GPL(cpsw_ale_stop);
|
|
|
|
|
|
struct cpsw_ale *cpsw_ale_create(struct cpsw_ale_params *params)
|
|
|
{
|
|
@@ -788,6 +803,7 @@ struct cpsw_ale *cpsw_ale_create(struct cpsw_ale_params *params)
|
|
|
|
|
|
return ale;
|
|
|
}
|
|
|
+EXPORT_SYMBOL_GPL(cpsw_ale_create);
|
|
|
|
|
|
int cpsw_ale_destroy(struct cpsw_ale *ale)
|
|
|
{
|
|
@@ -797,6 +813,7 @@ int cpsw_ale_destroy(struct cpsw_ale *ale)
|
|
|
kfree(ale);
|
|
|
return 0;
|
|
|
}
|
|
|
+EXPORT_SYMBOL_GPL(cpsw_ale_destroy);
|
|
|
|
|
|
void cpsw_ale_dump(struct cpsw_ale *ale, u32 *data)
|
|
|
{
|
|
@@ -807,3 +824,8 @@ void cpsw_ale_dump(struct cpsw_ale *ale, u32 *data)
|
|
|
data += ALE_ENTRY_WORDS;
|
|
|
}
|
|
|
}
|
|
|
+EXPORT_SYMBOL_GPL(cpsw_ale_dump);
|
|
|
+
|
|
|
+MODULE_LICENSE("GPL v2");
|
|
|
+MODULE_DESCRIPTION("TI CPSW ALE driver");
|
|
|
+MODULE_AUTHOR("Texas Instruments");
|