linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] wireless: rename ht_info to ht_operation
@ 2012-03-15 10:21 Johannes Berg
  2012-03-15 14:50 ` [PATCH v2] " Johannes Berg
  0 siblings, 1 reply; 8+ messages in thread
From: Johannes Berg @ 2012-03-15 10:21 UTC (permalink / raw)
  To: John Linville; +Cc: Bing Zhao, linux-wireless

From: Johannes Berg <johannes.berg@intel.com>

Since some of the HT code pre-dates 802.11n-2009
some names are wrong. The one that bothers me most
is that "HT operation" is called "HT information"
in our code and that causes confusion.

Rename "HT information" to "HT operation" and also
the control_chan field to primary_chan to match
the name used in the spec.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
 drivers/net/wireless/mwifiex/11n.c  |   16 ++++++------
 drivers/net/wireless/mwifiex/fw.h   |    2 -
 drivers/net/wireless/mwifiex/join.c |   14 +++++-----
 drivers/net/wireless/mwifiex/main.h |    2 -
 drivers/net/wireless/mwifiex/scan.c |   10 +++----
 drivers/net/wireless/wl12xx/main.c  |    2 -
 include/linux/ieee80211.h           |   14 ++++------
 include/net/mac80211.h              |    2 -
 net/mac80211/ibss.c                 |   16 +++++-------
 net/mac80211/ieee80211_i.h          |   13 ++++-----
 net/mac80211/mesh.c                 |   12 ++++-----
 net/mac80211/mesh.h                 |    2 -
 net/mac80211/mesh_plink.c           |    4 +--
 net/mac80211/mlme.c                 |   48 ++++++++++++++++++------------------
 net/mac80211/tx.c                   |    4 +--
 net/mac80211/util.c                 |   43 +++++++++++++++-----------------
 16 files changed, 99 insertions(+), 105 deletions(-)

--- a/drivers/net/wireless/mwifiex/11n.c	2012-03-15 11:15:02.000000000 +0100
+++ b/drivers/net/wireless/mwifiex/11n.c	2012-03-15 11:15:11.000000000 +0100
@@ -350,25 +350,25 @@ mwifiex_cmd_append_11n_tlv(struct mwifie
 		ret_len += sizeof(struct mwifiex_ie_types_htcap);
 	}
 
-	if (bss_desc->bcn_ht_info) {
+	if (bss_desc->bcn_ht_oper) {
 		if (priv->bss_mode == NL80211_IFTYPE_ADHOC) {
 			ht_info = (struct mwifiex_ie_types_htinfo *) *buffer;
 			memset(ht_info, 0,
 			       sizeof(struct mwifiex_ie_types_htinfo));
 			ht_info->header.type =
-					cpu_to_le16(WLAN_EID_HT_INFORMATION);
+					cpu_to_le16(WLAN_EID_HT_OPERATION);
 			ht_info->header.len =
-				cpu_to_le16(sizeof(struct ieee80211_ht_info));
+				cpu_to_le16(sizeof(struct ieee80211_ht_operation));
 
 			memcpy((u8 *) ht_info +
 			       sizeof(struct mwifiex_ie_types_header),
-			       (u8 *) bss_desc->bcn_ht_info +
+			       (u8 *) bss_desc->bcn_ht_oper +
 			       sizeof(struct ieee_types_header),
 			       le16_to_cpu(ht_info->header.len));
 
 			if (!(sband->ht_cap.cap &
 					IEEE80211_HT_CAP_SUP_WIDTH_20_40))
-				ht_info->ht_info.ht_param &=
+				ht_info->ht_oper.ht_param &=
 					~(IEEE80211_HT_PARAM_CHAN_WIDTH_ANY |
 					IEEE80211_HT_PARAM_CHA_SEC_OFFSET);
 
@@ -385,16 +385,16 @@ mwifiex_cmd_append_11n_tlv(struct mwifie
 			sizeof(struct mwifiex_ie_types_chan_list_param_set) -
 			sizeof(struct mwifiex_ie_types_header));
 		chan_list->chan_scan_param[0].chan_number =
-			bss_desc->bcn_ht_info->control_chan;
+			bss_desc->bcn_ht_oper->primary_chan;
 		chan_list->chan_scan_param[0].radio_type =
 			mwifiex_band_to_radio_type((u8) bss_desc->bss_band);
 
 		if ((sband->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40)
-			&& (bss_desc->bcn_ht_info->ht_param &
+			&& (bss_desc->bcn_ht_oper->ht_param &
 				IEEE80211_HT_PARAM_CHAN_WIDTH_ANY))
 			SET_SECONDARYCHAN(chan_list->chan_scan_param[0].
 					  radio_type,
-					  (bss_desc->bcn_ht_info->ht_param &
+					  (bss_desc->bcn_ht_oper->ht_param &
 					  IEEE80211_HT_PARAM_CHA_SEC_OFFSET));
 
 		*buffer += sizeof(struct mwifiex_ie_types_chan_list_param_set);
--- a/drivers/net/wireless/mwifiex/join.c	2012-03-15 11:15:02.000000000 +0100
+++ b/drivers/net/wireless/mwifiex/join.c	2012-03-15 11:15:11.000000000 +0100
@@ -931,20 +931,20 @@ mwifiex_cmd_802_11_ad_hoc_start(struct m
 		/* Fill HT INFORMATION */
 		ht_info = (struct mwifiex_ie_types_htinfo *) pos;
 		memset(ht_info, 0, sizeof(struct mwifiex_ie_types_htinfo));
-		ht_info->header.type = cpu_to_le16(WLAN_EID_HT_INFORMATION);
+		ht_info->header.type = cpu_to_le16(WLAN_EID_HT_OPERATION);
 		ht_info->header.len =
-			cpu_to_le16(sizeof(struct ieee80211_ht_info));
+			cpu_to_le16(sizeof(struct ieee80211_ht_operation));
 
-		ht_info->ht_info.control_chan =
+		ht_info->ht_oper.primary_chan =
 			(u8) priv->curr_bss_params.bss_descriptor.channel;
 		if (adapter->sec_chan_offset) {
-			ht_info->ht_info.ht_param = adapter->sec_chan_offset;
-			ht_info->ht_info.ht_param |=
+			ht_info->ht_oper.ht_param = adapter->sec_chan_offset;
+			ht_info->ht_oper.ht_param |=
 					IEEE80211_HT_PARAM_CHAN_WIDTH_ANY;
 		}
-		ht_info->ht_info.operation_mode =
+		ht_info->ht_oper.operation_mode =
 		     cpu_to_le16(IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT);
-		ht_info->ht_info.basic_set[0] = 0xff;
+		ht_info->ht_oper.basic_set[0] = 0xff;
 		pos += sizeof(struct mwifiex_ie_types_htinfo);
 		cmd_append_size +=
 			sizeof(struct mwifiex_ie_types_htinfo);
--- a/drivers/net/wireless/mwifiex/scan.c	2012-03-15 11:15:02.000000000 +0100
+++ b/drivers/net/wireless/mwifiex/scan.c	2012-03-15 11:15:11.000000000 +0100
@@ -1226,8 +1226,8 @@ mwifiex_update_bss_desc_with_ie(struct m
 					sizeof(struct ieee_types_header) -
 					bss_entry->beacon_buf);
 			break;
-		case WLAN_EID_HT_INFORMATION:
-			bss_entry->bcn_ht_info = (struct ieee80211_ht_info *)
+		case WLAN_EID_HT_OPERATION:
+			bss_entry->bcn_ht_oper = (struct ieee80211_ht_operation *)
 					(current_ptr +
 					sizeof(struct ieee_types_header));
 			bss_entry->ht_info_offset = (u16) (current_ptr +
@@ -1499,7 +1499,7 @@ mwifiex_update_curr_bss_params(struct mw
 	priv->curr_bss_params.bss_descriptor.bcn_ht_cap = NULL;
 	priv->curr_bss_params.bss_descriptor.ht_cap_offset =
 		0;
-	priv->curr_bss_params.bss_descriptor.bcn_ht_info = NULL;
+	priv->curr_bss_params.bss_descriptor.bcn_ht_oper = NULL;
 	priv->curr_bss_params.bss_descriptor.ht_info_offset =
 		0;
 	priv->curr_bss_params.bss_descriptor.bcn_bss_co_2040 =
@@ -2022,8 +2022,8 @@ mwifiex_save_curr_bcn(struct mwifiex_pri
 			(curr_bss->beacon_buf +
 			 curr_bss->ht_cap_offset);
 
-	if (curr_bss->bcn_ht_info)
-		curr_bss->bcn_ht_info = (struct ieee80211_ht_info *)
+	if (curr_bss->bcn_ht_oper)
+		curr_bss->bcn_ht_oper = (struct ieee80211_ht_operation *)
 			(curr_bss->beacon_buf +
 			 curr_bss->ht_info_offset);
 
--- a/drivers/net/wireless/wl12xx/main.c	2012-03-15 11:15:02.000000000 +0100
+++ b/drivers/net/wireless/wl12xx/main.c	2012-03-15 11:15:11.000000000 +0100
@@ -232,7 +232,7 @@ static struct conf_drv_settings default_
 				.rule        = CONF_BCN_RULE_PASS_ON_APPEARANCE,
 			},
 			[1] = {
-				.ie          = WLAN_EID_HT_INFORMATION,
+				.ie          = WLAN_EID_HT_OPERATION,
 				.rule        = CONF_BCN_RULE_PASS_ON_CHANGE,
 			},
 		},
--- a/include/linux/ieee80211.h	2012-03-15 11:15:01.000000000 +0100
+++ b/include/linux/ieee80211.h	2012-03-15 11:15:11.000000000 +0100
@@ -1007,13 +1007,13 @@ enum ieee80211_min_mpdu_spacing {
 };
 
 /**
- * struct ieee80211_ht_info - HT information
+ * struct ieee80211_ht_operation - HT operation IE
  *
- * This structure is the "HT information element" as
- * described in 802.11n D5.0 7.3.2.58
+ * This structure is the "HT operation element" as
+ * described in 802.11n-2009 7.3.2.57
  */
-struct ieee80211_ht_info {
-	u8 control_chan;
+struct ieee80211_ht_operation {
+	u8 primary_chan;
 	u8 ht_param;
 	__le16 operation_mode;
 	__le16 stbc_param;
@@ -1027,8 +1027,6 @@ struct ieee80211_ht_info {
 #define		IEEE80211_HT_PARAM_CHA_SEC_BELOW	0x03
 #define IEEE80211_HT_PARAM_CHAN_WIDTH_ANY		0x04
 #define IEEE80211_HT_PARAM_RIFS_MODE			0x08
-#define IEEE80211_HT_PARAM_SPSMP_SUPPORT		0x10
-#define IEEE80211_HT_PARAM_SERV_INTERVAL_GRAN		0xE0
 
 /* for operation_mode */
 #define IEEE80211_HT_OP_MODE_PROTECTION			0x0003
@@ -1301,7 +1299,7 @@ enum ieee80211_eid {
 	WLAN_EID_EXT_SUPP_RATES = 50,
 
 	WLAN_EID_HT_CAPABILITY = 45,
-	WLAN_EID_HT_INFORMATION = 61,
+	WLAN_EID_HT_OPERATION = 61,
 
 	WLAN_EID_RSN = 48,
 	WLAN_EID_MMIE = 76,
--- a/net/mac80211/mlme.c	2012-03-15 11:15:03.000000000 +0100
+++ b/net/mac80211/mlme.c	2012-03-15 11:16:14.000000000 +0100
@@ -177,7 +177,7 @@ static int ecw2cw(int ecw)
  * HT abilities for a specific band.
  */
 static u32 ieee80211_enable_ht(struct ieee80211_sub_if_data *sdata,
-			       struct ieee80211_ht_info *hti,
+			       struct ieee80211_ht_operation *ht_oper,
 			       const u8 *bssid, u16 ap_ht_cap_flags,
 			       bool beacon_htcap_ie)
 {
@@ -185,7 +185,7 @@ static u32 ieee80211_enable_ht(struct ie
 	struct ieee80211_supported_band *sband;
 	struct sta_info *sta;
 	u32 changed = 0;
-	int hti_cfreq;
+	int ht_cfreq;
 	u16 ht_opmode;
 	bool enable_ht = true;
 	enum nl80211_channel_type prev_chantype;
@@ -196,10 +196,10 @@ static u32 ieee80211_enable_ht(struct ie
 	prev_chantype = sdata->vif.bss_conf.channel_type;
 
 
-	hti_cfreq = ieee80211_channel_to_frequency(hti->control_chan,
-						   sband->band);
+	ht_cfreq = ieee80211_channel_to_frequency(ht_oper->primary_chan,
+						  sband->band);
 	/* check that channel matches the right operating channel */
-	if (local->hw.conf.channel->center_freq != hti_cfreq) {
+	if (local->hw.conf.channel->center_freq != ht_cfreq) {
 		/* Some APs mess this up, evidently.
 		 * Netgear WNDR3700 sometimes reports 4 higher than
 		 * the actual channel, for instance.
@@ -207,11 +207,11 @@ static u32 ieee80211_enable_ht(struct ie
 		printk(KERN_DEBUG
 		       "%s: Wrong control channel in association"
 		       " response: configured center-freq: %d"
-		       " hti-cfreq: %d  hti->control_chan: %d"
+		       " ht-cfreq: %d  ht->control_chan: %d"
 		       " band: %d.  Disabling HT.\n",
 		       sdata->name,
 		       local->hw.conf.channel->center_freq,
-		       hti_cfreq, hti->control_chan,
+		       ht_cfreq, ht_oper->primary_chan,
 		       sband->band);
 		enable_ht = false;
 	}
@@ -222,8 +222,8 @@ static u32 ieee80211_enable_ht(struct ie
 		if (!(ap_ht_cap_flags & IEEE80211_HT_CAP_40MHZ_INTOLERANT) &&
 		    !ieee80111_cfg_override_disables_ht40(sdata) &&
 		    (sband->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) &&
-		    (hti->ht_param & IEEE80211_HT_PARAM_CHAN_WIDTH_ANY)) {
-			switch(hti->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
+		    (ht_oper->ht_param & IEEE80211_HT_PARAM_CHAN_WIDTH_ANY)) {
+			switch(ht_oper->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
 			case IEEE80211_HT_PARAM_CHA_SEC_ABOVE:
 				rx_channel_type = NL80211_CHAN_HT40PLUS;
 				break;
@@ -278,7 +278,7 @@ static u32 ieee80211_enable_ht(struct ie
 				IEEE80211_QUEUE_STOP_REASON_CHTYPE_CHANGE);
 	}
 
-	ht_opmode = le16_to_cpu(hti->operation_mode);
+	ht_opmode = le16_to_cpu(ht_oper->operation_mode);
 
 	/* if bss configuration changed store the new one */
 	if (sdata->ht_opmode_valid != enable_ht ||
@@ -316,12 +316,12 @@ static int ieee80211_compatible_rates(co
 }
 
 static void ieee80211_add_ht_ie(struct ieee80211_sub_if_data *sdata,
-				struct sk_buff *skb, const u8 *ht_info_ie,
+				struct sk_buff *skb, const u8 *ht_oper_ie,
 				struct ieee80211_supported_band *sband,
 				struct ieee80211_channel *channel,
 				enum ieee80211_smps_mode smps)
 {
-	struct ieee80211_ht_info *ht_info;
+	struct ieee80211_ht_operation *ht_oper;
 	u8 *pos;
 	u32 flags = channel->flags;
 	u16 cap;
@@ -329,21 +329,21 @@ static void ieee80211_add_ht_ie(struct i
 
 	BUILD_BUG_ON(sizeof(ht_cap) != sizeof(sband->ht_cap));
 
-	if (!ht_info_ie)
+	if (!ht_oper_ie)
 		return;
 
-	if (ht_info_ie[1] < sizeof(struct ieee80211_ht_info))
+	if (ht_oper_ie[1] < sizeof(struct ieee80211_ht_operation))
 		return;
 
 	memcpy(&ht_cap, &sband->ht_cap, sizeof(ht_cap));
 	ieee80211_apply_htcap_overrides(sdata, &ht_cap);
 
-	ht_info = (struct ieee80211_ht_info *)(ht_info_ie + 2);
+	ht_oper = (struct ieee80211_ht_operation *)(ht_oper_ie + 2);
 
 	/* determine capability flags */
 	cap = ht_cap.cap;
 
-	switch (ht_info->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
+	switch (ht_oper->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
 	case IEEE80211_HT_PARAM_CHA_SEC_ABOVE:
 		if (flags & IEEE80211_CHAN_NO_HT40PLUS) {
 			cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
@@ -557,7 +557,7 @@ static void ieee80211_send_assoc(struct
 	}
 
 	if (!(ifmgd->flags & IEEE80211_STA_DISABLE_11N))
-		ieee80211_add_ht_ie(sdata, skb, assoc_data->ht_information_ie,
+		ieee80211_add_ht_ie(sdata, skb, assoc_data->ht_operation_ie,
 				    sband, local->oper_channel, ifmgd->ap_smps);
 
 	/* if present, add any custom non-vendor IEs that go after HT */
@@ -2092,9 +2092,9 @@ static bool ieee80211_assoc_success(stru
 		ieee80211_set_wmm_default(sdata, false);
 	changed |= BSS_CHANGED_QOS;
 
-	if (elems.ht_info_elem && elems.wmm_param &&
+	if (elems.ht_operation && elems.wmm_param &&
 	    !(ifmgd->flags & IEEE80211_STA_DISABLE_11N))
-		changed |= ieee80211_enable_ht(sdata, elems.ht_info_elem,
+		changed |= ieee80211_enable_ht(sdata, elems.ht_operation,
 					       cbss->bssid, ap_ht_cap_flags,
 					       false);
 
@@ -2319,7 +2319,7 @@ static const u64 care_about_ies =
 	(1ULL << WLAN_EID_CHANNEL_SWITCH) |
 	(1ULL << WLAN_EID_PWR_CONSTRAINT) |
 	(1ULL << WLAN_EID_HT_CAPABILITY) |
-	(1ULL << WLAN_EID_HT_INFORMATION);
+	(1ULL << WLAN_EID_HT_OPERATION);
 
 static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata,
 				     struct ieee80211_mgmt *mgmt,
@@ -2504,7 +2504,7 @@ static void ieee80211_rx_mgmt_beacon(str
 			erp_valid, erp_value);
 
 
-	if (elems.ht_cap_elem && elems.ht_info_elem && elems.wmm_param &&
+	if (elems.ht_cap_elem && elems.ht_operation && elems.wmm_param &&
 	    !(ifmgd->flags & IEEE80211_STA_DISABLE_11N)) {
 		struct sta_info *sta;
 		struct ieee80211_supported_band *sband;
@@ -2527,7 +2527,7 @@ static void ieee80211_rx_mgmt_beacon(str
 
 		rcu_read_unlock();
 
-		changed |= ieee80211_enable_ht(sdata, elems.ht_info_elem,
+		changed |= ieee80211_enable_ht(sdata, elems.ht_operation,
 					       bssid, ap_ht_cap_flags, true);
 	}
 
@@ -3335,8 +3335,8 @@ int ieee80211_mgd_assoc(struct ieee80211
 	assoc_data->wmm = bss->wmm_used && (local->hw.queues >= 4);
 	assoc_data->supp_rates = bss->supp_rates;
 	assoc_data->supp_rates_len = bss->supp_rates_len;
-	assoc_data->ht_information_ie =
-		ieee80211_bss_get_ie(req->bss, WLAN_EID_HT_INFORMATION);
+	assoc_data->ht_operation_ie =
+		ieee80211_bss_get_ie(req->bss, WLAN_EID_HT_OPERATION);
 
 	if (bss->wmm_used && bss->uapsd_supported &&
 	    (sdata->local->hw.flags & IEEE80211_HW_SUPPORTS_UAPSD)) {
--- a/net/mac80211/util.c	2012-03-15 11:15:01.000000000 +0100
+++ b/net/mac80211/util.c	2012-03-15 11:15:11.000000000 +0100
@@ -684,9 +684,9 @@ u32 ieee802_11_parse_elems_crc(u8 *start
 			else
 				elem_parse_failed = true;
 			break;
-		case WLAN_EID_HT_INFORMATION:
-			if (elen >= sizeof(struct ieee80211_ht_info))
-				elems->ht_info_elem = (void *)pos;
+		case WLAN_EID_HT_OPERATION:
+			if (elen >= sizeof(struct ieee80211_ht_operation))
+				elems->ht_operation = (void *)pos;
 			else
 				elem_parse_failed = true;
 			break;
@@ -1611,57 +1611,56 @@ u8 *ieee80211_ie_build_ht_cap(u8 *pos, s
 	return pos;
 }
 
-u8 *ieee80211_ie_build_ht_info(u8 *pos,
-			       struct ieee80211_sta_ht_cap *ht_cap,
+u8 *ieee80211_ie_build_ht_oper(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap,
 			       struct ieee80211_channel *channel,
 			       enum nl80211_channel_type channel_type)
 {
-	struct ieee80211_ht_info *ht_info;
+	struct ieee80211_ht_operation *ht_oper;
 	/* Build HT Information */
-	*pos++ = WLAN_EID_HT_INFORMATION;
-	*pos++ = sizeof(struct ieee80211_ht_info);
-	ht_info = (struct ieee80211_ht_info *)pos;
-	ht_info->control_chan =
+	*pos++ = WLAN_EID_HT_OPERATION;
+	*pos++ = sizeof(struct ieee80211_ht_operation);
+	ht_oper = (struct ieee80211_ht_operation *)pos;
+	ht_oper->primary_chan =
 			ieee80211_frequency_to_channel(channel->center_freq);
 	switch (channel_type) {
 	case NL80211_CHAN_HT40MINUS:
-		ht_info->ht_param = IEEE80211_HT_PARAM_CHA_SEC_BELOW;
+		ht_oper->ht_param = IEEE80211_HT_PARAM_CHA_SEC_BELOW;
 		break;
 	case NL80211_CHAN_HT40PLUS:
-		ht_info->ht_param = IEEE80211_HT_PARAM_CHA_SEC_ABOVE;
+		ht_oper->ht_param = IEEE80211_HT_PARAM_CHA_SEC_ABOVE;
 		break;
 	case NL80211_CHAN_HT20:
 	default:
-		ht_info->ht_param = IEEE80211_HT_PARAM_CHA_SEC_NONE;
+		ht_oper->ht_param = IEEE80211_HT_PARAM_CHA_SEC_NONE;
 		break;
 	}
 	if (ht_cap->cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40)
-		ht_info->ht_param |= IEEE80211_HT_PARAM_CHAN_WIDTH_ANY;
+		ht_oper->ht_param |= IEEE80211_HT_PARAM_CHAN_WIDTH_ANY;
 
 	/*
 	 * Note: According to 802.11n-2009 9.13.3.1, HT Protection field and
 	 * RIFS Mode are reserved in IBSS mode, therefore keep them at 0
 	 */
-	ht_info->operation_mode = 0x0000;
-	ht_info->stbc_param = 0x0000;
+	ht_oper->operation_mode = 0x0000;
+	ht_oper->stbc_param = 0x0000;
 
 	/* It seems that Basic MCS set and Supported MCS set
 	   are identical for the first 10 bytes */
-	memset(&ht_info->basic_set, 0, 16);
-	memcpy(&ht_info->basic_set, &ht_cap->mcs, 10);
+	memset(&ht_oper->basic_set, 0, 16);
+	memcpy(&ht_oper->basic_set, &ht_cap->mcs, 10);
 
-	return pos + sizeof(struct ieee80211_ht_info);
+	return pos + sizeof(struct ieee80211_ht_operation);
 }
 
 enum nl80211_channel_type
-ieee80211_ht_info_to_channel_type(struct ieee80211_ht_info *ht_info)
+ieee80211_ht_oper_to_channel_type(struct ieee80211_ht_operation *ht_oper)
 {
 	enum nl80211_channel_type channel_type;
 
-	if (!ht_info)
+	if (!ht_oper)
 		return NL80211_CHAN_NO_HT;
 
-	switch (ht_info->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
+	switch (ht_oper->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
 	case IEEE80211_HT_PARAM_CHA_SEC_NONE:
 		channel_type = NL80211_CHAN_HT20;
 		break;
--- a/drivers/net/wireless/mwifiex/fw.h	2012-03-15 11:15:02.000000000 +0100
+++ b/drivers/net/wireless/mwifiex/fw.h	2012-03-15 11:15:11.000000000 +0100
@@ -1045,7 +1045,7 @@ struct mwifiex_ie_types_htcap {
 
 struct mwifiex_ie_types_htinfo {
 	struct mwifiex_ie_types_header header;
-	struct ieee80211_ht_info ht_info;
+	struct ieee80211_ht_operation ht_oper;
 } __packed;
 
 struct mwifiex_ie_types_2040bssco {
--- a/drivers/net/wireless/mwifiex/main.h	2012-03-15 11:15:02.000000000 +0100
+++ b/drivers/net/wireless/mwifiex/main.h	2012-03-15 11:15:11.000000000 +0100
@@ -269,7 +269,7 @@ struct mwifiex_bssdescriptor {
 	u8  disable_11n;
 	struct ieee80211_ht_cap *bcn_ht_cap;
 	u16 ht_cap_offset;
-	struct ieee80211_ht_info *bcn_ht_info;
+	struct ieee80211_ht_operation *bcn_ht_oper;
 	u16 ht_info_offset;
 	u8 *bcn_bss_co_2040;
 	u16 bss_co_2040_offset;
--- a/include/net/mac80211.h	2012-03-15 11:15:01.000000000 +0100
+++ b/include/net/mac80211.h	2012-03-15 11:15:11.000000000 +0100
@@ -242,7 +242,7 @@ enum ieee80211_rssi_event {
  * @channel_type: Channel type for this BSS -- the hardware might be
  *	configured for HT40+ while this BSS only uses no-HT, for
  *	example.
- * @ht_operation_mode: HT operation mode (like in &struct ieee80211_ht_info).
+ * @ht_operation_mode: HT operation mode like in &struct ieee80211_ht_operation.
  *	This field is only valid when the channel type is one of the HT types.
  * @cqm_rssi_thold: Connection quality monitor RSSI threshold, a zero value
  *	implies disabled
--- a/net/mac80211/ibss.c	2012-03-15 11:15:02.000000000 +0100
+++ b/net/mac80211/ibss.c	2012-03-15 11:15:11.000000000 +0100
@@ -160,13 +160,11 @@ static void __ieee80211_sta_join_ibss(st
 	if (channel_type && sband->ht_cap.ht_supported) {
 		pos = skb_put(skb, 4 +
 				   sizeof(struct ieee80211_ht_cap) +
-				   sizeof(struct ieee80211_ht_info));
+				   sizeof(struct ieee80211_ht_operation));
 		pos = ieee80211_ie_build_ht_cap(pos, &sband->ht_cap,
 						sband->ht_cap.cap);
-		pos = ieee80211_ie_build_ht_info(pos,
-						 &sband->ht_cap,
-						 chan,
-						 channel_type);
+		pos = ieee80211_ie_build_ht_oper(pos, &sband->ht_cap,
+						 chan, channel_type);
 	}
 
 	if (local->hw.queues >= 4) {
@@ -441,13 +439,13 @@ static void ieee80211_rx_bss_info(struct
 		if (sta && elems->wmm_info)
 			set_sta_flag(sta, WLAN_STA_WME);
 
-		if (sta && elems->ht_info_elem && elems->ht_cap_elem &&
+		if (sta && elems->ht_operation && elems->ht_cap_elem &&
 		    sdata->u.ibss.channel_type != NL80211_CHAN_NO_HT) {
 			/* we both use HT */
 			struct ieee80211_sta_ht_cap sta_ht_cap_new;
 			enum nl80211_channel_type channel_type =
-				ieee80211_ht_info_to_channel_type(
-							elems->ht_info_elem);
+				ieee80211_ht_oper_to_channel_type(
+							elems->ht_operation);
 
 			ieee80211_ht_cap_ie_to_sta_ht_cap(sdata, sband,
 							  elems->ht_cap_elem,
@@ -1063,7 +1061,7 @@ int ieee80211_ibss_join(struct ieee80211
 			    4 /* IBSS params */ +
 			    2 + (IEEE80211_MAX_SUPP_RATES - 8) +
 			    2 + sizeof(struct ieee80211_ht_cap) +
-			    2 + sizeof(struct ieee80211_ht_info) +
+			    2 + sizeof(struct ieee80211_ht_operation) +
 			    params->ie_len);
 	if (!skb)
 		return -ENOMEM;
--- a/net/mac80211/ieee80211_i.h	2012-03-15 11:15:03.000000000 +0100
+++ b/net/mac80211/ieee80211_i.h	2012-03-15 11:15:33.000000000 +0100
@@ -397,7 +397,7 @@ struct ieee80211_mgd_auth_data {
 struct ieee80211_mgd_assoc_data {
 	struct cfg80211_bss *bss;
 	const u8 *supp_rates;
-	const u8 *ht_information_ie;
+	const u8 *ht_operation_ie;
 
 	unsigned long timeout;
 	int tries;
@@ -1117,7 +1117,7 @@ struct ieee802_11_elems {
 	u8 *wmm_info;
 	u8 *wmm_param;
 	struct ieee80211_ht_cap *ht_cap_elem;
-	struct ieee80211_ht_info *ht_info_elem;
+	struct ieee80211_ht_operation *ht_operation;
 	struct ieee80211_meshconf_ie *mesh_config;
 	u8 *mesh_id;
 	u8 *peering;
@@ -1470,10 +1470,9 @@ size_t ieee80211_ie_split(const u8 *ies,
 size_t ieee80211_ie_split_vendor(const u8 *ies, size_t ielen, size_t offset);
 u8 *ieee80211_ie_build_ht_cap(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap,
 			      u16 cap);
-u8 *ieee80211_ie_build_ht_info(u8 *pos,
-				struct ieee80211_sta_ht_cap *ht_cap,
-				struct ieee80211_channel *channel,
-				enum nl80211_channel_type channel_type);
+u8 *ieee80211_ie_build_ht_oper(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap,
+			       struct ieee80211_channel *channel,
+			       enum nl80211_channel_type channel_type);
 
 /* internal work items */
 void ieee80211_work_init(struct ieee80211_local *local);
@@ -1501,7 +1500,7 @@ bool ieee80211_set_channel_type(struct i
 				struct ieee80211_sub_if_data *sdata,
 				enum nl80211_channel_type chantype);
 enum nl80211_channel_type
-ieee80211_ht_info_to_channel_type(struct ieee80211_ht_info *ht_info);
+ieee80211_ht_oper_to_channel_type(struct ieee80211_ht_operation *ht_oper);
 enum nl80211_channel_type ieee80211_get_tx_channel_type(
 					struct ieee80211_local *local,
 					enum nl80211_channel_type channel_type);
--- a/net/mac80211/mesh.c	2012-03-15 11:15:02.000000000 +0100
+++ b/net/mac80211/mesh.c	2012-03-15 11:15:11.000000000 +0100
@@ -98,9 +98,9 @@ bool mesh_matches_local(struct ieee802_1
 		goto mismatch;
 
 	/* disallow peering with mismatched channel types for now */
-	if (ie->ht_info_elem &&
+	if (ie->ht_operation &&
 	    (local->_oper_channel_type !=
-	     ieee80211_ht_info_to_channel_type(ie->ht_info_elem)))
+	     ieee80211_ht_oper_to_channel_type(ie->ht_operation)))
 		goto mismatch;
 
 	return true;
@@ -371,7 +371,7 @@ int mesh_add_ht_cap_ie(struct sk_buff *s
 	return 0;
 }
 
-int mesh_add_ht_info_ie(struct sk_buff *skb,
+int mesh_add_ht_oper_ie(struct sk_buff *skb,
 			struct ieee80211_sub_if_data *sdata)
 {
 	struct ieee80211_local *local = sdata->local;
@@ -385,11 +385,11 @@ int mesh_add_ht_info_ie(struct sk_buff *
 	if (!ht_cap->ht_supported || channel_type == NL80211_CHAN_NO_HT)
 		return 0;
 
-	if (skb_tailroom(skb) < 2 + sizeof(struct ieee80211_ht_info))
+	if (skb_tailroom(skb) < 2 + sizeof(struct ieee80211_ht_operation))
 		return -ENOMEM;
 
-	pos = skb_put(skb, 2 + sizeof(struct ieee80211_ht_info));
-	ieee80211_ie_build_ht_info(pos, ht_cap, channel, channel_type);
+	pos = skb_put(skb, 2 + sizeof(struct ieee80211_ht_operation));
+	ieee80211_ie_build_ht_oper(pos, ht_cap, channel, channel_type);
 
 	return 0;
 }
--- a/net/mac80211/mesh_plink.c	2012-03-15 11:15:02.000000000 +0100
+++ b/net/mac80211/mesh_plink.c	2012-03-15 11:15:11.000000000 +0100
@@ -187,7 +187,7 @@ static int mesh_plink_frame_tx(struct ie
 			    2 + sdata->u.mesh.mesh_id_len +
 			    2 + sizeof(struct ieee80211_meshconf_ie) +
 			    2 + sizeof(struct ieee80211_ht_cap) +
-			    2 + sizeof(struct ieee80211_ht_info) +
+			    2 + sizeof(struct ieee80211_ht_operation) +
 			    2 + 8 + /* peering IE */
 			    sdata->u.mesh.ie_len);
 	if (!skb)
@@ -263,7 +263,7 @@ static int mesh_plink_frame_tx(struct ie
 
 	if (action != WLAN_SP_MESH_PEERING_CLOSE) {
 		if (mesh_add_ht_cap_ie(skb, sdata) ||
-		    mesh_add_ht_info_ie(skb, sdata))
+		    mesh_add_ht_oper_ie(skb, sdata))
 			return -1;
 	}
 
--- a/net/mac80211/tx.c	2012-03-15 11:15:02.000000000 +0100
+++ b/net/mac80211/tx.c	2012-03-15 11:15:11.000000000 +0100
@@ -2390,7 +2390,7 @@ struct sk_buff *ieee80211_beacon_get_tim
 				    2 + 3 + /* DS params */
 				    2 + (IEEE80211_MAX_SUPP_RATES - 8) +
 				    2 + sizeof(struct ieee80211_ht_cap) +
-				    2 + sizeof(struct ieee80211_ht_info) +
+				    2 + sizeof(struct ieee80211_ht_operation) +
 				    2 + sdata->u.mesh.mesh_id_len +
 				    2 + sizeof(struct ieee80211_meshconf_ie) +
 				    sdata->u.mesh.ie_len);
@@ -2419,7 +2419,7 @@ struct sk_buff *ieee80211_beacon_get_tim
 		    ieee80211_add_ext_srates_ie(&sdata->vif, skb) ||
 		    mesh_add_rsn_ie(skb, sdata) ||
 		    mesh_add_ht_cap_ie(skb, sdata) ||
-		    mesh_add_ht_info_ie(skb, sdata) ||
+		    mesh_add_ht_oper_ie(skb, sdata) ||
 		    mesh_add_meshid_ie(skb, sdata) ||
 		    mesh_add_meshconf_ie(skb, sdata) ||
 		    mesh_add_vendor_ies(skb, sdata)) {
--- a/net/mac80211/mesh.h	2012-03-15 11:15:02.000000000 +0100
+++ b/net/mac80211/mesh.h	2012-03-15 11:15:11.000000000 +0100
@@ -220,7 +220,7 @@ int mesh_add_ds_params_ie(struct sk_buff
 			  struct ieee80211_sub_if_data *sdata);
 int mesh_add_ht_cap_ie(struct sk_buff *skb,
 		       struct ieee80211_sub_if_data *sdata);
-int mesh_add_ht_info_ie(struct sk_buff *skb,
+int mesh_add_ht_oper_ie(struct sk_buff *skb,
 			struct ieee80211_sub_if_data *sdata);
 void mesh_rmc_free(struct ieee80211_sub_if_data *sdata);
 int mesh_rmc_init(struct ieee80211_sub_if_data *sdata);



^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH v2] wireless: rename ht_info to ht_operation
  2012-03-15 10:21 [PATCH] wireless: rename ht_info to ht_operation Johannes Berg
@ 2012-03-15 14:50 ` Johannes Berg
  2012-03-15 18:00   ` Bing Zhao
  2012-03-15 18:45   ` [PATCH v3] " Johannes Berg
  0 siblings, 2 replies; 8+ messages in thread
