Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.13.7.
  1/* SPDX-License-Identifier: GPL-2.0+ */
  2/* Realtek SMI interface driver defines
  3 *
  4 * Copyright (C) 2017 Linus Walleij <linus.walleij@linaro.org>
  5 * Copyright (C) 2009-2010 Gabor Juhos <juhosg@openwrt.org>
  6 */
  7
  8#ifndef _REALTEK_SMI_H
  9#define _REALTEK_SMI_H
 10
 11#include <linux/phy.h>
 12#include <linux/platform_device.h>
 13#include <linux/gpio/consumer.h>
 14#include <net/dsa.h>
 15
 16struct realtek_smi_ops;
 17struct dentry;
 18struct inode;
 19struct file;
 20
 21struct rtl8366_mib_counter {
 22	unsigned int	base;
 23	unsigned int	offset;
 24	unsigned int	length;
 25	const char	*name;
 26};
 27
 28struct rtl8366_vlan_mc {
 29	u16	vid;
 30	u16	untag;
 31	u16	member;
 32	u8	fid;
 33	u8	priority;
 34};
 35
 36struct rtl8366_vlan_4k {
 37	u16	vid;
 38	u16	untag;
 39	u16	member;
 40	u8	fid;
 41};
 42
 43struct realtek_smi {
 44	struct device		*dev;
 45	struct gpio_desc	*reset;
 46	struct gpio_desc	*mdc;
 47	struct gpio_desc	*mdio;
 48	struct regmap		*map;
 49	struct mii_bus		*slave_mii_bus;
 50
 51	unsigned int		clk_delay;
 52	u8			cmd_read;
 53	u8			cmd_write;
 54	spinlock_t		lock; /* Locks around command writes */
 55	struct dsa_switch	*ds;
 56	struct irq_domain	*irqdomain;
 57	bool			leds_disabled;
 58
 59	unsigned int		cpu_port;
 60	unsigned int		num_ports;
 61	unsigned int		num_vlan_mc;
 62	unsigned int		num_mib_counters;
 63	struct rtl8366_mib_counter *mib_counters;
 64
 65	const struct realtek_smi_ops *ops;
 66
 67	int			vlan_enabled;
 68	int			vlan4k_enabled;
 69
 70	char			buf[4096];
 71};
 72
 73/**
 74 * struct realtek_smi_ops - vtable for the per-SMI-chiptype operations
 75 * @detect: detects the chiptype
 76 */
 77struct realtek_smi_ops {
 78	int	(*detect)(struct realtek_smi *smi);
 79	int	(*reset_chip)(struct realtek_smi *smi);
 80	int	(*setup)(struct realtek_smi *smi);
 81	void	(*cleanup)(struct realtek_smi *smi);
 82	int	(*get_mib_counter)(struct realtek_smi *smi,
 83				   int port,
 84				   struct rtl8366_mib_counter *mib,
 85				   u64 *mibvalue);
 86	int	(*get_vlan_mc)(struct realtek_smi *smi, u32 index,
 87			       struct rtl8366_vlan_mc *vlanmc);
 88	int	(*set_vlan_mc)(struct realtek_smi *smi, u32 index,
 89			       const struct rtl8366_vlan_mc *vlanmc);
 90	int	(*get_vlan_4k)(struct realtek_smi *smi, u32 vid,
 91			       struct rtl8366_vlan_4k *vlan4k);
 92	int	(*set_vlan_4k)(struct realtek_smi *smi,
 93			       const struct rtl8366_vlan_4k *vlan4k);
 94	int	(*get_mc_index)(struct realtek_smi *smi, int port, int *val);
 95	int	(*set_mc_index)(struct realtek_smi *smi, int port, int index);
 96	bool	(*is_vlan_valid)(struct realtek_smi *smi, unsigned int vlan);
 97	int	(*enable_vlan)(struct realtek_smi *smi, bool enable);
 98	int	(*enable_vlan4k)(struct realtek_smi *smi, bool enable);
 99	int	(*enable_port)(struct realtek_smi *smi, int port, bool enable);
100	int	(*phy_read)(struct realtek_smi *smi, int phy, int regnum);
101	int	(*phy_write)(struct realtek_smi *smi, int phy, int regnum,
102			     u16 val);
103};
104
105struct realtek_smi_variant {
106	const struct dsa_switch_ops *ds_ops;
107	const struct realtek_smi_ops *ops;
108	unsigned int clk_delay;
109	u8 cmd_read;
110	u8 cmd_write;
111};
112
113/* SMI core calls */
114int realtek_smi_write_reg_noack(struct realtek_smi *smi, u32 addr,
115				u32 data);
116int realtek_smi_setup_mdio(struct realtek_smi *smi);
117
118/* RTL8366 library helpers */
119int rtl8366_mc_is_used(struct realtek_smi *smi, int mc_index, int *used);
120int rtl8366_set_vlan(struct realtek_smi *smi, int vid, u32 member,
121		     u32 untag, u32 fid);
122int rtl8366_get_pvid(struct realtek_smi *smi, int port, int *val);
123int rtl8366_set_pvid(struct realtek_smi *smi, unsigned int port,
124		     unsigned int vid);
125int rtl8366_enable_vlan4k(struct realtek_smi *smi, bool enable);
126int rtl8366_enable_vlan(struct realtek_smi *smi, bool enable);
127int rtl8366_reset_vlan(struct realtek_smi *smi);
128int rtl8366_init_vlan(struct realtek_smi *smi);
129int rtl8366_vlan_filtering(struct dsa_switch *ds, int port,
130			   bool vlan_filtering);
131int rtl8366_vlan_prepare(struct dsa_switch *ds, int port,
132			 const struct switchdev_obj_port_vlan *vlan);
133void rtl8366_vlan_add(struct dsa_switch *ds, int port,
134		      const struct switchdev_obj_port_vlan *vlan);
135int rtl8366_vlan_del(struct dsa_switch *ds, int port,
136		     const struct switchdev_obj_port_vlan *vlan);
137void rtl8366_get_strings(struct dsa_switch *ds, int port, u32 stringset,
138			 uint8_t *data);
139int rtl8366_get_sset_count(struct dsa_switch *ds, int port, int sset);
140void rtl8366_get_ethtool_stats(struct dsa_switch *ds, int port, uint64_t *data);
141
142extern const struct realtek_smi_variant rtl8366rb_variant;
143
144#endif /*  _REALTEK_SMI_H */