29 Apr, 2019

7 commits

  • Now that tag drivers dynamically register, we don't need the static
    table. Remove it. This also means the tag driver structures can be
    made static.

    Signed-off-by: Andrew Lunn
    Reviewed-by: Florian Fainelli
    Signed-off-by: David S. Miller

    Andrew Lunn
     
  • A DSA tag driver module will need to register the tag protocols it
    implements with the DSA core. Add macros containing this boiler plate.

    The registration/unregistration code is currently just a stub. A Later
    patch will add the real implementation.

    Signed-off-by: Andrew Lunn
    Reviewed-by: Florian Fainelli

    v2
    Fix indent of #endif
    Rewrite to move list pointer into a new structure
    v3
    Move kdoc next to macro
    Fix THIS_MODULE indentation

    Signed-off-by: David S. Miller

    Andrew Lunn
     
  • In order that we can match the tagging protocol a switch driver
    request to the tagger, we need to know what protocol the tagger
    supports. Add this information to the ops structure.

    Signed-off-by: Andrew Lunn
    Reviewed-by: Florian Fainelli

    v2
    More tag protocol to end of structure to keep hot members at the beginning.

    Signed-off-by: David S. Miller

    Andrew Lunn
     
  • All the tag drivers are some variant of GPL. Add a MODULE_LICENSE()
    indicating this, so the drivers can later be compiled as modules.

    Signed-off-by: Andrew Lunn
    Reviewed-by: Florian Fainelli
    Signed-off-by: David S. Miller

    Andrew Lunn
     
  • When the tag drivers become modules, we will need to dynamically load
    them based on what the switch drivers need. Add aliases to map between
    the TAG protocol and the driver.

    In order to do this, we need the tag protocol number as something
    which the C pre-processor can stringinfy. Only the compiler knows the
    value of an enum, CPP cannot use them. So add #defines.

    Signed-off-by: Andrew Lunn
    Reviewed-by: Florian Fainelli
    Signed-off-by: David S. Miller

    Andrew Lunn
     
  • Rather than keep a list to map a tagger ops to a name, place the name
    into the ops structure. This removes the hard coded list, a step
    towards making the taggers more dynamic.

    Signed-off-by: Andrew Lunn
    Reviewed-by: Florian Fainelli

    v2:
    Move name to end of structure, keeping the hot entries at the beginning.

    Signed-off-by: David S. Miller

    Andrew Lunn
     
  • Add an SPDX header, and remove the license boilerplate text.

    Signed-off-by: Andrew Lunn
    Reviewed-by: Florian Fainelli
    Signed-off-by: David S. Miller

    Andrew Lunn
     

07 Dec, 2018

1 commit

  • Each DSA tag protocol needs to add additional headers to the Ethernet
    frame in order to direct it towards a specific switch egress port. It
    must also remove the head from a frame received from a
    switch. Indicate the maximum size of these headers in the tag protocol
    ops structure, so the core can take these overheads into account.

    Signed-off-by: Andrew Lunn
    Signed-off-by: David S. Miller

    Andrew Lunn
     

14 Nov, 2017

1 commit


11 Nov, 2017

1 commit


08 Nov, 2017

1 commit


01 Nov, 2017

3 commits

  • The chip flood broadcast and unknown multicast frames.
    On receive set skb->offload_fwd_mark to prevent the SW from flooding to the
    same ports.

    One exception: Because the ALR is set up to forward STP BPDUs only to CPU,
    the SW bridge should flood STP BPDUs if local STP is not enabled.
    This is archived by not setting skb->offload_fwd_mark on STP BPDUs.

    Signed-off-by: Egil Hjelmeland
    Reviewed-by: Andrew Lunn
    Signed-off-by: David S. Miller

    Egil Hjelmeland
     
  • STP BPDUs arriving on user ports must sent to CPU port only,
    for processing by the SW bridge.

    Add an ALR entry with STP state override to fix that.

    Signed-off-by: Egil Hjelmeland
    Reviewed-by: Andrew Lunn
    Signed-off-by: David S. Miller

    Egil Hjelmeland
     
  • lan9303_xmit_use_arl() introduced in previous patch set is wrong.
    The chip flood broadcast and unknown multicast frames. The effect is that
    broadcasts and multicasts are duplicated on egress. It is not possible to
    configure the chip to direct unknown multicasts to CPU port only.

    This means that only unicast frames can be transmitted using ALR lookup.

    Signed-off-by: Egil Hjelmeland
    Reviewed-by: Andrew Lunn
    Signed-off-by: David S. Miller

    Egil Hjelmeland
     

