From: Markus Stockhausen Date: Tue, 14 Apr 2026 19:40:22 +0000 (+0200) Subject: realtek: dsa: merge headers X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f7e76cc2e71c88d862bea7fe7b406e5e1c12a2f6;p=thirdparty%2Fopenwrt.git realtek: dsa: merge headers There are currently two header files for the dsa driver. rtl83xx.h and rtl838x.h. It is unclear for what reason they are separated. Especially as one always includes the other. Merge those two files into one. Signed-off-by: Markus Stockhausen Link: https://github.com/openwrt/openwrt/pull/22931 Signed-off-by: Robert Marko --- diff --git a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/common.c b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/common.c index 56df39855fc..9e64b6d9202 100644 --- a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/common.c +++ b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/common.c @@ -14,7 +14,7 @@ #include #include -#include "rtl83xx.h" +#include "rtl838x.h" struct phylink_pcs *rtpcs_create(struct device *dev, struct device_node *np, int port); diff --git a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/debugfs.c b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/debugfs.c index 4310b470c96..ec4214606f3 100644 --- a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/debugfs.c +++ b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/debugfs.c @@ -4,7 +4,7 @@ #include #include -#include "rtl83xx.h" +#include "rtl838x.h" #define RTL838X_DRIVER_NAME "rtl838x" diff --git a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/dsa.c b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/dsa.c index 6a9fe4e2947..000ddd2e713 100644 --- a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/dsa.c +++ b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/dsa.c @@ -5,7 +5,7 @@ #include #include -#include "rtl83xx.h" +#include "rtl838x.h" static const u8 ipv4_ll_mcast_addr_base[ETH_ALEN] = { 0x01, 0x00, 0x5e, 0x00, 0x00, 0x00 diff --git a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/qos.c b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/qos.c index 57687d5cd14..343110b9515 100644 --- a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/qos.c +++ b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/qos.c @@ -4,7 +4,7 @@ #include #include -#include "rtl83xx.h" +#include "rtl838x.h" enum scheduler_type { WEIGHTED_FAIR_QUEUE = 0, diff --git a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl838x.c b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl838x.c index 46832a06bb1..512326ae924 100644 --- a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl838x.c +++ b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl838x.c @@ -5,7 +5,7 @@ #include #include -#include "rtl83xx.h" +#include "rtl838x.h" #define RTL838X_VLAN_PORT_TAG_STS_UNTAG 0x0 #define RTL838X_VLAN_PORT_TAG_STS_TAGGED 0x1 diff --git a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl838x.h b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl838x.h index f9d3bdfc8a3..837341d41f6 100644 --- a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl838x.h +++ b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl838x.h @@ -1573,6 +1573,203 @@ struct rtl838x_switch_priv { struct mutex counters_lock; }; +struct fdb_update_work { + struct work_struct work; + struct net_device *ndev; + u64 macs[]; +}; + +enum mib_reg { + MIB_REG_INVALID = 0, + MIB_REG_STD, + MIB_REG_PRV, + MIB_TBL_STD, + MIB_TBL_PRV, +}; + +#define MIB_ITEM(_reg, _offset, _size) \ + {.reg = _reg, .offset = _offset, .size = _size} + +#define MIB_LIST_ITEM(_name, _item) \ + {.name = _name, .item = _item} + +struct rtldsa_mib_item { + enum mib_reg reg; + unsigned int offset; + unsigned int size; +}; + +struct rtldsa_mib_list_item { + const char *name; + struct rtldsa_mib_item item; +}; + +struct rtldsa_mib_desc { + struct rtldsa_mib_item symbol_errors; + + struct rtldsa_mib_item if_in_octets; + struct rtldsa_mib_item if_out_octets; + struct rtldsa_mib_item if_in_ucast_pkts; + struct rtldsa_mib_item if_in_mcast_pkts; + struct rtldsa_mib_item if_in_bcast_pkts; + struct rtldsa_mib_item if_out_ucast_pkts; + struct rtldsa_mib_item if_out_mcast_pkts; + struct rtldsa_mib_item if_out_bcast_pkts; + struct rtldsa_mib_item if_out_discards; + struct rtldsa_mib_item single_collisions; + struct rtldsa_mib_item multiple_collisions; + struct rtldsa_mib_item deferred_transmissions; + struct rtldsa_mib_item late_collisions; + struct rtldsa_mib_item excessive_collisions; + struct rtldsa_mib_item crc_align_errors; + struct rtldsa_mib_item rx_pkts_over_max_octets; + + struct rtldsa_mib_item unsupported_opcodes; + + struct rtldsa_mib_item rx_undersize_pkts; + struct rtldsa_mib_item rx_oversize_pkts; + struct rtldsa_mib_item rx_fragments; + struct rtldsa_mib_item rx_jabbers; + + struct rtldsa_mib_item tx_pkts[ETHTOOL_RMON_HIST_MAX]; + struct rtldsa_mib_item rx_pkts[ETHTOOL_RMON_HIST_MAX]; + struct ethtool_rmon_hist_range rmon_ranges[ETHTOOL_RMON_HIST_MAX]; + + struct rtldsa_mib_item drop_events; + struct rtldsa_mib_item collisions; + + struct rtldsa_mib_item rx_pause_frames; + struct rtldsa_mib_item tx_pause_frames; + + size_t list_count; + const struct rtldsa_mib_list_item *list; +}; + +/* API for switch table access */ +struct table_reg { + u16 addr; + u16 data; + u8 max_data; + u8 c_bit; + u8 t_bit; + u8 rmode; + u8 tbl; + struct mutex lock; +}; + +#define TBL_DESC(_addr, _data, _max_data, _c_bit, _t_bit, _rmode) \ + { .addr = _addr, .data = _data, .max_data = _max_data, .c_bit = _c_bit, \ + .t_bit = _t_bit, .rmode = _rmode \ + } + +typedef enum { + RTL8380_TBL_L2 = 0, + RTL8380_TBL_0, + RTL8380_TBL_1, + RTL8390_TBL_L2, + RTL8390_TBL_0, + RTL8390_TBL_1, + RTL8390_TBL_2, + RTL9300_TBL_L2, + RTL9300_TBL_0, + RTL9300_TBL_1, + RTL9300_TBL_2, + RTL9300_TBL_HSB, + RTL9300_TBL_HSA, + RTL9310_TBL_0, + RTL9310_TBL_1, + RTL9310_TBL_2, + RTL9310_TBL_3, + RTL9310_TBL_4, + RTL9310_TBL_5, + RTL_TBL_END +} rtl838x_tbl_reg_t; + +void rtl_table_init(void); +struct table_reg *rtl_table_get(rtl838x_tbl_reg_t r, int t); +void rtl_table_release(struct table_reg *r); +int rtl_table_read(struct table_reg *r, int idx); +int rtl_table_write(struct table_reg *r, int idx); +inline u16 rtl_table_data(struct table_reg *r, int i); +inline u32 rtl_table_data_r(struct table_reg *r, int i); +inline void rtl_table_data_w(struct table_reg *r, u32 v, int i); + +int rtldsa_83xx_lag_setup_algomask(struct rtl838x_switch_priv *priv, int group, + struct netdev_lag_upper_info *info); + +void rtldsa_838x_qos_init(struct rtl838x_switch_priv *priv); +void rtldsa_839x_qos_init(struct rtl838x_switch_priv *priv); + +void rtldsa_port_fast_age(struct dsa_switch *ds, int port); +int rtl83xx_packet_cntr_alloc(struct rtl838x_switch_priv *priv); +int rtldsa_port_get_stp_state(struct rtl838x_switch_priv *priv, int port); +int rtl83xx_port_is_under(const struct net_device *dev, struct rtl838x_switch_priv *priv); +void rtldsa_port_stp_state_set(struct dsa_switch *ds, int port, u8 state); +int rtl83xx_setup_tc(struct net_device *dev, enum tc_setup_type type, void *type_data); + +/* Port register accessor functions for the RTL839x and RTL931X SoCs */ +void rtl839x_mask_port_reg_be(u64 clear, u64 set, int reg); +u32 rtl839x_get_egress_rate(struct rtl838x_switch_priv *priv, int port); +u64 rtl839x_get_port_reg_be(int reg); +void rtl839x_set_port_reg_be(u64 set, int reg); +void rtl839x_mask_port_reg_le(u64 clear, u64 set, int reg); +int rtl839x_set_egress_rate(struct rtl838x_switch_priv *priv, int port, u32 rate); +void rtl839x_set_port_reg_le(u64 set, int reg); +u64 rtl839x_get_port_reg_le(int reg); + +/* Port register accessor functions for the RTL838x and RTL930X SoCs */ +void rtl838x_mask_port_reg(u64 clear, u64 set, int reg); +void rtl838x_set_port_reg(u64 set, int reg); +u32 rtl838x_get_egress_rate(struct rtl838x_switch_priv *priv, int port); +u64 rtl838x_get_port_reg(int reg); +int rtl838x_set_egress_rate(struct rtl838x_switch_priv *priv, int port, u32 rate); + +/* RTL838x-specific */ +u32 rtl838x_hash(struct rtl838x_switch_priv *priv, u64 seed); +void rtldsa_838x_print_matrix(void); + +/* RTL839x-specific */ +u32 rtl839x_hash(struct rtl838x_switch_priv *priv, u64 seed); +void rtl839x_exec_tbl2_cmd(u32 cmd); +void rtldsa_839x_print_matrix(void); + +/* RTL930x-specific */ +u32 rtl930x_hash(struct rtl838x_switch_priv *priv, u64 seed); +void rtldsa_930x_print_matrix(void); + +/* RTL931x-specific */ +void rtldsa_931x_print_matrix(void); + +int rtl83xx_lag_add(struct dsa_switch *ds, int group, int port, struct netdev_lag_upper_info *info); +int rtl83xx_lag_del(struct dsa_switch *ds, int group, int port); + +/* + * TODO: The following functions are currently not in use. So compiler will complain if + * they are static and not made available externally. To preserve them for future use + * collect them in this section. + */ + +void rtl839x_pie_rule_dump(struct pie_rule *pr); +void rtl839x_set_egress_queue(int port, int queue); + +void rtl9300_dump_debug(void); +void rtl930x_pie_rule_dump_raw(u32 r[]); + +extern const struct dsa_switch_ops rtldsa_83xx_switch_ops; +extern const struct dsa_switch_ops rtldsa_93xx_switch_ops; + +extern const struct phylink_mac_ops rtldsa_83xx_phylink_mac_ops; +extern const struct phylink_mac_ops rtldsa_93xx_phylink_mac_ops; + +extern const struct rtldsa_config rtldsa_838x_cfg; +extern const struct rtldsa_config rtldsa_839x_cfg; +extern const struct rtldsa_config rtldsa_930x_cfg; +extern const struct rtldsa_config rtldsa_931x_cfg; + +/* TODO actually from arch/mips/rtl838x/prom.c */ +extern struct rtl83xx_soc_info soc_info; + + void rtl838x_dbgfs_init(struct rtl838x_switch_priv *priv); void rtl930x_dbgfs_init(struct rtl838x_switch_priv *priv); void rtldsa_93xx_lag_switch_init(struct rtl838x_switch_priv *priv); diff --git a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl839x.c b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl839x.c index 99d3a56ab33..3bf5c9e5a65 100644 --- a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl839x.c +++ b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl839x.c @@ -3,7 +3,7 @@ #include #include -#include "rtl83xx.h" +#include "rtl838x.h" #define RTL839X_VLAN_PORT_TAG_STS_UNTAG 0x0 #define RTL839X_VLAN_PORT_TAG_STS_TAGGED 0x1 diff --git a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl83xx.h b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl83xx.h deleted file mode 100644 index 3a58eecaab4..00000000000 --- a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl83xx.h +++ /dev/null @@ -1,205 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ - -#ifndef _NET_DSA_RTL83XX_H -#define _NET_DSA_RTL83XX_H - -#include -#include "rtl838x.h" - -struct fdb_update_work { - struct work_struct work; - struct net_device *ndev; - u64 macs[]; -}; - -enum mib_reg { - MIB_REG_INVALID = 0, - MIB_REG_STD, - MIB_REG_PRV, - MIB_TBL_STD, - MIB_TBL_PRV, -}; - -#define MIB_ITEM(_reg, _offset, _size) \ - {.reg = _reg, .offset = _offset, .size = _size} - -#define MIB_LIST_ITEM(_name, _item) \ - {.name = _name, .item = _item} - -struct rtldsa_mib_item { - enum mib_reg reg; - unsigned int offset; - unsigned int size; -}; - -struct rtldsa_mib_list_item { - const char *name; - struct rtldsa_mib_item item; -}; - -struct rtldsa_mib_desc { - struct rtldsa_mib_item symbol_errors; - - struct rtldsa_mib_item if_in_octets; - struct rtldsa_mib_item if_out_octets; - struct rtldsa_mib_item if_in_ucast_pkts; - struct rtldsa_mib_item if_in_mcast_pkts; - struct rtldsa_mib_item if_in_bcast_pkts; - struct rtldsa_mib_item if_out_ucast_pkts; - struct rtldsa_mib_item if_out_mcast_pkts; - struct rtldsa_mib_item if_out_bcast_pkts; - struct rtldsa_mib_item if_out_discards; - struct rtldsa_mib_item single_collisions; - struct rtldsa_mib_item multiple_collisions; - struct rtldsa_mib_item deferred_transmissions; - struct rtldsa_mib_item late_collisions; - struct rtldsa_mib_item excessive_collisions; - struct rtldsa_mib_item crc_align_errors; - struct rtldsa_mib_item rx_pkts_over_max_octets; - - struct rtldsa_mib_item unsupported_opcodes; - - struct rtldsa_mib_item rx_undersize_pkts; - struct rtldsa_mib_item rx_oversize_pkts; - struct rtldsa_mib_item rx_fragments; - struct rtldsa_mib_item rx_jabbers; - - struct rtldsa_mib_item tx_pkts[ETHTOOL_RMON_HIST_MAX]; - struct rtldsa_mib_item rx_pkts[ETHTOOL_RMON_HIST_MAX]; - struct ethtool_rmon_hist_range rmon_ranges[ETHTOOL_RMON_HIST_MAX]; - - struct rtldsa_mib_item drop_events; - struct rtldsa_mib_item collisions; - - struct rtldsa_mib_item rx_pause_frames; - struct rtldsa_mib_item tx_pause_frames; - - size_t list_count; - const struct rtldsa_mib_list_item *list; -}; - -/* API for switch table access */ -struct table_reg { - u16 addr; - u16 data; - u8 max_data; - u8 c_bit; - u8 t_bit; - u8 rmode; - u8 tbl; - struct mutex lock; -}; - -#define TBL_DESC(_addr, _data, _max_data, _c_bit, _t_bit, _rmode) \ - { .addr = _addr, .data = _data, .max_data = _max_data, .c_bit = _c_bit, \ - .t_bit = _t_bit, .rmode = _rmode \ - } - -typedef enum { - RTL8380_TBL_L2 = 0, - RTL8380_TBL_0, - RTL8380_TBL_1, - RTL8390_TBL_L2, - RTL8390_TBL_0, - RTL8390_TBL_1, - RTL8390_TBL_2, - RTL9300_TBL_L2, - RTL9300_TBL_0, - RTL9300_TBL_1, - RTL9300_TBL_2, - RTL9300_TBL_HSB, - RTL9300_TBL_HSA, - RTL9310_TBL_0, - RTL9310_TBL_1, - RTL9310_TBL_2, - RTL9310_TBL_3, - RTL9310_TBL_4, - RTL9310_TBL_5, - RTL_TBL_END -} rtl838x_tbl_reg_t; - -void rtl_table_init(void); -struct table_reg *rtl_table_get(rtl838x_tbl_reg_t r, int t); -void rtl_table_release(struct table_reg *r); -int rtl_table_read(struct table_reg *r, int idx); -int rtl_table_write(struct table_reg *r, int idx); -inline u16 rtl_table_data(struct table_reg *r, int i); -inline u32 rtl_table_data_r(struct table_reg *r, int i); -inline void rtl_table_data_w(struct table_reg *r, u32 v, int i); - -int rtldsa_83xx_lag_setup_algomask(struct rtl838x_switch_priv *priv, int group, - struct netdev_lag_upper_info *info); - -void rtldsa_838x_qos_init(struct rtl838x_switch_priv *priv); -void rtldsa_839x_qos_init(struct rtl838x_switch_priv *priv); - -void rtldsa_port_fast_age(struct dsa_switch *ds, int port); -int rtl83xx_packet_cntr_alloc(struct rtl838x_switch_priv *priv); -int rtldsa_port_get_stp_state(struct rtl838x_switch_priv *priv, int port); -int rtl83xx_port_is_under(const struct net_device *dev, struct rtl838x_switch_priv *priv); -void rtldsa_port_stp_state_set(struct dsa_switch *ds, int port, u8 state); -int rtl83xx_setup_tc(struct net_device *dev, enum tc_setup_type type, void *type_data); - -/* Port register accessor functions for the RTL839x and RTL931X SoCs */ -void rtl839x_mask_port_reg_be(u64 clear, u64 set, int reg); -u32 rtl839x_get_egress_rate(struct rtl838x_switch_priv *priv, int port); -u64 rtl839x_get_port_reg_be(int reg); -void rtl839x_set_port_reg_be(u64 set, int reg); -void rtl839x_mask_port_reg_le(u64 clear, u64 set, int reg); -int rtl839x_set_egress_rate(struct rtl838x_switch_priv *priv, int port, u32 rate); -void rtl839x_set_port_reg_le(u64 set, int reg); -u64 rtl839x_get_port_reg_le(int reg); - -/* Port register accessor functions for the RTL838x and RTL930X SoCs */ -void rtl838x_mask_port_reg(u64 clear, u64 set, int reg); -void rtl838x_set_port_reg(u64 set, int reg); -u32 rtl838x_get_egress_rate(struct rtl838x_switch_priv *priv, int port); -u64 rtl838x_get_port_reg(int reg); -int rtl838x_set_egress_rate(struct rtl838x_switch_priv *priv, int port, u32 rate); - -/* RTL838x-specific */ -u32 rtl838x_hash(struct rtl838x_switch_priv *priv, u64 seed); -void rtldsa_838x_print_matrix(void); - -/* RTL839x-specific */ -u32 rtl839x_hash(struct rtl838x_switch_priv *priv, u64 seed); -void rtl839x_exec_tbl2_cmd(u32 cmd); -void rtldsa_839x_print_matrix(void); - -/* RTL930x-specific */ -u32 rtl930x_hash(struct rtl838x_switch_priv *priv, u64 seed); -void rtldsa_930x_print_matrix(void); - -/* RTL931x-specific */ -void rtldsa_931x_print_matrix(void); - -int rtl83xx_lag_add(struct dsa_switch *ds, int group, int port, struct netdev_lag_upper_info *info); -int rtl83xx_lag_del(struct dsa_switch *ds, int group, int port); - -/* - * TODO: The following functions are currently not in use. So compiler will complain if - * they are static and not made available externally. To preserve them for future use - * collect them in this section. - */ - -void rtl839x_pie_rule_dump(struct pie_rule *pr); -void rtl839x_set_egress_queue(int port, int queue); - -void rtl9300_dump_debug(void); -void rtl930x_pie_rule_dump_raw(u32 r[]); - -extern const struct dsa_switch_ops rtldsa_83xx_switch_ops; -extern const struct dsa_switch_ops rtldsa_93xx_switch_ops; - -extern const struct phylink_mac_ops rtldsa_83xx_phylink_mac_ops; -extern const struct phylink_mac_ops rtldsa_93xx_phylink_mac_ops; - -extern const struct rtldsa_config rtldsa_838x_cfg; -extern const struct rtldsa_config rtldsa_839x_cfg; -extern const struct rtldsa_config rtldsa_930x_cfg; -extern const struct rtldsa_config rtldsa_931x_cfg; - -/* TODO actually from arch/mips/rtl838x/prom.c */ -extern struct rtl83xx_soc_info soc_info; - -#endif /* _NET_DSA_RTL83XX_H */ diff --git a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl930x.c b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl930x.c index 5dda31f329c..a9c36a3d782 100644 --- a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl930x.c +++ b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl930x.c @@ -4,7 +4,7 @@ #include #include -#include "rtl83xx.h" +#include "rtl838x.h" #define RTL930X_VLAN_PORT_TAG_STS_INTERNAL 0x0 #define RTL930X_VLAN_PORT_TAG_STS_UNTAG 0x1 diff --git a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl931x.c b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl931x.c index 95e92fa1e4e..db184dd4ad9 100644 --- a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl931x.c +++ b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl931x.c @@ -3,7 +3,7 @@ #include #include -#include "rtl83xx.h" +#include "rtl838x.h" #define RTL931X_VLAN_PORT_TAG_STS_INTERNAL 0x0 #define RTL931X_VLAN_PORT_TAG_STS_UNTAG 0x1 diff --git a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/tc.c b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/tc.c index 23369331475..2128787db08 100644 --- a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/tc.c +++ b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/tc.c @@ -8,7 +8,6 @@ #include #include -#include "rtl83xx.h" #include "rtl838x.h" /* Parse the flow rule for the matching conditions */