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

Commit e6935ea1 authored by Lennert Buytenhek's avatar Lennert Buytenhek Committed by John W. Linville
Browse files

mwl8k: get rid of mwl8k_configure_filter() workqueue use

parent 954ef509
Loading
Loading
Loading
Loading
+20 −45
Original line number Diff line number Diff line
@@ -2747,26 +2747,23 @@ static u64 mwl8k_prepare_multicast(struct ieee80211_hw *hw,
	return (unsigned long)cmd;
}

struct mwl8k_configure_filter_worker {
	struct mwl8k_work_struct header;
	unsigned int changed_flags;
	unsigned int total_flags;
static void mwl8k_configure_filter(struct ieee80211_hw *hw,
				   unsigned int changed_flags,
				   unsigned int *total_flags,
				   u64 multicast)
{
	struct mwl8k_priv *priv = hw->priv;
	struct mwl8k_cmd_pkt *multicast_adr_cmd;
};

#define MWL8K_SUPPORTED_IF_FLAGS	FIF_BCN_PRBRESP_PROMISC
	/* Clear unsupported feature flags */
	*total_flags &= FIF_BCN_PRBRESP_PROMISC;

static int mwl8k_configure_filter_wt(struct work_struct *wt)
{
	struct mwl8k_configure_filter_worker *worker =
		(struct mwl8k_configure_filter_worker *)wt;
	struct ieee80211_hw *hw = worker->header.hw;
	struct mwl8k_priv *priv = hw->priv;
	int rc = 0;
	if (mwl8k_fw_lock(hw))
		return;

	if (worker->changed_flags & FIF_BCN_PRBRESP_PROMISC) {
		if (worker->total_flags & FIF_BCN_PRBRESP_PROMISC)
			rc = mwl8k_cmd_set_pre_scan(hw);
	if (changed_flags & FIF_BCN_PRBRESP_PROMISC) {
		if (*total_flags & FIF_BCN_PRBRESP_PROMISC)
			mwl8k_cmd_set_pre_scan(hw);
		else {
			u8 *bssid;

@@ -2774,39 +2771,17 @@ static int mwl8k_configure_filter_wt(struct work_struct *wt)
			if (priv->vif != NULL)
				bssid = MWL8K_VIF(priv->vif)->bssid;

			rc = mwl8k_cmd_set_post_scan(hw, bssid);
			mwl8k_cmd_set_post_scan(hw, bssid);
		}
	}

	if (!rc && worker->multicast_adr_cmd != NULL)
		rc = mwl8k_post_cmd(hw, worker->multicast_adr_cmd);
	kfree(worker->multicast_adr_cmd);

	return rc;
	multicast_adr_cmd = (void *)(unsigned long)multicast;
	if (multicast_adr_cmd != NULL) {
		mwl8k_post_cmd(hw, multicast_adr_cmd);
		kfree(multicast_adr_cmd);
	}

static void mwl8k_configure_filter(struct ieee80211_hw *hw,
				   unsigned int changed_flags,
				   unsigned int *total_flags,
				   u64 multicast)
{
	struct mwl8k_configure_filter_worker *worker;

	/* Clear unsupported feature flags */
	*total_flags &= MWL8K_SUPPORTED_IF_FLAGS;

	if (!(changed_flags & MWL8K_SUPPORTED_IF_FLAGS))
		return;

	worker = kzalloc(sizeof(*worker), GFP_ATOMIC);
	if (worker == NULL)
		return;

	worker->changed_flags = changed_flags;
	worker->total_flags = *total_flags;
	worker->multicast_adr_cmd = (void *)(unsigned long)multicast;

	mwl8k_queue_work(hw, &worker->header, mwl8k_configure_filter_wt);
	mwl8k_fw_unlock(hw);
}

static int mwl8k_set_rts_threshold(struct ieee80211_hw *hw, u32 value)