27 Oct, 2017

1 commit

  • When CPU transmit directly to port using tag, the LAN9303 does not
    learn MAC addresses received on the CPU port into the ALR.
    ALR learning is performed only when transmitting using ALR lookup.

    Solution:
    If the two external ports are bridged and the packet is not STP BPDU,
    then use ALR lookup to allow ALR learning on CPU port.
    Otherwise transmit directly to port with STP state override.

    Signed-off-by: Egil Hjelmeland
    Reviewed-by: Andrew Lunn
    Signed-off-by: David S. Miller

    Egil Hjelmeland
     

18 Oct, 2017

2 commits

  • The dsa_master_get_slave is slightly confusing since the idiomatic "get"
    term often suggests reference counting, in symmetry to "put".

    Rename it to dsa_master_find_slave to make the look up operation clear.

    Signed-off-by: Vivien Didelot
    Signed-off-by: David S. Miller

    Vivien Didelot
     
  • Many portions of DSA core code require to get the dsa_port structure
    corresponding to a slave net_device. For this purpose, introduce a
    dsa_slave_to_port() helper.

    Signed-off-by: Vivien Didelot
    Reviewed-by: Florian Fainelli
    Signed-off-by: David S. Miller

    Vivien Didelot
     

01 Oct, 2017

1 commit

  • The DSA tagging code does not need to know about the DSA architecture,
    it only needs to return the slave device corresponding to the source
    port index (and eventually the source device index for cascade-capable
    switches) parsed from the frame received on the master device.

    For this purpose, provide an inline dsa_master_get_slave helper which
    validates the device and port indexes and look up the slave device.

    This makes the tagging rcv functions more concise and robust, and also
    makes dsa_get_cpu_port obsolete.

    Signed-off-by: Vivien Didelot
    Reviewed-by: Florian Fainelli
    Signed-off-by: David S. Miller

    Vivien Didelot
     

22 Aug, 2017

1 commit


09 Aug, 2017

1 commit

  • Save 2628 bytes on arm eabi by allocate only the required 3 ports.

    Now that ds->num_ports is correct: In net/dsa/tag_lan9303.c
    eliminate duplicate LAN9303_MAX_PORTS, use ds->num_ports.
    (Matching the pattern of other net/dsa/tag_xxx.c files.)

    Signed-off-by: Egil Hjelmeland
    Reviewed-by: Florian Fainelli
    Reviewed-by: Vivien Didelot
    Signed-off-by: David S. Miller

    Egil Hjelmeland
     

02 Jun, 2017

1 commit

  • As of a86d8becc3f0 ("net: dsa: Factor bottom tag receive functions"),
    the rcv caller frees the original SKB in case or error.

    Be symmetric with that and make the xmit caller do the same.

    At the same time, fix the checkpatch NULL comparison check:

    CHECK: Comparison to NULL could be written "!nskb"
    #208: FILE: net/dsa/tag_trailer.c:35:
    + if (nskb == NULL)

    Signed-off-by: Vivien Didelot
    Reviewed-by: Florian Fainelli
    Signed-off-by: David S. Miller

    Vivien Didelot
     

18 May, 2017

1 commit

  • The public include/net/dsa.h file is meant for DSA drivers, while all
    DSA core files share a common private header net/dsa/dsa_priv.h file.

    Ensure that dsa_priv.h is the only DSA core file to include net/dsa.h,
    and add a new line to separate absolute and relative headers at the same
    time.

    Signed-off-by: Vivien Didelot
    Signed-off-by: David S. Miller

    Vivien Didelot
     

21 Apr, 2017

2 commits

  • tag_lan9303.c does check for a NULL dst but that's already checked by
    dsa_switch_rcv() one layer above.

    Signed-off-by: Florian Fainelli
    Acked-by: Juergen Borleis
    Signed-off-by: David S. Miller

    Florian Fainelli
     
  • To define the outgoing port and to discover the incoming port a regular
    VLAN tag is used by the LAN9303. But its VID meaning is 'special'.

    This tag handler/filter depends on some hardware features which must be
    enabled in the device to provide and make use of this special VLAN tag
    to control the destination and the source of an ethernet packet.

    Signed-off-by: Juergen Borleis
    Reviewed-by: Florian Fainelli
    Signed-off-by: David S. Miller

    Juergen Beisert