lp->spi = spi;
        lp->slp_tr = slp_tr;
        hw->parent = &spi->dev;
-       hw->vif_data_size = sizeof(*lp);
        ieee802154_random_extended_addr(&hw->phy->perm_extended_addr);
 
        lp->regmap = devm_regmap_init_spi(spi, &at86rf230_regmap_spi_config);
 
        priv->hw->priv = priv;
        priv->hw->parent = &priv->spi->dev;
        priv->hw->extra_tx_headroom = 0;
-       priv->hw->vif_data_size = sizeof(*priv);
        ieee802154_random_extended_addr(&priv->hw->phy->perm_extended_addr);
 
        /* We do support only 2.4 Ghz */
 
        u8      pan_coord;
 };
 
-struct ieee802154_vif {
-       int type;
-
-       /* must be last */
-       u8 drv_priv[0] __aligned(sizeof(void *));
-};
-
 struct ieee802154_hw {
        /* filled by the driver */
        int     extra_tx_headroom;
        struct  ieee802154_hw_addr_filt hw_filt;
        void    *priv;
        struct  wpan_phy *phy;
-       size_t vif_data_size;
 };
 
 /* Checksum is in hardware and is omitted from a packet
 
        struct mutex sec_mtx;
 
        struct mac802154_llsec sec;
-       /* must be last, dynamically sized area in this! */
-       struct ieee802154_vif vif;
 };
 
 #define MAC802154_CHAN_NONE            0xff /* No channel is assigned */
 
                         * exist really an use case if we need to support
                         * multiple node types at the same time.
                         */
-                       if (sdata->vif.type == NL802154_IFTYPE_NODE &&
-                           nsdata->vif.type == NL802154_IFTYPE_NODE)
+                       if (wpan_dev->iftype == NL802154_IFTYPE_NODE &&
+                           nsdata->wpan_dev.iftype == NL802154_IFTYPE_NODE)
                                return -EBUSY;
 
                        /* check all phy mac sublayer settings are the same.
        struct ieee802154_local *local = sdata->local;
        struct wpan_dev *wpan_dev = &sdata->wpan_dev;
 
-       rc = ieee802154_check_concurrent_iface(sdata, sdata->vif.type);
+       rc = ieee802154_check_concurrent_iface(sdata, wpan_dev->iftype);
        if (rc < 0)
                return rc;
 
        u8 tmp;
 
        /* set some type-dependent values */
-       sdata->vif.type = type;
        sdata->wpan_dev.iftype = type;
 
        get_random_bytes(&tmp, sizeof(tmp));
 
        ASSERT_RTNL();
 
-       ndev = alloc_netdev(sizeof(*sdata) + local->hw.vif_data_size, name,
+       ndev = alloc_netdev(sizeof(*sdata), name,
                            name_assign_type, ieee802154_if_setup);
        if (!ndev)
                return ERR_PTR(-ENOMEM);
 
        }
 
        list_for_each_entry_rcu(sdata, &local->interfaces, list) {
-               if (sdata->vif.type != NL802154_IFTYPE_NODE ||
+               if (sdata->wpan_dev.iftype != NL802154_IFTYPE_NODE ||
                    !netif_running(sdata->dev))
                        continue;
 
        skb->protocol = htons(ETH_P_IEEE802154);
 
        list_for_each_entry_rcu(sdata, &local->interfaces, list) {
-               if (sdata->vif.type != NL802154_IFTYPE_MONITOR)
+               if (sdata->wpan_dev.iftype != NL802154_IFTYPE_MONITOR)
                        continue;
 
                if (!ieee802154_sdata_running(sdata))