if (err)
                goto err_free_frags;
 
-       rq->mkey_be = cpu_to_be32(priv->mdev->mlx5e_res.mkey.key);
+       rq->mkey_be = cpu_to_be32(mdev->mlx5e_res.hw_objs.mkey.key);
 
        mlx5e_rq_set_trap_handlers(rq, params);
 
                return -ENOMEM;
 
        tirc = MLX5_ADDR_OF(create_tir_in, in, ctx);
-       MLX5_SET(tirc, tirc, transport_domain, mdev->mlx5e_res.td.tdn);
+       MLX5_SET(tirc, tirc, transport_domain, mdev->mlx5e_res.hw_objs.td.tdn);
        MLX5_SET(tirc, tirc, rx_hash_fn, MLX5_RX_HASH_FN_NONE);
        MLX5_SET(tirc, tirc, disp_type, MLX5_TIRC_DISP_TYPE_DIRECT);
        MLX5_SET(tirc, tirc, inline_rqn, rqn);
        t->tstamp   = &priv->tstamp;
        t->pdev     = mlx5_core_dma_dev(priv->mdev);
        t->netdev   = priv->netdev;
-       t->mkey_be  = cpu_to_be32(priv->mdev->mlx5e_res.mkey.key);
+       t->mkey_be  = cpu_to_be32(priv->mdev->mlx5e_res.hw_objs.mkey.key);
        t->stats    = &priv->trap_stats.ch;
 
        netif_napi_add(netdev, &t->napi, mlx5e_trap_napi_poll, 64);
 
 
 int mlx5e_create_tir(struct mlx5_core_dev *mdev, struct mlx5e_tir *tir, u32 *in)
 {
+       struct mlx5e_hw_objs *res = &mdev->mlx5e_res.hw_objs;
        int err;
 
        err = mlx5_core_create_tir(mdev, in, &tir->tirn);
        if (err)
                return err;
 
-       mutex_lock(&mdev->mlx5e_res.td.list_lock);
-       list_add(&tir->list, &mdev->mlx5e_res.td.tirs_list);
-       mutex_unlock(&mdev->mlx5e_res.td.list_lock);
+       mutex_lock(&res->td.list_lock);
+       list_add(&tir->list, &res->td.tirs_list);
+       mutex_unlock(&res->td.list_lock);
 
        return 0;
 }
 void mlx5e_destroy_tir(struct mlx5_core_dev *mdev,
                       struct mlx5e_tir *tir)
 {
-       mutex_lock(&mdev->mlx5e_res.td.list_lock);
+       struct mlx5e_hw_objs *res = &mdev->mlx5e_res.hw_objs;
+
+       mutex_lock(&res->td.list_lock);
        mlx5_core_destroy_tir(mdev, tir->tirn);
        list_del(&tir->list);
-       mutex_unlock(&mdev->mlx5e_res.td.list_lock);
+       mutex_unlock(&res->td.list_lock);
 }
 
 void mlx5e_mkey_set_relaxed_ordering(struct mlx5_core_dev *mdev, void *mkc)
 
 int mlx5e_create_mdev_resources(struct mlx5_core_dev *mdev)
 {
-       struct mlx5e_resources *res = &mdev->mlx5e_res;
+       struct mlx5e_hw_objs *res = &mdev->mlx5e_res.hw_objs;
        int err;
 
        err = mlx5_core_alloc_pd(mdev, &res->pdn);
                goto err_destroy_mkey;
        }
 
