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

Commit 98f7dfd8 authored by Emmanuel Grumbach's avatar Emmanuel Grumbach Committed by John W. Linville
Browse files

mac80211: pass dtim_period to low level driver



This patch adds the dtim_period in ieee80211_bss_conf, this allows the low
level driver to know the dtim_period, and to plan power save accordingly.

Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: default avatarTomas Winkler <tomas.winkler@intel.com>
Signed-off-by: default avatarZhu Yi <yi.zhu@intel.com>
Acked-by: default avatarJohannes Berg <johannes@sipsolutions.net>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 298df1f6
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -506,6 +506,19 @@ struct ieee80211_channel_sw_ie {
	u8 count;
} __attribute__ ((packed));

/**
 * struct ieee80211_tim
 *
 * This structure refers to "Traffic Indication Map information element"
 */
struct ieee80211_tim_ie {
	u8 dtim_count;
	u8 dtim_period;
	u8 bitmap_ctrl;
	/* variable size: 1 - 251 bytes */
	u8 virtual_map[0];
} __attribute__ ((packed));

struct ieee80211_mgmt {
	__le16 frame_control;
	__le16 duration;
+3 −1
Original line number Diff line number Diff line
@@ -177,9 +177,10 @@ enum ieee80211_bss_change {
 * @aid: association ID number, valid only when @assoc is true
 * @use_cts_prot: use CTS protection
 * @use_short_preamble: use 802.11b short preamble
 * @dtim_period: num of beacons before the next DTIM, for PSM
 * @timestamp: beacon timestamp
 * @beacon_int: beacon interval
 * @assoc_capability: capabbilities taken from assoc resp
 * @assoc_capability: capabilities taken from assoc resp
 * @assoc_ht: association in HT mode
 * @ht_conf: ht capabilities
 * @ht_bss_conf: ht extended capabilities
@@ -191,6 +192,7 @@ struct ieee80211_bss_conf {
	/* erp related data */
	bool use_cts_prot;
	bool use_short_preamble;
	u8 dtim_period;
	u16 beacon_int;
	u16 assoc_capability;
	u64 timestamp;
+1 −0
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ struct ieee80211_sta_bss {

	u8 bssid[ETH_ALEN];
	u8 ssid[IEEE80211_MAX_SSID_LEN];
	u8 dtim_period;
	u16 capability; /* host byte order */
	enum ieee80211_band band;
	int freq;
+11 −0
Original line number Diff line number Diff line
@@ -551,6 +551,7 @@ static void ieee80211_set_associated(struct net_device *dev,
			/* set timing information */
			sdata->bss_conf.beacon_int = bss->beacon_int;
			sdata->bss_conf.timestamp = bss->timestamp;
			sdata->bss_conf.dtim_period = bss->dtim_period;

			changed |= ieee80211_handle_bss_capability(sdata, bss);

@@ -2688,6 +2689,16 @@ static void ieee80211_rx_bss_info(struct net_device *dev,
	bss->beacon_int = le16_to_cpu(mgmt->u.beacon.beacon_int);
	bss->capability = le16_to_cpu(mgmt->u.beacon.capab_info);

	if (elems->tim) {
		struct ieee80211_tim_ie *tim_ie =
			(struct ieee80211_tim_ie *)elems->tim;
		bss->dtim_period = tim_ie->dtim_period;
	}

	/* set default value for buggy APs */
	if (!elems->tim || bss->dtim_period == 0)
		bss->dtim_period = 1;

	bss->supp_rates_len = 0;
	if (elems->supp_rates) {
		clen = IEEE80211_MAX_SUPP_RATES - bss->supp_rates_len;