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

Commit f6f3def3 authored by Eliad Peller's avatar Eliad Peller Committed by John W. Linville
Browse files

mac80211: save tx params per sdata



save and configure tx param per sdata, rather than
per hardware.

Signed-off-by: default avatarEliad Peller <eliad@wizery.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent f70f01c2
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -1275,6 +1275,7 @@ static int ieee80211_set_txq_params(struct wiphy *wiphy,
				    struct ieee80211_txq_params *params)
{
	struct ieee80211_local *local = wiphy_priv(wiphy);
	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
	struct ieee80211_tx_queue_params p;

	if (!local->ops->conf_tx)
@@ -1295,8 +1296,8 @@ static int ieee80211_set_txq_params(struct wiphy *wiphy,
	if (params->queue >= local->hw.queues)
		return -EINVAL;

	local->tx_conf[params->queue] = p;
	if (drv_conf_tx(local, params->queue, &p)) {
	sdata->tx_conf[params->queue] = p;
	if (drv_conf_tx(local, sdata, params->queue, &p)) {
		wiphy_debug(local->hw.wiphy,
			    "failed to set TX queue parameters for queue %d\n",
			    params->queue);
+3 −2
Original line number Diff line number Diff line
@@ -413,14 +413,15 @@ static inline void drv_sta_remove(struct ieee80211_local *local,
	trace_drv_return_void(local);
}

static inline int drv_conf_tx(struct ieee80211_local *local, u16 queue,
static inline int drv_conf_tx(struct ieee80211_local *local,
			      struct ieee80211_sub_if_data *sdata, u16 queue,
			      const struct ieee80211_tx_queue_params *params)
{
	int ret = -EOPNOTSUPP;

	might_sleep();

	trace_drv_conf_tx(local, queue, params);
	trace_drv_conf_tx(local, sdata, queue, params);
	if (local->ops->conf_tx)
		ret = local->ops->conf_tx(&local->hw, queue, params);
	trace_drv_return_int(local, ret);
+10 −4
Original line number Diff line number Diff line
@@ -697,32 +697,38 @@ TRACE_EVENT(drv_sta_remove,
);

TRACE_EVENT(drv_conf_tx,
	TP_PROTO(struct ieee80211_local *local, u16 queue,
	TP_PROTO(struct ieee80211_local *local,
		 struct ieee80211_sub_if_data *sdata,
		 u16 queue,
		 const struct ieee80211_tx_queue_params *params),

	TP_ARGS(local, queue, params),
	TP_ARGS(local, sdata, queue, params),

	TP_STRUCT__entry(
		LOCAL_ENTRY
		VIF_ENTRY
		__field(u16, queue)
		__field(u16, txop)
		__field(u16, cw_min)
		__field(u16, cw_max)
		__field(u8, aifs)
		__field(bool, uapsd)
	),

	TP_fast_assign(
		LOCAL_ASSIGN;
		VIF_ASSIGN;
		__entry->queue = queue;
		__entry->txop = params->txop;
		__entry->cw_max = params->cw_max;
		__entry->cw_min = params->cw_min;
		__entry->aifs = params->aifs;
		__entry->uapsd = params->uapsd;
	),

	TP_printk(
		LOCAL_PR_FMT " queue:%d",
		LOCAL_PR_ARG, __entry->queue
		LOCAL_PR_FMT  VIF_PR_FMT  " queue:%d",
		LOCAL_PR_ARG, VIF_PR_ARG, __entry->queue
	)
);

+2 −1
Original line number Diff line number Diff line
@@ -609,6 +609,8 @@ struct ieee80211_sub_if_data {
	__be16 control_port_protocol;
	bool control_port_no_encrypt;

	struct ieee80211_tx_queue_params tx_conf[IEEE80211_MAX_QUEUES];

	struct work_struct work;
	struct sk_buff_head skb_queue;

@@ -751,7 +753,6 @@ struct ieee80211_local {
	struct workqueue_struct *workqueue;

	unsigned long queue_stop_reasons[IEEE80211_MAX_QUEUES];
	struct ieee80211_tx_queue_params tx_conf[IEEE80211_MAX_QUEUES];
	/* also used to protect ampdu_ac_queue and amdpu_ac_stop_refcnt */
	spinlock_t queue_stop_reason_lock;

+2 −2
Original line number Diff line number Diff line
@@ -936,8 +936,8 @@ static void ieee80211_sta_wmm_params(struct ieee80211_local *local,
			    params.aifs, params.cw_min, params.cw_max,
			    params.txop, params.uapsd);
#endif
		local->tx_conf[queue] = params;
		if (drv_conf_tx(local, queue, &params))
		sdata->tx_conf[queue] = params;
		if (drv_conf_tx(local, sdata, queue, &params))
			wiphy_debug(local->hw.wiphy,
				    "failed to set TX queue parameters for queue %d\n",
				    queue);
Loading