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,
	Kalle Valo <kvalo@codeaurora.org>
Cc: devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.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 v9 04/24] wfx: add wfx.h
Date: Tue, 11 Jan 2022 18:14:04 +0100	[thread overview]
Message-ID: <20220111171424.862764-5-Jerome.Pouiller@silabs.com> (raw)
In-Reply-To: <20220111171424.862764-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..0e2ce112f16f
--- /dev/null
+++ b/drivers/net/wireless/silabs/wfx/wfx.h
@@ -0,0 +1,166 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Common private data.
+ *
+ * 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 wfx_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 wfx_hwbus_ops *hwbus_ops;
+	void                       *hwbus_priv;
+
+	u8                         keyset;
+	struct completion          firmware_ready;
+	struct wfx_hif_ind_startup hw_caps;
+	struct wfx_hif             hif;
+	struct delayed_work        cooling_timeout_work;
+	bool                       poll_irq;
+	bool                       chip_frozen;
+	/* protect all the members above */
+	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;
+
+	/* rx_stats is accessed from several contexts */
+	struct mutex               rx_stats_lock;
+	struct wfx_hif_rx_stats    rx_stats;
+
+	/* tx_power_loop_info is accessed from several contexts */
+	struct mutex               tx_power_loop_info_lock;
+	struct wfx_hif_tx_power_loop_info tx_power_loop_info;
+};
+
+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 wfx_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;
+	int                        scan_nb_chan_done;
+	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])
+		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
-- 
2.34.1


  parent reply	other threads:[~2022-01-11 17:15 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-11 17:14 [PATCH v9 00/24] wfx: get out from the staging area Jerome Pouiller
2022-01-11 17:14 ` [PATCH v9 01/24] mmc: sdio: add SDIO IDs for Silabs WF200 chip Jerome Pouiller
2022-01-12 10:58   ` Ulf Hansson
2022-01-12 12:45     ` Kalle Valo
2022-01-11 17:14 ` [PATCH v9 02/24] dt-bindings: introduce silabs,wfx.yaml Jerome Pouiller
2022-01-11 20:49   ` Rob Herring
2022-01-11 22:19   ` Rob Herring
2022-01-12  9:51     ` Jérôme Pouiller
2022-01-11 17:14 ` [PATCH v9 03/24] wfx: add Makefile/Kconfig Jerome Pouiller
2022-01-11 17:14 ` Jerome Pouiller [this message]
2022-01-11 17:14 ` [PATCH v9 05/24] wfx: add main.c/main.h Jerome Pouiller
2022-01-26  8:20   ` Jérôme Pouiller
2022-02-10 14:20     ` Kalle Valo
2022-02-10 14:41       ` Jérôme Pouiller
2022-02-10 14:51         ` Kalle Valo
2022-02-10 15:13           ` Jérôme Pouiller
2022-02-10 16:25             ` Kalle Valo
2022-02-10 16:37               ` Jérôme Pouiller
2022-02-11  7:08                 ` Kalle Valo
2022-02-10 14:23   ` Pali Rohár
2022-01-11 17:14 ` [PATCH v9 06/24] wfx: add bus.h Jerome Pouiller
2022-01-11 17:14 ` [PATCH v9 07/24] wfx: add bus_spi.c Jerome Pouiller
2022-01-11 17:14 ` [PATCH v9 08/24] wfx: add bus_sdio.c Jerome Pouiller
2022-01-12 10:51   ` Ulf Hansson
2022-01-12 10:58   ` Pali Rohár
2022-01-12 11:18     ` Jérôme Pouiller
2022-01-12 11:43       ` Pali Rohár
2022-01-12 12:06         ` Greg Kroah-Hartman
2022-01-12 12:14           ` Pali Rohár
2022-01-12 15:03         ` Ulf Hansson
2022-01-12 16:45         ` Jérôme Pouiller
2022-01-12 17:48           ` Pali Rohár
2022-01-12 18:23             ` Jérôme Pouiller
2022-01-13 12:07               ` Ulf Hansson
2022-01-11 17:14 ` [PATCH v9 09/24] wfx: add hwio.c/hwio.h Jerome Pouiller
2022-01-11 17:14 ` [PATCH v9 10/24] wfx: add fwio.c/fwio.h Jerome Pouiller
2022-01-11 17:14 ` [PATCH v9 11/24] wfx: add bh.c/bh.h Jerome Pouiller
2022-01-11 17:14 ` [PATCH v9 12/24] wfx: add hif_api_*.h Jerome Pouiller
2022-01-11 17:14 ` [PATCH v9 13/24] wfx: add hif_tx*.c/hif_tx*.h Jerome Pouiller
2022-01-11 17:14 ` [PATCH v9 14/24] wfx: add key.c/key.h Jerome Pouiller
2022-01-11 17:14 ` [PATCH v9 15/24] wfx: add hif_rx.c/hif_rx.h Jerome Pouiller
2022-01-11 17:14 ` [PATCH v9 16/24] wfx: add data_rx.c/data_rx.h Jerome Pouiller
2022-01-11 17:14 ` [PATCH v9 17/24] wfx: add queue.c/queue.h Jerome Pouiller
2022-01-11 17:14 ` [PATCH v9 18/24] wfx: add data_tx.c/data_tx.h Jerome Pouiller
2022-01-11 17:14 ` [PATCH v9 19/24] wfx: add sta.c/sta.h Jerome Pouiller
2022-01-11 17:14 ` [PATCH v9 20/24] wfx: add scan.c/scan.h Jerome Pouiller
2022-01-11 17:14 ` [PATCH v9 21/24] wfx: add debug.c/debug.h Jerome Pouiller
2022-01-11 17:14 ` [PATCH v9 22/24] wfx: add traces.h Jerome Pouiller
2022-01-11 17:14 ` [PATCH v9 23/24] wfx: remove from the staging area Jerome Pouiller
2022-01-12  7:49   ` Kalle Valo
2022-01-12  9:32     ` Jérôme Pouiller
2022-01-12 12:46       ` Kalle Valo
2022-01-11 17:14 ` [PATCH v9 24/24] wfx: get out " 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=20220111171424.862764-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.