int mlx5e_nic_rep_load(struct mlx5_eswitch *esw, struct mlx5_eswitch_rep *rep)
 {
-       struct mlx5e_priv *priv = rep->priv_data;
+       struct net_device *netdev = rep->netdev;
+       struct mlx5e_priv *priv = netdev_priv(netdev);
 
        if (test_bit(MLX5E_STATE_OPENED, &priv->state))
                return mlx5e_add_sqs_fwd_rules(priv);
 void mlx5e_nic_rep_unload(struct mlx5_eswitch *esw,
                          struct mlx5_eswitch_rep *rep)
 {
-       struct mlx5e_priv *priv = rep->priv_data;
+       struct net_device *netdev = rep->netdev;
+       struct mlx5e_priv *priv = netdev_priv(netdev);
 
        if (test_bit(MLX5E_STATE_OPENED, &priv->state))
                mlx5e_remove_sqs_fwd_rules(priv);
                return -EINVAL;
        }
 
-       rep->priv_data = netdev_priv(netdev);
+       rep->netdev = netdev;
 
        err = mlx5e_attach_netdev(esw->dev, netdev);
        if (err) {
        mlx5e_detach_netdev(esw->dev, netdev);
 
 err_destroy_netdev:
-       mlx5e_destroy_netdev(esw->dev, rep->priv_data);
+       mlx5e_destroy_netdev(esw->dev, netdev_priv(netdev));
 
        return err;
 
 void mlx5e_vport_rep_unload(struct mlx5_eswitch *esw,
                            struct mlx5_eswitch_rep *rep)
 {
-       struct mlx5e_priv *priv = rep->priv_data;
-       struct net_device *netdev = priv->netdev;
+       struct net_device *netdev = rep->netdev;
 
        unregister_netdev(netdev);
        mlx5e_detach_netdev(esw->dev, netdev);
-       mlx5e_destroy_netdev(esw->dev, priv);
+       mlx5e_destroy_netdev(esw->dev, netdev_priv(netdev));
 }
 
                                         struct mlx5_eswitch_rep *rep);
        u16                    vport;
        u8                     hw_id[ETH_ALEN];
-       void                  *priv_data;
+       struct net_device      *netdev;
 
        struct mlx5_flow_handle *vport_rx_rule;
        struct list_head       vport_sqs_list;
                                     struct mlx5_eswitch_rep *rep);
 void mlx5_eswitch_unregister_vport_rep(struct mlx5_eswitch *esw,
                                       int vport_index);
+struct net_device *mlx5_eswitch_get_uplink_netdev(struct mlx5_eswitch *esw);
 
 int mlx5_eswitch_add_vlan_action(struct mlx5_eswitch *esw,
                                 struct mlx5_esw_flow_attr *attr);
 
        rep->load   = __rep->load;
        rep->unload = __rep->unload;
        rep->vport  = __rep->vport;
-       rep->priv_data = __rep->priv_data;
+       rep->netdev = __rep->netdev;
        ether_addr_copy(rep->hw_id, __rep->hw_id);
 
        INIT_LIST_HEAD(&rep->vport_sqs_list);
 
        rep->valid = false;
 }
+
+struct net_device *mlx5_eswitch_get_uplink_netdev(struct mlx5_eswitch *esw)
+{
+#define UPLINK_REP_INDEX 0
+       struct mlx5_esw_offload *offloads = &esw->offloads;
+       struct mlx5_eswitch_rep *rep;
+
+       rep = &offloads->vport_reps[UPLINK_REP_INDEX];
+       return rep->netdev;
+}