ds = bf->bf_desc;
        flags = ATH9K_TXDESC_NOACK;
 
-       if (sc->sc_ah->opmode == NL80211_IFTYPE_ADHOC &&
+       if (((sc->sc_ah->opmode == NL80211_IFTYPE_ADHOC) ||
+            (sc->sc_ah->opmode == NL80211_IFTYPE_MESH_POINT)) &&
            (ah->caps.hw_caps & ATH9K_HW_CAP_VEOL)) {
                ds->ds_link = bf->bf_daddr; /* self-linked */
                flags |= ATH9K_TXDESC_VEOL;
                        ath_beacon_config_ap(sc, &conf, avp);
                        break;
                case NL80211_IFTYPE_ADHOC:
+               case NL80211_IFTYPE_MESH_POINT:
                        ath_beacon_config_adhoc(sc, &conf, avp, vif);
                        break;
                case NL80211_IFTYPE_STATION:
 
                REG_CLR_BIT(ah, AR_CFG, AR_CFG_AP_ADHOC_INDICATION);
                break;
        case NL80211_IFTYPE_ADHOC:
+       case NL80211_IFTYPE_MESH_POINT:
                REG_WRITE(ah, AR_STA_ID1, val | AR_STA_ID1_ADHOC
                          | AR_STA_ID1_KSRCH_MODE);
                REG_SET_BIT(ah, AR_CFG, AR_CFG_AP_ADHOC_INDICATION);
                flags |= AR_TBTT_TIMER_EN;
                break;
        case NL80211_IFTYPE_ADHOC:
+       case NL80211_IFTYPE_MESH_POINT:
                REG_SET_BIT(ah, AR_TXCFG,
                            AR_TXCFG_ADHOC_BEACON_ATIM_TX_POLICY);
                REG_WRITE(ah, AR_NEXT_NDP_TIMER,
 
        hw->wiphy->interface_modes =
                BIT(NL80211_IFTYPE_AP) |
                BIT(NL80211_IFTYPE_STATION) |
-               BIT(NL80211_IFTYPE_ADHOC);
+               BIT(NL80211_IFTYPE_ADHOC) |
+               BIT(NL80211_IFTYPE_MESH_POINT);
 
        hw->wiphy->reg_notifier = ath9k_reg_notifier;
        hw->wiphy->strict_regulatory = true;
                ic_opmode = NL80211_IFTYPE_STATION;
                break;
        case NL80211_IFTYPE_ADHOC:
-               if (sc->nbcnvifs >= ATH_BCBUF) {
-                       ret = -ENOBUFS;
-                       goto out;
-               }
-               ic_opmode = NL80211_IFTYPE_ADHOC;
-               break;
        case NL80211_IFTYPE_AP:
+       case NL80211_IFTYPE_MESH_POINT:
                if (sc->nbcnvifs >= ATH_BCBUF) {
                        ret = -ENOBUFS;
                        goto out;
                }
-               ic_opmode = NL80211_IFTYPE_AP;
+               ic_opmode = conf->type;
                break;
        default:
                DPRINTF(sc, ATH_DBG_FATAL,
         * Note we only do this (at the moment) for station mode.
         */
        if ((conf->type == NL80211_IFTYPE_STATION) ||
-           (conf->type == NL80211_IFTYPE_ADHOC)) {
+           (conf->type == NL80211_IFTYPE_ADHOC) ||
+           (conf->type == NL80211_IFTYPE_MESH_POINT)) {
                if (ath9k_hw_phycounters(sc->sc_ah))
                        sc->imask |= ATH9K_INT_MIB;
                sc->imask |= ATH9K_INT_TSFOOR;
        del_timer_sync(&sc->ani.timer);
 
        /* Reclaim beacon resources */
-       if (sc->sc_ah->opmode == NL80211_IFTYPE_AP ||
-           sc->sc_ah->opmode == NL80211_IFTYPE_ADHOC) {
+       if ((sc->sc_ah->opmode == NL80211_IFTYPE_AP) ||
+           (sc->sc_ah->opmode == NL80211_IFTYPE_ADHOC) ||
+           (sc->sc_ah->opmode == NL80211_IFTYPE_MESH_POINT)) {
                ath9k_hw_stoptxdma(sc->sc_ah, sc->beacon.beaconq);
                ath_beacon_return(sc, avp);
        }
                switch (vif->type) {
                case NL80211_IFTYPE_STATION:
                case NL80211_IFTYPE_ADHOC:
+               case NL80211_IFTYPE_MESH_POINT:
                        /* Set BSSID */
                        memcpy(sc->curbssid, conf->bssid, ETH_ALEN);
                        memcpy(avp->bssid, conf->bssid, ETH_ALEN);
        }
 
        if ((vif->type == NL80211_IFTYPE_ADHOC) ||
-           (vif->type == NL80211_IFTYPE_AP)) {
+           (vif->type == NL80211_IFTYPE_AP) ||
+           (vif->type == NL80211_IFTYPE_MESH_POINT)) {
                if ((conf->changed & IEEE80211_IFCC_BEACON) ||
                    (conf->changed & IEEE80211_IFCC_BEACON_ENABLED &&
                     conf->enable_beacon)) {