diff options
author | 2015-03-03 06:56:12 +0000 | |
---|---|---|
committer | 2015-03-03 06:56:12 +0000 | |
commit | 0f45e55bb3e2db76d823745b74be19903489a694 (patch) | |
tree | 82450485b1a590ca8f84c82215b30009d8c72b3a | |
parent | Allow "ssh -Q protocol-version" to list supported SSH protocol (diff) | |
download | wireguard-openbsd-0f45e55bb3e2db76d823745b74be19903489a694.tar.xz wireguard-openbsd-0f45e55bb3e2db76d823745b74be19903489a694.zip |
Fix 11a support.
ok stsp@
-rw-r--r-- | sys/dev/pci/if_iwm.c | 32 |
1 files changed, 12 insertions, 20 deletions
diff --git a/sys/dev/pci/if_iwm.c b/sys/dev/pci/if_iwm.c index 0e0fc6785a0..def8d66d901 100644 --- a/sys/dev/pci/if_iwm.c +++ b/sys/dev/pci/if_iwm.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_iwm.c,v 1.32 2015/03/02 22:50:10 jsg Exp $ */ +/* $OpenBSD: if_iwm.c,v 1.33 2015/03/03 06:56:12 kettenis Exp $ */ /* * Copyright (c) 2014 genua mbh <info@genua.de> @@ -172,9 +172,6 @@ const uint8_t iwm_nvm_channels[] = { }; #define IWM_NUM_2GHZ_CHANNELS 14 -/* It looks like 11a TX is broken, unfortunately. */ -#define IWM_NO_5GHZ 1 - const struct iwm_rate { uint8_t rate; uint8_t plcp; @@ -2523,11 +2520,7 @@ iwm_parse_nvm_data(struct iwm_softc *sc, sku = le16_to_cpup(nvm_sw + IWM_SKU); data->sku_cap_band_24GHz_enable = sku & IWM_NVM_SKU_CAP_BAND_24GHZ; -#ifndef IWM_NO_5GHZ data->sku_cap_band_52GHz_enable = sku & IWM_NVM_SKU_CAP_BAND_52GHZ; -#else - data->sku_cap_band_52GHz_enable = 0; -#endif data->sku_cap_11n_enable = 0; if (!data->valid_tx_ant || !data->valid_rx_ant) { @@ -3705,6 +3698,7 @@ const struct iwm_rate * iwm_tx_fill_cmd(struct iwm_softc *sc, struct iwm_node *in, struct ieee80211_frame *wh, struct iwm_tx_cmd *tx) { + struct ieee80211com *ic = &sc->sc_ic; const struct iwm_rate *rinfo; int type = wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK; int ridx, rate_flags; @@ -3715,7 +3709,7 @@ iwm_tx_fill_cmd(struct iwm_softc *sc, struct iwm_node *in, /* for data frames, use RS table */ if (type == IEEE80211_FC0_TYPE_DATA) { - if (sc->sc_ic.ic_fixed_rate != -1) { + if (ic->ic_fixed_rate != -1) { tx->initial_rate_index = sc->sc_fixed_ridx; } else { tx->initial_rate_index = (nrates-1) - in->in_ni.ni_txrate; @@ -3726,7 +3720,8 @@ iwm_tx_fill_cmd(struct iwm_softc *sc, struct iwm_node *in, } /* for non-data, use the lowest supported rate */ - ridx = in->in_ridx[0]; + ridx = (ic->ic_curmode == IEEE80211_MODE_11A) ? + IWM_RIDX_OFDM : IWM_RIDX_CCK; rinfo = &iwm_rates[ridx]; rate_flags = 1 << IWM_RATE_MCS_ANT_POS; @@ -4672,16 +4667,19 @@ void iwm_mvm_ack_rates(struct iwm_softc *sc, struct iwm_node *in, int *cck_rates, int *ofdm_rates) { + struct ieee80211_node *ni = &in->in_ni; int lowest_present_ofdm = 100; int lowest_present_cck = 100; uint8_t cck = 0; uint8_t ofdm = 0; int i; - for (i = 0; i <= IWM_LAST_CCK_RATE; i++) { - cck |= (1 << i); - if (lowest_present_cck > i) - lowest_present_cck = i; + if (IEEE80211_IS_CHAN_2GHZ(ni->ni_chan)) { + for (i = 0; i <= IWM_LAST_CCK_RATE; i++) { + cck |= (1 << i); + if (lowest_present_cck > i) + lowest_present_cck = i; + } } for (i = IWM_FIRST_OFDM_RATE; i <= IWM_LAST_NON_HT_RATE; i++) { int adj = i - IWM_FIRST_OFDM_RATE; @@ -5472,7 +5470,6 @@ iwm_endscan_cb(void *arg) DPRINTF(("scan ended\n")); if (sc->sc_scanband == IEEE80211_CHAN_2GHZ) { -#ifndef IWM_NO_5GHZ int error; done = 0; if ((error = iwm_mvm_scan_request(sc, @@ -5481,9 +5478,6 @@ iwm_endscan_cb(void *arg) printf("%s: could not initiate scan\n", DEVNAME(sc)); done = 1; } -#else - done = 1; -#endif } else { done = 1; } @@ -6605,9 +6599,7 @@ iwm_attach(struct device *parent, struct device *self, void *aux) IEEE80211_C_SHSLOT | /* short slot time supported */ IEEE80211_C_SHPREAMBLE; /* short preamble supported */ -#ifndef IWM_NO_5GHZ ic->ic_sup_rates[IEEE80211_MODE_11A] = ieee80211_std_rateset_11a; -#endif ic->ic_sup_rates[IEEE80211_MODE_11B] = ieee80211_std_rateset_11b; ic->ic_sup_rates[IEEE80211_MODE_11G] = ieee80211_std_rateset_11g; |