summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkettenis <kettenis@openbsd.org>2015-03-03 06:56:12 +0000
committerkettenis <kettenis@openbsd.org>2015-03-03 06:56:12 +0000
commit0f45e55bb3e2db76d823745b74be19903489a694 (patch)
tree82450485b1a590ca8f84c82215b30009d8c72b3a
parentAllow "ssh -Q protocol-version" to list supported SSH protocol (diff)
downloadwireguard-openbsd-0f45e55bb3e2db76d823745b74be19903489a694.tar.xz
wireguard-openbsd-0f45e55bb3e2db76d823745b74be19903489a694.zip
Fix 11a support.
ok stsp@
-rw-r--r--sys/dev/pci/if_iwm.c32
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;