All of lore.kernel.org
 help / color / mirror / Atom feed
* [ath9k-devel] [RFC/RFT 1/2] ath10k: WMI add AP PS
@ 2013-04-30 11:46 Janusz Dziedzic
  2013-04-30 11:46 ` [ath9k-devel] [RFC/RFT 2/2] ath10k: add AP UAPSD support Janusz Dziedzic
  2013-05-02  7:16 ` [ath9k-devel] [RFC/RFT 1/2] ath10k: WMI add AP PS Kalle Valo
  0 siblings, 2 replies; 4+ messages in thread
From: Janusz Dziedzic @ 2013-04-30 11:46 UTC (permalink / raw)
  To: ath9k-devel

Add AP power save (UAPSD) structures, enums.

Signed-off-by: Janusz Dziedzic <janusz.dziedzic@tieto.com>
---
 drivers/net/wireless/ath/ath10k/wmi.c |   26 +++++++++++++
 drivers/net/wireless/ath/ath10k/wmi.h |   67 +++++++++++++++++++++++++++++++++
 2 files changed, 93 insertions(+)

diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c
index 5272f18..453138b 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.c
+++ b/drivers/net/wireless/ath/ath10k/wmi.c
@@ -1850,6 +1850,32 @@ int ath10k_wmi_set_sta_ps_param(struct ath10k *ar, u32 vdev_id,
 	return ath10k_wmi_cmd_send(ar, skb, WMI_STA_POWERSAVE_PARAM_CMDID);
 }
 
