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

Commit 02e38358 authored by Emmanuel Grumbach's avatar Emmanuel Grumbach Committed by Wey-Yi Guy
Browse files

iwlwifi: virtualize op_mode's stop/start queue



Export them as "queue_full" and "queue_not_full" notification.

Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: default avatarWey-Yi Guy <wey-yi.w.guy@intel.com>
parent db70f290
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1386,6 +1386,8 @@ const struct iwl_op_mode_ops iwl_dvm_ops = {
	.start = iwl_op_mode_dvm_start,
	.stop = iwl_op_mode_dvm_stop,
	.rx = iwl_rx_dispatch,
	.queue_full = iwl_stop_sw_queue,
	.queue_not_full = iwl_wake_sw_queue,
	.free_skb = iwl_free_skb,
};

+3 −0
Original line number Diff line number Diff line
@@ -84,6 +84,9 @@ void iwl_free_skb(struct iwl_op_mode *op_mode, struct sk_buff *skb);
int __must_check iwl_rx_dispatch(struct iwl_op_mode *op_mode,
				 struct iwl_rx_mem_buffer *rxb,
				 struct iwl_device_cmd *cmd);
void iwl_stop_sw_queue(struct iwl_op_mode *op_mode, u8 ac);
void iwl_wake_sw_queue(struct iwl_op_mode *op_mode, u8 ac);


/* MAC80211 */
struct ieee80211_hw *iwl_alloc_all(void);
+6 −2
Original line number Diff line number Diff line
@@ -1475,12 +1475,16 @@ void iwl_free_skb(struct iwl_op_mode *op_mode, struct sk_buff *skb)
	dev_kfree_skb_any(skb);
}

void iwl_stop_sw_queue(struct iwl_priv *priv, u8 ac)
void iwl_stop_sw_queue(struct iwl_op_mode *op_mode, u8 ac)
{
	struct iwl_priv *priv = IWL_OP_MODE_GET_DVM(op_mode);

	ieee80211_stop_queue(priv->hw, ac);
}

void iwl_wake_sw_queue(struct iwl_priv *priv, u8 ac)
void iwl_wake_sw_queue(struct iwl_op_mode *op_mode, u8 ac)
{
	struct iwl_priv *priv = IWL_OP_MODE_GET_DVM(op_mode);

	ieee80211_wake_queue(priv->hw, ac);
}
+17 −0
Original line number Diff line number Diff line
@@ -80,6 +80,10 @@ struct iwl_rx_mem_buffer;
 *	May sleep
 * @rx: Rx notification to the op_mode. rxb is the Rx buffer itself. Cmd is the
 *	HCMD the this Rx responds to.
 * @queue_full: notifies that a HW queue is full. Ac is the ac of the queue
 *	Must be atomic
 * @queue_not_full: notifies that a HW queue is not full any more.
 *	Ac is the ac of the queue. Must be atomic
 * @free_skb: allows the transport layer to free skbs that haven't been
 *	reclaimed by the op_mode. This can happen when the driver is freed and
 *	there are Tx packets pending in the transport layer.
@@ -90,6 +94,8 @@ struct iwl_op_mode_ops {
	void (*stop)(struct iwl_op_mode *op_mode);
	int (*rx)(struct iwl_op_mode *op_mode, struct iwl_rx_mem_buffer *rxb,
		  struct iwl_device_cmd *cmd);
	void (*queue_full)(struct iwl_op_mode *op_mode, u8 ac);
	void (*queue_not_full)(struct iwl_op_mode *op_mode, u8 ac);
	void (*free_skb)(struct iwl_op_mode *op_mode, struct sk_buff *skb);
};

@@ -119,6 +125,17 @@ static inline int iwl_op_mode_rx(struct iwl_op_mode *op_mode,
	return op_mode->ops->rx(op_mode, rxb, cmd);
}

static inline void iwl_op_mode_queue_full(struct iwl_op_mode *op_mode, u8 ac)
{
	op_mode->ops->queue_full(op_mode, ac);
}

static inline void iwl_op_mode_queue_not_full(struct iwl_op_mode *op_mode,
					      u8 ac)
{
	op_mode->ops->queue_not_full(op_mode, ac);
}

static inline void iwl_op_mode_free_skb(struct iwl_op_mode *op_mode,
					struct sk_buff *skb)
{
+0 −2
Original line number Diff line number Diff line
@@ -539,8 +539,6 @@ void iwlagn_fw_error(struct iwl_priv *priv, bool ondemand);
const char *get_cmd_string(u8 cmd);
bool iwl_check_for_ct_kill(struct iwl_priv *priv);

void iwl_stop_sw_queue(struct iwl_priv *priv, u8 ac);
void iwl_wake_sw_queue(struct iwl_priv *priv, u8 ac);

/* notification wait support */
void iwl_abort_notification_waits(struct iwl_shared *shrd);
Loading