-       INIT_LIST_HEAD(&mdev->mlx5e_res.td.tirs_list);
-       mutex_init(&mdev->mlx5e_res.td.list_lock);
+       INIT_LIST_HEAD(&res->td.tirs_list);
+       mutex_init(&res->td.list_lock);
 
        return 0;
 
 
 void mlx5e_destroy_mdev_resources(struct mlx5_core_dev *mdev)
 {
-       struct mlx5e_resources *res = &mdev->mlx5e_res;
+       struct mlx5e_hw_objs *res = &mdev->mlx5e_res.hw_objs;
 
        mlx5_free_bfreg(mdev, &res->bfreg);
        mlx5_core_destroy_mkey(mdev, &res->mkey);
 
        MLX5_SET(modify_tir_in, in, bitmask.self_lb_en, 1);
 
-       mutex_lock(&mdev->mlx5e_res.td.list_lock);
-       list_for_each_entry(tir, &mdev->mlx5e_res.td.tirs_list, list) {
+       mutex_lock(&mdev->mlx5e_res.hw_objs.td.list_lock);
+       list_for_each_entry(tir, &mdev->mlx5e_res.hw_objs.td.tirs_list, list) {
                tirn = tir->tirn;
                err = mlx5_core_modify_tir(mdev, tirn, in);
                if (err)
        kvfree(in);
        if (err)
                netdev_err(priv->netdev, "refresh tir(0x%x) failed, %d\n", tirn, err);
-       mutex_unlock(&mdev->mlx5e_res.td.list_lock);
+       mutex_unlock(&mdev->mlx5e_res.hw_objs.td.list_lock);
 
        return err;
 }
 
        MLX5_SET(mkc, mkc, access_mode_1_0, MLX5_MKC_ACCESS_MODE_MTT);
        mlx5e_mkey_set_relaxed_ordering(mdev, mkc);
        MLX5_SET(mkc, mkc, qpn, 0xffffff);
-       MLX5_SET(mkc, mkc, pd, mdev->mlx5e_res.pdn);
+       MLX5_SET(mkc, mkc, pd, mdev->mlx5e_res.hw_objs.pdn);
        MLX5_SET64(mkc, mkc, len, npages << page_shift);
        MLX5_SET(mkc, mkc, translations_octword_size,
                 MLX5_MTT_OCTW(npages));
        sq->pdev      = c->pdev;
        sq->mkey_be   = c->mkey_be;
        sq->channel   = c;
-       sq->uar_map   = mdev->mlx5e_res.bfreg.map;
+       sq->uar_map   = mdev->mlx5e_res.hw_objs.bfreg.map;
        sq->min_inline_mode = params->tx_min_inline_mode;
        sq->hw_mtu    = MLX5E_SW2HW_MTU(params, params->sw_mtu);
        sq->xsk_pool  = xsk_pool;
        int err;
 
        sq->channel   = c;
-       sq->uar_map   = mdev->mlx5e_res.bfreg.map;
+       sq->uar_map   = mdev->mlx5e_res.hw_objs.bfreg.map;
 
        param->wq.db_numa_node = cpu_to_node(c->cpu);
        err = mlx5_wq_cyc_create(mdev, ¶m->wq, sqc_wq, wq, &sq->wq_ctrl);
        sq->priv      = c->priv;
        sq->ch_ix     = c->ix;
        sq->txq_ix    = txq_ix;
-       sq->uar_map   = mdev->mlx5e_res.bfreg.map;
+       sq->uar_map   = mdev->mlx5e_res.hw_objs.bfreg.map;
        sq->min_inline_mode = params->tx_min_inline_mode;
        sq->hw_mtu    = MLX5E_SW2HW_MTU(params, params->sw_mtu);
        INIT_WORK(&sq->recover_work, mlx5e_tx_err_cqe_work);
        MLX5_SET(sqc,  sqc, flush_in_error_en, 1);
 
        MLX5_SET(wq,   wq, wq_type,       MLX5_WQ_TYPE_CYCLIC);
-       MLX5_SET(wq,   wq, uar_page,      mdev->mlx5e_res.bfreg.index);
+       MLX5_SET(wq,   wq, uar_page,      mdev->mlx5e_res.hw_objs.bfreg.index);
        MLX5_SET(wq,   wq, log_wq_pg_sz,  csp->wq_ctrl->buf.page_shift -
                                          MLX5_ADAPTER_PAGE_SHIFT);
        MLX5_SET64(wq, wq, dbr_addr,      csp->wq_ctrl->db.dma);
        c->cpu      = cpu;
        c->pdev     = mlx5_core_dma_dev(priv->mdev);
        c->netdev   = priv->netdev;
-       c->mkey_be  = cpu_to_be32(priv->mdev->mlx5e_res.mkey.key);
+       c->mkey_be  = cpu_to_be32(priv->mdev->mlx5e_res.hw_objs.mkey.key);
        c->num_tc   = params->num_tc;
        c->xdp      = !!params->xdp_prog;
        c->stats    = &priv->channel_stats[ix].ch;
        MLX5_SET(wq, wq, end_padding_mode, MLX5_WQ_END_PAD_MODE_ALIGN);
        MLX5_SET(wq, wq, log_wq_stride,
                 mlx5e_get_rqwq_log_stride(params->rq_wq_type, ndsegs));
-       MLX5_SET(wq, wq, pd,               mdev->mlx5e_res.pdn);
+       MLX5_SET(wq, wq, pd,               mdev->mlx5e_res.hw_objs.pdn);
        MLX5_SET(rqc, rqc, counter_set_id, priv->q_counter);
        MLX5_SET(rqc, rqc, vsd,            params->vlan_strip_disable);
        MLX5_SET(rqc, rqc, scatter_fcs,    params->scatter_fcs_en);
        void *wq = MLX5_ADDR_OF(sqc, sqc, wq);
 
        MLX5_SET(wq, wq, log_wq_stride, ilog2(MLX5_SEND_WQE_BB));
-       MLX5_SET(wq, wq, pd,            priv->mdev->mlx5e_res.pdn);
+       MLX5_SET(wq, wq, pd,            priv->mdev->mlx5e_res.hw_objs.pdn);
 
        param->wq.buf_numa_node = dev_to_node(mlx5_core_dma_dev(priv->mdev));
 }
 {
        void *tisc = MLX5_ADDR_OF(create_tis_in, in, ctx);
 
-       MLX5_SET(tisc, tisc, transport_domain, mdev->mlx5e_res.td.tdn);
+       MLX5_SET(tisc, tisc, transport_domain, mdev->mlx5e_res.hw_objs.td.tdn);
 
        if (MLX5_GET(tisc, tisc, tls_en))
-               MLX5_SET(tisc, tisc, pd, mdev->mlx5e_res.pdn);
+               MLX5_SET(tisc, tisc, pd, mdev->mlx5e_res.hw_objs.pdn);
 
        if (mlx5_lag_is_lacp_owner(mdev))
                MLX5_SET(tisc, tisc, strict_lag_tx_port_affinity, 1);
 static void mlx5e_build_indir_tir_ctx_common(struct mlx5e_priv *priv,
                                             u32 rqtn, u32 *tirc)
 {
-       MLX5_SET(tirc, tirc, transport_domain, priv->mdev->mlx5e_res.td.tdn);
+       MLX5_SET(tirc, tirc, transport_domain, priv->mdev->mlx5e_res.hw_objs.td.tdn);
        MLX5_SET(tirc, tirc, disp_type, MLX5_TIRC_DISP_TYPE_INDIRECT);
        MLX5_SET(tirc, tirc, indirect_table, rqtn);
        MLX5_SET(tirc, tirc, tunneled_offload_en,