Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 623c4387 authored by John W. Linville's avatar John W. Linville
Browse files
parents 204e35a9 cf4ef654
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -322,12 +322,6 @@ static void iwlagn_mac_stop(struct ieee80211_hw *hw)

	flush_workqueue(priv->workqueue);

	/* User space software may expect getting rfkill changes
	 * even if interface is down, trans->down will leave the RF
	 * kill interrupt enabled
	 */
	iwl_trans_stop_hw(priv->trans, false);

	IWL_DEBUG_MAC80211(priv, "leave\n");
}

+2 −2
Original line number Diff line number Diff line
@@ -1313,7 +1313,7 @@ static struct iwl_op_mode *iwl_op_mode_dvm_start(struct iwl_trans *trans,
	}

	/* Reset chip to save power until we load uCode during "up". */
	iwl_trans_stop_hw(priv->trans, false);
	iwl_trans_stop_device(priv->trans);

	priv->nvm_data = iwl_parse_eeprom_data(priv->trans->dev, priv->cfg,
						  priv->eeprom_blob,
@@ -1458,7 +1458,7 @@ static void iwl_op_mode_dvm_stop(struct iwl_op_mode *op_mode)

	dev_kfree_skb(priv->beacon_skb);

	iwl_trans_stop_hw(priv->trans, true);
	iwl_trans_op_mode_leave(priv->trans);
	ieee80211_free_hw(priv->hw);
}

+1 −1
Original line number Diff line number Diff line
@@ -108,7 +108,7 @@ static const struct iwl_base_params iwl7000_base_params = {
};

static const struct iwl_ht_params iwl7000_ht_params = {
	.use_rts_for_aggregation = true, /* use rts/cts protection */
	.stbc = true,
	.ht40_bands = BIT(IEEE80211_BAND_2GHZ) | BIT(IEEE80211_BAND_5GHZ),
};

+2 −0
Original line number Diff line number Diff line
@@ -162,12 +162,14 @@ struct iwl_base_params {
};

/*
 * @stbc: support Tx STBC and 1*SS Rx STBC
 * @use_rts_for_aggregation: use rts/cts protection for HT traffic
 * @ht40_bands: bitmap of bands (using %IEEE80211_BAND_*) that support HT40
 */
struct iwl_ht_params {
	enum ieee80211_smps_mode smps_mode;
	const bool ht_greenfield_support; /* if used set to true */
	const bool stbc;
	bool use_rts_for_aggregation;
	u8 ht40_bands;
};
+39 −0
Original line number Diff line number Diff line
@@ -322,6 +322,41 @@ static void set_sec_offset(struct iwl_firmware_pieces *pieces,
	pieces->img[type].sec[sec].offset = offset;
}

static int iwl_store_cscheme(struct iwl_fw *fw, const u8 *data, const u32 len)
{
	int i, j;
	struct iwl_fw_cscheme_list *l = (struct iwl_fw_cscheme_list *)data;
	struct iwl_fw_cipher_scheme *fwcs;
	struct ieee80211_cipher_scheme *cs;
	u32 cipher;

	if (len < sizeof(*l) ||
	    len < sizeof(l->size) + l->size * sizeof(l->cs[0]))
		return -EINVAL;

	for (i = 0, j = 0; i < IWL_UCODE_MAX_CS && i < l->size; i++) {
		fwcs = &l->cs[j];
		cipher = le32_to_cpu(fwcs->cipher);

		/* we skip schemes with zero cipher suite selector */
		if (!cipher)
			continue;

		cs = &fw->cs[j++];
		cs->cipher = cipher;
		cs->iftype = BIT(NL80211_IFTYPE_STATION);
		cs->hdr_len = fwcs->hdr_len;
		cs->pn_len = fwcs->pn_len;
		cs->pn_off = fwcs->pn_off;
		cs->key_idx_off = fwcs->key_idx_off;
		cs->key_idx_mask = fwcs->key_idx_mask;
		cs->key_idx_shift = fwcs->key_idx_shift;
		cs->mic_len = fwcs->mic_len;
	}

	return 0;
}

/*
 * Gets uCode section from tlv.
 */
@@ -729,6 +764,10 @@ static int iwl_parse_tlv_firmware(struct iwl_drv *drv,
				return -EINVAL;
			}
			break;
		case IWL_UCODE_TLV_CSCHEME:
			if (iwl_store_cscheme(&drv->fw, tlv_data, tlv_len))
				goto invalid_tlv_len;
			break;
		default:
			IWL_DEBUG_INFO(drv, "unknown TLV: %d\n", tlv_type);
			break;
Loading