linux/drivers/net/dsa/sja1105
Vladimir Oltean 5899ee367a net: dsa: tag_8021q: add a context structure
While working on another tag_8021q driver implementation, some things
became apparent:

- It is not mandatory for a DSA driver to offload the tag_8021q VLANs by
  using the VLAN table per se. For example, it can add custom TCAM rules
  that simply encapsulate RX traffic, and redirect & decapsulate rules
  for TX traffic. For such a driver, it makes no sense to receive the
  tag_8021q configuration through the same callback as it receives the
  VLAN configuration from the bridge and the 8021q modules.

- Currently, sja1105 (the only tag_8021q user) sets a
  priv->expect_dsa_8021q variable to distinguish between the bridge
  calling, and tag_8021q calling. That can be improved, to say the
  least.

- The crosschip bridging operations are, in fact, stateful already. The
  list of crosschip_links must be kept by the caller and passed to the
  relevant tag_8021q functions.

So it would be nice if the tag_8021q configuration was more
self-contained. This patch attempts to do that.

Create a struct dsa_8021q_context which encapsulates a struct
dsa_switch, and has 2 function pointers for adding and deleting a VLAN.
These will replace the previous channel to the driver, which was through
the .port_vlan_add and .port_vlan_del callbacks of dsa_switch_ops.

Also put the list of crosschip_links into this dsa_8021q_context.
Drivers that don't support cross-chip bridging can simply omit to
initialize this list, as long as they dont call any cross-chip function.

The sja1105_vlan_add and sja1105_vlan_del functions are refactored into
a smaller sja1105_vlan_add_one, which now has 2 entry points:
- sja1105_vlan_add, from struct dsa_switch_ops
- sja1105_dsa_8021q_vlan_add, from the tag_8021q ops
But even this change is fairly trivial. It just reflects the fact that
for sja1105, the VLANs from these 2 channels end up in the same hardware
table. However that is not necessarily true in the general sense (and
that's the reason for making this change).

The rest of the patch is mostly plain refactoring of "ds" -> "ctx". The
dsa_8021q_context structure needs to be propagated because adding a VLAN
is now done through the ops function pointers inside of it.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2020-09-11 17:30:43 -07:00
..
Kconfig net: dsa: sja1105: support flow-based redirection via virtual links 2020-05-07 17:31:57 -07:00
Makefile net: dsa: sja1105: support flow-based redirection via virtual links 2020-05-07 17:31:57 -07:00
sja1105.h net: dsa: tag_8021q: add a context structure 2020-09-11 17:30:43 -07:00
sja1105_clocking.c net: dsa: sja1105: enable internal pull-down for RX_DV/CRS_DV/RX_CTL and RX_ER 2020-04-20 11:00:27 -07:00
sja1105_dynamic_config.c net: dsa: sja1105: make config table operation structures constant 2020-06-22 16:01:29 -07:00
sja1105_dynamic_config.h net: dsa: sja1105: make config table operation structures constant 2020-06-22 16:01:29 -07:00
sja1105_ethtool.c dsa: sja1105: fix semicolon.cocci warnings 2020-05-10 11:05:46 -07:00
sja1105_flower.c net:qos: police action offloading parameter 'burst' change to the original value 2020-06-29 17:33:42 -07:00
sja1105_main.c net: dsa: tag_8021q: add a context structure 2020-09-11 17:30:43 -07:00
sja1105_ptp.c net: dsa: sja1105: poll for extts events from a timer 2020-08-03 18:16:02 -07:00
sja1105_ptp.h net: dsa: sja1105: poll for extts events from a timer 2020-08-03 18:16:02 -07:00
sja1105_sgmii.h net: dsa: sja1105: Add support for the SGMII port 2020-03-20 08:55:21 -07:00
sja1105_spi.c net: dsa: sja1105: make the instantiations of struct sja1105_info constant 2020-06-22 16:01:29 -07:00
sja1105_static_config.c net: dsa: sja1105: make config table operation structures constant 2020-06-22 16:01:29 -07:00
sja1105_static_config.h net: dsa: sja1105: make config table operation structures constant 2020-06-22 16:01:29 -07:00
sja1105_tas.c net: dsa: sja1105: Use struct_size() in kzalloc() 2020-06-19 13:42:08 -07:00
sja1105_tas.h net: dsa: sja1105: implement tc-gate using time-triggered virtual links 2020-05-07 17:31:57 -07:00
sja1105_vl.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2020-06-25 19:29:51 -07:00
sja1105_vl.h net: dsa: sja1105: suppress -Wmissing-prototypes in sja1105_vl.c 2020-06-01 12:13:47 -07:00