sdata_info(sdata,
                                   "failed to use reserved channel context, disconnecting (err=%d)\n",
                                   ret);
-                       ieee80211_queue_work(&sdata->local->hw,
-                                            &ifmgd->csa_connection_drop_work);
+                       wiphy_work_queue(sdata->local->hw.wiphy,
+                                        &ifmgd->csa_connection_drop_work);
                        goto out;
                }
 
                                        &link->csa_chandef)) {
                sdata_info(sdata,
                           "failed to finalize channel switch, disconnecting\n");
-               ieee80211_queue_work(&sdata->local->hw,
-                                    &ifmgd->csa_connection_drop_work);
+               wiphy_work_queue(sdata->local->hw.wiphy,
+                                &ifmgd->csa_connection_drop_work);
                goto out;
        }
 
        if (ret) {
                sdata_info(sdata,
                           "driver post channel switch failed, disconnecting\n");
-               ieee80211_queue_work(&local->hw,
-                                    &ifmgd->csa_connection_drop_work);
+               wiphy_work_queue(sdata->local->hw.wiphy,
+                                &ifmgd->csa_connection_drop_work);
                return;
        }
 
        if (!success) {
                sdata_info(sdata,
                           "driver channel switch failed, disconnecting\n");
-               ieee80211_queue_work(&sdata->local->hw,
-                                    &ifmgd->csa_connection_drop_work);
+               wiphy_work_queue(sdata->local->hw.wiphy,
+                                &ifmgd->csa_connection_drop_work);
        } else {
                wiphy_delayed_work_queue(sdata->local->hw.wiphy,
                                         &sdata->deflink.u.mgd.chswitch_work,
        link->conf->csa_active = true;
        link->csa_block_tx = csa_ie.mode;
 
-       ieee80211_queue_work(&local->hw, &ifmgd->csa_connection_drop_work);
+       wiphy_work_queue(sdata->local->hw.wiphy,
+                        &ifmgd->csa_connection_drop_work);
        mutex_unlock(&local->chanctx_mtx);
        mutex_unlock(&local->mtx);
 }
        sdata_unlock(sdata);
 }
 
-static void ieee80211_beacon_connection_loss_work(struct work_struct *work)
+static void ieee80211_beacon_connection_loss_work(struct wiphy *wiphy,
+                                                 struct wiphy_work *work)
 {
        struct ieee80211_sub_if_data *sdata =
                container_of(work, struct ieee80211_sub_if_data,
        }
 }
 
-static void ieee80211_csa_connection_drop_work(struct work_struct *work)
+static void ieee80211_csa_connection_drop_work(struct wiphy *wiphy,
+                                              struct wiphy_work *work)
 {
        struct ieee80211_sub_if_data *sdata =
                container_of(work, struct ieee80211_sub_if_data,
        trace_api_beacon_loss(sdata);
 
        sdata->u.mgd.connection_loss = false;
-       ieee80211_queue_work(hw, &sdata->u.mgd.beacon_connection_loss_work);
+       wiphy_work_queue(hw->wiphy, &sdata->u.mgd.beacon_connection_loss_work);
 }
 EXPORT_SYMBOL(ieee80211_beacon_loss);
 
        trace_api_connection_loss(sdata);
 
        sdata->u.mgd.connection_loss = true;
-       ieee80211_queue_work(hw, &sdata->u.mgd.beacon_connection_loss_work);
+       wiphy_work_queue(hw->wiphy, &sdata->u.mgd.beacon_connection_loss_work);
 }
 EXPORT_SYMBOL(ieee80211_connection_loss);
 
 
        sdata->u.mgd.driver_disconnect = true;
        sdata->u.mgd.reconnect = reconnect;
-       ieee80211_queue_work(hw, &sdata->u.mgd.beacon_connection_loss_work);
+       wiphy_work_queue(hw->wiphy, &sdata->u.mgd.beacon_connection_loss_work);
 }
 EXPORT_SYMBOL(ieee80211_disconnect);
 
                return;
 
        sdata->u.mgd.connection_loss = false;
-       ieee80211_queue_work(&sdata->local->hw,
-                            &sdata->u.mgd.beacon_connection_loss_work);
+       wiphy_work_queue(sdata->local->hw.wiphy,
+                        &sdata->u.mgd.beacon_connection_loss_work);
 }
 
 static void ieee80211_sta_conn_mon_timer(struct timer_list *t)
        struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
 
        INIT_WORK(&ifmgd->monitor_work, ieee80211_sta_monitor_work);
-       INIT_WORK(&ifmgd->beacon_connection_loss_work,
-                 ieee80211_beacon_connection_loss_work);
-       INIT_WORK(&ifmgd->csa_connection_drop_work,
-                 ieee80211_csa_connection_drop_work);
+       wiphy_work_init(&ifmgd->beacon_connection_loss_work,
+                       ieee80211_beacon_connection_loss_work);
+       wiphy_work_init(&ifmgd->csa_connection_drop_work,
+                       ieee80211_csa_connection_drop_work);
        INIT_DELAYED_WORK(&ifmgd->tdls_peer_del_work,
                          ieee80211_tdls_peer_del_work);
        timer_setup(&ifmgd->timer, ieee80211_sta_timer, 0);
         * cancelled when disconnecting.
         */
        cancel_work_sync(&ifmgd->monitor_work);
-       cancel_work_sync(&ifmgd->beacon_connection_loss_work);
-       cancel_work_sync(&ifmgd->csa_connection_drop_work);
+       wiphy_work_cancel(sdata->local->hw.wiphy,
+                         &ifmgd->beacon_connection_loss_work);
+       wiphy_work_cancel(sdata->local->hw.wiphy,
+                         &ifmgd->csa_connection_drop_work);
        cancel_delayed_work_sync(&ifmgd->tdls_peer_del_work);
 
        sdata_lock(sdata);