Commit 3e370952 authored by Doug Berger's avatar Doug Berger Committed by David S. Miller

net: bcmgenet: add support for ethtool rxnfc flows

This commit enables driver support for ethtool commands of this form:
ethtool -N|-U|--config-nfc|--config-ntuple devname
    flow-type ether|ip4
    [src xx:yy:zz:aa:bb:cc [m xx:yy:zz:aa:bb:cc]]
    [dst xx:yy:zz:aa:bb:cc [m xx:yy:zz:aa:bb:cc]] [proto N [m N]]
    [src-ip x.x.x.x [m x.x.x.x]] [dst-ip x.x.x.x [m x.x.x.x]] [tos N [m N]]
    [l4proto N [m N]] [src-port N [m N]] [dst-port N [m N]] [spi N [m N]]
    [l4data N [m N]] [vlan-etype N [m N]] [vlan N [m N]]
    [dst-mac xx:yy:zz:aa:bb:cc [m xx:yy:zz:aa:bb:cc]] [action 0] [loc N] |
    delete N

Since there is only one Rx Ring in this implementation action 0 behaves no
differently from not specifying a rule.

The rules can be seen with ethtool commands of this form:
ethtool -n|-u|--show-nfc|--show-ntuple devname [rule N]
Signed-off-by: default avatarDoug Berger <opendmb@gmail.com>
Acked-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 854295d0
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#define DMA_MAX_BURST_LENGTH 0x10 #define DMA_MAX_BURST_LENGTH 0x10
/* misc. configuration */ /* misc. configuration */
#define MAX_NUM_OF_FS_RULES 16
#define CLEAR_ALL_HFB 0xFF #define CLEAR_ALL_HFB 0xFF
#define DMA_FC_THRESH_HI (TOTAL_DESC >> 4) #define DMA_FC_THRESH_HI (TOTAL_DESC >> 4)
#define DMA_FC_THRESH_LO 5 #define DMA_FC_THRESH_LO 5
...@@ -609,6 +610,18 @@ struct bcmgenet_rx_ring { ...@@ -609,6 +610,18 @@ struct bcmgenet_rx_ring {
struct bcmgenet_priv *priv; struct bcmgenet_priv *priv;
}; };
enum bcmgenet_rxnfc_state {
BCMGENET_RXNFC_STATE_UNUSED = 0,
BCMGENET_RXNFC_STATE_DISABLED,
BCMGENET_RXNFC_STATE_ENABLED
};
struct bcmgenet_rxnfc_rule {
struct list_head list;
struct ethtool_rx_flow_spec fs;
enum bcmgenet_rxnfc_state state;
};
/* device context */ /* device context */
struct bcmgenet_priv { struct bcmgenet_priv {
void __iomem *base; void __iomem *base;
...@@ -627,6 +640,8 @@ struct bcmgenet_priv { ...@@ -627,6 +640,8 @@ struct bcmgenet_priv {
struct enet_cb *rx_cbs; struct enet_cb *rx_cbs;
unsigned int num_rx_bds; unsigned int num_rx_bds;
unsigned int rx_buf_len; unsigned int rx_buf_len;
struct bcmgenet_rxnfc_rule rxnfc_rules[MAX_NUM_OF_FS_RULES];
struct list_head rxnfc_list;
struct bcmgenet_rx_ring rx_rings[DESC_INDEX + 1]; struct bcmgenet_rx_ring rx_rings[DESC_INDEX + 1];
...@@ -679,6 +694,7 @@ struct bcmgenet_priv { ...@@ -679,6 +694,7 @@ struct bcmgenet_priv {
u32 wolopts; u32 wolopts;
u8 sopass[SOPASS_MAX]; u8 sopass[SOPASS_MAX];
bool wol_active; bool wol_active;
u32 hfb_en[3];
struct bcmgenet_mib_counters mib; struct bcmgenet_mib_counters mib;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment