All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jerome Pouiller <Jerome.Pouiller@silabs.com>
To: linux-wireless@vger.kernel.org, netdev@vger.kernel.org
Cc: devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	"Kalle Valo" <kvalo@codeaurora.org>,
	"David S . Miller" <davem@davemloft.net>,
	devicetree@vger.kernel.org, "Rob Herring" <robh+dt@kernel.org>,
	linux-mmc@vger.kernel.org, "Pali Rohár" <pali@kernel.org>,
	"Ulf Hansson" <ulf.hansson@linaro.org>,
	"Jérôme Pouiller" <jerome.pouiller@silabs.com>
Subject: [PATCH v2 04/24] wfx: add wfx.h
Date: Tue, 20 Oct 2020 14:57:57 +0200	[thread overview]
Message-ID: <20201020125817.1632995-5-Jerome.Pouiller@silabs.com> (raw)
In-Reply-To: <20201020125817.1632995-1-Jerome.Pouiller@silabs.com>

From: Jérôme Pouiller <jerome.pouiller@silabs.com>

Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
---
 drivers/net/wireless/silabs/wfx/wfx.h | 166 ++++++++++++++++++++++++++
 1 file changed, 166 insertions(+)
 create mode 100644 drivers/net/wireless/silabs/wfx/wfx.h

diff --git a/drivers/net/wireless/silabs/wfx/wfx.h b/drivers/net/wireless/silabs/wfx/wfx.h
new file mode 100644
index 000000000000..94898680ccde
--- /dev/null
+++ b/drivers/net/wireless/silabs/wfx/wfx.h
@@ -0,0 +1,166 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Common private data for Silicon Labs WFx chips.
+ *
+ * Copyright (c) 2017-2020, Silicon Laboratories, Inc.
+ * Copyright (c) 2010, ST-Ericsson
+ * Copyright (c) 2006, Michael Wu <flamingice@sourmilk.net>
+ * Copyright 2004-2006 Jean-Baptiste Note <jbnote@gmail.com>, et al.
+ */
+#ifndef WFX_H
+#define WFX_H
+
+#include <linux/completion.h>
+#include <linux/workqueue.h>
+#include <linux/mutex.h>
+#include <linux/nospec.h>
+#include <net/mac80211.h>
+
+#include "bh.h"
+#include "data_tx.h"
+#include "main.h"
+#include "queue.h"
+#include "hif_tx.h"
+
+#define USEC_PER_TXOP 32 // see struct ieee80211_tx_queue_params
+#define USEC_PER_TU 1024
+
+struct hwbus_ops;
+
+struct wfx_dev {
+	struct wfx_platform_data pdata;
+	struct device		*dev;
+	struct ieee80211_hw	*hw;
+	struct ieee80211_vif	*vif[2];
+	struct mac_address	addresses[2];
+	const struct hwbus_ops	*hwbus_ops;
+	void			*hwbus_priv;
+
+	u8			keyset;
+	struct completion	firmware_ready;
+	struct hif_ind_startup	hw_caps;
+	struct wfx_hif		hif;
+	struct delayed_work	cooling_timeout_work;
+	bool			poll_irq;
+	bool			chip_frozen;
+	struct mutex		conf_mutex;
+
+	struct wfx_hif_cmd	hif_cmd;
+	struct sk_buff_head	tx_pending;
+	wait_queue_head_t	tx_dequeue;
+	atomic_t		tx_lock;
+
+	atomic_t		packet_id;
+	u32			key_map;
+
+	struct hif_rx_stats	rx_stats;
+	struct mutex		rx_stats_lock;
+	struct hif_tx_power_loop_info tx_power_loop_info;
+	struct mutex		tx_power_loop_info_lock;
+	int			force_ps_timeout;
+};
+
+struct wfx_vif {
+	struct wfx_dev		*wdev;
+	struct ieee80211_vif	*vif;
+	struct ieee80211_channel *channel;
+	int			id;
+
+	u32			link_id_map;
+
+	bool			after_dtim_tx_allowed;
+	bool			join_in_progress;
+
+	struct delayed_work	beacon_loss_work;
+
+	struct wfx_queue	tx_queue[4];
+	struct tx_policy_cache	tx_policy_cache;
+	struct work_struct	tx_policy_upload_work;
+
+	struct work_struct	update_tim_work;
+
+	unsigned long		uapsd_mask;
+
+	/* avoid some operations in parallel with scan */
+	struct mutex		scan_lock;
+	struct work_struct	scan_work;
+	struct completion	scan_complete;
+	bool			scan_abort;
+	struct ieee80211_scan_request *scan_req;
+
+	struct completion	set_pm_mode_complete;
+};
+
+static inline struct wfx_vif *wdev_to_wvif(struct wfx_dev *wdev, int vif_id)
+{
+	if (vif_id >= ARRAY_SIZE(wdev->vif)) {
+		dev_dbg(wdev->dev, "requesting non-existent vif: %d\n", vif_id);
+		return NULL;
+	}
+	vif_id = array_index_nospec(vif_id, ARRAY_SIZE(wdev->vif));
+	if (!wdev->vif[vif_id]) {
+		dev_dbg(wdev->dev, "requesting non-allocated vif: %d\n",
+			vif_id);
+		return NULL;
+	}
+	return (struct wfx_vif *) wdev->vif[vif_id]->drv_priv;
+}
+
+static inline struct wfx_vif *wvif_iterate(struct wfx_dev *wdev,
+					   struct wfx_vif *cur)
+{
+	int i;
+	int mark = 0;
+	struct wfx_vif *tmp;
+
+	if (!cur)
+		mark = 1;
+	for (i = 0; i < ARRAY_SIZE(wdev->vif); i++) {
+		tmp = wdev_to_wvif(wdev, i);
+		if (mark && tmp)
+			return tmp;
+		if (tmp == cur)
+			mark = 1;
+	}
+	return NULL;
+}
+
+static inline int wvif_count(struct wfx_dev *wdev)
+{
+	int i;
+	int ret = 0;
+	struct wfx_vif *wvif;
+
+	for (i = 0; i < ARRAY_SIZE(wdev->vif); i++) {
+		wvif = wdev_to_wvif(wdev, i);
+		if (wvif)
+			ret++;
+	}
+	return ret;
+}
+
+static inline void memreverse(u8 *src, u8 length)
+{
+	u8 *lo = src;
+	u8 *hi = src + length - 1;
+	u8 swap;
+
+	while (lo < hi) {
+		swap = *lo;
+		*lo++ = *hi;
+		*hi-- = swap;
+	}
+}
+
+static inline int memzcmp(void *src, unsigned int size)
+{
+	u8 *buf = src;
+
+	if (!size)
+		return 0;
+	if (*buf)
+		return 1;
+	return memcmp(buf, buf + 1, size - 1);
+}
+
+#endif /* WFX_H */
-- 
2.28.0


