From: acoul Date: Sat, 5 Dec 2015 04:33:09 +0000 (+0200) Subject: kernel/modules: add ar8216 switch module support X-Git-Url: http://git.ozo.com/?p=openwrt-working-2016%2F.git;a=commitdiff_plain;h=48122f02623757a4315b0b03e69b6cc44817a305 kernel/modules: add ar8216 switch module support --- diff --git a/package/kernel/linux/modules/netdevices.mk b/package/kernel/linux/modules/netdevices.mk index 417a6a6114..e18c453d51 100644 --- a/package/kernel/linux/modules/netdevices.mk +++ b/package/kernel/linux/modules/netdevices.mk @@ -208,6 +208,23 @@ endef $(eval $(call KernelPackage,switch-mvsw61xx)) +define KernelPackage/switch-ar8216 + SUBMENU:=$(NETWORK_DEVICES_MENU) + TITLE:=Atheros AR8216 switch support + DEPENDS:=+kmod-swconfig + KCONFIG:=CONFIG_AR8216_PHY=m + FILES:= \ + $(LINUX_DIR)/drivers/net/phy/ar8216.ko \ + $(LINUX_DIR)/drivers/net/phy/ar8327.ko + AUTOLOAD:=$(call AutoLoad,42,ar8216 ar8327) +endef + +define KernelPackage/switch-ar8216/description + Atheros AR8216 switch support +endef + +$(eval $(call KernelPackage,switch-ar8216)) + define KernelPackage/switch-ip17xx SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=IC+ IP17XX switch support diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c b/target/linux/generic/files/drivers/net/phy/ar8216.c index fc5627258d..611cf2e4ce 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8216.c +++ b/target/linux/generic/files/drivers/net/phy/ar8216.c @@ -130,6 +130,7 @@ const struct ar8xxx_mib_desc ar8236_mibs[39] = { MIB_DESC(1, AR8236_STATS_TXDEFER, "TxDefer"), MIB_DESC(1, AR8236_STATS_TXLATECOL, "TxLateCol"), }; +EXPORT_SYMBOL(ar8236_mibs); static DEFINE_MUTEX(ar8xxx_dev_list_lock); static LIST_HEAD(ar8xxx_dev_list); @@ -203,6 +204,7 @@ ar8xxx_phy_init(struct ar8xxx_priv *priv) ar8xxx_phy_poll_reset(bus); } +EXPORT_SYMBOL(ar8xxx_phy_init); u32 ar8xxx_mii_read32(struct ar8xxx_priv *priv, int phy_id, int regnum) @@ -215,6 +217,7 @@ ar8xxx_mii_read32(struct ar8xxx_priv *priv, int phy_id, int regnum) return (hi << 16) | lo; } +EXPORT_SYMBOL(ar8xxx_mii_read32); void ar8xxx_mii_write32(struct ar8xxx_priv *priv, int phy_id, int regnum, u32 val) @@ -234,6 +237,7 @@ ar8xxx_mii_write32(struct ar8xxx_priv *priv, int phy_id, int regnum, u32 val) bus->write(bus, phy_id, regnum, lo); } } +EXPORT_SYMBOL(ar8xxx_mii_write32); u32 ar8xxx_read(struct ar8xxx_priv *priv, int reg) @@ -254,6 +258,7 @@ ar8xxx_read(struct ar8xxx_priv *priv, int reg) return val; } +EXPORT_SYMBOL(ar8xxx_read); void ar8xxx_write(struct ar8xxx_priv *priv, int reg, u32 val) @@ -271,6 +276,7 @@ ar8xxx_write(struct ar8xxx_priv *priv, int reg, u32 val) mutex_unlock(&bus->mdio_lock); } +EXPORT_SYMBOL(ar8xxx_write); u32 ar8xxx_rmw(struct ar8xxx_priv *priv, int reg, u32 mask, u32 val) @@ -295,6 +301,7 @@ ar8xxx_rmw(struct ar8xxx_priv *priv, int reg, u32 mask, u32 val) return ret; } +EXPORT_SYMBOL(ar8xxx_rmw); void ar8xxx_phy_dbg_write(struct ar8xxx_priv *priv, int phy_addr, @@ -307,6 +314,7 @@ ar8xxx_phy_dbg_write(struct ar8xxx_priv *priv, int phy_addr, bus->write(bus, phy_addr, MII_ATH_DBG_DATA, dbg_data); mutex_unlock(&bus->mdio_lock); } +EXPORT_SYMBOL(ar8xxx_phy_dbg_write); static inline void ar8xxx_phy_mmd_prep(struct mii_bus *bus, int phy_addr, u16 addr, u16 reg) @@ -326,6 +334,7 @@ ar8xxx_phy_mmd_write(struct ar8xxx_priv *priv, int phy_addr, u16 addr, u16 reg, bus->write(bus, phy_addr, MII_ATH_MMD_DATA, data); mutex_unlock(&bus->mdio_lock); } +EXPORT_SYMBOL(ar8xxx_phy_mmd_write); u16 ar8xxx_phy_mmd_read(struct ar8xxx_priv *priv, int phy_addr, u16 addr, u16 reg) @@ -340,6 +349,7 @@ ar8xxx_phy_mmd_read(struct ar8xxx_priv *priv, int phy_addr, u16 addr, u16 reg) return data; } +EXPORT_SYMBOL(ar8xxx_phy_mmd_read); static int ar8xxx_reg_wait(struct ar8xxx_priv *priv, u32 reg, u32 mask, u32 val, @@ -571,6 +581,7 @@ ar8216_wait_bit(struct ar8xxx_priv *priv, int reg, u32 mask, u32 val) (unsigned int) reg, t, mask, val); return -ETIMEDOUT; } +EXPORT_SYMBOL(ar8216_wait_bit); static void ar8216_vtu_op(struct ar8xxx_priv *priv, u32 op, u32 val) @@ -931,6 +942,7 @@ ar8xxx_sw_set_vlan(struct switch_dev *dev, const struct switch_attr *attr, priv->vlan = !!val->value.i; return 0; } +EXPORT_SYMBOL(ar8xxx_sw_set_vlan); int ar8xxx_sw_get_vlan(struct switch_dev *dev, const struct switch_attr *attr, @@ -940,6 +952,7 @@ ar8xxx_sw_get_vlan(struct switch_dev *dev, const struct switch_attr *attr, val->value.i = priv->vlan; return 0; } +EXPORT_SYMBOL(ar8xxx_sw_get_vlan); int @@ -955,6 +968,7 @@ ar8xxx_sw_set_pvid(struct switch_dev *dev, int port, int vlan) priv->pvid[port] = vlan; return 0; } +EXPORT_SYMBOL(ar8xxx_sw_set_pvid); int ar8xxx_sw_get_pvid(struct switch_dev *dev, int port, int *vlan) @@ -963,6 +977,7 @@ ar8xxx_sw_get_pvid(struct switch_dev *dev, int port, int *vlan) *vlan = priv->pvid[port]; return 0; } +EXPORT_SYMBOL(ar8xxx_sw_get_pvid); static int ar8xxx_sw_set_vid(struct switch_dev *dev, const struct switch_attr *attr, @@ -991,6 +1006,7 @@ ar8xxx_sw_get_port_link(struct switch_dev *dev, int port, ar8216_read_port_link(priv, port, link); return 0; } +EXPORT_SYMBOL(ar8xxx_sw_get_port_link); static int ar8xxx_sw_get_ports(struct switch_dev *dev, struct switch_val *val) @@ -1155,6 +1171,7 @@ ar8xxx_sw_hw_apply(struct switch_dev *dev) mutex_unlock(&priv->reg_mutex); return 0; } +EXPORT_SYMBOL(ar8xxx_sw_hw_apply); int ar8xxx_sw_reset_switch(struct switch_dev *dev) @@ -1186,6 +1203,7 @@ ar8xxx_sw_reset_switch(struct switch_dev *dev) return chip->sw_hw_apply(dev); } +EXPORT_SYMBOL(ar8xxx_sw_reset_switch); int ar8xxx_sw_set_reset_mibs(struct switch_dev *dev, @@ -1214,6 +1232,7 @@ unlock: mutex_unlock(&priv->mib_lock); return ret; } +EXPORT_SYMBOL(ar8xxx_sw_set_reset_mibs); int ar8xxx_sw_set_mirror_rx_enable(struct switch_dev *dev, @@ -1229,6 +1248,7 @@ ar8xxx_sw_set_mirror_rx_enable(struct switch_dev *dev, return 0; } +EXPORT_SYMBOL(ar8xxx_sw_set_mirror_rx_enable); int ar8xxx_sw_get_mirror_rx_enable(struct switch_dev *dev, @@ -1239,6 +1259,7 @@ ar8xxx_sw_get_mirror_rx_enable(struct switch_dev *dev, val->value.i = priv->mirror_rx; return 0; } +EXPORT_SYMBOL(ar8xxx_sw_get_mirror_rx_enable); int ar8xxx_sw_set_mirror_tx_enable(struct switch_dev *dev, @@ -1254,6 +1275,7 @@ ar8xxx_sw_set_mirror_tx_enable(struct switch_dev *dev, return 0; } +EXPORT_SYMBOL(ar8xxx_sw_set_mirror_tx_enable); int ar8xxx_sw_get_mirror_tx_enable(struct switch_dev *dev, @@ -1264,6 +1286,7 @@ ar8xxx_sw_get_mirror_tx_enable(struct switch_dev *dev, val->value.i = priv->mirror_tx; return 0; } +EXPORT_SYMBOL(ar8xxx_sw_get_mirror_tx_enable); int ar8xxx_sw_set_mirror_monitor_port(struct switch_dev *dev, @@ -1279,6 +1302,7 @@ ar8xxx_sw_set_mirror_monitor_port(struct switch_dev *dev, return 0; } +EXPORT_SYMBOL(ar8xxx_sw_set_mirror_monitor_port); int ar8xxx_sw_get_mirror_monitor_port(struct switch_dev *dev, @@ -1289,6 +1313,7 @@ ar8xxx_sw_get_mirror_monitor_port(struct switch_dev *dev, val->value.i = priv->monitor_port; return 0; } +EXPORT_SYMBOL(ar8xxx_sw_get_mirror_monitor_port); int ar8xxx_sw_set_mirror_source_port(struct switch_dev *dev, @@ -1304,6 +1329,7 @@ ar8xxx_sw_set_mirror_source_port(struct switch_dev *dev, return 0; } +EXPORT_SYMBOL(ar8xxx_sw_set_mirror_source_port); int ar8xxx_sw_get_mirror_source_port(struct switch_dev *dev, @@ -1314,6 +1340,7 @@ ar8xxx_sw_get_mirror_source_port(struct switch_dev *dev, val->value.i = priv->source_port; return 0; } +EXPORT_SYMBOL(ar8xxx_sw_get_mirror_source_port); int ar8xxx_sw_set_port_reset_mib(struct switch_dev *dev, @@ -1344,6 +1371,7 @@ unlock: mutex_unlock(&priv->mib_lock); return ret; } +EXPORT_SYMBOL(ar8xxx_sw_set_port_reset_mib); static void ar8xxx_byte_to_str(char *buf, int len, u64 byte) @@ -1433,6 +1461,7 @@ unlock: mutex_unlock(&priv->mib_lock); return ret; } +EXPORT_SYMBOL(ar8xxx_sw_get_port_mib); int ar8xxx_sw_set_arl_age_time(struct switch_dev *dev, const struct switch_attr *attr, @@ -1532,6 +1561,7 @@ ar8xxx_sw_get_arl_table(struct switch_dev *dev, return 0; } +EXPORT_SYMBOL(ar8xxx_sw_get_arl_table); int ar8xxx_sw_set_flush_arl_table(struct switch_dev *dev, @@ -1547,6 +1577,7 @@ ar8xxx_sw_set_flush_arl_table(struct switch_dev *dev, return ret; } +EXPORT_SYMBOL(ar8xxx_sw_set_flush_arl_table); int ar8xxx_sw_set_flush_port_arl_table(struct switch_dev *dev, @@ -1566,6 +1597,7 @@ ar8xxx_sw_set_flush_port_arl_table(struct switch_dev *dev, return ret; } +EXPORT_SYMBOL(ar8xxx_sw_set_flush_port_arl_table); static const struct switch_attr ar8xxx_sw_attr_globals[] = { { @@ -1661,6 +1693,7 @@ const struct switch_attr ar8xxx_sw_attr_vlan[1] = { .max = 4094, }, }; +EXPORT_SYMBOL(ar8xxx_sw_attr_vlan); static const struct switch_dev_ops ar8xxx_sw_ops = { .attr_global = { diff --git a/target/linux/generic/files/drivers/net/phy/ar8327.c b/target/linux/generic/files/drivers/net/phy/ar8327.c index d8797820f2..33342b9f53 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8327.c +++ b/target/linux/generic/files/drivers/net/phy/ar8327.c @@ -1402,6 +1402,7 @@ const struct ar8xxx_chip ar8327_chip = { .mib_decs = ar8236_mibs, .mib_func = AR8327_REG_MIB_FUNC }; +EXPORT_SYMBOL(ar8327_chip); const struct ar8xxx_chip ar8337_chip = { .caps = AR8XXX_CAP_GIGE | AR8XXX_CAP_MIB_COUNTERS, @@ -1437,4 +1438,4 @@ const struct ar8xxx_chip ar8337_chip = { .mib_decs = ar8236_mibs, .mib_func = AR8327_REG_MIB_FUNC }; - +EXPORT_SYMBOL(ar8337_chip);