+int ath10k_wmi_set_ap_ps_param(struct ath10k *ar, u32 vdev_id, const u8 *mac,
+			       enum wmi_ap_ps_peer_param param_id, u32 value)
+{
+	struct wmi_ap_ps_peer_cmd *cmd;
+	struct sk_buff *skb;
+
+	if (!mac)
+		return -EINVAL;
+
+	skb = ath10k_wmi_alloc_skb(sizeof(*cmd));
+	if (!skb)
+		return -ENOMEM;
+
+	cmd = (struct wmi_ap_ps_peer_cmd *) skb->data;
+	cmd->vdev_id     = __cpu_to_le32(vdev_id);
+	cmd->param_id    = __cpu_to_le32(param_id);
+	cmd->param_value = __cpu_to_le32(value);
+	memcpy(&cmd->peer_macaddr, mac, ETH_ALEN);
+
+	ath10k_dbg(ATH10K_DBG_WMI,
+		   "wmi ap ps param vdev_id 0x%X param %d value %d "
+		   "mac_addr %pM\n", vdev_id, param_id, value, mac);
+
+	return ath10k_wmi_cmd_send(ar, skb, WMI_AP_PS_PEER_PARAM_CMDID);
+}
+
 int ath10k_wmi_scan_chan_list(struct ath10k *ar,
 			      const struct wmi_scan_chan_list_arg *arg)
 {
diff --git a/drivers/net/wireless/ath/ath10k/wmi.h b/drivers/net/wireless/ath/ath10k/wmi.h
index 9946a51..b9f5b62 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.h
+++ b/drivers/net/wireless/ath/ath10k/wmi.h
@@ -2397,6 +2397,71 @@ struct wmi_sta_mimo_ps_mode_cmd {
 	__le32 mimo_pwrsave_mode;
 } __packed;
 
+
+/* U-APSD configuration of peer station from (re)assoc request and TSPECs */
+enum wmi_ap_ps_param_uapsd {
+	WMI_AP_PS_UAPSD_AC0_DELIVERY_EN = (1 << 0),
+	WMI_AP_PS_UAPSD_AC0_TRIGGER_EN  = (1 << 1),
+	WMI_AP_PS_UAPSD_AC1_DELIVERY_EN = (1 << 2),
+	WMI_AP_PS_UAPSD_AC1_TRIGGER_EN  = (1 << 3),
+	WMI_AP_PS_UAPSD_AC2_DELIVERY_EN = (1 << 4),
+	WMI_AP_PS_UAPSD_AC2_TRIGGER_EN  = (1 << 5),
+	WMI_AP_PS_UAPSD_AC3_DELIVERY_EN = (1 << 6),
+	WMI_AP_PS_UAPSD_AC3_TRIGGER_EN  = (1 << 7),
+};
+
+/* U-APSD maximum service period of peer station */
+enum wmi_ap_ps_peer_param_max_sp {
+	WMI_AP_PS_PEER_PARAM_MAX_SP_UNLIMITED = 0,
+	WMI_AP_PS_PEER_PARAM_MAX_SP_2 = 1,
+	WMI_AP_PS_PEER_PARAM_MAX_SP_4 = 2,
+	WMI_AP_PS_PEER_PARAM_MAX_SP_6 = 3,
+	/* keep last! */
+	MAX_WMI_AP_PS_PEER_PARAM_MAX_SP,
+};
+
+/*
+ * AP power save parameter
+ * Set a power save specific parameter for a peer station
+ */
+enum wmi_ap_ps_peer_param {
+	/* Set uapsd configuration for a given peer.
+	 *
+	 * This will include the delivery and trigger enabled state for every AC.
+	 * The host  MLME needs to set this based on AP capability and stations
+	 * request Set in the association request  received from the station.
+	 *
+	 * Lower 8 bits of the value specify the UAPSD configuration.
+	 *
+	 * (see enum wmi_ap_ps_param_uapsd)
+	 * The default value is 0.
+	 */
+	WMI_AP_PS_PEER_PARAM_UAPSD = 0,
+
+	/**
+	 * Set the service period for a UAPSD capable station
+	 *
+	 * The service period from wme ie in the (re)assoc request frame.
+	 *
+	 * (see enum wmi_ap_ps_peer_param_max_sp)
+	 */
+	WMI_AP_PS_PEER_PARAM_MAX_SP = 1,
+
+	/** Time in seconds for aging out buffered frames for STA in power save */
+	WMI_AP_PS_PEER_PARAM_AGEOUT_TIME = 2,
+};
+
+struct wmi_ap_ps_peer_cmd {
+	/** unique id identifying the VDEV, generated by the caller */
+	__le32 vdev_id;
+	/** peer MAC address */
+	struct wmi_mac_addr peer_macaddr;
+	/** AP powersave param (see enum wmi_ap_ps_peer_param) */
+	__le32 param_id;
+	/** AP powersave param value */
+	__le32 param_value;
+} __packed;
+
 /* 128 clients = 4 words */
 #define WMI_TIM_BITMAP_ARRAY_SIZE 4
 
@@ -2836,6 +2901,8 @@ int ath10k_wmi_set_psmode(struct ath10k *ar, u32 vdev_id,
 int ath10k_wmi_set_sta_ps_param(struct ath10k *ar, u32 vdev_id,
 				enum wmi_sta_powersave_param param_id,
 				u32 value);
+int ath10k_wmi_set_ap_ps_param(struct ath10k *ar, u32 vdev_id, const u8 *mac,
+			       enum wmi_ap_ps_peer_param param_id, u32 value);
 int ath10k_wmi_scan_chan_list(struct ath10k *ar,
 			      const struct wmi_scan_chan_list_arg *arg);
 int ath10k_wmi_beacon_send(struct ath10k *ar, const struct wmi_bcn_tx_arg *arg);
-- 
1.7.9.5

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

* [ath9k-devel] [RFC/RFT 2/2] ath10k: add AP UAPSD support
  2013-04-30 11:46 [ath9k-devel] [RFC/RFT 1/2] ath10k: WMI add AP PS Janusz Dziedzic
@ 2013-04-30 11:46 ` Janusz Dziedzic
  2013-05-02  7:17   ` Kalle Valo
  2013-05-02  7:16 ` [ath9k-devel] [RFC/RFT 1/2] ath10k: WMI add AP PS Kalle Valo
  1 sibling, 1 reply; 4+ messages in thread
From: Janusz Dziedzic @ 2013-04-30 11:46 UTC (permalink / raw)
  To: ath9k-devel

Add support for AP (P2P_GO) UAPSD.

Signed-off-by: Janusz Dziedzic <janusz.dziedzic@tieto.com>
---
 drivers/net/wireless/ath/ath10k/mac.c |   43 ++++++++++++++++++++++++++++++++-
 1 file changed, 42 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index 5b433ee..94ac7b8 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -873,7 +873,7 @@ static void ath10k_peer_assoc_h_ht(struct ath10k *ar,
 }
 
 /*
- * FIXME: Handle UAPSD later.
+ * FIXME: Handle STA UAPSD later.
  */
 static void ath10k_peer_assoc_h_qos(struct ath10k *ar,
 				    struct ath10k_vif *arvif,
@@ -881,9 +881,49 @@ static void ath10k_peer_assoc_h_qos(struct ath10k *ar,
 				    struct ieee80211_bss_conf *bss_conf,
 				    struct wmi_peer_assoc_complete_arg *arg)
 {
+	u32 uapsd = 0;
+	u32 max_sp = 0;
+
 	if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
 		if (sta->wme)
 			arg->peer_flags |= WMI_PEER_QOS;
+
+		if (sta->wme && sta->uapsd_queues) {
+
+			ath10k_dbg(ATH10K_DBG_MAC, "uapsd_queues: 0x%X, "
+				   "max_sp: %d\n", sta->uapsd_queues,
+				   sta->max_sp);
+
+			arg->peer_flags |= WMI_PEER_APSD;
+
+			if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VO)
+				uapsd |= WMI_AP_PS_UAPSD_AC0_DELIVERY_EN |
+					 WMI_AP_PS_UAPSD_AC0_TRIGGER_EN;
+			if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VI)
+				uapsd |= WMI_AP_PS_UAPSD_AC1_DELIVERY_EN |
+					 WMI_AP_PS_UAPSD_AC1_TRIGGER_EN;
+			if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BK)
+				uapsd |= WMI_AP_PS_UAPSD_AC2_DELIVERY_EN |
+					 WMI_AP_PS_UAPSD_AC2_TRIGGER_EN;
+			if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BE)
+				uapsd |= WMI_AP_PS_UAPSD_AC3_DELIVERY_EN |
+					 WMI_AP_PS_UAPSD_AC3_TRIGGER_EN;
+
+
+			if (sta->max_sp < MAX_WMI_AP_PS_PEER_PARAM_MAX_SP)
+				max_sp = sta->max_sp;
+
+			ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id,
+						   sta->addr,
+						   WMI_AP_PS_PEER_PARAM_UAPSD,
+						   uapsd);
+
+			ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id,
+						   sta->addr,
+						   WMI_AP_PS_PEER_PARAM_MAX_SP,
+						   max_sp);
+		}
+
 	} else if (arvif->vdev_type == WMI_VDEV_TYPE_STA) {
 		if (bss_conf->qos)
 			arg->peer_flags |= WMI_PEER_QOS;
@@ -2721,6 +2761,7 @@ int ath10k_mac_register(struct ath10k *ar)
 	ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
 	ar->hw->wiphy->max_remain_on_channel_duration = 5000;
 
+	ar->hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD;
 	/*
 	 * on LL hardware queues are managed entirely by the FW
 	 * so we only advertise to mac we can do the queues thing
-- 
1.7.9.5

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

* [ath9k-devel] [RFC/RFT 1/2] ath10k: WMI add AP PS
  2013-04-30 11:46 [ath9k-devel] [RFC/RFT 1/2] ath10k: WMI add AP PS Janusz Dziedzic
  2013-04-30 11:46 ` [ath9k-devel] [RFC/RFT 2/2] ath10k: add AP UAPSD support Janusz Dziedzic
@ 2013-05-02  7:16 ` Kalle Valo
  1 sibling, 0 replies; 4+ messages in thread
From: Kalle Valo @ 2013-05-02  7:16 UTC (permalink / raw)
  To: ath9k-devel

Janusz Dziedzic <janusz.dziedzic@tieto.com> writes:

> Add AP power save (UAPSD) structures, enums.
>
> Signed-off-by: Janusz Dziedzic <janusz.dziedzic@tieto.com>
> ---
>  drivers/net/wireless/ath/ath10k/wmi.c |   26 +++++++++++++
>  drivers/net/wireless/ath/ath10k/wmi.h |   67 +++++++++++++++++++++++++++++++++
>  2 files changed, 93 insertions(+)
>
> diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c
> index 5272f18..453138b 100644
> --- a/drivers/net/wireless/ath/ath10k/wmi.c
> +++ b/drivers/net/wireless/ath/ath10k/wmi.c
> @@ -1850,6 +1850,32 @@ int ath10k_wmi_set_sta_ps_param(struct ath10k *ar, u32 vdev_id,
>  	return ath10k_wmi_cmd_send(ar, skb, WMI_STA_POWERSAVE_PARAM_CMDID);
>  }
>  
> +int ath10k_wmi_set_ap_ps_param(struct ath10k *ar, u32 vdev_id, const u8 *mac,
> +			       enum wmi_ap_ps_peer_param param_id, u32 value)
> +{

[...]

> +	cmd->vdev_id     = __cpu_to_le32(vdev_id);
> +	cmd->param_id    = __cpu_to_le32(param_id);
> +	cmd->param_value = __cpu_to_le32(value);

No extra whitespace before '='.

> +	memcpy(&cmd->peer_macaddr, mac, ETH_ALEN);
> +
> +	ath10k_dbg(ATH10K_DBG_WMI,
> +		   "wmi ap ps param vdev_id 0x%X param %d value %d "
> +		   "mac_addr %pM\n", vdev_id, param_id, value, mac);

Don't split the format string into two. The long line limit doesn't
apply to logging format strings.

> diff --git a/drivers/net/wireless/ath/ath10k/wmi.h b/drivers/net/wireless/ath/ath10k/wmi.h
> index 9946a51..b9f5b62 100644
> --- a/drivers/net/wireless/ath/ath10k/wmi.h
> +++ b/drivers/net/wireless/ath/ath10k/wmi.h
> @@ -2397,6 +2397,71 @@ struct wmi_sta_mimo_ps_mode_cmd {
>  	__le32 mimo_pwrsave_mode;
>  } __packed;
>  
> +

Extra empty line.

> +/* U-APSD maximum service period of peer station */
> +enum wmi_ap_ps_peer_param_max_sp {
> +	WMI_AP_PS_PEER_PARAM_MAX_SP_UNLIMITED = 0,
> +	WMI_AP_PS_PEER_PARAM_MAX_SP_2 = 1,
> +	WMI_AP_PS_PEER_PARAM_MAX_SP_4 = 2,
> +	WMI_AP_PS_PEER_PARAM_MAX_SP_6 = 3,
> +	/* keep last! */

Empty line before the comment.

> +struct wmi_ap_ps_peer_cmd {
> +	/** unique id identifying the VDEV, generated by the caller */
> +	__le32 vdev_id;
> +	/** peer MAC address */
> +	struct wmi_mac_addr peer_macaddr;
> +	/** AP powersave param (see enum wmi_ap_ps_peer_param) */
> +	__le32 param_id;
> +	/** AP powersave param value */
> +	__le32 param_value;
> +} __packed;

Empty line before the comments, except the first one.

Also there are new warnings:

drivers/net/wireless/ath/ath10k/wmi.h:2494: WARNING: line over 80 characters
drivers/net/wireless/ath/ath10k/wmi.h:2514: WARNING: line over 80 characters
drivers/net/wireless/ath/ath10k/wmi.c:1924: CHECK: No space is necessary after a cast
drivers/net/wireless/ath/ath10k/mac.c:906: CHECK: Blank lines aren't necessary after an open brace '{'
drivers/net/wireless/ath/ath10k/mac.c:908: WARNING: quoted string split across lines
drivers/net/wireless/ath/ath10k/mac.c:913: WARNING: line over 80 characters
drivers/net/wireless/ath/ath10k/mac.c:916: WARNING: line over 80 characters
drivers/net/wireless/ath/ath10k/mac.c:919: WARNING: line over 80 characters
drivers/net/wireless/ath/ath10k/mac.c:922: WARNING: line over 80 characters

-- 
Kalle Valo

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

* [ath9k-devel] [RFC/RFT 2/2] ath10k: add AP UAPSD support
  2013-04-30 11:46 ` [ath9k-devel] [RFC/RFT 2/2] ath10k: add AP UAPSD support Janusz Dziedzic
@ 2013-05-02  7:17   ` Kalle Valo
  0 siblings, 0 replies; 4+ messages in thread
From: Kalle Valo @ 2013-05-02  7:17 UTC (permalink / raw)
  To: ath9k-devel

Janusz Dziedzic <janusz.dziedzic@tieto.com> writes:

> Add support for AP (P2P_GO) UAPSD.
>
> Signed-off-by: Janusz Dziedzic <janusz.dziedzic@tieto.com>

[...]

> +			ath10k_dbg(ATH10K_DBG_MAC, "uapsd_queues: 0x%X, "
> +				   "max_sp: %d\n", sta->uapsd_queues,
> +				   sta->max_sp);

Splitted format string.

-- 
Kalle Valo

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

end of thread, other threads:[~2013-05-02  7:17 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-04-30 11:46 [ath9k-devel] [RFC/RFT 1/2] ath10k: WMI add AP PS Janusz Dziedzic
2013-04-30 11:46 ` [ath9k-devel] [RFC/RFT 2/2] ath10k: add AP UAPSD support Janusz Dziedzic
2013-05-02  7:17   ` Kalle Valo
2013-05-02  7:16 ` [ath9k-devel] [RFC/RFT 1/2] ath10k: WMI add AP PS Kalle Valo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.