Module Name:    src
Committed By:   nonaka
Date:           Tue Mar  3 09:54:55 UTC 2015

Modified Files:
        src/sys/dev/pci: if_iwm.c

Log Message:
Fix 11a support.

>From OpenBSD rev.1.33.


To generate a diff of this commit:
cvs rdiff -u -r1.23 -r1.24 src/sys/dev/pci/if_iwm.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/pci/if_iwm.c
diff -u src/sys/dev/pci/if_iwm.c:1.23 src/sys/dev/pci/if_iwm.c:1.24
--- src/sys/dev/pci/if_iwm.c:1.23	Tue Mar  3 09:45:58 2015
+++ src/sys/dev/pci/if_iwm.c	Tue Mar  3 09:54:55 2015
@@ -1,5 +1,5 @@
-/*	$NetBSD: if_iwm.c,v 1.23 2015/03/03 09:45:58 nonaka Exp $	*/
-/*	OpenBSD: if_iwm.c,v 1.18 2015/02/11 01:12:42 brad Exp	*/
+/*	$NetBSD: if_iwm.c,v 1.24 2015/03/03 09:54:55 nonaka Exp $	*/
+/*	OpenBSD: if_iwm.c,v 1.33 2015/03/03 06:56:12 kettenis Exp	*/
 
 /*
  * Copyright (c) 2014 genua mbh <i...@genua.de>
@@ -105,7 +105,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_iwm.c,v 1.23 2015/03/03 09:45:58 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_iwm.c,v 1.24 2015/03/03 09:54:55 nonaka Exp $");
 
 #include <sys/param.h>
 #include <sys/conf.h>
@@ -173,9 +173,6 @@ static 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
-
 static const struct iwm_rate {
 	uint8_t rate;
 	uint8_t plcp;
@@ -2629,11 +2626,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) {
@@ -3807,6 +3800,7 @@ static 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;
@@ -3817,7 +3811,7 @@ iwm_tx_fill_cmd(struct iwm_softc *sc, st
 
 	/* 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;
@@ -3828,7 +3822,8 @@ iwm_tx_fill_cmd(struct iwm_softc *sc, st
 	}
 
 	/* 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;
@@ -4766,16 +4761,19 @@ static 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;
@@ -5588,7 +5586,6 @@ iwm_endscan_cb(struct work *work __unuse
 	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,
@@ -5597,9 +5594,6 @@ iwm_endscan_cb(struct work *work __unuse
 			DPRINTF(("%s: could not initiate scan\n", DEVNAME(sc)));
 			done = 1;
 		}
-#else
-		done = 1;
-#endif
 	} else {
 		done = 1;
 	}
@@ -6570,9 +6564,7 @@ iwm_attach_hook(device_t dev)
 	    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;
 

Reply via email to