WARNING: multiple messages have this Message-ID (diff)
From: Jerome Pouiller <Jerome.Pouiller@silabs.com>
To: linux-wireless@vger.kernel.org, netdev@vger.kernel.org
Cc: devel@driverdev.osuosl.org, devicetree@vger.kernel.org,
	"Ulf Hansson" <ulf.hansson@linaro.org>,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org,
	"Rob Herring" <robh+dt@kernel.org>,
	"Pali Rohár" <pali@kernel.org>,
	"David S . Miller" <davem@davemloft.net>,
	"Kalle Valo" <kvalo@codeaurora.org>
Subject: [PATCH v2 04/24] wfx: add wfx.h
Date: Tue, 20 Oct 2020 14:57:57 +0200	[thread overview]
Message-ID: <20201020125817.1632995-5-Jerome.Pouiller@silabs.com> (raw)
In-Reply-To: <20201020125817.1632995-1-Jerome.Pouiller@silabs.com>

From: Jérôme Pouiller <jerome.pouiller@silabs.com>

Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
---
 drivers/net/wireless/silabs/wfx/wfx.h | 166 ++++++++++++++++++++++++++
 1 file changed, 166 insertions(+)
 create mode 100644 drivers/net/wireless/silabs/wfx/wfx.h

diff --git a/drivers/net/wireless/silabs/wfx/wfx.h b/drivers/net/wireless/silabs/wfx/wfx.h
new file mode 100644
index 000000000000..94898680ccde
--- /dev/null
+++ b/drivers/net/wireless/silabs/wfx/wfx.h
@@ -0,0 +1,166 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Common private data for Silicon Labs WFx chips.
+ *
+ * Copyright (c) 2017-2020, Silicon Laboratories, Inc.
+ * Copyright (c) 2010, ST-Ericsson
+ * Copyright (c) 2006, Michael Wu <flamingice@sourmilk.net>
+ * Copyright 2004-2006 Jean-Baptiste Note <jbnote@gmail.com>, et al.
+ */
+#ifndef WFX_H
+#define WFX_H
+
+#include <linux/completion.h>
+#include <linux/workqueue.h>
+#include <linux/mutex.h>
+#include <linux/nospec.h>
+#include <net/mac80211.h>
+
+#include "bh.h"
+#include "data_tx.h"
+#include "main.h"
+#include "queue.h"
+#include "hif_tx.h"
+
+#define USEC_PER_TXOP 32 // see struct ieee80211_tx_queue_params
+#define USEC_PER_TU 1024
+
+struct hwbus_ops;
+
+struct wfx_dev {
+	struct wfx_platform_data pdata;
+	struct device		*dev;
+	struct ieee80211_hw	*hw;
+	struct ieee80211_vif	*vif[2];
+	struct mac_address	addresses[2];
+	const struct hwbus_ops	*hwbus_ops;
+	void			*hwbus_priv;
+
+	u8			keyset;
+	struct completion	firmware_ready;
+	struct hif_ind_startup	hw_caps;
+	struct wfx_hif		hif;
+	struct delayed_work	cooling_timeout_work;
+	bool			poll_irq;
+	bool			chip_frozen;
+	struct mutex		conf_mutex;
+
+	struct wfx_hif_cmd	hif_cmd;
+	struct sk_buff_head	tx_pending;
+	wait_queue_head_t	tx_dequeue;
+	atomic_t		tx_lock;
+
+	atomic_t		packet_id;
+	u32			key_map;
+
+	struct hif_rx_stats	rx_stats;
+	struct mutex		rx_stats_lock;
+	struct hif_tx_power_loop_info tx_power_loop_info;
+	struct mutex		tx_power_loop_info_lock;
+	int			force_ps_timeout;
+};
+
+struct wfx_vif {
+	struct wfx_dev		*wdev;
+	struct ieee80211_vif	*vif;
+	struct ieee80211_channel *channel;
+	int			id;
+
+	u32			link_id_map;
+
+	bool			after_dtim_tx_allowed;
+	bool			join_in_progress;
+
+	struct delayed_work	beacon_loss_work;
+
+	struct wfx_queue	tx_queue[4];
+	struct tx_policy_cache	tx_policy_cache;
+	struct work_struct	tx_policy_upload_work;
+
+	struct work_struct	update_tim_work;
+
+	unsigned long		uapsd_mask;
+
+	/* avoid some operations in parallel with scan */
+	struct mutex		scan_lock;
+	struct work_struct	scan_work;
+	struct completion	scan_complete;
+	bool			scan_abort;
+	struct ieee80211_scan_request *scan_req;
+
+	struct completion	set_pm_mode_complete;
+};
+
+static inline struct wfx_vif *wdev_to_wvif(struct wfx_dev *wdev, int vif_id)
+{
+	if (vif_id >= ARRAY_SIZE(wdev->vif)) {
+		dev_dbg(wdev->dev, "requesting non-existent vif: %d\n", vif_id);
+		return NULL;
+	}
+	vif_id = array_index_nospec(vif_id, ARRAY_SIZE(wdev->vif));
+	if (!wdev->vif[vif_id]) {
+		dev_dbg(wdev->dev, "requesting non-allocated vif: %d\n",
+			vif_id);
+		return NULL;
+	}
+	return (struct wfx_vif *) wdev->vif[vif_id]->drv_priv;
+}
+
+static inline struct wfx_vif *wvif_iterate(struct wfx_dev *wdev,
+					   struct wfx_vif *cur)
+{
+	int i;
+	int mark = 0;
+	struct wfx_vif *tmp;
+
+	if (!cur)
+		mark = 1;
+	for (i = 0; i < ARRAY_SIZE(wdev->vif); i++) {
+		tmp = wdev_to_wvif(wdev, i);
+		if (mark && tmp)
+			return tmp;
+		if (tmp == cur)
+			mark = 1;
+	}
+	return NULL;
+}
+
+static inline int wvif_count(struct wfx_dev *wdev)
+{
+	int i;
+	int ret = 0;
+	struct wfx_vif *wvif;
+
+	for (i = 0; i < ARRAY_SIZE(wdev->vif); i++) {
+		wvif = wdev_to_wvif(wdev, i);
+		if (wvif)
+			ret++;
+	}
+	return ret;
+}
+
+static inline void memreverse(u8 *src, u8 length)
+{
+	u8 *lo = src;
+	u8 *hi = src + length - 1;
+	u8 swap;
+
+	while (lo < hi) {
+		swap = *lo;
+		*lo++ = *hi;
+		*hi-- = swap;
+	}
+}
+
+static inline int memzcmp(void *src, unsigned int size)
+{
+	u8 *buf = src;
+
+	if (!size)
+		return 0;
+	if (*buf)
+		return 1;
+	return memcmp(buf, buf + 1, size - 1);
+}
+
+#endif /* WFX_H */
-- 
2.28.0

