struct cfg80211_registered_device *rdev;
        int alloc_size;
 
-       WARN_ON(!ops->add_key && ops->del_key);
-       WARN_ON(ops->add_key && !ops->del_key);
+       WARN_ON(ops->add_key && (!ops->del_key || !ops->set_default_key));
+       WARN_ON(ops->auth && (!ops->assoc || !ops->deauth || !ops->disassoc));
+       WARN_ON(ops->connect && !ops->disconnect);
+       WARN_ON(ops->join_ibss && !ops->leave_ibss);
+       WARN_ON(ops->add_virtual_intf && !ops->del_virtual_intf);
+       WARN_ON(ops->add_station && !ops->del_station);
+       WARN_ON(ops->add_mpath && !ops->del_mpath);
 
        alloc_size = sizeof(*rdev) + sizeof_priv;
 
                mutex_destroy(&wdev->mtx);
                break;
        case NETDEV_PRE_UP:
+               if (!(wdev->wiphy->interface_modes & BIT(wdev->iftype)))
+                       return notifier_from_errno(-EOPNOTSUPP);
                if (rfkill_blocked(rdev->rfkill))
                        return notifier_from_errno(-ERFKILL);
                break;