This patch kills ath9k's ath9k_opmode enum by replacing it with nl80211_iftype.
Signed-off-by: Colin McCabe <colin@cozybit.com>
Signed-off-by: Andrey Yurovsky <andrey@cozybit.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
                }
        }
 
-       if (ah->ah_opmode == ATH9K_M_HOSTAP) {
+       if (ah->ah_opmode == NL80211_IFTYPE_AP) {
                if (aniState->firstepLevel < HAL_FIRST_STEP_MAX) {
                        ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
                                             aniState->firstepLevel + 1);
                        return;
                }
        }
-       if (ah->ah_opmode == ATH9K_M_HOSTAP) {
+       if (ah->ah_opmode == NL80211_IFTYPE_AP) {
                if (aniState->firstepLevel < HAL_FIRST_STEP_MAX) {
                        ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
                                             aniState->firstepLevel + 1);
 
        aniState = ahp->ah_curani;
 
-       if (ah->ah_opmode == ATH9K_M_HOSTAP) {
+       if (ah->ah_opmode == NL80211_IFTYPE_AP) {
                if (aniState->firstepLevel > 0) {
                        if (ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
                                                 aniState->firstepLevel - 1))
        aniState = &ahp->ah_ani[index];
        ahp->ah_curani = aniState;
 
-       if (DO_ANI(ah) && ah->ah_opmode != ATH9K_M_STA
-           && ah->ah_opmode != ATH9K_M_IBSS) {
+       if (DO_ANI(ah) && ah->ah_opmode != NL80211_IFTYPE_STATION
+           && ah->ah_opmode != NL80211_IFTYPE_ADHOC) {
                DPRINTF(ah->ah_sc, ATH_DBG_ANI,
                        "Reset ANI state opmode %u\n", ah->ah_opmode);
                ahp->ah_stats.ast_ani_reset++;
                ath9k_hw_setrxfilter(ah, ath9k_hw_getrxfilter(ah) |
                                     ATH9K_RX_FILTER_PHYERR);
 
-               if (ah->ah_opmode == ATH9K_M_HOSTAP) {
+               if (ah->ah_opmode == NL80211_IFTYPE_AP) {
                        ahp->ah_curani->ofdmTrigHigh =
                                ah->ah_config.ofdm_trig_high;
                        ahp->ah_curani->ofdmTrigLow =
 
        ATH9K_ANT_FIXED_B
 };
 
-enum ath9k_opmode {
-       ATH9K_M_STA = 1,
-       ATH9K_M_IBSS = 0,
-       ATH9K_M_HOSTAP = 6,
-       ATH9K_M_MONITOR = 8
-};
-
 #define ATH9K_SLOT_TIME_6 6
 #define ATH9K_SLOT_TIME_9 9
 #define ATH9K_SLOT_TIME_20 20
 
        void __iomem *ah_sh;
        struct ath_softc *ah_sc;
-       enum ath9k_opmode ah_opmode;
+
+       enum nl80211_iftype ah_opmode;
        struct ath9k_ops_config ah_config;
        struct ath9k_hw_capabilities ah_caps;
 
 
        struct ath9k_tx_queue_info qi;
 
        ath9k_hw_get_txq_props(ah, sc->sc_bhalq, &qi);
-       if (sc->sc_ah->ah_opmode == ATH9K_M_HOSTAP) {
+       if (sc->sc_ah->ah_opmode == NL80211_IFTYPE_AP) {
                /* Always burst out beacon and CAB traffic. */
                qi.tqi_aifs = 1;
                qi.tqi_cwmin = 0;
 
        flags = ATH9K_TXDESC_NOACK;
 
-       if (sc->sc_ah->ah_opmode == ATH9K_M_IBSS &&
+       if (sc->sc_ah->ah_opmode == NL80211_IFTYPE_ADHOC &&
            (ah->ah_caps.hw_caps & ATH9K_HW_CAP_VEOL)) {
                ds->ds_link = bf->bf_daddr; /* self-linked */
                flags |= ATH9K_TXDESC_VEOL;
                                                 struct ath_buf, list);
                list_del(&avp->av_bcbuf->list);
 
-               if (sc->sc_ah->ah_opmode == ATH9K_M_HOSTAP ||
+               if (sc->sc_ah->ah_opmode == NL80211_IFTYPE_AP ||
                    !(sc->sc_ah->ah_caps.hw_caps & ATH9K_HW_CAP_VEOL)) {
                        int slot;
                        /*
        struct ath_hal *ah = sc->sc_ah;
        struct ath_beacon_config conf;
        struct ath_vap *avp;
-       enum ath9k_opmode av_opmode;
+       enum nl80211_iftype opmode;
        u32 nexttbtt, intval;
 
        if (if_id != ATH_IF_ID_ANY) {
                vif = sc->sc_vaps[if_id];
                ASSERT(vif);
                avp = (void *)vif->drv_priv;
-               av_opmode = avp->av_opmode;
+               opmode = avp->av_opmode;
        } else {
-               av_opmode = sc->sc_ah->ah_opmode;
+               opmode = sc->sc_ah->ah_opmode;
        }
 
        memset(&conf, 0, sizeof(struct ath_beacon_config));
        nexttbtt = TSF_TO_TU(sc->bc_tstamp >> 32, sc->bc_tstamp);
 
        /* XXX conditionalize multi-bss support? */
-       if (sc->sc_ah->ah_opmode == ATH9K_M_HOSTAP) {
+       if (sc->sc_ah->ah_opmode == NL80211_IFTYPE_AP) {
                /*
                 * For multi-bss ap support beacons are either staggered
                 * evenly over N slots or burst together.  For the former
        DPRINTF(sc, ATH_DBG_BEACON, "nexttbtt %u intval %u (%u)\n",
                nexttbtt, intval, conf.beacon_interval);
 
-       /* Check for ATH9K_M_HOSTAP and sc_nostabeacons for WDS client */
-       if (sc->sc_ah->ah_opmode == ATH9K_M_STA) {
+       /* Check for NL80211_IFTYPE_AP and sc_nostabeacons for WDS client */
+       if (sc->sc_ah->ah_opmode == NL80211_IFTYPE_STATION) {
                struct ath9k_beacon_state bs;
                u64 tsf;
                u32 tsftu;
                ath9k_hw_set_interrupts(ah, 0);
                if (nexttbtt == intval)
                        intval |= ATH9K_BEACON_RESET_TSF;
-               if (sc->sc_ah->ah_opmode == ATH9K_M_IBSS) {
+               if (sc->sc_ah->ah_opmode == NL80211_IFTYPE_ADHOC) {
                        /*
                         * Pull nexttbtt forward to reflect the current
                         * TSF
                        if (!(ah->ah_caps.hw_caps & ATH9K_HW_CAP_VEOL))
                                sc->sc_imask |= ATH9K_INT_SWBA;
                        ath_beaconq_config(sc);
-               } else if (sc->sc_ah->ah_opmode == ATH9K_M_HOSTAP) {
+               } else if (sc->sc_ah->ah_opmode == NL80211_IFTYPE_AP) {
                        /*
                         * In AP mode we enable the beacon timers and
                         * SWBA interrupts to prepare beacon frames.
                 * When using a self-linked beacon descriptor in
                 * ibss mode load it once here.
                 */
-               if (sc->sc_ah->ah_opmode == ATH9K_M_IBSS &&
+               if (sc->sc_ah->ah_opmode == NL80211_IFTYPE_ADHOC &&
                    (ah->ah_caps.hw_caps & ATH9K_HW_CAP_VEOL))
                        ath_beacon_start_adhoc(sc, 0);
        }
 
 
 struct ath_vap {
        int av_bslot;
-       enum ath9k_opmode av_opmode;
+       enum nl80211_iftype av_opmode;
        struct ath_buf *av_bcbuf;
        struct ath_tx_control av_btxctl;
 };
 
                          REG_READ(ah, AR_PHY_ANALOG_SWAP) | 0x00000001);
 }
 
-static void ath9k_hw_init_interrupt_masks(struct ath_hal *ah, enum ath9k_opmode opmode)
+static void ath9k_hw_init_interrupt_masks(struct ath_hal *ah,
+                                         enum nl80211_iftype opmode)
 {
        struct ath_hal_5416 *ahp = AH5416(ah);
 
 
        ahp->ah_maskReg |= AR_IMR_TXOK;
 
-       if (opmode == ATH9K_M_HOSTAP)
+       if (opmode == NL80211_IFTYPE_AP)
                ahp->ah_maskReg |= AR_IMR_MIB;
 
        REG_WRITE(ah, AR_IMR, ahp->ah_maskReg);
        val = REG_READ(ah, AR_STA_ID1);
        val &= ~(AR_STA_ID1_STA_AP | AR_STA_ID1_ADHOC);
        switch (opmode) {
-       case ATH9K_M_HOSTAP:
+       case NL80211_IFTYPE_AP:
                REG_WRITE(ah, AR_STA_ID1, val | AR_STA_ID1_STA_AP
                          | AR_STA_ID1_KSRCH_MODE);
                REG_CLR_BIT(ah, AR_CFG, AR_CFG_AP_ADHOC_INDICATION);
                break;
-       case ATH9K_M_IBSS:
+       case NL80211_IFTYPE_ADHOC:
                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);
                break;
-       case ATH9K_M_STA:
-       case ATH9K_M_MONITOR:
+       case NL80211_IFTYPE_STATION:
+       case NL80211_IFTYPE_MONITOR:
                REG_WRITE(ah, AR_STA_ID1, val | AR_STA_ID1_KSRCH_MODE);
                break;
        }
        ahp->ah_beaconInterval = beacon_period;
 
        switch (ah->ah_opmode) {
-       case ATH9K_M_STA:
-       case ATH9K_M_MONITOR:
+       case NL80211_IFTYPE_STATION:
+       case NL80211_IFTYPE_MONITOR:
                REG_WRITE(ah, AR_NEXT_TBTT_TIMER, TU_TO_USEC(next_beacon));
                REG_WRITE(ah, AR_NEXT_DMA_BEACON_ALERT, 0xffff);
                REG_WRITE(ah, AR_NEXT_SWBA, 0x7ffff);
                flags |= AR_TBTT_TIMER_EN;
                break;
-       case ATH9K_M_IBSS:
+       case NL80211_IFTYPE_ADHOC:
                REG_SET_BIT(ah, AR_TXCFG,
                            AR_TXCFG_ADHOC_BEACON_ATIM_TX_POLICY);
                REG_WRITE(ah, AR_NEXT_NDP_TIMER,
                                     (ahp->ah_atimWindow ? ahp->
                                      ah_atimWindow : 1)));
                flags |= AR_NDP_TIMER_EN;
-       case ATH9K_M_HOSTAP:
+       case NL80211_IFTYPE_AP:
                REG_WRITE(ah, AR_NEXT_TBTT_TIMER, TU_TO_USEC(next_beacon));
                REG_WRITE(ah, AR_NEXT_DMA_BEACON_ALERT,
                          TU_TO_USEC(next_beacon -
                flags |=
                        AR_TBTT_TIMER_EN | AR_DBA_TIMER_EN | AR_SWBA_TIMER_EN;
                break;
+       default:
+               DPRINTF(ah->ah_sc, ATH_DBG_BEACON,
+                       "%s: unsupported opmode: %d\n",
+                       __func__, ah->ah_opmode);
+               return;
+               break;
        }
 
        REG_WRITE(ah, AR_BEACON_PERIOD, TU_TO_USEC(beacon_period));
 
        capField = ath9k_hw_get_eeprom(ah, EEP_OP_CAP);
 
-       if (ah->ah_opmode != ATH9K_M_HOSTAP &&
+       if (ah->ah_opmode != NL80211_IFTYPE_AP &&
            ah->ah_subvendorid == AR_SUBVENDOR_ID_NEW_A) {
                if (ah->ah_currentRD == 0x64 || ah->ah_currentRD == 0x65)
                        ah->ah_currentRD += 5;
 
 
        /*
         *  Strategy:
-        *   For _M_STA mc tx, we will not setup a key at all since we never
-        *   tx mc.
-        *   _M_STA mc rx, we will use the keyID.
-        *   for _M_IBSS mc tx, we will use the keyID, and no macaddr.
-        *   for _M_IBSS mc rx, we will alloc a slot and plumb the mac of the
-        *   peer node. BUT we will plumb a cleartext key so that we can do
-        *   perSta default key table lookup in software.
+        *   For STA mc tx, we will not setup a key at
+        *   all since we never tx mc.
+        *
+        *   For STA mc rx, we will use the keyID.
+        *
+        *   For ADHOC mc tx, we will use the keyID, and no macaddr.
+        *
+        *   For ADHOC mc rx, we will alloc a slot and plumb the mac of
+        *   the peer node.
+        *   BUT we will plumb a cleartext key so that we can do
+        *   per-Sta default key table lookup in software.
         */
        if (is_broadcast_ether_addr(addr)) {
                switch (opmode) {
                DPRINTF(sc, ATH_DBG_CONFIG, "Bss Info ASSOC %d\n", bss_conf->aid);
 
                /* New association, store aid */
-               if (avp->av_opmode == ATH9K_M_STA) {
+               if (avp->av_opmode == NL80211_IFTYPE_STATION) {
                        sc->sc_curaid = bss_conf->aid;
                        ath9k_hw_write_associd(sc->sc_ah, sc->sc_curbssid,
                                               sc->sc_curaid);
                goto bad;
 
        /* default to MONITOR mode */
-       sc->sc_ah->ah_opmode = ATH9K_M_MONITOR;
+       sc->sc_ah->ah_opmode = NL80211_IFTYPE_MONITOR;
+
 
        /* Setup rate tables */
 
         * Note we only do this (at the moment) for station mode.
         */
        if (ath9k_hw_phycounters(sc->sc_ah) &&
-           ((sc->sc_ah->ah_opmode == ATH9K_M_STA) ||
-            (sc->sc_ah->ah_opmode == ATH9K_M_IBSS)))
+           ((sc->sc_ah->ah_opmode == NL80211_IFTYPE_STATION) ||
+            (sc->sc_ah->ah_opmode == NL80211_IFTYPE_ADHOC)))
                sc->sc_imask |= ATH9K_INT_MIB;
        /*
         * Some hardware processes the TIM IE and fires an
         * enable the TIM interrupt when operating as station.
         */
        if ((sc->sc_ah->ah_caps.hw_caps & ATH9K_HW_CAP_ENHANCEDPM) &&
-           (sc->sc_ah->ah_opmode == ATH9K_M_STA) &&
+           (sc->sc_ah->ah_opmode == NL80211_IFTYPE_STATION) &&
            !sc->sc_config.swBeaconProcess)
                sc->sc_imask |= ATH9K_INT_TIM;
 
 {
        struct ath_softc *sc = hw->priv;
        struct ath_vap *avp = (void *)conf->vif->drv_priv;
-       int ic_opmode = 0;
+       enum nl80211_iftype ic_opmode = NL80211_IFTYPE_UNSPECIFIED;
 
        /* Support only vap for now */
 
 
        switch (conf->type) {
        case NL80211_IFTYPE_STATION:
-               ic_opmode = ATH9K_M_STA;
+               ic_opmode = NL80211_IFTYPE_STATION;
                break;
        case NL80211_IFTYPE_ADHOC:
-               ic_opmode = ATH9K_M_IBSS;
+               ic_opmode = NL80211_IFTYPE_ADHOC;
                break;
        case NL80211_IFTYPE_AP:
-               ic_opmode = ATH9K_M_HOSTAP;
+               ic_opmode = NL80211_IFTYPE_AP;
                break;
        default:
                DPRINTF(sc, ATH_DBG_FATAL,
        avp->av_opmode = ic_opmode;
        avp->av_bslot = -1;
 
-       if (ic_opmode == ATH9K_M_HOSTAP)
+       if (ic_opmode == NL80211_IFTYPE_AP)
                ath9k_hw_set_tsfadjust(sc->sc_ah, 1);
 
        sc->sc_vaps[0] = conf->vif;
        del_timer_sync(&sc->sc_ani.timer);
 
        /* Reclaim beacon resources */
-       if (sc->sc_ah->ah_opmode == ATH9K_M_HOSTAP ||
-           sc->sc_ah->ah_opmode == ATH9K_M_IBSS) {
+       if (sc->sc_ah->ah_opmode == NL80211_IFTYPE_AP ||
+           sc->sc_ah->ah_opmode == NL80211_IFTYPE_ADHOC) {
                ath9k_hw_stoptxdma(sc->sc_ah, sc->sc_bhalq);
                ath_beacon_return(sc, avp);
        }
                        (curchan->band == IEEE80211_BAND_2GHZ) ?
                        CHANNEL_G : CHANNEL_A;
 
-               if ((sc->sc_ah->ah_opmode == ATH9K_M_HOSTAP) &&
+               if ((sc->sc_ah->ah_opmode == NL80211_IFTYPE_AP) &&
                    (conf->ht.enabled)) {
                        sc->tx_chan_width = (!!conf->ht.sec_chan_offset) ?
                                ATH9K_HT_MACMODE_2040 : ATH9K_HT_MACMODE_20;
        /* TODO: Need to decide which hw opmode to use for multi-interface
         * cases */
        if (vif->type == NL80211_IFTYPE_AP &&
-           ah->ah_opmode != ATH9K_M_HOSTAP) {
-               ah->ah_opmode = ATH9K_M_HOSTAP;
+           ah->ah_opmode != NL80211_IFTYPE_AP) {
+               ah->ah_opmode = NL80211_IFTYPE_STATION;
                ath9k_hw_setopmode(ah);
                ath9k_hw_write_associd(ah, sc->sc_myaddr, 0);
                /* Request full reset to get hw opmode changed properly */
        }
 
        /* Check for WLAN_CAPABILITY_PRIVACY ? */
-       if ((avp->av_opmode != ATH9K_M_STA)) {
+       if ((avp->av_opmode != NL80211_IFTYPE_STATION)) {
                for (i = 0; i < IEEE80211_WEP_NKID; i++)
                        if (ath9k_hw_keyisvalid(sc->sc_ah, (u16)i))
                                ath9k_hw_keysetmac(sc->sc_ah,
 
        u8 i, j, k, hi = 0, hthi = 0;
 
        /* FIXME: Adhoc */
-       if ((sc->sc_ah->ah_opmode == ATH9K_M_STA) ||
-           (sc->sc_ah->ah_opmode == ATH9K_M_IBSS)) {
+       if ((sc->sc_ah->ah_opmode == NL80211_IFTYPE_STATION) ||
+           (sc->sc_ah->ah_opmode == NL80211_IFTYPE_ADHOC)) {
                bool is_cw_40 = sta->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40;
                rate_table = ath_choose_rate_table(sc, sband->band,
                                                   sta->ht_cap.ht_supported,
                                                   is_cw_40);
-       } else if (sc->sc_ah->ah_opmode == ATH9K_M_HOSTAP) {
+       } else if (sc->sc_ah->ah_opmode == NL80211_IFTYPE_AP) {
                /* sc_curmode would be set on init through config() */
                rate_table = sc->hw_rate_table[sc->sc_curmode];
        }
 
                 * discard the frame. Enable this if you want to see
                 * error frames in Monitor mode.
                 */
-               if (sc->sc_ah->ah_opmode != ATH9K_M_MONITOR)
+               if (sc->sc_ah->ah_opmode != NL80211_IFTYPE_MONITOR)
                        goto rx_next;
        } else if (ds->ds_rxstat.rs_status != 0) {
                if (ds->ds_rxstat.rs_status & ATH9K_RXERR_CRC)
                 * decryption and MIC failures. For monitor mode,
                 * we also ignore the CRC error.
                 */
-               if (sc->sc_ah->ah_opmode == ATH9K_M_MONITOR) {
+               if (sc->sc_ah->ah_opmode == NL80211_IFTYPE_MONITOR) {
                        if (ds->ds_rxstat.rs_status &
                            ~(ATH9K_RXERR_DECRYPT | ATH9K_RXERR_MIC |
                              ATH9K_RXERR_CRC))
                | ATH9K_RX_FILTER_MCAST;
 
        /* If not a STA, enable processing of Probe Requests */
-       if (sc->sc_ah->ah_opmode != ATH9K_M_STA)
+       if (sc->sc_ah->ah_opmode != NL80211_IFTYPE_STATION)
                rfilt |= ATH9K_RX_FILTER_PROBEREQ;
 
        /* Can't set HOSTAP into promiscous mode */
-       if (((sc->sc_ah->ah_opmode != ATH9K_M_HOSTAP) &&
+       if (((sc->sc_ah->ah_opmode != NL80211_IFTYPE_AP) &&
             (sc->rx_filter & FIF_PROMISC_IN_BSS)) ||
-           (sc->sc_ah->ah_opmode == ATH9K_M_MONITOR)) {
+           (sc->sc_ah->ah_opmode == NL80211_IFTYPE_MONITOR)) {
                rfilt |= ATH9K_RX_FILTER_PROM;
                /* ??? To prevent from sending ACK */
                rfilt &= ~ATH9K_RX_FILTER_UCAST;
        }
 
-       if (sc->sc_ah->ah_opmode == ATH9K_M_STA ||
-           sc->sc_ah->ah_opmode == ATH9K_M_IBSS)
+       if (sc->sc_ah->ah_opmode == NL80211_IFTYPE_STATION ||
+           sc->sc_ah->ah_opmode == NL80211_IFTYPE_ADHOC)
                rfilt |= ATH9K_RX_FILTER_BEACON;
 
        /* If in HOSTAP mode, want to enable reception of PSPOLL frames
           & beacon frames */
-       if (sc->sc_ah->ah_opmode == ATH9K_M_HOSTAP)
+       if (sc->sc_ah->ah_opmode == NL80211_IFTYPE_AP)
                rfilt |= (ATH9K_RX_FILTER_BEACON | ATH9K_RX_FILTER_PSPOLL);
 
        return rfilt;
 
                return false;
        }
 
-       if ((rd->flags & NO_HOSTAP) && (ah->ah_opmode == ATH9K_M_HOSTAP)) {
+       if ((rd->flags & NO_HOSTAP) && (ah->ah_opmode == NL80211_IFTYPE_AP)) {
                DPRINTF(ah->ah_sc, ATH_DBG_REGULATORY,
                        "Skipping HOSTAP channel\n");
                return false;
 
                                 * when perform internal reset in this routine.
                                 * Only enable reset in STA mode for now.
                                 */
-                               if (sc->sc_ah->ah_opmode == ATH9K_M_STA)
+                               if (sc->sc_ah->ah_opmode ==
+                                           NL80211_IFTYPE_STATION)
                                        needreset = 1;
                        }
                } else {