_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

  parent reply	other threads:[~2020-10-20 13:02 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-20 12:57 [PATCH v2 00/24] wfx: get out from the staging area Jerome Pouiller
2020-10-20 12:57 ` Jerome Pouiller
2020-10-20 12:57 ` [PATCH v2 01/24] mmc: sdio: add SDIO IDs for Silabs WF200 chip Jerome Pouiller
2020-10-20 12:57   ` Jerome Pouiller
2020-10-20 15:07   ` Ulf Hansson
2020-10-20 15:07     ` Ulf Hansson
2020-10-21 22:30   ` Pali Rohár
2020-10-21 22:30     ` Pali Rohár
2020-10-20 12:57 ` [PATCH v2 02/24] dt-bindings: introduce silabs,wfx.yaml Jerome Pouiller
2020-10-20 12:57   ` Jerome Pouiller
2020-10-26 14:30   ` Rob Herring
2020-10-26 14:30     ` Rob Herring
2020-10-20 12:57 ` [PATCH v2 03/24] wfx: add Makefile/Kconfig Jerome Pouiller
2020-10-20 12:57   ` Jerome Pouiller
2020-10-20 12:57 ` Jerome Pouiller [this message]
2020-10-20 12:57   ` [PATCH v2 04/24] wfx: add wfx.h Jerome Pouiller
2020-10-20 12:57 ` [PATCH v2 05/24] wfx: add main.c/main.h Jerome Pouiller
2020-10-20 12:57   ` Jerome Pouiller
2020-10-20 12:57 ` [PATCH v2 06/24] wfx: add bus.h Jerome Pouiller
2020-10-20 12:57   ` Jerome Pouiller
2020-10-20 12:58 ` [PATCH v2 07/24] wfx: add bus_spi.c Jerome Pouiller
2020-10-20 12:58   ` Jerome Pouiller
2020-10-20 12:58 ` [PATCH v2 08/24] wfx: add bus_sdio.c Jerome Pouiller
2020-10-20 12:58   ` Jerome Pouiller
2020-10-20 12:58 ` [PATCH v2 09/24] wfx: add hwio.c/hwio.h Jerome Pouiller
2020-10-20 12:58   ` Jerome Pouiller
2020-10-20 12:58 ` [PATCH v2 10/24] wfx: add fwio.c/fwio.h Jerome Pouiller
2020-10-20 12:58   ` Jerome Pouiller
2020-10-20 12:58 ` [PATCH v2 11/24] wfx: add bh.c/bh.h Jerome Pouiller
2020-10-20 12:58   ` Jerome Pouiller
2020-10-20 12:58 ` [PATCH v2 12/24] wfx: add hif_api_*.h Jerome Pouiller
2020-10-20 12:58   ` Jerome Pouiller
2020-10-20 12:58 ` [PATCH v2 13/24] wfx: add hif_tx*.c/hif_tx*.h Jerome Pouiller
2020-10-20 12:58   ` Jerome Pouiller
2020-10-20 12:58 ` [PATCH v2 14/24] wfx: add key.c/key.h Jerome Pouiller
2020-10-20 12:58   ` Jerome Pouiller
2020-10-20 12:58 ` [PATCH v2 15/24] wfx: add hif_rx.c/hif_rx.h Jerome Pouiller
2020-10-20 12:58   ` Jerome Pouiller
2020-10-20 12:58 ` [PATCH v2 16/24] wfx: add data_rx.c/data_rx.h Jerome Pouiller
2020-10-20 12:58   ` Jerome Pouiller
2020-10-20 12:58 ` [PATCH v2 17/24] wfx: add queue.c/queue.h Jerome Pouiller
2020-10-20 12:58   ` Jerome Pouiller
2020-10-20 12:58 ` [PATCH v2 18/24] wfx: add data_tx.c/data_tx.h Jerome Pouiller
2020-10-20 12:58   ` Jerome Pouiller
2020-10-20 12:58 ` [PATCH v2 19/24] wfx: add sta.c/sta.h Jerome Pouiller
2020-10-20 12:58   ` Jerome Pouiller
2020-10-20 12:58 ` [PATCH v2 20/24] wfx: add scan.c/scan.h Jerome Pouiller
2020-10-20 12:58   ` Jerome Pouiller
2020-10-20 12:58 ` [PATCH v2 21/24] wfx: add debug.c/debug.h Jerome Pouiller
2020-10-20 12:58   ` Jerome Pouiller
2020-10-20 12:58 ` [PATCH v2 22/24] wfx: add traces.h Jerome Pouiller
2020-10-20 12:58   ` Jerome Pouiller
2020-10-20 12:58 ` [PATCH v2 23/24] wfx: remove from the staging area Jerome Pouiller
2020-10-20 12:58   ` Jerome Pouiller
2020-10-20 12:58 ` [PATCH v2 24/24] wfx: get out " Jerome Pouiller
2020-10-20 12:58   ` Jerome Pouiller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201020125817.1632995-5-Jerome.Pouiller@silabs.com \
    --to=jerome.pouiller@silabs.com \
    --cc=davem@davemloft.net \
    --cc=devel@driverdev.osuosl.org \
    --cc=devicetree@vger.kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=kvalo@codeaurora.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pali@kernel.org \
    --cc=robh+dt@kernel.org \
    --cc=ulf.hansson@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.