You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
134 lines
5.3 KiB
134 lines
5.3 KiB
From ec66a49c87cc5c330633d0b0eb8e3aabff214052 Mon Sep 17 00:00:00 2001
|
|
From: Igor Russkikh <irusskik@redhat.com>
|
|
Date: Fri, 6 Nov 2020 18:37:55 -0500
|
|
Subject: [PATCH 098/139] [netdrv] net: atlantic: make TCVEC2RING accept
|
|
nic_cfg
|
|
|
|
Message-id: <1604687916-15087-99-git-send-email-irusskik@redhat.com>
|
|
Patchwork-id: 338523
|
|
Patchwork-instance: patchwork
|
|
O-Subject: [RHEL8.4 BZ 1857861 098/139] net: atlantic: make TCVEC2RING accept nic_cfg
|
|
Bugzilla: 1857861
|
|
RH-Acked-by: David Arcari <darcari@redhat.com>
|
|
RH-Acked-by: John Linville <linville@redhat.com>
|
|
RH-Acked-by: Tony Camuso <tcamuso@redhat.com>
|
|
|
|
Bugzilla: http://bugzilla.redhat.com/1857861
|
|
|
|
commit b9e989262a3e2e9b795361a7e7978d64851eb98f
|
|
Author: Mark Starovoytov <mstarovoitov@marvell.com>
|
|
Date: Fri May 22 11:19:42 2020 +0300
|
|
|
|
net: atlantic: make TCVEC2RING accept nic_cfg
|
|
|
|
This patch updates TCVEC2RING to accept nic_cfg, which is needed to be able
|
|
to use it from hw_atl.
|
|
The name is updated to reflect the changes.
|
|
|
|
Signed-off-by: Mark Starovoytov <mstarovoitov@marvell.com>
|
|
Signed-off-by: Igor Russkikh <irusskikh@marvell.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
|
|
Signed-off-by: Igor Russkikh <irusskik@redhat.com>
|
|
|
|
Cc: David Arcari <darcari@redhat.com>
|
|
Cc: Igor Russkikh <irusskik@redhat.com>
|
|
Signed-off-by: Jan Stancek <jstancek@redhat.com>
|
|
---
|
|
drivers/net/ethernet/aquantia/atlantic/aq_ethtool.c | 2 +-
|
|
drivers/net/ethernet/aquantia/atlantic/aq_nic.c | 9 +++++----
|
|
drivers/net/ethernet/aquantia/atlantic/aq_nic.h | 13 +++++++------
|
|
drivers/net/ethernet/aquantia/atlantic/aq_vec.c | 3 ++-
|
|
4 files changed, 15 insertions(+), 12 deletions(-)
|
|
|
|
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_ethtool.c b/drivers/net/ethernet/aquantia/atlantic/aq_ethtool.c
|
|
index e0d45cda1d11..ff1e254f7471 100644
|
|
--- a/drivers/net/ethernet/aquantia/atlantic/aq_ethtool.c
|
|
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_ethtool.c
|
|
@@ -179,7 +179,7 @@ static void aq_ethtool_get_strings(struct net_device *ndev,
|
|
snprintf(p, ETH_GSTRING_LEN,
|
|
aq_ethtool_queue_stat_names[si],
|
|
tc_string,
|
|
- AQ_NIC_TCVEC2RING(nic, tc, i));
|
|
+ AQ_NIC_CFG_TCVEC2RING(cfg, tc, i));
|
|
p += ETH_GSTRING_LEN;
|
|
}
|
|
}
|
|
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
|
|
index ab6f42d6f26f..b77053c8bd47 100644
|
|
--- a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
|
|
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
|
|
@@ -685,15 +685,16 @@ unsigned int aq_nic_map_skb(struct aq_nic_s *self, struct sk_buff *skb,
|
|
|
|
int aq_nic_xmit(struct aq_nic_s *self, struct sk_buff *skb)
|
|
{
|
|
- unsigned int vec = skb->queue_mapping % self->aq_nic_cfg.vecs;
|
|
- unsigned int tc = skb->queue_mapping / self->aq_nic_cfg.vecs;
|
|
+ struct aq_nic_cfg_s *cfg = aq_nic_get_cfg(self);
|
|
+ unsigned int vec = skb->queue_mapping % cfg->vecs;
|
|
+ unsigned int tc = skb->queue_mapping / cfg->vecs;
|
|
struct aq_ring_s *ring = NULL;
|
|
unsigned int frags = 0U;
|
|
int err = NETDEV_TX_OK;
|
|
|
|
frags = skb_shinfo(skb)->nr_frags + 1;
|
|
|
|
- ring = self->aq_ring_tx[AQ_NIC_TCVEC2RING(self, tc, vec)];
|
|
+ ring = self->aq_ring_tx[AQ_NIC_CFG_TCVEC2RING(cfg, tc, vec)];
|
|
|
|
if (frags > AQ_CFG_SKB_FRAGS_MAX) {
|
|
dev_kfree_skb_any(skb);
|
|
@@ -702,7 +703,7 @@ int aq_nic_xmit(struct aq_nic_s *self, struct sk_buff *skb)
|
|
|
|
aq_ring_update_queue_state(ring);
|
|
|
|
- if (self->aq_nic_cfg.priv_flags & BIT(AQ_HW_LOOPBACK_DMA_NET)) {
|
|
+ if (cfg->priv_flags & BIT(AQ_HW_LOOPBACK_DMA_NET)) {
|
|
err = NETDEV_TX_BUSY;
|
|
goto err_exit;
|
|
}
|
|
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_nic.h b/drivers/net/ethernet/aquantia/atlantic/aq_nic.h
|
|
index 75e1a4603c49..7ab08af8d7ce 100644
|
|
--- a/drivers/net/ethernet/aquantia/atlantic/aq_nic.h
|
|
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic.h
|
|
@@ -80,15 +80,16 @@ struct aq_nic_cfg_s {
|
|
#define AQ_NIC_WOL_MODES (WAKE_MAGIC |\
|
|
WAKE_PHY)
|
|
|
|
-#define AQ_NIC_RING_PER_TC(_NIC_) \
|
|
- (((_NIC_)->aq_nic_cfg.tc_mode == AQ_TC_MODE_4TCS) ? 8 : 4)
|
|
+#define AQ_NIC_CFG_RING_PER_TC(_NIC_CFG_) \
|
|
+ (((_NIC_CFG_)->tc_mode == AQ_TC_MODE_4TCS) ? 8 : 4)
|
|
|
|
-#define AQ_NIC_TCVEC2RING(_NIC_, _TC_, _VEC_) \
|
|
- ((_TC_) * AQ_NIC_RING_PER_TC(_NIC_) + (_VEC_))
|
|
+#define AQ_NIC_CFG_TCVEC2RING(_NIC_CFG_, _TC_, _VEC_) \
|
|
+ ((_TC_) * AQ_NIC_CFG_RING_PER_TC(_NIC_CFG_) + (_VEC_))
|
|
|
|
#define AQ_NIC_RING2QMAP(_NIC_, _ID_) \
|
|
- ((_ID_) / AQ_NIC_RING_PER_TC(_NIC_) * (_NIC_)->aq_vecs + \
|
|
- ((_ID_) % AQ_NIC_RING_PER_TC(_NIC_)))
|
|
+ ((_ID_) / AQ_NIC_CFG_RING_PER_TC(&(_NIC_)->aq_nic_cfg) * \
|
|
+ (_NIC_)->aq_vecs + \
|
|
+ ((_ID_) % AQ_NIC_CFG_RING_PER_TC(&(_NIC_)->aq_nic_cfg)))
|
|
|
|
struct aq_hw_rx_fl2 {
|
|
struct aq_rx_filter_vlan aq_vlans[AQ_VLAN_MAX_FILTERS];
|
|
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_vec.c b/drivers/net/ethernet/aquantia/atlantic/aq_vec.c
|
|
index 41826c10700f..d1d43c8ce400 100644
|
|
--- a/drivers/net/ethernet/aquantia/atlantic/aq_vec.c
|
|
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_vec.c
|
|
@@ -135,7 +135,8 @@ int aq_vec_ring_alloc(struct aq_vec_s *self, struct aq_nic_s *aq_nic,
|
|
int err = 0;
|
|
|
|
for (i = 0; i < aq_nic_cfg->tcs; ++i) {
|
|
- unsigned int idx_ring = AQ_NIC_TCVEC2RING(aq_nic, i, idx);
|
|
+ const unsigned int idx_ring = AQ_NIC_CFG_TCVEC2RING(aq_nic_cfg,
|
|
+ i, idx);
|
|
|
|
ring = aq_ring_tx_alloc(&self->ring[i][AQ_VEC_TX_ID], aq_nic,
|
|
idx_ring, aq_nic_cfg);
|
|
--
|
|
2.13.6
|
|
|