From: Johannes Berg @ 2012-03-15 14:50 UTC (permalink / raw)
  To: John Linville; +Cc: Bing Zhao, linux-wireless

From: Johannes Berg <johannes.berg@intel.com>

Since some of the HT code pre-dates 802.11n-2009
some names are wrong. The one that bothers me most
is that "HT operation" is called "HT information"
in our code and that causes confusion.

Rename "HT information" to "HT operation" and also
the control_chan field to primary_chan to match
the name used in the spec.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
v2: fix patch for new mwifiex changes

 drivers/net/wireless/mwifiex/11n.c  |   16 ++++++------
 drivers/net/wireless/mwifiex/fw.h   |    2 -
 drivers/net/wireless/mwifiex/join.c |   14 +++++-----
 drivers/net/wireless/mwifiex/main.h |    2 -
 drivers/net/wireless/mwifiex/scan.c |   10 +++----
 drivers/net/wireless/wl12xx/main.c  |    2 -
 include/linux/ieee80211.h           |   14 ++++------
 include/net/mac80211.h              |    2 -
 net/mac80211/ibss.c                 |   16 +++++-------
 net/mac80211/ieee80211_i.h          |   13 ++++-----
 net/mac80211/mesh.c                 |   12 ++++-----
 net/mac80211/mesh.h                 |    2 -
 net/mac80211/mesh_plink.c           |    4 +--
 net/mac80211/mlme.c                 |   48 ++++++++++++++++++------------------
 net/mac80211/tx.c                   |    4 +--
 net/mac80211/util.c                 |   43 +++++++++++++++-----------------
 16 files changed, 99 insertions(+), 105 deletions(-)

--- a/drivers/net/wireless/mwifiex/11n.c	2012-03-15 15:33:29.000000000 +0100
+++ b/drivers/net/wireless/mwifiex/11n.c	2012-03-15 15:49:19.000000000 +0100
@@ -350,25 +350,25 @@ mwifiex_cmd_append_11n_tlv(struct mwifie
 		ret_len += sizeof(struct mwifiex_ie_types_htcap);
 	}
 
