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;
                                }
                        }
 
 
 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);
 
        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;
        }
 
 #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];
 
        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);