162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#include <linux/device.h> 362306a36Sopenharmony_ci#include <linux/mutex.h> 462306a36Sopenharmony_ci#include <linux/regmap.h> 562306a36Sopenharmony_ci#include <linux/workqueue.h> 662306a36Sopenharmony_ci#include <linux/u64_stats_sync.h> 762306a36Sopenharmony_ci#include <uapi/linux/if_link.h> 862306a36Sopenharmony_ci 962306a36Sopenharmony_cistruct xrs700x_info { 1062306a36Sopenharmony_ci unsigned int id; 1162306a36Sopenharmony_ci const char *name; 1262306a36Sopenharmony_ci size_t num_ports; 1362306a36Sopenharmony_ci}; 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ciextern const struct xrs700x_info xrs7003e_info; 1662306a36Sopenharmony_ciextern const struct xrs700x_info xrs7003f_info; 1762306a36Sopenharmony_ciextern const struct xrs700x_info xrs7004e_info; 1862306a36Sopenharmony_ciextern const struct xrs700x_info xrs7004f_info; 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_cistruct xrs700x_port { 2162306a36Sopenharmony_ci struct mutex mib_mutex; /* protects mib_data */ 2262306a36Sopenharmony_ci u64 *mib_data; 2362306a36Sopenharmony_ci struct rtnl_link_stats64 stats64; 2462306a36Sopenharmony_ci struct u64_stats_sync syncp; 2562306a36Sopenharmony_ci}; 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_cistruct xrs700x { 2862306a36Sopenharmony_ci struct dsa_switch *ds; 2962306a36Sopenharmony_ci struct device *dev; 3062306a36Sopenharmony_ci void *priv; 3162306a36Sopenharmony_ci struct regmap *regmap; 3262306a36Sopenharmony_ci struct regmap_field *ps_forward; 3362306a36Sopenharmony_ci struct regmap_field *ps_management; 3462306a36Sopenharmony_ci struct regmap_field *ps_sel_speed; 3562306a36Sopenharmony_ci struct regmap_field *ps_cur_speed; 3662306a36Sopenharmony_ci struct delayed_work mib_work; 3762306a36Sopenharmony_ci struct xrs700x_port *ports; 3862306a36Sopenharmony_ci}; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_cistruct xrs700x *xrs700x_switch_alloc(struct device *base, void *devpriv); 4162306a36Sopenharmony_ciint xrs700x_switch_register(struct xrs700x *priv); 4262306a36Sopenharmony_civoid xrs700x_switch_remove(struct xrs700x *priv); 4362306a36Sopenharmony_civoid xrs700x_switch_shutdown(struct xrs700x *priv); 44