-	if (bss_desc->bcn_ht_info) {
+	if (bss_desc->bcn_ht_oper) {
 		if (priv->bss_mode == NL80211_IFTYPE_ADHOC) {
 			ht_info = (struct mwifiex_ie_types_htinfo *) *buffer;
 			memset(ht_info, 0,
 			       sizeof(struct mwifiex_ie_types_htinfo));
 			ht_info->header.type =
-					cpu_to_le16(WLAN_EID_HT_INFORMATION);
+					cpu_to_le16(WLAN_EID_HT_OPERATION);
 			ht_info->header.len =
-				cpu_to_le16(sizeof(struct ieee80211_ht_info));
+				cpu_to_le16(sizeof(struct ieee80211_ht_operation));
 
 			memcpy((u8 *) ht_info +
 			       sizeof(struct mwifiex_ie_types_header),
-			       (u8 *) bss_desc->bcn_ht_info +
+			       (u8 *) bss_desc->bcn_ht_oper +
 			       sizeof(struct ieee_types_header),
 			       le16_to_cpu(ht_info->header.len));
 
 			if (!(sband->ht_cap.cap &
 					IEEE80211_HT_CAP_SUP_WIDTH_20_40))
-				ht_info->ht_info.ht_param &=
+				ht_info->ht_oper.ht_param &=
 					~(IEEE80211_HT_PARAM_CHAN_WIDTH_ANY |
 					IEEE80211_HT_PARAM_CHA_SEC_OFFSET);
 
@@ -385,16 +385,16 @@ mwifiex_cmd_append_11n_tlv(struct mwifie
 			sizeof(struct mwifiex_ie_types_chan_list_param_set) -
 			sizeof(struct mwifiex_ie_types_header));
 		chan_list->chan_scan_param[0].chan_number =
-			bss_desc->bcn_ht_info->control_chan;
+			bss_desc->bcn_ht_oper->primary_chan;
 		chan_list->chan_scan_param[0].radio_type =
 			mwifiex_band_to_radio_type((u8) bss_desc->bss_band);
 
 		if (sband->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40 &&
-		    bss_desc->bcn_ht_info->ht_param &
+		    bss_desc->bcn_ht_oper->ht_param &
 		    IEEE80211_HT_PARAM_CHAN_WIDTH_ANY)
 			SET_SECONDARYCHAN(chan_list->chan_scan_param[0].
 					  radio_type,
-					  (bss_desc->bcn_ht_info->ht_param &
+					  (bss_desc->bcn_ht_oper->ht_param &
 					  IEEE80211_HT_PARAM_CHA_SEC_OFFSET));
 
 		*buffer += sizeof(struct mwifiex_ie_types_chan_list_param_set);
--- a/drivers/net/wireless/mwifiex/scan.c	2012-03-15 15:33:29.000000000 +0100
+++ b/drivers/net/wireless/mwifiex/scan.c	2012-03-15 15:39:59.000000000 +0100
@@ -1221,8 +1221,8 @@ mwifiex_update_bss_desc_with_ie(struct m
 					sizeof(struct ieee_types_header) -
 					bss_entry->beacon_buf);
 			break;
-		case WLAN_EID_HT_INFORMATION:
-			bss_entry->bcn_ht_info = (struct ieee80211_ht_info *)
+		case WLAN_EID_HT_OPERATION:
+			bss_entry->bcn_ht_oper = (struct ieee80211_ht_operation *)
 					(current_ptr +
 					sizeof(struct ieee_types_header));
 			bss_entry->ht_info_offset = (u16) (current_ptr +
@@ -1493,7 +1493,7 @@ mwifiex_update_curr_bss_params(struct mw
 	priv->curr_bss_params.bss_descriptor.bcn_ht_cap = NULL;
 	priv->curr_bss_params.bss_descriptor.ht_cap_offset =
 		0;
-	priv->curr_bss_params.bss_descriptor.bcn_ht_info = NULL;
+	priv->curr_bss_params.bss_descriptor.bcn_ht_oper = NULL;
 	priv->curr_bss_params.bss_descriptor.ht_info_offset =
 		0;
 	priv->curr_bss_params.bss_descriptor.bcn_bss_co_2040 =
@@ -2019,8 +2019,8 @@ mwifiex_save_curr_bcn(struct mwifiex_pri
 			(curr_bss->beacon_buf +
 			 curr_bss->ht_cap_offset);
 
-	if (curr_bss->bcn_ht_info)
-		curr_bss->bcn_ht_info = (struct ieee80211_ht_info *)
+	if (curr_bss->bcn_ht_oper)
+		curr_bss->bcn_ht_oper = (struct ieee80211_ht_operation *)
 			(curr_bss->beacon_buf +
 			 curr_bss->ht_info_offset);
 
--- a/drivers/net/wireless/wl12xx/main.c	2012-03-15 15:32:27.000000000 +0100
+++ b/drivers/net/wireless/wl12xx/main.c	2012-03-15 15:39:59.000000000 +0100
@@ -232,7 +232,7 @@ static struct conf_drv_settings default_
 				.rule        = CONF_BCN_RULE_PASS_ON_APPEARANCE,
 			},
 			[1] = {
-				.ie          = WLAN_EID_HT_INFORMATION,
+				.ie          = WLAN_EID_HT_OPERATION,
 				.rule        = CONF_BCN_RULE_PASS_ON_CHANGE,
 			},
 		},
--- a/include/linux/ieee80211.h	2012-03-15 15:32:26.000000000 +0100
+++ b/include/linux/ieee80211.h	2012-03-15 15:39:59.000000000 +0100
@@ -1007,13 +1007,13 @@ enum ieee80211_min_mpdu_spacing {
 };
 
 /**
- * struct ieee80211_ht_info - HT information
+ * struct ieee80211_ht_operation - HT operation IE
  *
- * This structure is the "HT information element" as
- * described in 802.11n D5.0 7.3.2.58
+ * This structure is the "HT operation element" as
+ * described in 802.11n-2009 7.3.2.57
  */
-struct ieee80211_ht_info {
-	u8 control_chan;
+struct ieee80211_ht_operation {
+	u8 primary_chan;
 	u8 ht_param;
 	__le16 operation_mode;
 	__le16 stbc_param;
@@ -1027,8 +1027,6 @@ struct ieee80211_ht_info {
 #define		IEEE80211_HT_PARAM_CHA_SEC_BELOW	0x03
 #define IEEE80211_HT_PARAM_CHAN_WIDTH_ANY		0x04
 #define IEEE80211_HT_PARAM_RIFS_MODE			0x08
-#define IEEE80211_HT_PARAM_SPSMP_SUPPORT		0x10
-#define IEEE80211_HT_PARAM_SERV_INTERVAL_GRAN		0xE0
 
 /* for operation_mode */
 #define IEEE80211_HT_OP_MODE_PROTECTION			0x0003
@@ -1301,7 +1299,7 @@ enum ieee80211_eid {
 	WLAN_EID_EXT_SUPP_RATES = 50,
 
 	WLAN_EID_HT_CAPABILITY = 45,
-	WLAN_EID_HT_INFORMATION = 61,
+	WLAN_EID_HT_OPERATION = 61,
 
 	WLAN_EID_RSN = 48,
 	WLAN_EID_MMIE = 76,
--- a/net/mac80211/mlme.c	2012-03-15 15:33:29.000000000 +0100
+++ b/net/mac80211/mlme.c	2012-03-15 15:39:59.000000000 +0100
@@ -177,7 +177,7 @@ static int ecw2cw(int ecw)
  * HT abilities for a specific band.
  */
 static u32 ieee80211_enable_ht(struct ieee80211_sub_if_data *sdata,
-			       struct ieee80211_ht_info *hti,
+			       struct ieee80211_ht_operation *ht_oper,
 			       const u8 *bssid, u16 ap_ht_cap_flags,
 			       bool beacon_htcap_ie)
 {
@@ -185,7 +185,7 @@ static u32 ieee80211_enable_ht(struct ie
 	struct ieee80211_supported_band *sband;
 	struct sta_info *sta;
 	u32 changed = 0;
-	int hti_cfreq;
+	int ht_cfreq;
 	u16 ht_opmode;
 	bool enable_ht = true;
 	enum nl80211_channel_type prev_chantype;
@@ -196,10 +196,10 @@ static u32 ieee80211_enable_ht(struct ie
 	prev_chantype = sdata->vif.bss_conf.channel_type;
 
 
-	hti_cfreq = ieee80211_channel_to_frequency(hti->control_chan,
-						   sband->band);
+	ht_cfreq = ieee80211_channel_to_frequency(ht_oper->primary_chan,
+						  sband->band);
 	/* check that channel matches the right operating channel */
-	if (local->hw.conf.channel->center_freq != hti_cfreq) {
+	if (local->hw.conf.channel->center_freq != ht_cfreq) {
 		/* Some APs mess this up, evidently.
 		 * Netgear WNDR3700 sometimes reports 4 higher than
 		 * the actual channel, for instance.
@@ -207,11 +207,11 @@ static u32 ieee80211_enable_ht(struct ie
 		printk(KERN_DEBUG
 		       "%s: Wrong control channel in association"
 		       " response: configured center-freq: %d"
-		       " hti-cfreq: %d  hti->control_chan: %d"
+		       " ht-cfreq: %d  ht->control_chan: %d"
 		       " band: %d.  Disabling HT.\n",
 		       sdata->name,
 		       local->hw.conf.channel->center_freq,
-		       hti_cfreq, hti->control_chan,
+		       ht_cfreq, ht_oper->primary_chan,
 		       sband->band);
 		enable_ht = false;
 	}
@@ -222,8 +222,8 @@ static u32 ieee80211_enable_ht(struct ie
 		if (!(ap_ht_cap_flags & IEEE80211_HT_CAP_40MHZ_INTOLERANT) &&
 		    !ieee80111_cfg_override_disables_ht40(sdata) &&
 		    (sband->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) &&
-		    (hti->ht_param & IEEE80211_HT_PARAM_CHAN_WIDTH_ANY)) {
-			switch(hti->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
+		    (ht_oper->ht_param & IEEE80211_HT_PARAM_CHAN_WIDTH_ANY)) {
+			switch(ht_oper->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
 			case IEEE80211_HT_PARAM_CHA_SEC_ABOVE:
 				rx_channel_type = NL80211_CHAN_HT40PLUS;
 				break;
@@ -278,7 +278,7 @@ static u32 ieee80211_enable_ht(struct ie
 				IEEE80211_QUEUE_STOP_REASON_CHTYPE_CHANGE);
 	}
 
-	ht_opmode = le16_to_cpu(hti->operation_mode);
+	ht_opmode = le16_to_cpu(ht_oper->operation_mode);
 
 	/* if bss configuration changed store the new one */
 	if (sdata->ht_opmode_valid != enable_ht ||
@@ -316,12 +316,12 @@ static int ieee80211_compatible_rates(co
 }
 
 static void ieee80211_add_ht_ie(struct ieee80211_sub_if_data *sdata,
-				struct sk_buff *skb, const u8 *ht_info_ie,
+				struct sk_buff *skb, const u8 *ht_oper_ie,
 				struct ieee80211_supported_band *sband,
 				struct ieee80211_channel *channel,
 				enum ieee80211_smps_mode smps)
 {
-	struct ieee80211_ht_info *ht_info;
+	struct ieee80211_ht_operation *ht_oper;
 	u8 *pos;
 	u32 flags = channel->flags;
 	u16 cap;
@@ -329,21 +329,21 @@ static void ieee80211_add_ht_ie(struct i
 
 	BUILD_BUG_ON(sizeof(ht_cap) != sizeof(sband->ht_cap));
 
-	if (!ht_info_ie)
+	if (!ht_oper_ie)
 		return;
 
-	if (ht_info_ie[1] < sizeof(struct ieee80211_ht_info))
+	if (ht_oper_ie[1] < sizeof(struct ieee80211_ht_operation))
 		return;
 
 	memcpy(&ht_cap, &sband->ht_cap, sizeof(ht_cap));
 	ieee80211_apply_htcap_overrides(sdata, &ht_cap);
 
-	ht_info = (struct ieee80211_ht_info *)(ht_info_ie + 2);
+	ht_oper = (struct ieee80211_ht_operation *)(ht_oper_ie + 2);
 
 	/* determine capability flags */
 	cap = ht_cap.cap;
 
-	switch (ht_info->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
+	switch (ht_oper->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
 	case IEEE80211_HT_PARAM_CHA_SEC_ABOVE:
 		if (flags & IEEE80211_CHAN_NO_HT40PLUS) {
 			cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
@@ -557,7 +557,7 @@ static void ieee80211_send_assoc(struct
 	}
 
 	if (!(ifmgd->flags & IEEE80211_STA_DISABLE_11N))
-		ieee80211_add_ht_ie(sdata, skb, assoc_data->ht_information_ie,
+		ieee80211_add_ht_ie(sdata, skb, assoc_data->ht_operation_ie,
 				    sband, local->oper_channel, ifmgd->ap_smps);
 
 	/* if present, add any custom non-vendor IEs that go after HT */
@@ -2092,9 +2092,9 @@ static bool ieee80211_assoc_success(stru
 		ieee80211_set_wmm_default(sdata, false);
 	changed |= BSS_CHANGED_QOS;
 
-	if (elems.ht_info_elem && elems.wmm_param &&
+	if (elems.ht_operation && elems.wmm_param &&
 	    !(ifmgd->flags & IEEE80211_STA_DISABLE_11N))
-		changed |= ieee80211_enable_ht(sdata, elems.ht_info_elem,
+		changed |= ieee80211_enable_ht(sdata, elems.ht_operation,
 					       cbss->bssid, ap_ht_cap_flags,
 					       false);
 
@@ -2319,7 +2319,7 @@ static const u64 care_about_ies =
 	(1ULL << WLAN_EID_CHANNEL_SWITCH) |
 	(1ULL << WLAN_EID_PWR_CONSTRAINT) |
 	(1ULL << WLAN_EID_HT_CAPABILITY) |
-	(1ULL << WLAN_EID_HT_INFORMATION);
+	(1ULL << WLAN_EID_HT_OPERATION);
 
 static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata,
 				     struct ieee80211_mgmt *mgmt,
@@ -2504,7 +2504,7 @@ static void ieee80211_rx_mgmt_beacon(str
 			erp_valid, erp_value);
 
 
-	if (elems.ht_cap_elem && elems.ht_info_elem && elems.wmm_param &&
+	if (elems.ht_cap_elem && elems.ht_operation && elems.wmm_param &&
 	    !(ifmgd->flags & IEEE80211_STA_DISABLE_11N)) {
 		struct sta_info *sta;
 		struct ieee80211_supported_band *sband;
@@ -2527,7 +2527,7 @@ static void ieee80211_rx_mgmt_beacon(str
 
 		rcu_read_unlock();
 
-		changed |= ieee80211_enable_ht(sdata, elems.ht_info_elem,
+		changed |= ieee80211_enable_ht(sdata, elems.ht_operation,
 					       bssid, ap_ht_cap_flags, true);
 	}
 
@@ -3335,8 +3335,8 @@ int ieee80211_mgd_assoc(struct ieee80211
 	assoc_data->wmm = bss->wmm_used && (local->hw.queues >= 4);
 	assoc_data->supp_rates = bss->supp_rates;
 	assoc_data->supp_rates_len = bss->supp_rates_len;
-	assoc_data->ht_information_ie =
-		ieee80211_bss_get_ie(req->bss, WLAN_EID_HT_INFORMATION);
+	assoc_data->ht_operation_ie =
+		ieee80211_bss_get_ie(req->bss, WLAN_EID_HT_OPERATION);
 
 	if (bss->wmm_used && bss->uapsd_supported &&
 	    (sdata->local->hw.flags & IEEE80211_HW_SUPPORTS_UAPSD)) {
--- a/net/mac80211/util.c	2012-03-15 15:32:26.000000000 +0100
+++ b/net/mac80211/util.c	2012-03-15 15:39:59.000000000 +0100
@@ -684,9 +684,9 @@ u32 ieee802_11_parse_elems_crc(u8 *start
 			else
 				elem_parse_failed = true;
 			break;
-		case WLAN_EID_HT_INFORMATION:
-			if (elen >= sizeof(struct ieee80211_ht_info))
-				elems->ht_info_elem = (void *)pos;
+		case WLAN_EID_HT_OPERATION:
+			if (elen >= sizeof(struct ieee80211_ht_operation))
+				elems->ht_operation = (void *)pos;
 			else
 				elem_parse_failed = true;
 			break;
@@ -1611,57 +1611,56 @@ u8 *ieee80211_ie_build_ht_cap(u8 *pos, s
 	return pos;
 }
 
-u8 *ieee80211_ie_build_ht_info(u8 *pos,
-			       struct ieee80211_sta_ht_cap *ht_cap,
+u8 *ieee80211_ie_build_ht_oper(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap,
 			       struct ieee80211_channel *channel,
 			       enum nl80211_channel_type channel_type)
 {
-	struct ieee80211_ht_info *ht_info;
+	struct ieee80211_ht_operation *ht_oper;
 	/* Build HT Information */
-	*pos++ = WLAN_EID_HT_INFORMATION;
-	*pos++ = sizeof(struct ieee80211_ht_info);
-	ht_info = (struct ieee80211_ht_info *)pos;
-	ht_info->control_chan =
+	*pos++ = WLAN_EID_HT_OPERATION;
+	*pos++ = sizeof(struct ieee80211_ht_operation);
+	ht_oper = (struct ieee80211_ht_operation *)pos;
+	ht_oper->primary_chan =
 			ieee80211_frequency_to_channel(channel->center_freq);
 	switch (channel_type) {
 	case NL80211_CHAN_HT40MINUS:
-		ht_info->ht_param = IEEE80211_HT_PARAM_CHA_SEC_BELOW;
+		ht_oper->ht_param = IEEE80211_HT_PARAM_CHA_SEC_BELOW;
 		break;
 	case NL80211_CHAN_HT40PLUS:
-		ht_info->ht_param = IEEE80211_HT_PARAM_CHA_SEC_ABOVE;
+		ht_oper->ht_param = IEEE80211_HT_PARAM_CHA_SEC_ABOVE;
 		break;
 	case NL80211_CHAN_HT20:
 	default:
-		ht_info->ht_param = IEEE80211_HT_PARAM_CHA_SEC_NONE;
+		ht_oper->ht_param = IEEE80211_HT_PARAM_CHA_SEC_NONE;
 		break;
 	}
 	if (ht_cap->cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40)
-		ht_info->ht_param |= IEEE80211_HT_PARAM_CHAN_WIDTH_ANY;
+		ht_oper->ht_param |= IEEE80211_HT_PARAM_CHAN_WIDTH_ANY;
 
 	/*
 	 * Note: According to 802.11n-2009 9.13.3.1, HT Protection field and
 	 * RIFS Mode are reserved in IBSS mode, therefore keep them at 0
 	 */
-	ht_info->operation_mode = 0x0000;
-	ht_info->stbc_param = 0x0000;
+	ht_oper->operation_mode = 0x0000;
+	ht_oper->stbc_param = 0x0000;
 
 	/* It seems that Basic MCS set and Supported MCS set
 	   are identical for the first 10 bytes */
-	memset(&ht_info->basic_set, 0, 16);
-	memcpy(&ht_info->basic_set, &ht_cap->mcs, 10);
+	memset(&ht_oper->basic_set, 0, 16);
+	memcpy(&ht_oper->basic_set, &ht_cap->mcs, 10);
 
-	return pos + sizeof(struct ieee80211_ht_info);
+	return pos + sizeof(struct ieee80211_ht_operation);
 }
 
 enum nl80211_channel_type
-ieee80211_ht_info_to_channel_type(struct ieee80211_ht_info *ht_info)
+ieee80211_ht_oper_to_channel_type(struct ieee80211_ht_operation *ht_oper)
 {
 	enum nl80211_channel_type channel_type;
 
-	if (!ht_info)
+	if (!ht_oper)
 		return NL80211_CHAN_NO_HT;
 
-	switch (ht_info->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
+	switch (ht_oper->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
 	case IEEE80211_HT_PARAM_CHA_SEC_NONE:
 		channel_type = NL80211_CHAN_HT20;
 		break;
--- a/drivers/net/wireless/mwifiex/fw.h	2012-03-15 15:33:29.000000000 +0100
+++ b/drivers/net/wireless/mwifiex/fw.h	2012-03-15 15:39:59.000000000 +0100
@@ -1045,7 +1045,7 @@ struct mwifiex_ie_types_htcap {
 
 struct mwifiex_ie_types_htinfo {
 	struct mwifiex_ie_types_header header;
-	struct ieee80211_ht_info ht_info;
+	struct ieee80211_ht_operation ht_oper;
 } __packed;
 
 struct mwifiex_ie_types_2040bssco {
--- a/drivers/net/wireless/mwifiex/main.h	2012-03-15 15:33:29.000000000 +0100
+++ b/drivers/net/wireless/mwifiex/main.h	2012-03-15 15:39:59.000000000 +0100
@@ -269,7 +269,7 @@ struct mwifiex_bssdescriptor {
 	u8  disable_11n;
 	struct ieee80211_ht_cap *bcn_ht_cap;
 	u16 ht_cap_offset;
-	struct ieee80211_ht_info *bcn_ht_info;
+	struct ieee80211_ht_operation *bcn_ht_oper;
 	u16 ht_info_offset;
 	u8 *bcn_bss_co_2040;
 	u16 bss_co_2040_offset;
--- a/include/net/mac80211.h	2012-03-15 15:33:29.000000000 +0100
+++ b/include/net/mac80211.h	2012-03-15 15:39:59.000000000 +0100
@@ -242,7 +242,7 @@ enum ieee80211_rssi_event {
  * @channel_type: Channel type for this BSS -- the hardware might be
  *	configured for HT40+ while this BSS only uses no-HT, for
  *	example.
- * @ht_operation_mode: HT operation mode (like in &struct ieee80211_ht_info).
+ * @ht_operation_mode: HT operation mode like in &struct ieee80211_ht_operation.
  *	This field is only valid when the channel type is one of the HT types.
  * @cqm_rssi_thold: Connection quality monitor RSSI threshold, a zero value
  *	implies disabled
--- a/net/mac80211/ibss.c	2012-03-15 15:32:26.000000000 +0100
+++ b/net/mac80211/ibss.c	2012-03-15 15:39:59.000000000 +0100
@@ -160,13 +160,11 @@ static void __ieee80211_sta_join_ibss(st
 	if (channel_type && sband->ht_cap.ht_supported) {
 		pos = skb_put(skb, 4 +
 				   sizeof(struct ieee80211_ht_cap) +
-				   sizeof(struct ieee80211_ht_info));
+				   sizeof(struct ieee80211_ht_operation));
 		pos = ieee80211_ie_build_ht_cap(pos, &sband->ht_cap,
 						sband->ht_cap.cap);
-		pos = ieee80211_ie_build_ht_info(pos,
-						 &sband->ht_cap,
-						 chan,
-						 channel_type);
+		pos = ieee80211_ie_build_ht_oper(pos, &sband->ht_cap,
+						 chan, channel_type);
 	}
 
 	if (local->hw.queues >= 4) {
@@ -441,13 +439,13 @@ static void ieee80211_rx_bss_info(struct
 		if (sta && elems->wmm_info)
 			set_sta_flag(sta, WLAN_STA_WME);
 
-		if (sta && elems->ht_info_elem && elems->ht_cap_elem &&
+		if (sta && elems->ht_operation && elems->ht_cap_elem &&
 		    sdata->u.ibss.channel_type != NL80211_CHAN_NO_HT) {
 			/* we both use HT */
 			struct ieee80211_sta_ht_cap sta_ht_cap_new;
 			enum nl80211_channel_type channel_type =
-				ieee80211_ht_info_to_channel_type(
-							elems->ht_info_elem);
+				ieee80211_ht_oper_to_channel_type(
+							elems->ht_operation);
 
 			ieee80211_ht_cap_ie_to_sta_ht_cap(sdata, sband,
 							  elems->ht_cap_elem,
@@ -1063,7 +1061,7 @@ int ieee80211_ibss_join(struct ieee80211
 			    4 /* IBSS params */ +
 			    2 + (IEEE80211_MAX_SUPP_RATES - 8) +
 			    2 + sizeof(struct ieee80211_ht_cap) +
-			    2 + sizeof(struct ieee80211_ht_info) +
+			    2 + sizeof(struct ieee80211_ht_operation) +
 			    params->ie_len);
 	if (!skb)
 		return -ENOMEM;
--- a/net/mac80211/ieee80211_i.h	2012-03-15 15:33:29.000000000 +0100
+++ b/net/mac80211/ieee80211_i.h	2012-03-15 15:39:59.000000000 +0100
@@ -397,7 +397,7 @@ struct ieee80211_mgd_auth_data {
 struct ieee80211_mgd_assoc_data {
 	struct cfg80211_bss *bss;
 	const u8 *supp_rates;
-	const u8 *ht_information_ie;
+	const u8 *ht_operation_ie;
 
 	unsigned long timeout;
 	int tries;
@@ -1117,7 +1117,7 @@ struct ieee802_11_elems {
 	u8 *wmm_info;
 	u8 *wmm_param;
 	struct ieee80211_ht_cap *ht_cap_elem;
-	struct ieee80211_ht_info *ht_info_elem;
+	struct ieee80211_ht_operation *ht_operation;
 	struct ieee80211_meshconf_ie *mesh_config;
 	u8 *mesh_id;
 	u8 *peering;
@@ -1470,10 +1470,9 @@ size_t ieee80211_ie_split(const u8 *ies,
 size_t ieee80211_ie_split_vendor(const u8 *ies, size_t ielen, size_t offset);
 u8 *ieee80211_ie_build_ht_cap(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap,
 			      u16 cap);
-u8 *ieee80211_ie_build_ht_info(u8 *pos,
-				struct ieee80211_sta_ht_cap *ht_cap,
-				struct ieee80211_channel *channel,
-				enum nl80211_channel_type channel_type);
+u8 *ieee80211_ie_build_ht_oper(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap,
+			       struct ieee80211_channel *channel,
+			       enum nl80211_channel_type channel_type);
 
 /* internal work items */
 void ieee80211_work_init(struct ieee80211_local *local);
@@ -1501,7 +1500,7 @@ bool ieee80211_set_channel_type(struct i
 				struct ieee80211_sub_if_data *sdata,
 				enum nl80211_channel_type chantype);
 enum nl80211_channel_type
-ieee80211_ht_info_to_channel_type(struct ieee80211_ht_info *ht_info);
+ieee80211_ht_oper_to_channel_type(struct ieee80211_ht_operation *ht_oper);
 enum nl80211_channel_type ieee80211_get_tx_channel_type(
 					struct ieee80211_local *local,
 					enum nl80211_channel_type channel_type);
--- a/net/mac80211/mesh.c	2012-03-15 15:32:26.000000000 +0100
+++ b/net/mac80211/mesh.c	2012-03-15 15:39:59.000000000 +0100
@@ -98,9 +98,9 @@ bool mesh_matches_local(struct ieee802_1
 		goto mismatch;
 
 	/* disallow peering with mismatched channel types for now */
-	if (ie->ht_info_elem &&
+	if (ie->ht_operation &&
 	    (local->_oper_channel_type !=
-	     ieee80211_ht_info_to_channel_type(ie->ht_info_elem)))
+	     ieee80211_ht_oper_to_channel_type(ie->ht_operation)))
 		goto mismatch;
 
 	return true;
@@ -371,7 +371,7 @@ int mesh_add_ht_cap_ie(struct sk_buff *s
 	return 0;
 }
 
-int mesh_add_ht_info_ie(struct sk_buff *skb,
+int mesh_add_ht_oper_ie(struct sk_buff *skb,
 			struct ieee80211_sub_if_data *sdata)
 {
 	struct ieee80211_local *local = sdata->local;
@@ -385,11 +385,11 @@ int mesh_add_ht_info_ie(struct sk_buff *
 	if (!ht_cap->ht_supported || channel_type == NL80211_CHAN_NO_HT)
 		return 0;
 
-	if (skb_tailroom(skb) < 2 + sizeof(struct ieee80211_ht_info))
+	if (skb_tailroom(skb) < 2 + sizeof(struct ieee80211_ht_operation))
 		return -ENOMEM;
 
-	pos = skb_put(skb, 2 + sizeof(struct ieee80211_ht_info));
-	ieee80211_ie_build_ht_info(pos, ht_cap, channel, channel_type);
+	pos = skb_put(skb, 2 + sizeof(struct ieee80211_ht_operation));
+	ieee80211_ie_build_ht_oper(pos, ht_cap, channel, channel_type);
 
 	return 0;
 }
--- a/net/mac80211/mesh_plink.c	2012-03-15 15:32:26.000000000 +0100
+++ b/net/mac80211/mesh_plink.c	2012-03-15 15:39:59.000000000 +0100
@@ -187,7 +187,7 @@ static int mesh_plink_frame_tx(struct ie
 			    2 + sdata->u.mesh.mesh_id_len +
 			    2 + sizeof(struct ieee80211_meshconf_ie) +
 			    2 + sizeof(struct ieee80211_ht_cap) +
-			    2 + sizeof(struct ieee80211_ht_info) +
+			    2 + sizeof(struct ieee80211_ht_operation) +
 			    2 + 8 + /* peering IE */
 			    sdata->u.mesh.ie_len);
 	if (!skb)
@@ -263,7 +263,7 @@ static int mesh_plink_frame_tx(struct ie
 
 	if (action != WLAN_SP_MESH_PEERING_CLOSE) {
 		if (mesh_add_ht_cap_ie(skb, sdata) ||
-		    mesh_add_ht_info_ie(skb, sdata))
+		    mesh_add_ht_oper_ie(skb, sdata))
 			return -1;
 	}
 
--- a/net/mac80211/tx.c	2012-03-15 15:33:29.000000000 +0100
+++ b/net/mac80211/tx.c	2012-03-15 15:39:59.000000000 +0100
@@ -2390,7 +2390,7 @@ struct sk_buff *ieee80211_beacon_get_tim
 				    2 + 3 + /* DS params */
 				    2 + (IEEE80211_MAX_SUPP_RATES - 8) +
 				    2 + sizeof(struct ieee80211_ht_cap) +
-				    2 + sizeof(struct ieee80211_ht_info) +
+				    2 + sizeof(struct ieee80211_ht_operation) +
 				    2 + sdata->u.mesh.mesh_id_len +
 				    2 + sizeof(struct ieee80211_meshconf_ie) +
 				    sdata->u.mesh.ie_len);
@@ -2419,7 +2419,7 @@ struct sk_buff *ieee80211_beacon_get_tim
 		    ieee80211_add_ext_srates_ie(&sdata->vif, skb) ||
 		    mesh_add_rsn_ie(skb, sdata) ||
 		    mesh_add_ht_cap_ie(skb, sdata) ||
-		    mesh_add_ht_info_ie(skb, sdata) ||
+		    mesh_add_ht_oper_ie(skb, sdata) ||
 		    mesh_add_meshid_ie(skb, sdata) ||
 		    mesh_add_meshconf_ie(skb, sdata) ||
 		    mesh_add_vendor_ies(skb, sdata)) {
--- a/net/mac80211/mesh.h	2012-03-15 15:32:26.000000000 +0100
+++ b/net/mac80211/mesh.h	2012-03-15 15:39:59.000000000 +0100
@@ -220,7 +220,7 @@ int mesh_add_ds_params_ie(struct sk_buff
 			  struct ieee80211_sub_if_data *sdata);
 int mesh_add_ht_cap_ie(struct sk_buff *skb,
 		       struct ieee80211_sub_if_data *sdata);
-int mesh_add_ht_info_ie(struct sk_buff *skb,
+int mesh_add_ht_oper_ie(struct sk_buff *skb,
 			struct ieee80211_sub_if_data *sdata);
 void mesh_rmc_free(struct ieee80211_sub_if_data *sdata);
 int mesh_rmc_init(struct ieee80211_sub_if_data *sdata);
--- a/drivers/net/wireless/mwifiex/join.c	2012-03-15 15:33:29.000000000 +0100
+++ b/drivers/net/wireless/mwifiex/join.c	2012-03-15 15:48:53.000000000 +0100
@@ -932,20 +932,20 @@ mwifiex_cmd_802_11_ad_hoc_start(struct m
 		/* Fill HT INFORMATION */
 		ht_info = (struct mwifiex_ie_types_htinfo *) pos;
 		memset(ht_info, 0, sizeof(struct mwifiex_ie_types_htinfo));
-		ht_info->header.type = cpu_to_le16(WLAN_EID_HT_INFORMATION);
+		ht_info->header.type = cpu_to_le16(WLAN_EID_HT_OPERATION);
 		ht_info->header.len =
-				cpu_to_le16(sizeof(struct ieee80211_ht_info));
+			cpu_to_le16(sizeof(struct ieee80211_ht_operation));
 
-		ht_info->ht_info.control_chan =
+		ht_info->ht_oper.primary_chan =
 			(u8) priv->curr_bss_params.bss_descriptor.channel;
 		if (adapter->sec_chan_offset) {
-			ht_info->ht_info.ht_param = adapter->sec_chan_offset;
-			ht_info->ht_info.ht_param |=
+			ht_info->ht_oper.ht_param = adapter->sec_chan_offset;
+			ht_info->ht_oper.ht_param |=
 					IEEE80211_HT_PARAM_CHAN_WIDTH_ANY;
 		}
-		ht_info->ht_info.operation_mode =
+		ht_info->ht_oper.operation_mode =
 		     cpu_to_le16(IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT);
-		ht_info->ht_info.basic_set[0] = 0xff;
+		ht_info->ht_oper.basic_set[0] = 0xff;
 		pos += sizeof(struct mwifiex_ie_types_htinfo);
 		cmd_append_size +=
 				sizeof(struct mwifiex_ie_types_htinfo);



^ permalink raw reply	[flat|nested] 8+ messages in thread

* RE: [PATCH v2] wireless: rename ht_info to ht_operation
  2012-03-15 14:50 ` [PATCH v2] " Johannes Berg
@ 2012-03-15 18:00   ` Bing Zhao
  2012-03-15 18:19     ` Johannes Berg
  2012-03-15 18:45   ` [PATCH v3] " Johannes Berg
  1 sibling, 1 reply; 8+ messages in thread
From: Bing Zhao @ 2012-03-15 18:00 UTC (permalink / raw)
  To: Johannes Berg, John Linville; +Cc: linux-wireless

SGkgSm9oYW5uZXMsDQoNCj4gRnJvbTogSm9oYW5uZXMgQmVyZyA8am9oYW5uZXMuYmVyZ0BpbnRl
bC5jb20+DQo+DQo+IFNpbmNlIHNvbWUgb2YgdGhlIEhUIGNvZGUgcHJlLWRhdGVzIDgwMi4xMW4t
MjAwOQ0KPiBzb21lIG5hbWVzIGFyZSB3cm9uZy4gVGhlIG9uZSB0aGF0IGJvdGhlcnMgbWUgbW9z
dA0KPiBpcyB0aGF0ICJIVCBvcGVyYXRpb24iIGlzIGNhbGxlZCAiSFQgaW5mb3JtYXRpb24iDQo+
IGluIG91ciBjb2RlIGFuZCB0aGF0IGNhdXNlcyBjb25mdXNpb24uDQo+DQo+IFJlbmFtZSAiSFQg
aW5mb3JtYXRpb24iIHRvICJIVCBvcGVyYXRpb24iIGFuZCBhbHNvDQo+IHRoZSBjb250cm9sX2No
YW4gZmllbGQgdG8gcHJpbWFyeV9jaGFuIHRvIG1hdGNoDQo+IHRoZSBuYW1lIHVzZWQgaW4gdGhl
IHNwZWMuDQo+DQo+IFNpZ25lZC1vZmYtYnk6IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzLmJlcmdA
aW50ZWwuY29tPg0KPiAtLS0NCj4gdjI6IGZpeCBwYXRjaCBmb3IgbmV3IG13aWZpZXggY2hhbmdl
cw0KDQpGb3IgbXdpZmlleCBwYXJ0LCB0aGUgY2hhbmdlIGxvb2tzIGZpbmUgZXhjZXB0IGZvciBh
IGNvdXBsZSBjaGVja3BhdGNoIHdhcm5pbmdzLg0KDQo+DQo+ICBkcml2ZXJzL25ldC93aXJlbGVz
cy9td2lmaWV4LzExbi5jICB8ICAgMTYgKysrKysrLS0tLS0tDQo+ICBkcml2ZXJzL25ldC93aXJl
bGVzcy9td2lmaWV4L2Z3LmggICB8ICAgIDIgLQ0KPiAgZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdp
ZmlleC9qb2luLmMgfCAgIDE0ICsrKysrLS0tLS0NCj4gIGRyaXZlcnMvbmV0L3dpcmVsZXNzL213
aWZpZXgvbWFpbi5oIHwgICAgMiAtDQo+ICBkcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3Nj
YW4uYyB8ICAgMTAgKysrLS0tLQ0KPiAgZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L21haW4u
YyAgfCAgICAyIC0NCj4gIGluY2x1ZGUvbGludXgvaWVlZTgwMjExLmggICAgICAgICAgIHwgICAx
NCArKysrLS0tLS0tDQo+ICBpbmNsdWRlL25ldC9tYWM4MDIxMS5oICAgICAgICAgICAgICB8ICAg
IDIgLQ0KPiAgbmV0L21hYzgwMjExL2lic3MuYyAgICAgICAgICAgICAgICAgfCAgIDE2ICsrKysr
LS0tLS0tLQ0KPiAgbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggICAgICAgICAgfCAgIDEzICsr
KystLS0tLQ0KPiAgbmV0L21hYzgwMjExL21lc2guYyAgICAgICAgICAgICAgICAgfCAgIDEyICsr
KystLS0tLQ0KPiAgbmV0L21hYzgwMjExL21lc2guaCAgICAgICAgICAgICAgICAgfCAgICAyIC0N
Cj4gIG5ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMgICAgICAgICAgIHwgICAgNCArLS0NCj4gIG5l
dC9tYWM4MDIxMS9tbG1lLmMgICAgICAgICAgICAgICAgIHwgICA0OCArKysrKysrKysrKysrKysr
KystLS0tLS0tLS0tLS0tLS0tLS0NCj4gIG5ldC9tYWM4MDIxMS90eC5jICAgICAgICAgICAgICAg
ICAgIHwgICAgNCArLS0NCj4gIG5ldC9tYWM4MDIxMS91dGlsLmMgICAgICAgICAgICAgICAgIHwg
ICA0MyArKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQ0KPiAgMTYgZmlsZXMgY2hhbmdl
ZCwgOTkgaW5zZXJ0aW9ucygrKSwgMTA1IGRlbGV0aW9ucygtKQ0KPg0KPiAtLS0gYS9kcml2ZXJz
L25ldC93aXJlbGVzcy9td2lmaWV4LzExbi5jICAgICAgMjAxMi0wMy0xNSAxNTozMzoyOS4wMDAw
MDAwMDAgKzAxMDANCj4gKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC8xMW4uYyAg
ICAgIDIwMTItMDMtMTUgMTU6NDk6MTkuMDAwMDAwMDAwICswMTAwDQo+IEBAIC0zNTAsMjUgKzM1
MCwyNSBAQCBtd2lmaWV4X2NtZF9hcHBlbmRfMTFuX3RsdihzdHJ1Y3QgbXdpZmllDQo+ICAgICAg
ICAgICAgICAgcmV0X2xlbiArPSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXAp
Ow0KPiAgICAgICB9DQo+DQo+IC0gICAgIGlmIChic3NfZGVzYy0+YmNuX2h0X2luZm8pIHsNCj4g
KyAgICAgaWYgKGJzc19kZXNjLT5iY25faHRfb3Blcikgew0KPiAgICAgICAgICAgICAgIGlmIChw
cml2LT5ic3NfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgew0KPiAgICAgICAgICAgICAg
ICAgICAgICAgaHRfaW5mbyA9IChzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGluZm8gKikgKmJ1
ZmZlcjsNCj4gICAgICAgICAgICAgICAgICAgICAgIG1lbXNldChodF9pbmZvLCAwLA0KPiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19o
dGluZm8pKTsNCj4gICAgICAgICAgICAgICAgICAgICAgIGh0X2luZm8tPmhlYWRlci50eXBlID0N
Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHVfdG9fbGUxNihXTEFO
X0VJRF9IVF9JTkZPUk1BVElPTik7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3B1X3RvX2xlMTYoV0xBTl9FSURfSFRfT1BFUkFUSU9OKTsNCj4gICAgICAgICAgICAg
ICAgICAgICAgIGh0X2luZm8tPmhlYWRlci5sZW4gPQ0KPiAtICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9pbmZvKSk7DQo+
ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3Qg
aWVlZTgwMjExX2h0X29wZXJhdGlvbikpOw0KDQpXQVJOSU5HOiBsaW5lIG92ZXIgODAgY2hhcmFj
dGVycw0KDQo+DQo+ICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoKHU4ICopIGh0X2luZm8g
Kw0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9p
ZV90eXBlc19oZWFkZXIpLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1OCAqKSBi
c3NfZGVzYy0+YmNuX2h0X2luZm8gKw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1
OCAqKSBic3NfZGVzYy0+YmNuX2h0X29wZXIgKw0KPiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpLA0KPiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxlMTZfdG9fY3B1KGh0X2luZm8tPmhlYWRlci5sZW4pKTsNCj4NCj4gICAg
ICAgICAgICAgICAgICAgICAgIGlmICghKHNiYW5kLT5odF9jYXAuY2FwICYNCj4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8y
MF80MCkpDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0X2luZm8tPmh0X2luZm8u
aHRfcGFyYW0gJj0NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRfaW5mby0+aHRf
b3Blci5odF9wYXJhbSAmPQ0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH4oSUVFRTgwMjExX0hUX1BBUkFNX0NIQU5fV0lEVEhfQU5ZIHwNCj4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19PRkZTRVQp
Ow0KPg0KPiBAQCAtMzg1LDE2ICszODUsMTYgQEAgbXdpZmlleF9jbWRfYXBwZW5kXzExbl90bHYo
c3RydWN0IG13aWZpZQ0KPiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBtd2lm
aWV4X2llX3R5cGVzX2NoYW5fbGlzdF9wYXJhbV9zZXQpIC0NCj4gICAgICAgICAgICAgICAgICAg
ICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIpKTsNCj4gICAgICAgICAg
ICAgICBjaGFuX2xpc3QtPmNoYW5fc2Nhbl9wYXJhbVswXS5jaGFuX251bWJlciA9DQo+IC0gICAg
ICAgICAgICAgICAgICAgICBic3NfZGVzYy0+YmNuX2h0X2luZm8tPmNvbnRyb2xfY2hhbjsNCj4g
KyAgICAgICAgICAgICAgICAgICAgIGJzc19kZXNjLT5iY25faHRfb3Blci0+cHJpbWFyeV9jaGFu
Ow0KPiAgICAgICAgICAgICAgIGNoYW5fbGlzdC0+Y2hhbl9zY2FuX3BhcmFtWzBdLnJhZGlvX3R5
cGUgPQ0KPiAgICAgICAgICAgICAgICAgICAgICAgbXdpZmlleF9iYW5kX3RvX3JhZGlvX3R5cGUo
KHU4KSBic3NfZGVzYy0+YnNzX2JhbmQpOw0KPg0KPiAgICAgICAgICAgICAgIGlmIChzYmFuZC0+
aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwICYmDQo+IC0gICAg
ICAgICAgICAgICAgIGJzc19kZXNjLT5iY25faHRfaW5mby0+aHRfcGFyYW0gJg0KPiArICAgICAg
ICAgICAgICAgICBic3NfZGVzYy0+YmNuX2h0X29wZXItPmh0X3BhcmFtICYNCj4gICAgICAgICAg
ICAgICAgICAgSUVFRTgwMjExX0hUX1BBUkFNX0NIQU5fV0lEVEhfQU5ZKQ0KPiAgICAgICAgICAg
ICAgICAgICAgICAgU0VUX1NFQ09OREFSWUNIQU4oY2hhbl9saXN0LT5jaGFuX3NjYW5fcGFyYW1b
MF0uDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpb190eXBl
LA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJzc19kZXNjLT5i
Y25faHRfaW5mby0+aHRfcGFyYW0gJg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGJzc19kZXNjLT5iY25faHRfb3Blci0+aHRfcGFyYW0gJg0KPiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNf
T0ZGU0VUKSk7DQo+DQo+ICAgICAgICAgICAgICAgKmJ1ZmZlciArPSBzaXplb2Yoc3RydWN0IG13
aWZpZXhfaWVfdHlwZXNfY2hhbl9saXN0X3BhcmFtX3NldCk7DQo+IC0tLSBhL2RyaXZlcnMvbmV0
L3dpcmVsZXNzL213aWZpZXgvc2Nhbi5jICAgICAyMDEyLTAzLTE1IDE1OjMzOjI5LjAwMDAwMDAw
MCArMDEwMA0KPiArKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3NjYW4uYyAgICAg
MjAxMi0wMy0xNSAxNTozOTo1OS4wMDAwMDAwMDAgKzAxMDANCj4gQEAgLTEyMjEsOCArMTIyMSw4
IEBAIG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUoc3RydWN0IG0NCj4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVh
ZGVyKSAtDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnNzX2VudHJ5
LT5iZWFjb25fYnVmKTsNCj4gICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiAtICAgICAg
ICAgICAgIGNhc2UgV0xBTl9FSURfSFRfSU5GT1JNQVRJT046DQo+IC0gICAgICAgICAgICAgICAg
ICAgICBic3NfZW50cnktPmJjbl9odF9pbmZvID0gKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAq
KQ0KPiArICAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfSFRfT1BFUkFUSU9OOg0KPiArICAgICAg
ICAgICAgICAgICAgICAgYnNzX2VudHJ5LT5iY25faHRfb3BlciA9IChzdHJ1Y3QgaWVlZTgwMjEx
X2h0X29wZXJhdGlvbiAqKQ0KDQpXQVJOSU5HOiBsaW5lIG92ZXIgODAgY2hhcmFjdGVycw0KDQo+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRfcHRyICsNCj4g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGllZWVf
dHlwZXNfaGVhZGVyKSk7DQo+ICAgICAgICAgICAgICAgICAgICAgICBic3NfZW50cnktPmh0X2lu
Zm9fb2Zmc2V0ID0gKHUxNikgKGN1cnJlbnRfcHRyICsNCj4gQEAgLTE0OTMsNyArMTQ5Myw3IEBA
IG13aWZpZXhfdXBkYXRlX2N1cnJfYnNzX3BhcmFtcyhzdHJ1Y3QgbXcNCj4gICAgICAgcHJpdi0+
Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLmJjbl9odF9jYXAgPSBOVUxMOw0KPiAgICAg
ICBwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IuaHRfY2FwX29mZnNldCA9DQo+
ICAgICAgICAgICAgICAgMDsNCj4gLSAgICAgcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNj
cmlwdG9yLmJjbl9odF9pbmZvID0gTlVMTDsNCj4gKyAgICAgcHJpdi0+Y3Vycl9ic3NfcGFyYW1z
LmJzc19kZXNjcmlwdG9yLmJjbl9odF9vcGVyID0gTlVMTDsNCj4gICAgICAgcHJpdi0+Y3Vycl9i
c3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLmh0X2luZm9fb2Zmc2V0ID0NCj4gICAgICAgICAgICAg
ICAwOw0KPiAgICAgICBwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IuYmNuX2Jz
c19jb18yMDQwID0NCj4gQEAgLTIwMTksOCArMjAxOSw4IEBAIG13aWZpZXhfc2F2ZV9jdXJyX2Jj
bihzdHJ1Y3QgbXdpZmlleF9wcmkNCj4gICAgICAgICAgICAgICAgICAgICAgIChjdXJyX2Jzcy0+
YmVhY29uX2J1ZiArDQo+ICAgICAgICAgICAgICAgICAgICAgICAgY3Vycl9ic3MtPmh0X2NhcF9v
ZmZzZXQpOw0KPg0KPiAtICAgICBpZiAoY3Vycl9ic3MtPmJjbl9odF9pbmZvKQ0KPiAtICAgICAg
ICAgICAgIGN1cnJfYnNzLT5iY25faHRfaW5mbyA9IChzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8g
KikNCj4gKyAgICAgaWYgKGN1cnJfYnNzLT5iY25faHRfb3BlcikNCj4gKyAgICAgICAgICAgICBj
dXJyX2Jzcy0+YmNuX2h0X29wZXIgPSAoc3RydWN0IGllZWU4MDIxMV9odF9vcGVyYXRpb24gKikN
Cj4gICAgICAgICAgICAgICAgICAgICAgIChjdXJyX2Jzcy0+YmVhY29uX2J1ZiArDQo+ICAgICAg
ICAgICAgICAgICAgICAgICAgY3Vycl9ic3MtPmh0X2luZm9fb2Zmc2V0KTsNCj4NCj4gLS0tIGEv
ZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L21haW4uYyAgICAgIDIwMTItMDMtMTUgMTU6MzI6
MjcuMDAwMDAwMDAwICswMTAwDQo+ICsrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9t
YWluLmMgICAgICAyMDEyLTAzLTE1IDE1OjM5OjU5LjAwMDAwMDAwMCArMDEwMA0KPiBAQCAtMjMy
LDcgKzIzMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgY29uZl9kcnZfc2V0dGluZ3MgZGVmYXVsdF8NCj4g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJ1bGUgICAgICAgID0gQ09ORl9CQ05fUlVM
RV9QQVNTX09OX0FQUEVBUkFOQ0UsDQo+ICAgICAgICAgICAgICAgICAgICAgICB9LA0KPiAgICAg
ICAgICAgICAgICAgICAgICAgWzFdID0gew0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuaWUgICAgICAgICAgPSBXTEFOX0VJRF9IVF9JTkZPUk1BVElPTiwNCj4gKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLmllICAgICAgICAgID0gV0xBTl9FSURfSFRfT1BFUkFUSU9OLA0K
PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucnVsZSAgICAgICAgPSBDT05GX0JDTl9S
VUxFX1BBU1NfT05fQ0hBTkdFLA0KPiAgICAgICAgICAgICAgICAgICAgICAgfSwNCj4gICAgICAg
ICAgICAgICB9LA0KPiAtLS0gYS9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oICAgICAgIDIwMTIt
MDMtMTUgMTU6MzI6MjYuMDAwMDAwMDAwICswMTAwDQo+ICsrKyBiL2luY2x1ZGUvbGludXgvaWVl
ZTgwMjExLmggICAgICAgMjAxMi0wMy0xNSAxNTozOTo1OS4wMDAwMDAwMDAgKzAxMDANCj4gQEAg
LTEwMDcsMTMgKzEwMDcsMTMgQEAgZW51bSBpZWVlODAyMTFfbWluX21wZHVfc3BhY2luZyB7DQo+
ICB9Ow0KPg0KPiAgLyoqDQo+IC0gKiBzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gLSBIVCBpbmZv
cm1hdGlvbg0KPiArICogc3RydWN0IGllZWU4MDIxMV9odF9vcGVyYXRpb24gLSBIVCBvcGVyYXRp
b24gSUUNCj4gICAqDQo+IC0gKiBUaGlzIHN0cnVjdHVyZSBpcyB0aGUgIkhUIGluZm9ybWF0aW9u
IGVsZW1lbnQiIGFzDQo+IC0gKiBkZXNjcmliZWQgaW4gODAyLjExbiBENS4wIDcuMy4yLjU4DQo+
ICsgKiBUaGlzIHN0cnVjdHVyZSBpcyB0aGUgIkhUIG9wZXJhdGlvbiBlbGVtZW50IiBhcw0KPiAr
ICogZGVzY3JpYmVkIGluIDgwMi4xMW4tMjAwOSA3LjMuMi41Nw0KPiAgICovDQo+IC1zdHJ1Y3Qg
aWVlZTgwMjExX2h0X2luZm8gew0KPiAtICAgICB1OCBjb250cm9sX2NoYW47DQo+ICtzdHJ1Y3Qg
aWVlZTgwMjExX2h0X29wZXJhdGlvbiB7DQo+ICsgICAgIHU4IHByaW1hcnlfY2hhbjsNCj4gICAg
ICAgdTggaHRfcGFyYW07DQo+ICAgICAgIF9fbGUxNiBvcGVyYXRpb25fbW9kZTsNCj4gICAgICAg
X19sZTE2IHN0YmNfcGFyYW07DQo+IEBAIC0xMDI3LDggKzEwMjcsNiBAQCBzdHJ1Y3QgaWVlZTgw
MjExX2h0X2luZm8gew0KPiAgI2RlZmluZSAgICAgICAgICAgICAgSUVFRTgwMjExX0hUX1BBUkFN
X0NIQV9TRUNfQkVMT1cgICAgICAgIDB4MDMNCj4gICNkZWZpbmUgSUVFRTgwMjExX0hUX1BBUkFN
X0NIQU5fV0lEVEhfQU5ZICAgICAgICAgICAgMHgwNA0KPiAgI2RlZmluZSBJRUVFODAyMTFfSFRf
UEFSQU1fUklGU19NT0RFICAgICAgICAgICAgICAgICAweDA4DQo+IC0jZGVmaW5lIElFRUU4MDIx
MV9IVF9QQVJBTV9TUFNNUF9TVVBQT1JUICAgICAgICAgICAgIDB4MTANCj4gLSNkZWZpbmUgSUVF
RTgwMjExX0hUX1BBUkFNX1NFUlZfSU5URVJWQUxfR1JBTiAgICAgICAgICAgICAgICAweEUwDQo+
DQo+ICAvKiBmb3Igb3BlcmF0aW9uX21vZGUgKi8NCj4gICNkZWZpbmUgSUVFRTgwMjExX0hUX09Q
X01PREVfUFJPVEVDVElPTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDMNCj4gQEAgLTEzMDEs
NyArMTI5OSw3IEBAIGVudW0gaWVlZTgwMjExX2VpZCB7DQo+ICAgICAgIFdMQU5fRUlEX0VYVF9T
VVBQX1JBVEVTID0gNTAsDQo+DQo+ICAgICAgIFdMQU5fRUlEX0hUX0NBUEFCSUxJVFkgPSA0NSwN
Cj4gLSAgICAgV0xBTl9FSURfSFRfSU5GT1JNQVRJT04gPSA2MSwNCj4gKyAgICAgV0xBTl9FSURf
SFRfT1BFUkFUSU9OID0gNjEsDQo+DQo+ICAgICAgIFdMQU5fRUlEX1JTTiA9IDQ4LA0KPiAgICAg
ICBXTEFOX0VJRF9NTUlFID0gNzYsDQo+IC0tLSBhL25ldC9tYWM4MDIxMS9tbG1lLmMgICAgIDIw
MTItMDMtMTUgMTU6MzM6MjkuMDAwMDAwMDAwICswMTAwDQo+ICsrKyBiL25ldC9tYWM4MDIxMS9t
bG1lLmMgICAgIDIwMTItMDMtMTUgMTU6Mzk6NTkuMDAwMDAwMDAwICswMTAwDQo+IEBAIC0xNzcs
NyArMTc3LDcgQEAgc3RhdGljIGludCBlY3cyY3coaW50IGVjdykNCj4gICAqIEhUIGFiaWxpdGll
cyBmb3IgYSBzcGVjaWZpYyBiYW5kLg0KPiAgICovDQo+ICBzdGF0aWMgdTMyIGllZWU4MDIxMV9l
bmFibGVfaHQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsDQo+IC0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICpodGksDQo+ICsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9odF9vcGVyYXRpb24g
Kmh0X29wZXIsDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdTggKmJzc2lk
LCB1MTYgYXBfaHRfY2FwX2ZsYWdzLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgYmVhY29uX2h0Y2FwX2llKQ0KPiAgew0KPiBAQCAtMTg1LDcgKzE4NSw3IEBAIHN0YXRpYyB1
MzIgaWVlZTgwMjExX2VuYWJsZV9odChzdHJ1Y3QgaWUNCj4gICAgICAgc3RydWN0IGllZWU4MDIx
MV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7DQo+ICAgICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhOw0K
PiAgICAgICB1MzIgY2hhbmdlZCA9IDA7DQo+IC0gICAgIGludCBodGlfY2ZyZXE7DQo+ICsgICAg
IGludCBodF9jZnJlcTsNCj4gICAgICAgdTE2IGh0X29wbW9kZTsNCj4gICAgICAgYm9vbCBlbmFi
bGVfaHQgPSB0cnVlOw0KPiAgICAgICBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIHByZXZfY2hh
bnR5cGU7DQo+IEBAIC0xOTYsMTAgKzE5NiwxMCBAQCBzdGF0aWMgdTMyIGllZWU4MDIxMV9lbmFi
bGVfaHQoc3RydWN0IGllDQo+ICAgICAgIHByZXZfY2hhbnR5cGUgPSBzZGF0YS0+dmlmLmJzc19j
b25mLmNoYW5uZWxfdHlwZTsNCj4NCj4NCj4gLSAgICAgaHRpX2NmcmVxID0gaWVlZTgwMjExX2No
YW5uZWxfdG9fZnJlcXVlbmN5KGh0aS0+Y29udHJvbF9jaGFuLA0KPiAtICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2JhbmQtPmJhbmQpOw0KPiArICAgICBo
dF9jZnJlcSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShodF9vcGVyLT5wcmltYXJ5
X2NoYW4sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNiYW5kLT5iYW5kKTsNCj4gICAgICAgLyogY2hlY2sgdGhhdCBjaGFubmVsIG1hdGNoZXMgdGhl
IHJpZ2h0IG9wZXJhdGluZyBjaGFubmVsICovDQo+IC0gICAgIGlmIChsb2NhbC0+aHcuY29uZi5j
aGFubmVsLT5jZW50ZXJfZnJlcSAhPSBodGlfY2ZyZXEpIHsNCj4gKyAgICAgaWYgKGxvY2FsLT5o
dy5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxICE9IGh0X2NmcmVxKSB7DQo+ICAgICAgICAgICAg
ICAgLyogU29tZSBBUHMgbWVzcyB0aGlzIHVwLCBldmlkZW50bHkuDQo+ICAgICAgICAgICAgICAg
ICogTmV0Z2VhciBXTkRSMzcwMCBzb21ldGltZXMgcmVwb3J0cyA0IGhpZ2hlciB0aGFuDQo+ICAg
ICAgICAgICAgICAgICogdGhlIGFjdHVhbCBjaGFubmVsLCBmb3IgaW5zdGFuY2UuDQo+IEBAIC0y
MDcsMTEgKzIwNywxMSBAQCBzdGF0aWMgdTMyIGllZWU4MDIxMV9lbmFibGVfaHQoc3RydWN0IGll
DQo+ICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcNCj4gICAgICAgICAgICAgICAgICAg
ICAgIiVzOiBXcm9uZyBjb250cm9sIGNoYW5uZWwgaW4gYXNzb2NpYXRpb24iDQo+ICAgICAgICAg
ICAgICAgICAgICAgICIgcmVzcG9uc2U6IGNvbmZpZ3VyZWQgY2VudGVyLWZyZXE6ICVkIg0KPiAt
ICAgICAgICAgICAgICAgICAgICAiIGh0aS1jZnJlcTogJWQgIGh0aS0+Y29udHJvbF9jaGFuOiAl
ZCINCj4gKyAgICAgICAgICAgICAgICAgICAgIiBodC1jZnJlcTogJWQgIGh0LT5jb250cm9sX2No
YW46ICVkIg0KPiAgICAgICAgICAgICAgICAgICAgICAiIGJhbmQ6ICVkLiAgRGlzYWJsaW5nIEhU
LlxuIiwNCj4gICAgICAgICAgICAgICAgICAgICAgc2RhdGEtPm5hbWUsDQo+ICAgICAgICAgICAg
ICAgICAgICAgIGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLA0KPiAtICAgICAg
ICAgICAgICAgICAgICBodGlfY2ZyZXEsIGh0aS0+Y29udHJvbF9jaGFuLA0KPiArICAgICAgICAg
ICAgICAgICAgICBodF9jZnJlcSwgaHRfb3Blci0+cHJpbWFyeV9jaGFuLA0KPiAgICAgICAgICAg
ICAgICAgICAgICBzYmFuZC0+YmFuZCk7DQo+ICAgICAgICAgICAgICAgZW5hYmxlX2h0ID0gZmFs
c2U7DQo+ICAgICAgIH0NCj4gQEAgLTIyMiw4ICsyMjIsOCBAQCBzdGF0aWMgdTMyIGllZWU4MDIx
MV9lbmFibGVfaHQoc3RydWN0IGllDQo+ICAgICAgICAgICAgICAgaWYgKCEoYXBfaHRfY2FwX2Zs
YWdzICYgSUVFRTgwMjExX0hUX0NBUF80ME1IWl9JTlRPTEVSQU5UKSAmJg0KPiAgICAgICAgICAg
ICAgICAgICAhaWVlZTgwMTExX2NmZ19vdmVycmlkZV9kaXNhYmxlc19odDQwKHNkYXRhKSAmJg0K
PiAgICAgICAgICAgICAgICAgICAoc2JhbmQtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQ
X1NVUF9XSURUSF8yMF80MCkgJiYNCj4gLSAgICAgICAgICAgICAgICAgKGh0aS0+aHRfcGFyYW0g
JiBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBTl9XSURUSF9BTlkpKSB7DQo+IC0gICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2goaHRpLT5odF9wYXJhbSAmIElFRUU4MDIxMV9IVF9QQVJBTV9DSEFfU0VD
X09GRlNFVCkgew0KPiArICAgICAgICAgICAgICAgICAoaHRfb3Blci0+aHRfcGFyYW0gJiBJRUVF
ODAyMTFfSFRfUEFSQU1fQ0hBTl9XSURUSF9BTlkpKSB7DQo+ICsgICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2goaHRfb3Blci0+aHRfcGFyYW0gJiBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19P
RkZTRVQpIHsNCg0KV0FSTklORzogbGluZSBvdmVyIDgwIGNoYXJhY3RlcnMNCkVSUk9SOiBzcGFj
ZSByZXF1aXJlZCBiZWZvcmUgdGhlIG9wZW4gcGFyZW50aGVzaXMgJygnDQoNClRoYW5rcywNCkJp
bmcNCg0KPiAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJRUVFODAyMTFfSFRfUEFSQU1fQ0hB
X1NFQ19BQk9WRToNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnhfY2hhbm5lbF90
eXBlID0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTOw0KPiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsNCj4gQEAgLTI3OCw3ICsyNzgsNyBAQCBzdGF0aWMgdTMyIGllZWU4MDIxMV9l
bmFibGVfaHQoc3RydWN0IGllDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElFRUU4
MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9DSFRZUEVfQ0hBTkdFKTsNCj4gICAgICAgfQ0KPg0KPiAt
ICAgICBodF9vcG1vZGUgPSBsZTE2X3RvX2NwdShodGktPm9wZXJhdGlvbl9tb2RlKTsNCj4gKyAg
ICAgaHRfb3Btb2RlID0gbGUxNl90b19jcHUoaHRfb3Blci0+b3BlcmF0aW9uX21vZGUpOw0KPg0K
PiAgICAgICAvKiBpZiBic3MgY29uZmlndXJhdGlvbiBjaGFuZ2VkIHN0b3JlIHRoZSBuZXcgb25l
ICovDQo+ICAgICAgIGlmIChzZGF0YS0+aHRfb3Btb2RlX3ZhbGlkICE9IGVuYWJsZV9odCB8fA0K
PiBAQCAtMzE2LDEyICszMTYsMTIgQEAgc3RhdGljIGludCBpZWVlODAyMTFfY29tcGF0aWJsZV9y
YXRlcyhjbw0KPiAgfQ0KPg0KPiAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2FkZF9odF9pZShzdHJ1
Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwNCj4gLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTggKmh0X2luZm9faWUsDQo+ICsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHU4
ICpodF9vcGVyX2llLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWVl
ZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwNCj4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLA0KPiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbnVtIGllZWU4MDIxMV9zbXBzX21vZGUgc21wcykNCj4gIHsNCj4g
LSAgICAgc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICpodF9pbmZvOw0KPiArICAgICBzdHJ1Y3Qg
aWVlZTgwMjExX2h0X29wZXJhdGlvbiAqaHRfb3BlcjsNCj4gICAgICAgdTggKnBvczsNCj4gICAg
ICAgdTMyIGZsYWdzID0gY2hhbm5lbC0+ZmxhZ3M7DQo+ICAgICAgIHUxNiBjYXA7DQo+IEBAIC0z
MjksMjEgKzMyOSwyMSBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfYWRkX2h0X2llKHN0cnVjdCBp
DQo+DQo+ICAgICAgIEJVSUxEX0JVR19PTihzaXplb2YoaHRfY2FwKSAhPSBzaXplb2Yoc2JhbmQt
Pmh0X2NhcCkpOw0KPg0KPiAtICAgICBpZiAoIWh0X2luZm9faWUpDQo+ICsgICAgIGlmICghaHRf
b3Blcl9pZSkNCj4gICAgICAgICAgICAgICByZXR1cm47DQo+DQo+IC0gICAgIGlmIChodF9pbmZv
X2llWzFdIDwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbykpDQo+ICsgICAgIGlmICho
dF9vcGVyX2llWzFdIDwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfb3BlcmF0aW9uKSkNCj4g
ICAgICAgICAgICAgICByZXR1cm47DQo+DQo+ICAgICAgIG1lbWNweSgmaHRfY2FwLCAmc2JhbmQt
Pmh0X2NhcCwgc2l6ZW9mKGh0X2NhcCkpOw0KPiAgICAgICBpZWVlODAyMTFfYXBwbHlfaHRjYXBf
b3ZlcnJpZGVzKHNkYXRhLCAmaHRfY2FwKTsNCj4NCj4gLSAgICAgaHRfaW5mbyA9IChzdHJ1Y3Qg
aWVlZTgwMjExX2h0X2luZm8gKikoaHRfaW5mb19pZSArIDIpOw0KPiArICAgICBodF9vcGVyID0g
KHN0cnVjdCBpZWVlODAyMTFfaHRfb3BlcmF0aW9uICopKGh0X29wZXJfaWUgKyAyKTsNCj4NCj4g
ICAgICAgLyogZGV0ZXJtaW5lIGNhcGFiaWxpdHkgZmxhZ3MgKi8NCj4gICAgICAgY2FwID0gaHRf
Y2FwLmNhcDsNCj4NCj4gLSAgICAgc3dpdGNoIChodF9pbmZvLT5odF9wYXJhbSAmIElFRUU4MDIx
MV9IVF9QQVJBTV9DSEFfU0VDX09GRlNFVCkgew0KPiArICAgICBzd2l0Y2ggKGh0X29wZXItPmh0
X3BhcmFtICYgSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfT0ZGU0VUKSB7DQo+ICAgICAgIGNh
c2UgSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfQUJPVkU6DQo+ICAgICAgICAgICAgICAgaWYg
KGZsYWdzICYgSUVFRTgwMjExX0NIQU5fTk9fSFQ0MFBMVVMpIHsNCj4gICAgICAgICAgICAgICAg
ICAgICAgIGNhcCAmPSB+SUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDA7DQo+IEBAIC01
NTcsNyArNTU3LDcgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfYXNzb2Moc3RydWN0DQo+
ICAgICAgIH0NCj4NCj4gICAgICAgaWYgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9E
SVNBQkxFXzExTikpDQo+IC0gICAgICAgICAgICAgaWVlZTgwMjExX2FkZF9odF9pZShzZGF0YSwg
c2tiLCBhc3NvY19kYXRhLT5odF9pbmZvcm1hdGlvbl9pZSwNCj4gKyAgICAgICAgICAgICBpZWVl
ODAyMTFfYWRkX2h0X2llKHNkYXRhLCBza2IsIGFzc29jX2RhdGEtPmh0X29wZXJhdGlvbl9pZSwN
Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNiYW5kLCBsb2NhbC0+b3Blcl9j
aGFubmVsLCBpZm1nZC0+YXBfc21wcyk7DQo+DQo+ICAgICAgIC8qIGlmIHByZXNlbnQsIGFkZCBh
bnkgY3VzdG9tIG5vbi12ZW5kb3IgSUVzIHRoYXQgZ28gYWZ0ZXIgSFQgKi8NCj4gQEAgLTIwOTIs
OSArMjA5Miw5IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19zdWNjZXNzKHN0cnUNCj4g
ICAgICAgICAgICAgICBpZWVlODAyMTFfc2V0X3dtbV9kZWZhdWx0KHNkYXRhLCBmYWxzZSk7DQo+
ICAgICAgIGNoYW5nZWQgfD0gQlNTX0NIQU5HRURfUU9TOw0KPg0KPiAtICAgICBpZiAoZWxlbXMu
aHRfaW5mb19lbGVtICYmIGVsZW1zLndtbV9wYXJhbSAmJg0KPiArICAgICBpZiAoZWxlbXMuaHRf
b3BlcmF0aW9uICYmIGVsZW1zLndtbV9wYXJhbSAmJg0KPiAgICAgICAgICAgIShpZm1nZC0+Zmxh
Z3MgJiBJRUVFODAyMTFfU1RBX0RJU0FCTEVfMTFOKSkNCj4gLSAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IGllZWU4MDIxMV9lbmFibGVfaHQoc2RhdGEsIGVsZW1zLmh0X2luZm9fZWxlbSwNCj4gKyAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IGllZWU4MDIxMV9lbmFibGVfaHQoc2RhdGEsIGVsZW1zLmh0
X29wZXJhdGlvbiwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2Jzcy0+YnNzaWQsIGFwX2h0X2NhcF9mbGFncywNCj4gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpOw0KPg0KPiBAQCAtMjMxOSw3ICsyMzE5LDcg
QEAgc3RhdGljIGNvbnN0IHU2NCBjYXJlX2Fib3V0X2llcyA9DQo+ICAgICAgICgxVUxMIDw8IFdM
QU5fRUlEX0NIQU5ORUxfU1dJVENIKSB8DQo+ICAgICAgICgxVUxMIDw8IFdMQU5fRUlEX1BXUl9D
T05TVFJBSU5UKSB8DQo+ICAgICAgICgxVUxMIDw8IFdMQU5fRUlEX0hUX0NBUEFCSUxJVFkpIHwN
Cj4gLSAgICAgKDFVTEwgPDwgV0xBTl9FSURfSFRfSU5GT1JNQVRJT04pOw0KPiArICAgICAoMVVM
TCA8PCBXTEFOX0VJRF9IVF9PUEVSQVRJT04pOw0KPg0KPiAgc3RhdGljIHZvaWQgaWVlZTgwMjEx
X3J4X21nbXRfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLA0KPiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAq
bWdtdCwNCj4gQEAgLTI1MDQsNyArMjUwNCw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9t
Z210X2JlYWNvbihzdHINCj4gICAgICAgICAgICAgICAgICAgICAgIGVycF92YWxpZCwgZXJwX3Zh
bHVlKTsNCj4NCj4NCj4gLSAgICAgaWYgKGVsZW1zLmh0X2NhcF9lbGVtICYmIGVsZW1zLmh0X2lu
Zm9fZWxlbSAmJiBlbGVtcy53bW1fcGFyYW0gJiYNCj4gKyAgICAgaWYgKGVsZW1zLmh0X2NhcF9l
bGVtICYmIGVsZW1zLmh0X29wZXJhdGlvbiAmJiBlbGVtcy53bW1fcGFyYW0gJiYNCj4gICAgICAg
ICAgICEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9ESVNBQkxFXzExTikpIHsNCj4gICAg
ICAgICAgICAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsNCj4gICAgICAgICAgICAgICBzdHJ1Y3Qg
aWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsNCj4gQEAgLTI1MjcsNyArMjUyNyw3IEBA
IHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X2JlYWNvbihzdHINCj4NCj4gICAgICAgICAg
ICAgICByY3VfcmVhZF91bmxvY2soKTsNCj4NCj4gLSAgICAgICAgICAgICBjaGFuZ2VkIHw9IGll
ZWU4MDIxMV9lbmFibGVfaHQoc2RhdGEsIGVsZW1zLmh0X2luZm9fZWxlbSwNCj4gKyAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IGllZWU4MDIxMV9lbmFibGVfaHQoc2RhdGEsIGVsZW1zLmh0X29wZXJh
dGlvbiwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnNz
aWQsIGFwX2h0X2NhcF9mbGFncywgdHJ1ZSk7DQo+ICAgICAgIH0NCj4NCj4gQEAgLTMzMzUsOCAr
MzMzNSw4IEBAIGludCBpZWVlODAyMTFfbWdkX2Fzc29jKHN0cnVjdCBpZWVlODAyMTENCj4gICAg
ICAgYXNzb2NfZGF0YS0+d21tID0gYnNzLT53bW1fdXNlZCAmJiAobG9jYWwtPmh3LnF1ZXVlcyA+
PSA0KTsNCj4gICAgICAgYXNzb2NfZGF0YS0+c3VwcF9yYXRlcyA9IGJzcy0+c3VwcF9yYXRlczsN
Cj4gICAgICAgYXNzb2NfZGF0YS0+c3VwcF9yYXRlc19sZW4gPSBic3MtPnN1cHBfcmF0ZXNfbGVu
Ow0KPiAtICAgICBhc3NvY19kYXRhLT5odF9pbmZvcm1hdGlvbl9pZSA9DQo+IC0gICAgICAgICAg
ICAgaWVlZTgwMjExX2Jzc19nZXRfaWUocmVxLT5ic3MsIFdMQU5fRUlEX0hUX0lORk9STUFUSU9O
KTsNCj4gKyAgICAgYXNzb2NfZGF0YS0+aHRfb3BlcmF0aW9uX2llID0NCj4gKyAgICAgICAgICAg
ICBpZWVlODAyMTFfYnNzX2dldF9pZShyZXEtPmJzcywgV0xBTl9FSURfSFRfT1BFUkFUSU9OKTsN
Cj4NCj4gICAgICAgaWYgKGJzcy0+d21tX3VzZWQgJiYgYnNzLT51YXBzZF9zdXBwb3J0ZWQgJiYN
Cj4gICAgICAgICAgIChzZGF0YS0+bG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NVUFBP
UlRTX1VBUFNEKSkgew0KPiAtLS0gYS9uZXQvbWFjODAyMTEvdXRpbC5jICAgICAyMDEyLTAzLTE1
IDE1OjMyOjI2LjAwMDAwMDAwMCArMDEwMA0KPiArKysgYi9uZXQvbWFjODAyMTEvdXRpbC5jICAg
ICAyMDEyLTAzLTE1IDE1OjM5OjU5LjAwMDAwMDAwMCArMDEwMA0KPiBAQCAtNjg0LDkgKzY4NCw5
IEBAIHUzMiBpZWVlODAyXzExX3BhcnNlX2VsZW1zX2NyYyh1OCAqc3RhcnQNCj4gICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbV9w
YXJzZV9mYWlsZWQgPSB0cnVlOw0KPiAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+IC0g
ICAgICAgICAgICAgY2FzZSBXTEFOX0VJRF9IVF9JTkZPUk1BVElPTjoNCj4gLSAgICAgICAgICAg
ICAgICAgICAgIGlmIChlbGVuID49IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8pKQ0K
PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtcy0+aHRfaW5mb19lbGVtID0gKHZv
aWQgKilwb3M7DQo+ICsgICAgICAgICAgICAgY2FzZSBXTEFOX0VJRF9IVF9PUEVSQVRJT046DQo+
ICsgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbiA+PSBzaXplb2Yoc3RydWN0IGllZWU4MDIx
MV9odF9vcGVyYXRpb24pKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtcy0+
aHRfb3BlcmF0aW9uID0gKHZvaWQgKilwb3M7DQo+ICAgICAgICAgICAgICAgICAgICAgICBlbHNl
DQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1fcGFyc2VfZmFpbGVkID0gdHJ1
ZTsNCj4gICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiBAQCAtMTYxMSw1NyArMTYxMSw1
NiBAQCB1OCAqaWVlZTgwMjExX2llX2J1aWxkX2h0X2NhcCh1OCAqcG9zLCBzDQo+ICAgICAgIHJl
dHVybiBwb3M7DQo+ICB9DQo+DQo+IC11OCAqaWVlZTgwMjExX2llX2J1aWxkX2h0X2luZm8odTgg
KnBvcywNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0
YV9odF9jYXAgKmh0X2NhcCwNCj4gK3U4ICppZWVlODAyMTFfaWVfYnVpbGRfaHRfb3Blcih1OCAq
cG9zLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKmh0X2NhcCwNCj4gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsDQo+ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFu
bmVsX3R5cGUpDQo+ICB7DQo+IC0gICAgIHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAqaHRfaW5m
bzsNCj4gKyAgICAgc3RydWN0IGllZWU4MDIxMV9odF9vcGVyYXRpb24gKmh0X29wZXI7DQo+ICAg
ICAgIC8qIEJ1aWxkIEhUIEluZm9ybWF0aW9uICovDQo+IC0gICAgICpwb3MrKyA9IFdMQU5fRUlE
X0hUX0lORk9STUFUSU9OOw0KPiAtICAgICAqcG9zKysgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIx
MV9odF9pbmZvKTsNCj4gLSAgICAgaHRfaW5mbyA9IChzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8g
Kilwb3M7DQo+IC0gICAgIGh0X2luZm8tPmNvbnRyb2xfY2hhbiA9DQo+ICsgICAgICpwb3MrKyA9
IFdMQU5fRUlEX0hUX09QRVJBVElPTjsNCj4gKyAgICAgKnBvcysrID0gc2l6ZW9mKHN0cnVjdCBp
ZWVlODAyMTFfaHRfb3BlcmF0aW9uKTsNCj4gKyAgICAgaHRfb3BlciA9IChzdHJ1Y3QgaWVlZTgw
MjExX2h0X29wZXJhdGlvbiAqKXBvczsNCj4gKyAgICAgaHRfb3Blci0+cHJpbWFyeV9jaGFuID0N
Cj4gICAgICAgICAgICAgICAgICAgICAgIGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChj
aGFubmVsLT5jZW50ZXJfZnJlcSk7DQo+ICAgICAgIHN3aXRjaCAoY2hhbm5lbF90eXBlKSB7DQo+
ICAgICAgIGNhc2UgTkw4MDIxMV9DSEFOX0hUNDBNSU5VUzoNCj4gLSAgICAgICAgICAgICBodF9p
bmZvLT5odF9wYXJhbSA9IElFRUU4MDIxMV9IVF9QQVJBTV9DSEFfU0VDX0JFTE9XOw0KPiArICAg
ICAgICAgICAgIGh0X29wZXItPmh0X3BhcmFtID0gSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNf
QkVMT1c7DQo+ICAgICAgICAgICAgICAgYnJlYWs7DQo+ICAgICAgIGNhc2UgTkw4MDIxMV9DSEFO
X0hUNDBQTFVTOg0KPiAtICAgICAgICAgICAgIGh0X2luZm8tPmh0X3BhcmFtID0gSUVFRTgwMjEx
X0hUX1BBUkFNX0NIQV9TRUNfQUJPVkU7DQo+ICsgICAgICAgICAgICAgaHRfb3Blci0+aHRfcGFy
YW0gPSBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19BQk9WRTsNCj4gICAgICAgICAgICAgICBi
cmVhazsNCj4gICAgICAgY2FzZSBOTDgwMjExX0NIQU5fSFQyMDoNCj4gICAgICAgZGVmYXVsdDoN
Cj4gLSAgICAgICAgICAgICBodF9pbmZvLT5odF9wYXJhbSA9IElFRUU4MDIxMV9IVF9QQVJBTV9D
SEFfU0VDX05PTkU7DQo+ICsgICAgICAgICAgICAgaHRfb3Blci0+aHRfcGFyYW0gPSBJRUVFODAy
MTFfSFRfUEFSQU1fQ0hBX1NFQ19OT05FOw0KPiAgICAgICAgICAgICAgIGJyZWFrOw0KPiAgICAg
ICB9DQo+ICAgICAgIGlmIChodF9jYXAtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRI
XzIwXzQwKQ0KPiAtICAgICAgICAgICAgIGh0X2luZm8tPmh0X3BhcmFtIHw9IElFRUU4MDIxMV9I
VF9QQVJBTV9DSEFOX1dJRFRIX0FOWTsNCj4gKyAgICAgICAgICAgICBodF9vcGVyLT5odF9wYXJh
bSB8PSBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBTl9XSURUSF9BTlk7DQo+DQo+ICAgICAgIC8qDQo+
ICAgICAgICAqIE5vdGU6IEFjY29yZGluZyB0byA4MDIuMTFuLTIwMDkgOS4xMy4zLjEsIEhUIFBy
b3RlY3Rpb24gZmllbGQgYW5kDQo+ICAgICAgICAqIFJJRlMgTW9kZSBhcmUgcmVzZXJ2ZWQgaW4g
SUJTUyBtb2RlLCB0aGVyZWZvcmUga2VlcCB0aGVtIGF0IDANCj4gICAgICAgICovDQo+IC0gICAg
IGh0X2luZm8tPm9wZXJhdGlvbl9tb2RlID0gMHgwMDAwOw0KPiAtICAgICBodF9pbmZvLT5zdGJj
X3BhcmFtID0gMHgwMDAwOw0KPiArICAgICBodF9vcGVyLT5vcGVyYXRpb25fbW9kZSA9IDB4MDAw
MDsNCj4gKyAgICAgaHRfb3Blci0+c3RiY19wYXJhbSA9IDB4MDAwMDsNCj4NCj4gICAgICAgLyog
SXQgc2VlbXMgdGhhdCBCYXNpYyBNQ1Mgc2V0IGFuZCBTdXBwb3J0ZWQgTUNTIHNldA0KPiAgICAg
ICAgICBhcmUgaWRlbnRpY2FsIGZvciB0aGUgZmlyc3QgMTAgYnl0ZXMgKi8NCj4gLSAgICAgbWVt
c2V0KCZodF9pbmZvLT5iYXNpY19zZXQsIDAsIDE2KTsNCj4gLSAgICAgbWVtY3B5KCZodF9pbmZv
LT5iYXNpY19zZXQsICZodF9jYXAtPm1jcywgMTApOw0KPiArICAgICBtZW1zZXQoJmh0X29wZXIt
PmJhc2ljX3NldCwgMCwgMTYpOw0KPiArICAgICBtZW1jcHkoJmh0X29wZXItPmJhc2ljX3NldCwg
Jmh0X2NhcC0+bWNzLCAxMCk7DQo+DQo+IC0gICAgIHJldHVybiBwb3MgKyBzaXplb2Yoc3RydWN0
IGllZWU4MDIxMV9odF9pbmZvKTsNCj4gKyAgICAgcmV0dXJuIHBvcyArIHNpemVvZihzdHJ1Y3Qg
aWVlZTgwMjExX2h0X29wZXJhdGlvbik7DQo+ICB9DQo+DQo+ICBlbnVtIG5sODAyMTFfY2hhbm5l
bF90eXBlDQo+IC1pZWVlODAyMTFfaHRfaW5mb190b19jaGFubmVsX3R5cGUoc3RydWN0IGllZWU4
MDIxMV9odF9pbmZvICpodF9pbmZvKQ0KPiAraWVlZTgwMjExX2h0X29wZXJfdG9fY2hhbm5lbF90
eXBlKHN0cnVjdCBpZWVlODAyMTFfaHRfb3BlcmF0aW9uICpodF9vcGVyKQ0KPiAgew0KPiAgICAg
ICBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZTsNCj4NCj4gLSAgICAgaWYg
KCFodF9pbmZvKQ0KPiArICAgICBpZiAoIWh0X29wZXIpDQo+ICAgICAgICAgICAgICAgcmV0dXJu
IE5MODAyMTFfQ0hBTl9OT19IVDsNCj4NCj4gLSAgICAgc3dpdGNoIChodF9pbmZvLT5odF9wYXJh
bSAmIElFRUU4MDIxMV9IVF9QQVJBTV9DSEFfU0VDX09GRlNFVCkgew0KPiArICAgICBzd2l0Y2gg
KGh0X29wZXItPmh0X3BhcmFtICYgSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfT0ZGU0VUKSB7
DQo+ICAgICAgIGNhc2UgSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfTk9ORToNCj4gICAgICAg
ICAgICAgICBjaGFubmVsX3R5cGUgPSBOTDgwMjExX0NIQU5fSFQyMDsNCj4gICAgICAgICAgICAg
ICBicmVhazsNCj4gLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9mdy5oICAgICAg
IDIwMTItMDMtMTUgMTU6MzM6MjkuMDAwMDAwMDAwICswMTAwDQo+ICsrKyBiL2RyaXZlcnMvbmV0
L3dpcmVsZXNzL213aWZpZXgvZncuaCAgICAgICAyMDEyLTAzLTE1IDE1OjM5OjU5LjAwMDAwMDAw
MCArMDEwMA0KPiBAQCAtMTA0NSw3ICsxMDQ1LDcgQEAgc3RydWN0IG13aWZpZXhfaWVfdHlwZXNf
aHRjYXAgew0KPg0KPiAgc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRpbmZvIHsNCj4gICAgICAg
c3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyIGhlYWRlcjsNCj4gLSAgICAgc3RydWN0IGll
ZWU4MDIxMV9odF9pbmZvIGh0X2luZm87DQo+ICsgICAgIHN0cnVjdCBpZWVlODAyMTFfaHRfb3Bl
cmF0aW9uIGh0X29wZXI7DQo+ICB9IF9fcGFja2VkOw0KPg0KPiAgc3RydWN0IG13aWZpZXhfaWVf
dHlwZXNfMjA0MGJzc2NvIHsNCj4gLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9t
YWluLmggICAgIDIwMTItMDMtMTUgMTU6MzM6MjkuMDAwMDAwMDAwICswMTAwDQo+ICsrKyBiL2Ry
aXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvbWFpbi5oICAgICAyMDEyLTAzLTE1IDE1OjM5OjU5
LjAwMDAwMDAwMCArMDEwMA0KPiBAQCAtMjY5LDcgKzI2OSw3IEBAIHN0cnVjdCBtd2lmaWV4X2Jz
c2Rlc2NyaXB0b3Igew0KPiAgICAgICB1OCAgZGlzYWJsZV8xMW47DQo+ICAgICAgIHN0cnVjdCBp
ZWVlODAyMTFfaHRfY2FwICpiY25faHRfY2FwOw0KPiAgICAgICB1MTYgaHRfY2FwX29mZnNldDsN
Cj4gLSAgICAgc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICpiY25faHRfaW5mbzsNCj4gKyAgICAg
c3RydWN0IGllZWU4MDIxMV9odF9vcGVyYXRpb24gKmJjbl9odF9vcGVyOw0KPiAgICAgICB1MTYg
aHRfaW5mb19vZmZzZXQ7DQo+ICAgICAgIHU4ICpiY25fYnNzX2NvXzIwNDA7DQo+ICAgICAgIHUx
NiBic3NfY29fMjA0MF9vZmZzZXQ7DQo+IC0tLSBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggIDIw
MTItMDMtMTUgMTU6MzM6MjkuMDAwMDAwMDAwICswMTAwDQo+ICsrKyBiL2luY2x1ZGUvbmV0L21h
YzgwMjExLmggIDIwMTItMDMtMTUgMTU6Mzk6NTkuMDAwMDAwMDAwICswMTAwDQo+IEBAIC0yNDIs
NyArMjQyLDcgQEAgZW51bSBpZWVlODAyMTFfcnNzaV9ldmVudCB7DQo+ICAgKiBAY2hhbm5lbF90
eXBlOiBDaGFubmVsIHR5cGUgZm9yIHRoaXMgQlNTIC0tIHRoZSBoYXJkd2FyZSBtaWdodCBiZQ0K
PiAgICogICBjb25maWd1cmVkIGZvciBIVDQwKyB3aGlsZSB0aGlzIEJTUyBvbmx5IHVzZXMgbm8t
SFQsIGZvcg0KPiAgICogICBleGFtcGxlLg0KPiAtICogQGh0X29wZXJhdGlvbl9tb2RlOiBIVCBv
cGVyYXRpb24gbW9kZSAobGlrZSBpbiAmc3RydWN0IGllZWU4MDIxMV9odF9pbmZvKS4NCj4gKyAq
IEBodF9vcGVyYXRpb25fbW9kZTogSFQgb3BlcmF0aW9uIG1vZGUgbGlrZSBpbiAmc3RydWN0IGll
ZWU4MDIxMV9odF9vcGVyYXRpb24uDQo+ICAgKiAgIFRoaXMgZmllbGQgaXMgb25seSB2YWxpZCB3
aGVuIHRoZSBjaGFubmVsIHR5cGUgaXMgb25lIG9mIHRoZSBIVCB0eXBlcy4NCj4gICAqIEBjcW1f
cnNzaV90aG9sZDogQ29ubmVjdGlvbiBxdWFsaXR5IG1vbml0b3IgUlNTSSB0aHJlc2hvbGQsIGEg
emVybyB2YWx1ZQ0KPiAgICogICBpbXBsaWVzIGRpc2FibGVkDQo+IC0tLSBhL25ldC9tYWM4MDIx
MS9pYnNzLmMgICAgIDIwMTItMDMtMTUgMTU6MzI6MjYuMDAwMDAwMDAwICswMTAwDQo+ICsrKyBi
L25ldC9tYWM4MDIxMS9pYnNzLmMgICAgIDIwMTItMDMtMTUgMTU6Mzk6NTkuMDAwMDAwMDAwICsw
MTAwDQo+IEBAIC0xNjAsMTMgKzE2MCwxMSBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9zdGFf
am9pbl9pYnNzKHN0DQo+ICAgICAgIGlmIChjaGFubmVsX3R5cGUgJiYgc2JhbmQtPmh0X2NhcC5o
dF9zdXBwb3J0ZWQpIHsNCj4gICAgICAgICAgICAgICBwb3MgPSBza2JfcHV0KHNrYiwgNCArDQo+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjEx
X2h0X2NhcCkgKw0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3Ry
dWN0IGllZWU4MDIxMV9odF9pbmZvKSk7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X29wZXJhdGlvbikpOw0KPiAgICAgICAgICAg
ICAgIHBvcyA9IGllZWU4MDIxMV9pZV9idWlsZF9odF9jYXAocG9zLCAmc2JhbmQtPmh0X2NhcCwN
Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNiYW5kLT5o
dF9jYXAuY2FwKTsNCj4gLSAgICAgICAgICAgICBwb3MgPSBpZWVlODAyMTFfaWVfYnVpbGRfaHRf
aW5mbyhwb3MsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJnNiYW5kLT5odF9jYXAsDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhbiwNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFubmVsX3R5cGUpOw0KPiArICAgICAgICAgICAgIHBvcyA9IGllZWU4MDIx
MV9pZV9idWlsZF9odF9vcGVyKHBvcywgJnNiYW5kLT5odF9jYXAsDQo+ICsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbiwgY2hhbm5lbF90eXBlKTsNCj4g
ICAgICAgfQ0KPg0KPiAgICAgICBpZiAobG9jYWwtPmh3LnF1ZXVlcyA+PSA0KSB7DQo+IEBAIC00
NDEsMTMgKzQzOSwxMyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfYnNzX2luZm8oc3RydWN0
DQo+ICAgICAgICAgICAgICAgaWYgKHN0YSAmJiBlbGVtcy0+d21tX2luZm8pDQo+ICAgICAgICAg
ICAgICAgICAgICAgICBzZXRfc3RhX2ZsYWcoc3RhLCBXTEFOX1NUQV9XTUUpOw0KPg0KPiAtICAg
ICAgICAgICAgIGlmIChzdGEgJiYgZWxlbXMtPmh0X2luZm9fZWxlbSAmJiBlbGVtcy0+aHRfY2Fw
X2VsZW0gJiYNCj4gKyAgICAgICAgICAgICBpZiAoc3RhICYmIGVsZW1zLT5odF9vcGVyYXRpb24g
JiYgZWxlbXMtPmh0X2NhcF9lbGVtICYmDQo+ICAgICAgICAgICAgICAgICAgIHNkYXRhLT51Lmli
c3MuY2hhbm5lbF90eXBlICE9IE5MODAyMTFfQ0hBTl9OT19IVCkgew0KPiAgICAgICAgICAgICAg
ICAgICAgICAgLyogd2UgYm90aCB1c2UgSFQgKi8NCj4gICAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCBzdGFfaHRfY2FwX25ldzsNCj4gICAgICAgICAgICAg
ICAgICAgICAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlID0NCj4gLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWVlZTgwMjExX2h0X2luZm9fdG9fY2hhbm5lbF90
eXBlKA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtcy0+aHRfaW5mb19lbGVtKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWVlZTgwMjExX2h0X29wZXJfdG9fY2hhbm5lbF90eXBlKA0KPiArICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtcy0+aHRfb3BlcmF0aW9u
KTsNCj4NCj4gICAgICAgICAgICAgICAgICAgICAgIGllZWU4MDIxMV9odF9jYXBfaWVfdG9fc3Rh
X2h0X2NhcChzZGF0YSwgc2JhbmQsDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbXMtPmh0X2NhcF9lbGVtLA0KPiBAQCAtMTA2Myw3
ICsxMDYxLDcgQEAgaW50IGllZWU4MDIxMV9pYnNzX2pvaW4oc3RydWN0IGllZWU4MDIxMQ0KPiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDQgLyogSUJTUyBwYXJhbXMgKi8gKw0KPiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDIgKyAoSUVFRTgwMjExX01BWF9TVVBQX1JBVEVTIC0gOCkgKw0K
PiAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9o
dF9jYXApICsNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAyICsgc2l6ZW9mKHN0cnVjdCBp
ZWVlODAyMTFfaHRfaW5mbykgKw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIDIgKyBzaXpl
b2Yoc3RydWN0IGllZWU4MDIxMV9odF9vcGVyYXRpb24pICsNCj4gICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJhbXMtPmllX2xlbik7DQo+ICAgICAgIGlmICghc2tiKQ0KPiAgICAgICAgICAg
ICAgIHJldHVybiAtRU5PTUVNOw0KPiAtLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCAg
ICAgIDIwMTItMDMtMTUgMTU6MzM6MjkuMDAwMDAwMDAwICswMTAwDQo+ICsrKyBiL25ldC9tYWM4
MDIxMS9pZWVlODAyMTFfaS5oICAgICAgMjAxMi0wMy0xNSAxNTozOTo1OS4wMDAwMDAwMDAgKzAx
MDANCj4gQEAgLTM5Nyw3ICszOTcsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX21nZF9hdXRoX2RhdGEg
ew0KPiAgc3RydWN0IGllZWU4MDIxMV9tZ2RfYXNzb2NfZGF0YSB7DQo+ICAgICAgIHN0cnVjdCBj
Zmc4MDIxMV9ic3MgKmJzczsNCj4gICAgICAgY29uc3QgdTggKnN1cHBfcmF0ZXM7DQo+IC0gICAg
IGNvbnN0IHU4ICpodF9pbmZvcm1hdGlvbl9pZTsNCj4gKyAgICAgY29uc3QgdTggKmh0X29wZXJh
dGlvbl9pZTsNCj4NCj4gICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0Ow0KPiAgICAgICBpbnQg
dHJpZXM7DQo+IEBAIC0xMTE3LDcgKzExMTcsNyBAQCBzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyB7
DQo+ICAgICAgIHU4ICp3bW1faW5mbzsNCj4gICAgICAgdTggKndtbV9wYXJhbTsNCj4gICAgICAg
c3RydWN0IGllZWU4MDIxMV9odF9jYXAgKmh0X2NhcF9lbGVtOw0KPiAtICAgICBzdHJ1Y3QgaWVl
ZTgwMjExX2h0X2luZm8gKmh0X2luZm9fZWxlbTsNCj4gKyAgICAgc3RydWN0IGllZWU4MDIxMV9o
dF9vcGVyYXRpb24gKmh0X29wZXJhdGlvbjsNCj4gICAgICAgc3RydWN0IGllZWU4MDIxMV9tZXNo
Y29uZl9pZSAqbWVzaF9jb25maWc7DQo+ICAgICAgIHU4ICptZXNoX2lkOw0KPiAgICAgICB1OCAq
cGVlcmluZzsNCj4gQEAgLTE0NzAsMTAgKzE0NzAsOSBAQCBzaXplX3QgaWVlZTgwMjExX2llX3Nw
bGl0KGNvbnN0IHU4ICppZXMsDQo+ICBzaXplX3QgaWVlZTgwMjExX2llX3NwbGl0X3ZlbmRvcihj
b25zdCB1OCAqaWVzLCBzaXplX3QgaWVsZW4sIHNpemVfdCBvZmZzZXQpOw0KPiAgdTggKmllZWU4
MDIxMV9pZV9idWlsZF9odF9jYXAodTggKnBvcywgc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2Fw
ICpodF9jYXAsDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgY2FwKTsNCj4gLXU4
ICppZWVlODAyMTFfaWVfYnVpbGRfaHRfaW5mbyh1OCAqcG9zLA0KPiAtICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKmh0X2NhcCwNCj4gLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFu
bmVsLA0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIG5sODAyMTFfY2hhbm5l
bF90eXBlIGNoYW5uZWxfdHlwZSk7DQo+ICt1OCAqaWVlZTgwMjExX2llX2J1aWxkX2h0X29wZXIo
dTggKnBvcywgc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwICpodF9jYXAsDQo+ICsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLA0K
PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUg
Y2hhbm5lbF90eXBlKTsNCj4NCj4gIC8qIGludGVybmFsIHdvcmsgaXRlbXMgKi8NCj4gIHZvaWQg
aWVlZTgwMjExX3dvcmtfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7DQo+IEBA
IC0xNTAxLDcgKzE1MDAsNyBAQCBib29sIGllZWU4MDIxMV9zZXRfY2hhbm5lbF90eXBlKHN0cnVj
dCBpDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3Vi
X2lmX2RhdGEgKnNkYXRhLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIG5s
ODAyMTFfY2hhbm5lbF90eXBlIGNoYW50eXBlKTsNCj4gIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5
cGUNCj4gLWllZWU4MDIxMV9odF9pbmZvX3RvX2NoYW5uZWxfdHlwZShzdHJ1Y3QgaWVlZTgwMjEx
X2h0X2luZm8gKmh0X2luZm8pOw0KPiAraWVlZTgwMjExX2h0X29wZXJfdG9fY2hhbm5lbF90eXBl
KHN0cnVjdCBpZWVlODAyMTFfaHRfb3BlcmF0aW9uICpodF9vcGVyKTsNCj4gIGVudW0gbmw4MDIx
MV9jaGFubmVsX3R5cGUgaWVlZTgwMjExX2dldF90eF9jaGFubmVsX3R5cGUoDQo+ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9j
YWwsDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBubDgwMjEx
X2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUpOw0KPiAtLS0gYS9uZXQvbWFjODAyMTEvbWVzaC5j
ICAgICAyMDEyLTAzLTE1IDE1OjMyOjI2LjAwMDAwMDAwMCArMDEwMA0KPiArKysgYi9uZXQvbWFj
ODAyMTEvbWVzaC5jICAgICAyMDEyLTAzLTE1IDE1OjM5OjU5LjAwMDAwMDAwMCArMDEwMA0KPiBA
QCAtOTgsOSArOTgsOSBAQCBib29sIG1lc2hfbWF0Y2hlc19sb2NhbChzdHJ1Y3QgaWVlZTgwMl8x
DQo+ICAgICAgICAgICAgICAgZ290byBtaXNtYXRjaDsNCj4NCj4gICAgICAgLyogZGlzYWxsb3cg
cGVlcmluZyB3aXRoIG1pc21hdGNoZWQgY2hhbm5lbCB0eXBlcyBmb3Igbm93ICovDQo+IC0gICAg
IGlmIChpZS0+aHRfaW5mb19lbGVtICYmDQo+ICsgICAgIGlmIChpZS0+aHRfb3BlcmF0aW9uICYm
DQo+ICAgICAgICAgICAobG9jYWwtPl9vcGVyX2NoYW5uZWxfdHlwZSAhPQ0KPiAtICAgICAgICAg
IGllZWU4MDIxMV9odF9pbmZvX3RvX2NoYW5uZWxfdHlwZShpZS0+aHRfaW5mb19lbGVtKSkpDQo+
ICsgICAgICAgICAgaWVlZTgwMjExX2h0X29wZXJfdG9fY2hhbm5lbF90eXBlKGllLT5odF9vcGVy
YXRpb24pKSkNCj4gICAgICAgICAgICAgICBnb3RvIG1pc21hdGNoOw0KPg0KPiAgICAgICByZXR1
cm4gdHJ1ZTsNCj4gQEAgLTM3MSw3ICszNzEsNyBAQCBpbnQgbWVzaF9hZGRfaHRfY2FwX2llKHN0
cnVjdCBza19idWZmICpzDQo+ICAgICAgIHJldHVybiAwOw0KPiAgfQ0KPg0KPiAtaW50IG1lc2hf
YWRkX2h0X2luZm9faWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwNCj4gK2ludCBtZXNoX2FkZF9odF9v
cGVyX2llKHN0cnVjdCBza19idWZmICpza2IsDQo+ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkNCj4gIHsNCj4gICAgICAgc3RydWN0IGll
ZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7DQo+IEBAIC0zODUsMTEgKzM4NSwx
MSBAQCBpbnQgbWVzaF9hZGRfaHRfaW5mb19pZShzdHJ1Y3Qgc2tfYnVmZiAqDQo+ICAgICAgIGlm
ICghaHRfY2FwLT5odF9zdXBwb3J0ZWQgfHwgY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9O
T19IVCkNCj4gICAgICAgICAgICAgICByZXR1cm4gMDsNCj4NCj4gLSAgICAgaWYgKHNrYl90YWls
cm9vbShza2IpIDwgMiArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8pKQ0KPiArICAg
ICBpZiAoc2tiX3RhaWxyb29tKHNrYikgPCAyICsgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRf
b3BlcmF0aW9uKSkNCj4gICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4NCj4gLSAgICAg
cG9zID0gc2tiX3B1dChza2IsIDIgKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9pbmZvKSk7
DQo+IC0gICAgIGllZWU4MDIxMV9pZV9idWlsZF9odF9pbmZvKHBvcywgaHRfY2FwLCBjaGFubmVs
LCBjaGFubmVsX3R5cGUpOw0KPiArICAgICBwb3MgPSBza2JfcHV0KHNrYiwgMiArIHNpemVvZihz
dHJ1Y3QgaWVlZTgwMjExX2h0X29wZXJhdGlvbikpOw0KPiArICAgICBpZWVlODAyMTFfaWVfYnVp
bGRfaHRfb3Blcihwb3MsIGh0X2NhcCwgY2hhbm5lbCwgY2hhbm5lbF90eXBlKTsNCj4NCj4gICAg
ICAgcmV0dXJuIDA7DQo+ICB9DQo+IC0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMgICAg
ICAgMjAxMi0wMy0xNSAxNTozMjoyNi4wMDAwMDAwMDAgKzAxMDANCj4gKysrIGIvbmV0L21hYzgw
MjExL21lc2hfcGxpbmsuYyAgICAgICAyMDEyLTAzLTE1IDE1OjM5OjU5LjAwMDAwMDAwMCArMDEw
MA0KPiBAQCAtMTg3LDcgKzE4Nyw3IEBAIHN0YXRpYyBpbnQgbWVzaF9wbGlua19mcmFtZV90eChz
dHJ1Y3QgaWUNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAyICsgc2RhdGEtPnUubWVzaC5t
ZXNoX2lkX2xlbiArDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgMiArIHNpemVvZihzdHJ1
Y3QgaWVlZTgwMjExX21lc2hjb25mX2llKSArDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAg
MiArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCkgKw0KPiAtICAgICAgICAgICAgICAg
ICAgICAgICAgIDIgKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9pbmZvKSArDQo+ICsgICAg
ICAgICAgICAgICAgICAgICAgICAgMiArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X29wZXJh
dGlvbikgKw0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgKyA4ICsgLyogcGVlcmluZyBJ
RSAqLw0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNkYXRhLT51Lm1lc2guaWVfbGVuKTsN
Cj4gICAgICAgaWYgKCFza2IpDQo+IEBAIC0yNjMsNyArMjYzLDcgQEAgc3RhdGljIGludCBtZXNo
X3BsaW5rX2ZyYW1lX3R4KHN0cnVjdCBpZQ0KPg0KPiAgICAgICBpZiAoYWN0aW9uICE9IFdMQU5f
U1BfTUVTSF9QRUVSSU5HX0NMT1NFKSB7DQo+ICAgICAgICAgICAgICAgaWYgKG1lc2hfYWRkX2h0
X2NhcF9pZShza2IsIHNkYXRhKSB8fA0KPiAtICAgICAgICAgICAgICAgICBtZXNoX2FkZF9odF9p
bmZvX2llKHNrYiwgc2RhdGEpKQ0KPiArICAgICAgICAgICAgICAgICBtZXNoX2FkZF9odF9vcGVy
X2llKHNrYiwgc2RhdGEpKQ0KPiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KPiAg
ICAgICB9DQo+DQo+IC0tLSBhL25ldC9tYWM4MDIxMS90eC5jICAgICAgIDIwMTItMDMtMTUgMTU6
MzM6MjkuMDAwMDAwMDAwICswMTAwDQo+ICsrKyBiL25ldC9tYWM4MDIxMS90eC5jICAgICAgIDIw
MTItMDMtMTUgMTU6Mzk6NTkuMDAwMDAwMDAwICswMTAwDQo+IEBAIC0yMzkwLDcgKzIzOTAsNyBA
QCBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltDQo+ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAyICsgMyArIC8qIERTIHBhcmFtcyAqLw0KPiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMiArIChJRUVFODAyMTFfTUFYX1NVUFBfUkFURVMg
LSA4KSArDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICsgc2l6ZW9mKHN0
cnVjdCBpZWVlODAyMTFfaHRfY2FwKSArDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAyICsgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbykgKw0KPiArICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMiArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X29w
ZXJhdGlvbikgKw0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiArIHNkYXRh
LT51Lm1lc2gubWVzaF9pZF9sZW4gKw0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMiArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX21lc2hjb25mX2llKSArDQo+ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZGF0YS0+dS5tZXNoLmllX2xlbik7DQo+IEBAIC0y
NDE5LDcgKzI0MTksNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX2JlYWNvbl9nZXRfdGlt
DQo+ICAgICAgICAgICAgICAgICAgIGllZWU4MDIxMV9hZGRfZXh0X3NyYXRlc19pZSgmc2RhdGEt
PnZpZiwgc2tiKSB8fA0KPiAgICAgICAgICAgICAgICAgICBtZXNoX2FkZF9yc25faWUoc2tiLCBz
ZGF0YSkgfHwNCj4gICAgICAgICAgICAgICAgICAgbWVzaF9hZGRfaHRfY2FwX2llKHNrYiwgc2Rh
dGEpIHx8DQo+IC0gICAgICAgICAgICAgICAgIG1lc2hfYWRkX2h0X2luZm9faWUoc2tiLCBzZGF0
YSkgfHwNCj4gKyAgICAgICAgICAgICAgICAgbWVzaF9hZGRfaHRfb3Blcl9pZShza2IsIHNkYXRh
KSB8fA0KPiAgICAgICAgICAgICAgICAgICBtZXNoX2FkZF9tZXNoaWRfaWUoc2tiLCBzZGF0YSkg
fHwNCj4gICAgICAgICAgICAgICAgICAgbWVzaF9hZGRfbWVzaGNvbmZfaWUoc2tiLCBzZGF0YSkg
fHwNCj4gICAgICAgICAgICAgICAgICAgbWVzaF9hZGRfdmVuZG9yX2llcyhza2IsIHNkYXRhKSkg
ew0KPiAtLS0gYS9uZXQvbWFjODAyMTEvbWVzaC5oICAgICAyMDEyLTAzLTE1IDE1OjMyOjI2LjAw
MDAwMDAwMCArMDEwMA0KPiArKysgYi9uZXQvbWFjODAyMTEvbWVzaC5oICAgICAyMDEyLTAzLTE1
IDE1OjM5OjU5LjAwMDAwMDAwMCArMDEwMA0KPiBAQCAtMjIwLDcgKzIyMCw3IEBAIGludCBtZXNo
X2FkZF9kc19wYXJhbXNfaWUoc3RydWN0IHNrX2J1ZmYNCj4gICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOw0KPiAgaW50IG1lc2hfYWRk
X2h0X2NhcF9pZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLA0KPiAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7DQo+IC1pbnQgbWVzaF9hZGRfaHRf
aW5mb19pZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLA0KPiAraW50IG1lc2hfYWRkX2h0X29wZXJfaWUo
c3RydWN0IHNrX2J1ZmYgKnNrYiwNCj4gICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpZWVl
ODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsNCj4gIHZvaWQgbWVzaF9ybWNfZnJlZShzdHJ1Y3Qg
aWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7DQo+ICBpbnQgbWVzaF9ybWNfaW5pdChzdHJ1
Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7DQo+IC0tLSBhL2RyaXZlcnMvbmV0L3dp
cmVsZXNzL213aWZpZXgvam9pbi5jICAgICAyMDEyLTAzLTE1IDE1OjMzOjI5LjAwMDAwMDAwMCAr
MDEwMA0KPiArKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2pvaW4uYyAgICAgMjAx
Mi0wMy0xNSAxNTo0ODo1My4wMDAwMDAwMDAgKzAxMDANCj4gQEAgLTkzMiwyMCArOTMyLDIwIEBA
IG13aWZpZXhfY21kXzgwMl8xMV9hZF9ob2Nfc3RhcnQoc3RydWN0IG0NCj4gICAgICAgICAgICAg
ICAvKiBGaWxsIEhUIElORk9STUFUSU9OICovDQo+ICAgICAgICAgICAgICAgaHRfaW5mbyA9IChz
dHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGluZm8gKikgcG9zOw0KPiAgICAgICAgICAgICAgIG1l
bXNldChodF9pbmZvLCAwLCBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRpbmZvKSk7
DQo+IC0gICAgICAgICAgICAgaHRfaW5mby0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihXTEFO
X0VJRF9IVF9JTkZPUk1BVElPTik7DQo+ICsgICAgICAgICAgICAgaHRfaW5mby0+aGVhZGVyLnR5
cGUgPSBjcHVfdG9fbGUxNihXTEFOX0VJRF9IVF9PUEVSQVRJT04pOw0KPiAgICAgICAgICAgICAg
IGh0X2luZm8tPmhlYWRlci5sZW4gPQ0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
cHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9pbmZvKSk7DQo+ICsgICAgICAg
ICAgICAgICAgICAgICBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9vcGVy
YXRpb24pKTsNCj4NCj4gLSAgICAgICAgICAgICBodF9pbmZvLT5odF9pbmZvLmNvbnRyb2xfY2hh
biA9DQo+ICsgICAgICAgICAgICAgaHRfaW5mby0+aHRfb3Blci5wcmltYXJ5X2NoYW4gPQ0KPiAg
ICAgICAgICAgICAgICAgICAgICAgKHU4KSBwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2Ny
aXB0b3IuY2hhbm5lbDsNCj4gICAgICAgICAgICAgICBpZiAoYWRhcHRlci0+c2VjX2NoYW5fb2Zm
c2V0KSB7DQo+IC0gICAgICAgICAgICAgICAgICAgICBodF9pbmZvLT5odF9pbmZvLmh0X3BhcmFt
ID0gYWRhcHRlci0+c2VjX2NoYW5fb2Zmc2V0Ow0KPiAtICAgICAgICAgICAgICAgICAgICAgaHRf
aW5mby0+aHRfaW5mby5odF9wYXJhbSB8PQ0KPiArICAgICAgICAgICAgICAgICAgICAgaHRfaW5m
by0+aHRfb3Blci5odF9wYXJhbSA9IGFkYXB0ZXItPnNlY19jaGFuX29mZnNldDsNCj4gKyAgICAg
ICAgICAgICAgICAgICAgIGh0X2luZm8tPmh0X29wZXIuaHRfcGFyYW0gfD0NCj4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBTl9XSURU
SF9BTlk7DQo+ICAgICAgICAgICAgICAgfQ0KPiAtICAgICAgICAgICAgIGh0X2luZm8tPmh0X2lu
Zm8ub3BlcmF0aW9uX21vZGUgPQ0KPiArICAgICAgICAgICAgIGh0X2luZm8tPmh0X29wZXIub3Bl
cmF0aW9uX21vZGUgPQ0KPiAgICAgICAgICAgICAgICAgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjEx
X0hUX09QX01PREVfTk9OX0dGX1NUQV9QUlNOVCk7DQo+IC0gICAgICAgICAgICAgaHRfaW5mby0+
aHRfaW5mby5iYXNpY19zZXRbMF0gPSAweGZmOw0KPiArICAgICAgICAgICAgIGh0X2luZm8tPmh0
X29wZXIuYmFzaWNfc2V0WzBdID0gMHhmZjsNCj4gICAgICAgICAgICAgICBwb3MgKz0gc2l6ZW9m
KHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2h0aW5mbyk7DQo+ICAgICAgICAgICAgICAgY21kX2Fw
cGVuZF9zaXplICs9DQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1
Y3QgbXdpZmlleF9pZV90eXBlc19odGluZm8pOw0KPg0KDQo=

^ permalink raw reply	[flat|nested] 8+ messages in thread

* RE: [PATCH v2] wireless: rename ht_info to ht_operation
  2012-03-15 18:00   ` Bing Zhao
@ 2012-03-15 18:19     ` Johannes Berg
  2012-03-15 18:31       ` Johannes Berg
  0 siblings, 1 reply; 8+ messages in thread
From: Johannes Berg @ 2012-03-15 18:19 UTC (permalink / raw)
  To: Bing Zhao; +Cc: John Linville, linux-wireless

Hi,

> For mwifiex part, the change looks fine except for a couple checkpatch warnings.

Ok, thanks. I knew there were going to be checkpatch warnings but
decided that the code wasn't going to be easier to read if I forced it
down to 80 colums, so decided to leave them.

johannes



^ permalink raw reply	[flat|nested] 8+ messages in thread

* RE: [PATCH v2] wireless: rename ht_info to ht_operation
  2012-03-15 18:19     ` Johannes Berg
@ 2012-03-15 18:31       ` Johannes Berg
  2012-03-15 18:38         ` Bing Zhao
  0 siblings, 1 reply; 8+ messages in thread
From: Johannes Berg @ 2012-03-15 18:31 UTC (permalink / raw)
  To: Bing Zhao; +Cc: John Linville, linux-wireless

On Thu, 2012-03-15 at 19:19 +0100, Johannes Berg wrote:
> Hi,
> 
> > For mwifiex part, the change looks fine except for a couple checkpatch warnings.
> 
> Ok, thanks. I knew there were going to be checkpatch warnings but
> decided that the code wasn't going to be easier to read if I forced it
> down to 80 colums, so decided to leave them.

I should say that I am, of course, happy to change it if you'd like me
to.

johannes


^ permalink raw reply	[flat|nested] 8+ messages in thread

* RE: [PATCH v2] wireless: rename ht_info to ht_operation
  2012-03-15 18:31       ` Johannes Berg
@ 2012-03-15 18:38         ` Bing Zhao
  0 siblings, 0 replies; 8+ messages in thread
From: Bing Zhao @ 2012-03-15 18:38 UTC (permalink / raw)
  To: Johannes Berg; +Cc: John Linville, linux-wireless

SGkgSm9oYW5uZXMsDQoNCj4gT24gVGh1LCAyMDEyLTAzLTE1IGF0IDE5OjE5ICswMTAwLCBKb2hh
bm5lcyBCZXJnIHdyb3RlOg0KPiA+IEhpLA0KPiA+DQo+ID4gPiBGb3IgbXdpZmlleCBwYXJ0LCB0
aGUgY2hhbmdlIGxvb2tzIGZpbmUgZXhjZXB0IGZvciBhIGNvdXBsZSBjaGVja3BhdGNoIHdhcm5p
bmdzLg0KPiA+DQo+ID4gT2ssIHRoYW5rcy4gSSBrbmV3IHRoZXJlIHdlcmUgZ29pbmcgdG8gYmUg
Y2hlY2twYXRjaCB3YXJuaW5ncyBidXQNCj4gPiBkZWNpZGVkIHRoYXQgdGhlIGNvZGUgd2Fzbid0
IGdvaW5nIHRvIGJlIGVhc2llciB0byByZWFkIGlmIEkgZm9yY2VkIGl0DQo+ID4gZG93biB0byA4
MCBjb2x1bXMsIHNvIGRlY2lkZWQgdG8gbGVhdmUgdGhlbS4NCj4gDQo+IEkgc2hvdWxkIHNheSB0
aGF0IEkgYW0sIG9mIGNvdXJzZSwgaGFwcHkgdG8gY2hhbmdlIGl0IGlmIHlvdSdkIGxpa2UgbWUN
Cj4gdG8uDQoNClRoZXJlIGlzIGFsc28gYSBjaGVja3BhdGNoIEVSUk9SIGluIG5ldC9tYWM4MDIx
MS9tbG1lLmM6MjI2Og0KDQotCQkgICAgKGh0aS0+aHRfcGFyYW0gJiBJRUVFODAyMTFfSFRfUEFS
QU1fQ0hBTl9XSURUSF9BTlkpKSB7DQotCQkJc3dpdGNoKGh0aS0+aHRfcGFyYW0gJiBJRUVFODAy
MTFfSFRfUEFSQU1fQ0hBX1NFQ19PRkZTRVQpIHsNCisJCSAgICAoaHRfb3Blci0+aHRfcGFyYW0g
JiBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBTl9XSURUSF9BTlkpKSB7DQorCQkJc3dpdGNoKGh0X29w
ZXItPmh0X3BhcmFtICYgSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfT0ZGU0VUKSB7DQoNCldB
Uk5JTkc6IGxpbmUgb3ZlciA4MCBjaGFyYWN0ZXJzDQpFUlJPUjogc3BhY2UgcmVxdWlyZWQgYmVm
b3JlIHRoZSBvcGVuIHBhcmVudGhlc2lzICcoJw0KDQpDb3VsZCB5b3UgcGxlYXNlIGZpeCB0aGlz
Pw0KDQpGb3IgdGhlIHdhcm5pbmdzIGluIG13aWZpZXgsIGl04oCZcyBuaWNlciBpZiB5b3UgY2Fu
IGZpeCBpdCBpbiB0aGlzIHBhdGNoLiBPciwgSSBjYW4gZml4IGl0IGxhdGVyIGluIGEgc2VwYXJh
dGUgcGF0Y2guDQoNClRoYW5rcywNCkJpbmcNCg0K

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH v3] wireless: rename ht_info to ht_operation
  2012-03-15 14:50 ` [PATCH v2] " Johannes Berg
  2012-03-15 18:00   ` Bing Zhao
@ 2012-03-15 18:45   ` Johannes Berg
  2012-03-15 19:04     ` Bing Zhao
  1 sibling, 1 reply; 8+ messages in thread
From: Johannes Berg @ 2012-03-15 18:45 UTC (permalink / raw)
  To: John Linville; +Cc: Bing Zhao, linux-wireless

From: Johannes Berg <johannes.berg@intel.com>

Since some of the HT code pre-dates 802.11n-2009
some names are wrong. The one that bothers me most
is that "HT operation" is called "HT information"
in our code and that causes confusion.

Rename "HT information" to "HT operation" and also
the control_chan field to primary_chan to match
the name used in the spec.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
v2: fix patch for new mwifiex changes
v3: fix checkpatch

 drivers/net/wireless/mwifiex/11n.c  |   17 ++++++------
 drivers/net/wireless/mwifiex/fw.h   |    2 -
 drivers/net/wireless/mwifiex/join.c |   14 +++++-----
 drivers/net/wireless/mwifiex/main.h |    2 -
 drivers/net/wireless/mwifiex/scan.c |   12 ++++----
 drivers/net/wireless/wl12xx/main.c  |    2 -
 include/linux/ieee80211.h           |   14 ++++------
 include/net/mac80211.h              |    2 -
 net/mac80211/ibss.c                 |   16 +++++------
 net/mac80211/ieee80211_i.h          |   13 ++++-----
 net/mac80211/mesh.c                 |   12 ++++----
 net/mac80211/mesh.h                 |    2 -
 net/mac80211/mesh_plink.c           |    4 +-
 net/mac80211/mlme.c                 |   49 ++++++++++++++++++------------------
 net/mac80211/tx.c                   |    4 +-
 net/mac80211/util.c                 |   43 +++++++++++++++----------------
 16 files changed, 102 insertions(+), 106 deletions(-)

--- a/drivers/net/wireless/mwifiex/11n.c	2012-03-15 19:37:43.000000000 +0100
+++ b/drivers/net/wireless/mwifiex/11n.c	2012-03-15 19:43:55.000000000 +0100
@@ -350,25 +350,26 @@ mwifiex_cmd_append_11n_tlv(struct mwifie
 		ret_len += sizeof(struct mwifiex_ie_types_htcap);
 	}
 
-	if (bss_desc->bcn_ht_info) {
+	if (bss_desc->bcn_ht_oper) {
 		if (priv->bss_mode == NL80211_IFTYPE_ADHOC) {
 			ht_info = (struct mwifiex_ie_types_htinfo *) *buffer;
 			memset(ht_info, 0,
 			       sizeof(struct mwifiex_ie_types_htinfo));
 			ht_info->header.type =
-					cpu_to_le16(WLAN_EID_HT_INFORMATION);
+					cpu_to_le16(WLAN_EID_HT_OPERATION);
 			ht_info->header.len =
-				cpu_to_le16(sizeof(struct ieee80211_ht_info));
+				cpu_to_le16(
+					sizeof(struct ieee80211_ht_operation));
 
 			memcpy((u8 *) ht_info +
 			       sizeof(struct mwifiex_ie_types_header),
-			       (u8 *) bss_desc->bcn_ht_info +
+			       (u8 *) bss_desc->bcn_ht_oper +
 			       sizeof(struct ieee_types_header),
 			       le16_to_cpu(ht_info->header.len));
 
 			if (!(sband->ht_cap.cap &
 					IEEE80211_HT_CAP_SUP_WIDTH_20_40))
-				ht_info->ht_info.ht_param &=
+				ht_info->ht_oper.ht_param &=
 					~(IEEE80211_HT_PARAM_CHAN_WIDTH_ANY |
 					IEEE80211_HT_PARAM_CHA_SEC_OFFSET);
 
@@ -385,16 +386,16 @@ mwifiex_cmd_append_11n_tlv(struct mwifie
 			sizeof(struct mwifiex_ie_types_chan_list_param_set) -
 			sizeof(struct mwifiex_ie_types_header));
 		chan_list->chan_scan_param[0].chan_number =
-			bss_desc->bcn_ht_info->control_chan;
+			bss_desc->bcn_ht_oper->primary_chan;
 		chan_list->chan_scan_param[0].radio_type =
 			mwifiex_band_to_radio_type((u8) bss_desc->bss_band);
 
 		if (sband->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40 &&
-		    bss_desc->bcn_ht_info->ht_param &
+		    bss_desc->bcn_ht_oper->ht_param &
 		    IEEE80211_HT_PARAM_CHAN_WIDTH_ANY)
 			SET_SECONDARYCHAN(chan_list->chan_scan_param[0].
 					  radio_type,
-					  (bss_desc->bcn_ht_info->ht_param &
+					  (bss_desc->bcn_ht_oper->ht_param &
 					  IEEE80211_HT_PARAM_CHA_SEC_OFFSET));
 
 		*buffer += sizeof(struct mwifiex_ie_types_chan_list_param_set);
--- a/drivers/net/wireless/mwifiex/scan.c	2012-03-15 19:37:43.000000000 +0100
+++ b/drivers/net/wireless/mwifiex/scan.c	2012-03-15 19:44:16.000000000 +0100
@@ -1221,9 +1221,9 @@ mwifiex_update_bss_desc_with_ie(struct m
 					sizeof(struct ieee_types_header) -
 					bss_entry->beacon_buf);
 			break;
-		case WLAN_EID_HT_INFORMATION:
-			bss_entry->bcn_ht_info = (struct ieee80211_ht_info *)
-					(current_ptr +
+		case WLAN_EID_HT_OPERATION:
+			bss_entry->bcn_ht_oper =
+				(struct ieee80211_ht_operation *)(current_ptr +
 					sizeof(struct ieee_types_header));
 			bss_entry->ht_info_offset = (u16) (current_ptr +
 					sizeof(struct ieee_types_header) -
@@ -1493,7 +1493,7 @@ mwifiex_update_curr_bss_params(struct mw
 	priv->curr_bss_params.bss_descriptor.bcn_ht_cap = NULL;
 	priv->curr_bss_params.bss_descriptor.ht_cap_offset =
 		0;
-	priv->curr_bss_params.bss_descriptor.bcn_ht_info = NULL;
+	priv->curr_bss_params.bss_descriptor.bcn_ht_oper = NULL;
 	priv->curr_bss_params.bss_descriptor.ht_info_offset =
 		0;
 	priv->curr_bss_params.bss_descriptor.bcn_bss_co_2040 =
@@ -2019,8 +2019,8 @@ mwifiex_save_curr_bcn(struct mwifiex_pri
 			(curr_bss->beacon_buf +
 			 curr_bss->ht_cap_offset);
 
-	if (curr_bss->bcn_ht_info)
-		curr_bss->bcn_ht_info = (struct ieee80211_ht_info *)
+	if (curr_bss->bcn_ht_oper)
+		curr_bss->bcn_ht_oper = (struct ieee80211_ht_operation *)
 			(curr_bss->beacon_buf +
 			 curr_bss->ht_info_offset);
 
--- a/drivers/net/wireless/wl12xx/main.c	2012-03-15 19:37:44.000000000 +0100
+++ b/drivers/net/wireless/wl12xx/main.c	2012-03-15 19:43:13.000000000 +0100
@@ -232,7 +232,7 @@ static struct conf_drv_settings default_
 				.rule        = CONF_BCN_RULE_PASS_ON_APPEARANCE,
 			},
 			[1] = {
-				.ie          = WLAN_EID_HT_INFORMATION,
+				.ie          = WLAN_EID_HT_OPERATION,
 				.rule        = CONF_BCN_RULE_PASS_ON_CHANGE,
 			},
 		},
--- a/include/linux/ieee80211.h	2012-03-15 19:37:43.000000000 +0100
+++ b/include/linux/ieee80211.h	2012-03-15 19:43:13.000000000 +0100
@@ -1007,13 +1007,13 @@ enum ieee80211_min_mpdu_spacing {
 };
 
 /**
- * struct ieee80211_ht_info - HT information
+ * struct ieee80211_ht_operation - HT operation IE
  *
- * This structure is the "HT information element" as
- * described in 802.11n D5.0 7.3.2.58
+ * This structure is the "HT operation element" as
+ * described in 802.11n-2009 7.3.2.57
  */
-struct ieee80211_ht_info {
-	u8 control_chan;
+struct ieee80211_ht_operation {
+	u8 primary_chan;
 	u8 ht_param;
 	__le16 operation_mode;
 	__le16 stbc_param;
@@ -1027,8 +1027,6 @@ struct ieee80211_ht_info {
 #define		IEEE80211_HT_PARAM_CHA_SEC_BELOW	0x03
 #define IEEE80211_HT_PARAM_CHAN_WIDTH_ANY		0x04
 #define IEEE80211_HT_PARAM_RIFS_MODE			0x08
-#define IEEE80211_HT_PARAM_SPSMP_SUPPORT		0x10
-#define IEEE80211_HT_PARAM_SERV_INTERVAL_GRAN		0xE0
 
 /* for operation_mode */
 #define IEEE80211_HT_OP_MODE_PROTECTION			0x0003
@@ -1301,7 +1299,7 @@ enum ieee80211_eid {
 	WLAN_EID_EXT_SUPP_RATES = 50,
 
 	WLAN_EID_HT_CAPABILITY = 45,
-	WLAN_EID_HT_INFORMATION = 61,
+	WLAN_EID_HT_OPERATION = 61,
 
 	WLAN_EID_RSN = 48,
 	WLAN_EID_MMIE = 76,
--- a/net/mac80211/mlme.c	2012-03-15 19:37:43.000000000 +0100
+++ b/net/mac80211/mlme.c	2012-03-15 19:43:34.000000000 +0100
@@ -177,7 +177,7 @@ static int ecw2cw(int ecw)
  * HT abilities for a specific band.
  */
 static u32 ieee80211_enable_ht(struct ieee80211_sub_if_data *sdata,
-			       struct ieee80211_ht_info *hti,
+			       struct ieee80211_ht_operation *ht_oper,
 			       const u8 *bssid, u16 ap_ht_cap_flags,
 			       bool beacon_htcap_ie)
 {
@@ -185,7 +185,7 @@ static u32 ieee80211_enable_ht(struct ie
 	struct ieee80211_supported_band *sband;
 	struct sta_info *sta;
 	u32 changed = 0;
-	int hti_cfreq;
+	int ht_cfreq;
 	u16 ht_opmode;
 	bool enable_ht = true;
 	enum nl80211_channel_type prev_chantype;
@@ -196,10 +196,10 @@ static u32 ieee80211_enable_ht(struct ie
 	prev_chantype = sdata->vif.bss_conf.channel_type;
 
 
-	hti_cfreq = ieee80211_channel_to_frequency(hti->control_chan,
-						   sband->band);
+	ht_cfreq = ieee80211_channel_to_frequency(ht_oper->primary_chan,
+						  sband->band);
 	/* check that channel matches the right operating channel */
-	if (local->hw.conf.channel->center_freq != hti_cfreq) {
+	if (local->hw.conf.channel->center_freq != ht_cfreq) {
 		/* Some APs mess this up, evidently.
 		 * Netgear WNDR3700 sometimes reports 4 higher than
 		 * the actual channel, for instance.
@@ -207,11 +207,11 @@ static u32 ieee80211_enable_ht(struct ie
 		printk(KERN_DEBUG
 		       "%s: Wrong control channel in association"
 		       " response: configured center-freq: %d"
-		       " hti-cfreq: %d  hti->control_chan: %d"
+		       " ht-cfreq: %d  ht->control_chan: %d"
 		       " band: %d.  Disabling HT.\n",
 		       sdata->name,
 		       local->hw.conf.channel->center_freq,
-		       hti_cfreq, hti->control_chan,
+		       ht_cfreq, ht_oper->primary_chan,
 		       sband->band);
 		enable_ht = false;
 	}
@@ -222,8 +222,9 @@ static u32 ieee80211_enable_ht(struct ie
 		if (!(ap_ht_cap_flags & IEEE80211_HT_CAP_40MHZ_INTOLERANT) &&
 		    !ieee80111_cfg_override_disables_ht40(sdata) &&
 		    (sband->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) &&
-		    (hti->ht_param & IEEE80211_HT_PARAM_CHAN_WIDTH_ANY)) {
-			switch(hti->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
+		    (ht_oper->ht_param & IEEE80211_HT_PARAM_CHAN_WIDTH_ANY)) {
+			switch (ht_oper->ht_param &
+					IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
 			case IEEE80211_HT_PARAM_CHA_SEC_ABOVE:
 				rx_channel_type = NL80211_CHAN_HT40PLUS;
 				break;
@@ -278,7 +279,7 @@ static u32 ieee80211_enable_ht(struct ie
 				IEEE80211_QUEUE_STOP_REASON_CHTYPE_CHANGE);
 	}
 
-	ht_opmode = le16_to_cpu(hti->operation_mode);
+	ht_opmode = le16_to_cpu(ht_oper->operation_mode);
 
 	/* if bss configuration changed store the new one */
 	if (sdata->ht_opmode_valid != enable_ht ||
@@ -316,12 +317,12 @@ static int ieee80211_compatible_rates(co
 }
 
 static void ieee80211_add_ht_ie(struct ieee80211_sub_if_data *sdata,
-				struct sk_buff *skb, const u8 *ht_info_ie,
+				struct sk_buff *skb, const u8 *ht_oper_ie,
 				struct ieee80211_supported_band *sband,
 				struct ieee80211_channel *channel,
 				enum ieee80211_smps_mode smps)
 {
-	struct ieee80211_ht_info *ht_info;
+	struct ieee80211_ht_operation *ht_oper;
 	u8 *pos;
 	u32 flags = channel->flags;
 	u16 cap;
@@ -329,21 +330,21 @@ static void ieee80211_add_ht_ie(struct i
 
 	BUILD_BUG_ON(sizeof(ht_cap) != sizeof(sband->ht_cap));
 
-	if (!ht_info_ie)
+	if (!ht_oper_ie)
 		return;
 
-	if (ht_info_ie[1] < sizeof(struct ieee80211_ht_info))
+	if (ht_oper_ie[1] < sizeof(struct ieee80211_ht_operation))
 		return;
 
 	memcpy(&ht_cap, &sband->ht_cap, sizeof(ht_cap));
 	ieee80211_apply_htcap_overrides(sdata, &ht_cap);
 
-	ht_info = (struct ieee80211_ht_info *)(ht_info_ie + 2);
+	ht_oper = (struct ieee80211_ht_operation *)(ht_oper_ie + 2);
 
 	/* determine capability flags */
 	cap = ht_cap.cap;
 
-	switch (ht_info->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
+	switch (ht_oper->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
 	case IEEE80211_HT_PARAM_CHA_SEC_ABOVE:
 		if (flags & IEEE80211_CHAN_NO_HT40PLUS) {
 			cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
@@ -557,7 +558,7 @@ static void ieee80211_send_assoc(struct
 	}
 
 	if (!(ifmgd->flags & IEEE80211_STA_DISABLE_11N))
-		ieee80211_add_ht_ie(sdata, skb, assoc_data->ht_information_ie,
+		ieee80211_add_ht_ie(sdata, skb, assoc_data->ht_operation_ie,
 				    sband, local->oper_channel, ifmgd->ap_smps);
 
 	/* if present, add any custom non-vendor IEs that go after HT */
@@ -2092,9 +2093,9 @@ static bool ieee80211_assoc_success(stru
 		ieee80211_set_wmm_default(sdata, false);
 	changed |= BSS_CHANGED_QOS;
 
-	if (elems.ht_info_elem && elems.wmm_param &&
+	if (elems.ht_operation && elems.wmm_param &&
 	    !(ifmgd->flags & IEEE80211_STA_DISABLE_11N))
-		changed |= ieee80211_enable_ht(sdata, elems.ht_info_elem,
+		changed |= ieee80211_enable_ht(sdata, elems.ht_operation,
 					       cbss->bssid, ap_ht_cap_flags,
 					       false);
 
@@ -2319,7 +2320,7 @@ static const u64 care_about_ies =
 	(1ULL << WLAN_EID_CHANNEL_SWITCH) |
 	(1ULL << WLAN_EID_PWR_CONSTRAINT) |
 	(1ULL << WLAN_EID_HT_CAPABILITY) |
-	(1ULL << WLAN_EID_HT_INFORMATION);
+	(1ULL << WLAN_EID_HT_OPERATION);
 
 static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata,
 				     struct ieee80211_mgmt *mgmt,
@@ -2504,7 +2505,7 @@ static void ieee80211_rx_mgmt_beacon(str
 			erp_valid, erp_value);
 
 
-	if (elems.ht_cap_elem && elems.ht_info_elem && elems.wmm_param &&
+	if (elems.ht_cap_elem && elems.ht_operation && elems.wmm_param &&
 	    !(ifmgd->flags & IEEE80211_STA_DISABLE_11N)) {
 		struct sta_info *sta;
 		struct ieee80211_supported_band *sband;
@@ -2527,7 +2528,7 @@ static void ieee80211_rx_mgmt_beacon(str
 
 		rcu_read_unlock();
 
-		changed |= ieee80211_enable_ht(sdata, elems.ht_info_elem,
+		changed |= ieee80211_enable_ht(sdata, elems.ht_operation,
 					       bssid, ap_ht_cap_flags, true);
 	}
 
@@ -3335,8 +3336,8 @@ int ieee80211_mgd_assoc(struct ieee80211
 	assoc_data->wmm = bss->wmm_used && (local->hw.queues >= 4);
 	assoc_data->supp_rates = bss->supp_rates;
 	assoc_data->supp_rates_len = bss->supp_rates_len;
-	assoc_data->ht_information_ie =
-		ieee80211_bss_get_ie(req->bss, WLAN_EID_HT_INFORMATION);
+	assoc_data->ht_operation_ie =
+		ieee80211_bss_get_ie(req->bss, WLAN_EID_HT_OPERATION);
 
 	if (bss->wmm_used && bss->uapsd_supported &&
 	    (sdata->local->hw.flags & IEEE80211_HW_SUPPORTS_UAPSD)) {
--- a/net/mac80211/util.c	2012-03-15 19:37:43.000000000 +0100
+++ b/net/mac80211/util.c	2012-03-15 19:43:13.000000000 +0100
@@ -684,9 +684,9 @@ u32 ieee802_11_parse_elems_crc(u8 *start
 			else
 				elem_parse_failed = true;
 			break;
-		case WLAN_EID_HT_INFORMATION:
-			if (elen >= sizeof(struct ieee80211_ht_info))
-				elems->ht_info_elem = (void *)pos;
+		case WLAN_EID_HT_OPERATION:
+			if (elen >= sizeof(struct ieee80211_ht_operation))
+				elems->ht_operation = (void *)pos;
 			else
 				elem_parse_failed = true;
 			break;
@@ -1611,57 +1611,56 @@ u8 *ieee80211_ie_build_ht_cap(u8 *pos, s
 	return pos;
 }
 
-u8 *ieee80211_ie_build_ht_info(u8 *pos,
-			       struct ieee80211_sta_ht_cap *ht_cap,
+u8 *ieee80211_ie_build_ht_oper(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap,
 			       struct ieee80211_channel *channel,
 			       enum nl80211_channel_type channel_type)
 {
-	struct ieee80211_ht_info *ht_info;
+	struct ieee80211_ht_operation *ht_oper;
 	/* Build HT Information */
-	*pos++ = WLAN_EID_HT_INFORMATION;
-	*pos++ = sizeof(struct ieee80211_ht_info);
-	ht_info = (struct ieee80211_ht_info *)pos;
-	ht_info->control_chan =
+	*pos++ = WLAN_EID_HT_OPERATION;
+	*pos++ = sizeof(struct ieee80211_ht_operation);
+	ht_oper = (struct ieee80211_ht_operation *)pos;
+	ht_oper->primary_chan =
 			ieee80211_frequency_to_channel(channel->center_freq);
 	switch (channel_type) {
 	case NL80211_CHAN_HT40MINUS:
-		ht_info->ht_param = IEEE80211_HT_PARAM_CHA_SEC_BELOW;
+		ht_oper->ht_param = IEEE80211_HT_PARAM_CHA_SEC_BELOW;
 		break;
 	case NL80211_CHAN_HT40PLUS:
-		ht_info->ht_param = IEEE80211_HT_PARAM_CHA_SEC_ABOVE;
+		ht_oper->ht_param = IEEE80211_HT_PARAM_CHA_SEC_ABOVE;
 		break;
 	case NL80211_CHAN_HT20:
 	default:
-		ht_info->ht_param = IEEE80211_HT_PARAM_CHA_SEC_NONE;
+		ht_oper->ht_param = IEEE80211_HT_PARAM_CHA_SEC_NONE;
 		break;
 	}
 	if (ht_cap->cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40)
-		ht_info->ht_param |= IEEE80211_HT_PARAM_CHAN_WIDTH_ANY;
+		ht_oper->ht_param |= IEEE80211_HT_PARAM_CHAN_WIDTH_ANY;
 
 	/*
 	 * Note: According to 802.11n-2009 9.13.3.1, HT Protection field and
 	 * RIFS Mode are reserved in IBSS mode, therefore keep them at 0
 	 */
-	ht_info->operation_mode = 0x0000;
-	ht_info->stbc_param = 0x0000;
+	ht_oper->operation_mode = 0x0000;
+	ht_oper->stbc_param = 0x0000;
 
 	/* It seems that Basic MCS set and Supported MCS set
 	   are identical for the first 10 bytes */
-	memset(&ht_info->basic_set, 0, 16);
-	memcpy(&ht_info->basic_set, &ht_cap->mcs, 10);
+	memset(&ht_oper->basic_set, 0, 16);
+	memcpy(&ht_oper->basic_set, &ht_cap->mcs, 10);
 
-	return pos + sizeof(struct ieee80211_ht_info);
+	return pos + sizeof(struct ieee80211_ht_operation);
 }
 
 enum nl80211_channel_type
-ieee80211_ht_info_to_channel_type(struct ieee80211_ht_info *ht_info)
+ieee80211_ht_oper_to_channel_type(struct ieee80211_ht_operation *ht_oper)
 {
 	enum nl80211_channel_type channel_type;
 
-	if (!ht_info)
+	if (!ht_oper)
 		return NL80211_CHAN_NO_HT;
 
-	switch (ht_info->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
+	switch (ht_oper->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
 	case IEEE80211_HT_PARAM_CHA_SEC_NONE:
 		channel_type = NL80211_CHAN_HT20;
 		break;
--- a/drivers/net/wireless/mwifiex/fw.h	2012-03-15 19:37:43.000000000 +0100
+++ b/drivers/net/wireless/mwifiex/fw.h	2012-03-15 19:43:13.000000000 +0100
@@ -1045,7 +1045,7 @@ struct mwifiex_ie_types_htcap {
 
 struct mwifiex_ie_types_htinfo {
 	struct mwifiex_ie_types_header header;
-	struct ieee80211_ht_info ht_info;
+	struct ieee80211_ht_operation ht_oper;
 } __packed;
 
 struct mwifiex_ie_types_2040bssco {
--- a/drivers/net/wireless/mwifiex/main.h	2012-03-15 19:37:43.000000000 +0100
+++ b/drivers/net/wireless/mwifiex/main.h	2012-03-15 19:43:13.000000000 +0100
@@ -269,7 +269,7 @@ struct mwifiex_bssdescriptor {
 	u8  disable_11n;
 	struct ieee80211_ht_cap *bcn_ht_cap;
 	u16 ht_cap_offset;
-	struct ieee80211_ht_info *bcn_ht_info;
+	struct ieee80211_ht_operation *bcn_ht_oper;
 	u16 ht_info_offset;
 	u8 *bcn_bss_co_2040;
 	u16 bss_co_2040_offset;
--- a/include/net/mac80211.h	2012-03-15 19:37:43.000000000 +0100
+++ b/include/net/mac80211.h	2012-03-15 19:43:13.000000000 +0100
@@ -242,7 +242,7 @@ enum ieee80211_rssi_event {
  * @channel_type: Channel type for this BSS -- the hardware might be
  *	configured for HT40+ while this BSS only uses no-HT, for
  *	example.
- * @ht_operation_mode: HT operation mode (like in &struct ieee80211_ht_info).
+ * @ht_operation_mode: HT operation mode like in &struct ieee80211_ht_operation.
  *	This field is only valid when the channel type is one of the HT types.
  * @cqm_rssi_thold: Connection quality monitor RSSI threshold, a zero value
  *	implies disabled
--- a/net/mac80211/ibss.c	2012-03-15 19:37:43.000000000 +0100
+++ b/net/mac80211/ibss.c	2012-03-15 19:43:13.000000000 +0100
@@ -160,13 +160,11 @@ static void __ieee80211_sta_join_ibss(st
 	if (channel_type && sband->ht_cap.ht_supported) {
 		pos = skb_put(skb, 4 +
 				   sizeof(struct ieee80211_ht_cap) +
-				   sizeof(struct ieee80211_ht_info));
+				   sizeof(struct ieee80211_ht_operation));
 		pos = ieee80211_ie_build_ht_cap(pos, &sband->ht_cap,
 						sband->ht_cap.cap);
-		pos = ieee80211_ie_build_ht_info(pos,
-						 &sband->ht_cap,
-						 chan,
-						 channel_type);
+		pos = ieee80211_ie_build_ht_oper(pos, &sband->ht_cap,
+						 chan, channel_type);
 	}
 
 	if (local->hw.queues >= 4) {
@@ -441,13 +439,13 @@ static void ieee80211_rx_bss_info(struct
 		if (sta && elems->wmm_info)
 			set_sta_flag(sta, WLAN_STA_WME);
 
-		if (sta && elems->ht_info_elem && elems->ht_cap_elem &&
+		if (sta && elems->ht_operation && elems->ht_cap_elem &&
 		    sdata->u.ibss.channel_type != NL80211_CHAN_NO_HT) {
 			/* we both use HT */
 			struct ieee80211_sta_ht_cap sta_ht_cap_new;
 			enum nl80211_channel_type channel_type =
-				ieee80211_ht_info_to_channel_type(
-							elems->ht_info_elem);
+				ieee80211_ht_oper_to_channel_type(
+							elems->ht_operation);
 
 			ieee80211_ht_cap_ie_to_sta_ht_cap(sdata, sband,
 							  elems->ht_cap_elem,
@@ -1063,7 +1061,7 @@ int ieee80211_ibss_join(struct ieee80211
 			    4 /* IBSS params */ +
 			    2 + (IEEE80211_MAX_SUPP_RATES - 8) +
 			    2 + sizeof(struct ieee80211_ht_cap) +
-			    2 + sizeof(struct ieee80211_ht_info) +
+			    2 + sizeof(struct ieee80211_ht_operation) +
 			    params->ie_len);
 	if (!skb)
 		return -ENOMEM;
--- a/net/mac80211/ieee80211_i.h	2012-03-15 19:37:43.000000000 +0100
+++ b/net/mac80211/ieee80211_i.h	2012-03-15 19:43:13.000000000 +0100
@@ -397,7 +397,7 @@ struct ieee80211_mgd_auth_data {
 struct ieee80211_mgd_assoc_data {
 	struct cfg80211_bss *bss;
 	const u8 *supp_rates;
-	const u8 *ht_information_ie;
+	const u8 *ht_operation_ie;
 
 	unsigned long timeout;
 	int tries;
@@ -1117,7 +1117,7 @@ struct ieee802_11_elems {
 	u8 *wmm_info;
 	u8 *wmm_param;
 	struct ieee80211_ht_cap *ht_cap_elem;
-	struct ieee80211_ht_info *ht_info_elem;
+	struct ieee80211_ht_operation *ht_operation;
 	struct ieee80211_meshconf_ie *mesh_config;
 	u8 *mesh_id;
 	u8 *peering;
@@ -1470,10 +1470,9 @@ size_t ieee80211_ie_split(const u8 *ies,
 size_t ieee80211_ie_split_vendor(const u8 *ies, size_t ielen, size_t offset);
 u8 *ieee80211_ie_build_ht_cap(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap,
 			      u16 cap);
-u8 *ieee80211_ie_build_ht_info(u8 *pos,
-				struct ieee80211_sta_ht_cap *ht_cap,
-				struct ieee80211_channel *channel,
-				enum nl80211_channel_type channel_type);
+u8 *ieee80211_ie_build_ht_oper(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap,
+			       struct ieee80211_channel *channel,
+			       enum nl80211_channel_type channel_type);
 
 /* internal work items */
 void ieee80211_work_init(struct ieee80211_local *local);
@@ -1501,7 +1500,7 @@ bool ieee80211_set_channel_type(struct i
 				struct ieee80211_sub_if_data *sdata,
 				enum nl80211_channel_type chantype);
 enum nl80211_channel_type
-ieee80211_ht_info_to_channel_type(struct ieee80211_ht_info *ht_info);
+ieee80211_ht_oper_to_channel_type(struct ieee80211_ht_operation *ht_oper);
 enum nl80211_channel_type ieee80211_get_tx_channel_type(
 					struct ieee80211_local *local,
 					enum nl80211_channel_type channel_type);
--- a/net/mac80211/mesh.c	2012-03-15 19:37:43.000000000 +0100
+++ b/net/mac80211/mesh.c	2012-03-15 19:43:13.000000000 +0100
@@ -98,9 +98,9 @@ bool mesh_matches_local(struct ieee802_1
 		goto mismatch;
 
 	/* disallow peering with mismatched channel types for now */
-	if (ie->ht_info_elem &&
+	if (ie->ht_operation &&
 	    (local->_oper_channel_type !=
-	     ieee80211_ht_info_to_channel_type(ie->ht_info_elem)))
+	     ieee80211_ht_oper_to_channel_type(ie->ht_operation)))
 		goto mismatch;
 
 	return true;
@@ -371,7 +371,7 @@ int mesh_add_ht_cap_ie(struct sk_buff *s
 	return 0;
 }
 
-int mesh_add_ht_info_ie(struct sk_buff *skb,
+int mesh_add_ht_oper_ie(struct sk_buff *skb,
 			struct ieee80211_sub_if_data *sdata)
 {
 	struct ieee80211_local *local = sdata->local;
@@ -385,11 +385,11 @@ int mesh_add_ht_info_ie(struct sk_buff *
 	if (!ht_cap->ht_supported || channel_type == NL80211_CHAN_NO_HT)
 		return 0;
 
-	if (skb_tailroom(skb) < 2 + sizeof(struct ieee80211_ht_info))
+	if (skb_tailroom(skb) < 2 + sizeof(struct ieee80211_ht_operation))
 		return -ENOMEM;
 
-	pos = skb_put(skb, 2 + sizeof(struct ieee80211_ht_info));
-	ieee80211_ie_build_ht_info(pos, ht_cap, channel, channel_type);
+	pos = skb_put(skb, 2 + sizeof(struct ieee80211_ht_operation));
+	ieee80211_ie_build_ht_oper(pos, ht_cap, channel, channel_type);
 
 	return 0;
 }
--- a/net/mac80211/mesh_plink.c	2012-03-15 19:37:43.000000000 +0100
+++ b/net/mac80211/mesh_plink.c	2012-03-15 19:43:13.000000000 +0100
@@ -187,7 +187,7 @@ static int mesh_plink_frame_tx(struct ie
 			    2 + sdata->u.mesh.mesh_id_len +
 			    2 + sizeof(struct ieee80211_meshconf_ie) +
 			    2 + sizeof(struct ieee80211_ht_cap) +
-			    2 + sizeof(struct ieee80211_ht_info) +
+			    2 + sizeof(struct ieee80211_ht_operation) +
 			    2 + 8 + /* peering IE */
 			    sdata->u.mesh.ie_len);
 	if (!skb)
@@ -263,7 +263,7 @@ static int mesh_plink_frame_tx(struct ie
 
 	if (action != WLAN_SP_MESH_PEERING_CLOSE) {
 		if (mesh_add_ht_cap_ie(skb, sdata) ||
-		    mesh_add_ht_info_ie(skb, sdata))
+		    mesh_add_ht_oper_ie(skb, sdata))
 			return -1;
 	}
 
--- a/net/mac80211/tx.c	2012-03-15 19:37:43.000000000 +0100
+++ b/net/mac80211/tx.c	2012-03-15 19:43:13.000000000 +0100
@@ -2390,7 +2390,7 @@ struct sk_buff *ieee80211_beacon_get_tim
 				    2 + 3 + /* DS params */
 				    2 + (IEEE80211_MAX_SUPP_RATES - 8) +
 				    2 + sizeof(struct ieee80211_ht_cap) +
-				    2 + sizeof(struct ieee80211_ht_info) +
+				    2 + sizeof(struct ieee80211_ht_operation) +
 				    2 + sdata->u.mesh.mesh_id_len +
 				    2 + sizeof(struct ieee80211_meshconf_ie) +
 				    sdata->u.mesh.ie_len);
@@ -2419,7 +2419,7 @@ struct sk_buff *ieee80211_beacon_get_tim
 		    ieee80211_add_ext_srates_ie(&sdata->vif, skb) ||
 		    mesh_add_rsn_ie(skb, sdata) ||
 		    mesh_add_ht_cap_ie(skb, sdata) ||
-		    mesh_add_ht_info_ie(skb, sdata) ||
+		    mesh_add_ht_oper_ie(skb, sdata) ||
 		    mesh_add_meshid_ie(skb, sdata) ||
 		    mesh_add_meshconf_ie(skb, sdata) ||
 		    mesh_add_vendor_ies(skb, sdata)) {
--- a/net/mac80211/mesh.h	2012-03-15 19:37:43.000000000 +0100
+++ b/net/mac80211/mesh.h	2012-03-15 19:43:13.000000000 +0100
@@ -220,7 +220,7 @@ int mesh_add_ds_params_ie(struct sk_buff
 			  struct ieee80211_sub_if_data *sdata);
 int mesh_add_ht_cap_ie(struct sk_buff *skb,
 		       struct ieee80211_sub_if_data *sdata);
-int mesh_add_ht_info_ie(struct sk_buff *skb,
+int mesh_add_ht_oper_ie(struct sk_buff *skb,
 			struct ieee80211_sub_if_data *sdata);
 void mesh_rmc_free(struct ieee80211_sub_if_data *sdata);
 int mesh_rmc_init(struct ieee80211_sub_if_data *sdata);
--- a/drivers/net/wireless/mwifiex/join.c	2012-03-15 19:37:44.000000000 +0100
+++ b/drivers/net/wireless/mwifiex/join.c	2012-03-15 19:43:13.000000000 +0100
@@ -932,20 +932,20 @@ mwifiex_cmd_802_11_ad_hoc_start(struct m
 		/* Fill HT INFORMATION */
 		ht_info = (struct mwifiex_ie_types_htinfo *) pos;
 		memset(ht_info, 0, sizeof(struct mwifiex_ie_types_htinfo));
-		ht_info->header.type = cpu_to_le16(WLAN_EID_HT_INFORMATION);
+		ht_info->header.type = cpu_to_le16(WLAN_EID_HT_OPERATION);
 		ht_info->header.len =
-				cpu_to_le16(sizeof(struct ieee80211_ht_info));
+			cpu_to_le16(sizeof(struct ieee80211_ht_operation));
 
-		ht_info->ht_info.control_chan =
+		ht_info->ht_oper.primary_chan =
 			(u8) priv->curr_bss_params.bss_descriptor.channel;
 		if (adapter->sec_chan_offset) {
-			ht_info->ht_info.ht_param = adapter->sec_chan_offset;
-			ht_info->ht_info.ht_param |=
+			ht_info->ht_oper.ht_param = adapter->sec_chan_offset;
+			ht_info->ht_oper.ht_param |=
 					IEEE80211_HT_PARAM_CHAN_WIDTH_ANY;
 		}
-		ht_info->ht_info.operation_mode =
+		ht_info->ht_oper.operation_mode =
 		     cpu_to_le16(IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT);
-		ht_info->ht_info.basic_set[0] = 0xff;
+		ht_info->ht_oper.basic_set[0] = 0xff;
 		pos += sizeof(struct mwifiex_ie_types_htinfo);
 		cmd_append_size +=
 				sizeof(struct mwifiex_ie_types_htinfo);



^ permalink raw reply	[flat|nested] 8+ messages in thread

* RE: [PATCH v3] wireless: rename ht_info to ht_operation
  2012-03-15 18:45   ` [PATCH v3] " Johannes Berg
@ 2012-03-15 19:04     ` Bing Zhao
  0 siblings, 0 replies; 8+ messages in thread
From: Bing Zhao @ 2012-03-15 19:04 UTC (permalink / raw)
  To: Johannes Berg, John Linville; +Cc: linux-wireless

SGkgSm9oYW5uZXMsDQoNCj4gRnJvbTogSm9oYW5uZXMgQmVyZyA8am9oYW5uZXMuYmVyZ0BpbnRl
bC5jb20+DQo+IA0KPiBTaW5jZSBzb21lIG9mIHRoZSBIVCBjb2RlIHByZS1kYXRlcyA4MDIuMTFu
LTIwMDkNCj4gc29tZSBuYW1lcyBhcmUgd3JvbmcuIFRoZSBvbmUgdGhhdCBib3RoZXJzIG1lIG1v
c3QNCj4gaXMgdGhhdCAiSFQgb3BlcmF0aW9uIiBpcyBjYWxsZWQgIkhUIGluZm9ybWF0aW9uIg0K
PiBpbiBvdXIgY29kZSBhbmQgdGhhdCBjYXVzZXMgY29uZnVzaW9uLg0KPiANCj4gUmVuYW1lICJI
VCBpbmZvcm1hdGlvbiIgdG8gIkhUIG9wZXJhdGlvbiIgYW5kIGFsc28NCj4gdGhlIGNvbnRyb2xf
Y2hhbiBmaWVsZCB0byBwcmltYXJ5X2NoYW4gdG8gbWF0Y2gNCj4gdGhlIG5hbWUgdXNlZCBpbiB0
aGUgc3BlYy4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzLmJl
cmdAaW50ZWwuY29tPg0KDQpGb3IgbXdpZmlleCBwYXJ0LA0KQWNrZWQtYnk6IEJpbmcgWmhhbyA8
YnpoYW9AbWFydmVsbC5jb20+DQoNClRoYW5rcywNCkJpbmcNCg0KPiAtLS0NCj4gdjI6IGZpeCBw
YXRjaCBmb3IgbmV3IG13aWZpZXggY2hhbmdlcw0KPiB2MzogZml4IGNoZWNrcGF0Y2gNCg0K

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2012-03-15 19:10 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-03-15 10:21 [PATCH] wireless: rename ht_info to ht_operation Johannes Berg
2012-03-15 14:50 ` [PATCH v2] " Johannes Berg
2012-03-15 18:00   ` Bing Zhao
2012-03-15 18:19     ` Johannes Berg
2012-03-15 18:31       ` Johannes Berg
2012-03-15 18:38         ` Bing Zhao
2012-03-15 18:45   ` [PATCH v3] " Johannes Berg
2012-03-15 19:04     ` Bing Zhao

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).