* [PATCH 00/12] mwifiex: two fixes and cleanup
@ 2024-08-26 11:01 Sascha Hauer
2024-08-26 11:01 ` [PATCH 01/12] wifi: mwifiex: add missing locking Sascha Hauer
` (11 more replies)
0 siblings, 12 replies; 32+ messages in thread
From: Sascha Hauer @ 2024-08-26 11:01 UTC (permalink / raw)
To: Brian Norris, Francesco Dolcini, Kalle Valo
Cc: linux-wireless, linux-kernel, Sascha Hauer, stable
These are a few patches broken out from [1]. Kalle requested to limit
the number of patches per series to approximately 12 and Francesco to
move the fixes to the front of the series, so here we go.
First two patches are fixes. First one is for host mlme support which
currently is in wireless-next, so no stable tag needed, second one has a
stable tag.
The remaining patches except the last one I have chosen to upstream
first. I'll continue with the other patches after having this series
in shape and merged.
The last one is a new patch not included in [1].
Sascha
[1] https://lore.kernel.org/all/20240820-mwifiex-cleanup-v1-0-320d8de4a4b7@pengutronix.de/
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
Sascha Hauer (12):
wifi: mwifiex: add missing locking
wifi: mwifiex: fix MAC address handling
wifi: mwifiex: deduplicate code in mwifiex_cmd_tx_rate_cfg()
wifi: mwifiex: use adapter as context pointer for mwifiex_hs_activated_event()
wifi: mwifiex: drop unnecessary initialization
wifi: mwifiex: make region_code_mapping_t const
wifi: mwifiex: pass adapter to mwifiex_dnld_cmd_to_fw()
wifi: mwifiex: simplify mwifiex_setup_ht_caps()
wifi: mwifiex: fix indention
wifi: mwifiex: make locally used function static
wifi: mwifiex: move common settings out of switch/case
wifi: mwifiex: drop asynchronous init waiting code
drivers/net/wireless/marvell/mwifiex/cfg80211.c | 38 ++++------
drivers/net/wireless/marvell/mwifiex/cfp.c | 4 +-
drivers/net/wireless/marvell/mwifiex/cmdevt.c | 76 +++++++-------------
drivers/net/wireless/marvell/mwifiex/init.c | 19 ++---
drivers/net/wireless/marvell/mwifiex/main.c | 94 +++++++++----------------
drivers/net/wireless/marvell/mwifiex/main.h | 16 ++---
drivers/net/wireless/marvell/mwifiex/sta_cmd.c | 49 ++++---------
drivers/net/wireless/marvell/mwifiex/txrx.c | 3 +-
drivers/net/wireless/marvell/mwifiex/util.c | 22 +-----
drivers/net/wireless/marvell/mwifiex/wmm.c | 12 ++--
10 files changed, 105 insertions(+), 228 deletions(-)
---
base-commit: 67a72043aa2e6f60f7bbe7bfa598ba168f16d04f
change-id: 20240826-mwifiex-cleanup-1-b5035c7faff6
Best regards,
--
Sascha Hauer <s.hauer@pengutronix.de>
^ permalink raw reply [flat|nested] 32+ messages in thread
* [PATCH 01/12] wifi: mwifiex: add missing locking
2024-08-26 11:01 [PATCH 00/12] mwifiex: two fixes and cleanup Sascha Hauer
@ 2024-08-26 11:01 ` Sascha Hauer
2024-08-27 11:55 ` Francesco Dolcini
2024-08-26 11:01 ` [PATCH 02/12] wifi: mwifiex: fix MAC address handling Sascha Hauer
` (10 subsequent siblings)
11 siblings, 1 reply; 32+ messages in thread
From: Sascha Hauer @ 2024-08-26 11:01 UTC (permalink / raw)
To: Brian Norris, Francesco Dolcini, Kalle Valo
Cc: linux-wireless, linux-kernel, Sascha Hauer
cfg80211_rx_assoc_resp() and cfg80211_rx_mlme_mgmt() need to be called
with the wiphy locked, so lock it before calling these functions.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
drivers/net/wireless/marvell/mwifiex/cmdevt.c | 2 ++
drivers/net/wireless/marvell/mwifiex/util.c | 2 ++
2 files changed, 4 insertions(+)
diff --git a/drivers/net/wireless/marvell/mwifiex/cmdevt.c b/drivers/net/wireless/marvell/mwifiex/cmdevt.c
index 7894102f03eb0..cdfb307e75131 100644
--- a/drivers/net/wireless/marvell/mwifiex/cmdevt.c
+++ b/drivers/net/wireless/marvell/mwifiex/cmdevt.c
@@ -938,8 +938,10 @@ void mwifiex_process_assoc_resp(struct mwifiex_adapter *adapter)
assoc_resp.links[0].bss = priv->req_bss;
assoc_resp.buf = priv->assoc_rsp_buf;
assoc_resp.len = priv->assoc_rsp_size;
+ wiphy_lock(priv->wdev.wiphy);
cfg80211_rx_assoc_resp(priv->netdev,
&assoc_resp);
+ wiphy_unlock(priv->wdev.wiphy);
priv->assoc_rsp_size = 0;
}
}
diff --git a/drivers/net/wireless/marvell/mwifiex/util.c b/drivers/net/wireless/marvell/mwifiex/util.c
index 42c04bf858da3..1f1f6280a0f25 100644
--- a/drivers/net/wireless/marvell/mwifiex/util.c
+++ b/drivers/net/wireless/marvell/mwifiex/util.c
@@ -494,7 +494,9 @@ mwifiex_process_mgmt_packet(struct mwifiex_private *priv,
}
}
+ wiphy_lock(priv->wdev.wiphy);
cfg80211_rx_mlme_mgmt(priv->netdev, skb->data, pkt_len);
+ wiphy_unlock(priv->wdev.wiphy);
}
if (priv->adapter->host_mlme_enabled &&
--
2.39.2
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 02/12] wifi: mwifiex: fix MAC address handling
2024-08-26 11:01 [PATCH 00/12] mwifiex: two fixes and cleanup Sascha Hauer
2024-08-26 11:01 ` [PATCH 01/12] wifi: mwifiex: add missing locking Sascha Hauer
@ 2024-08-26 11:01 ` Sascha Hauer
2024-09-06 14:40 ` Francesco Dolcini
2024-08-26 11:01 ` [PATCH 03/12] wifi: mwifiex: deduplicate code in mwifiex_cmd_tx_rate_cfg() Sascha Hauer
` (9 subsequent siblings)
11 siblings, 1 reply; 32+ messages in thread
From: Sascha Hauer @ 2024-08-26 11:01 UTC (permalink / raw)
To: Brian Norris, Francesco Dolcini, Kalle Valo
Cc: linux-wireless, linux-kernel, Sascha Hauer, stable
The mwifiex driver tries to derive the MAC addresses of the virtual
interfaces from the permanent address by adding the bss_num of the
particular interface used. It does so each time the virtual interface
is changed from AP to station or the other way round. This means that
the devices MAC address changes during a change_virtual_intf call which
is pretty unexpected by userspace.
Furthermore the driver doesn't use the permanent address to add the
bss_num to, but instead the current MAC address increases each time
we do a change_virtual_intf.
Fix this by initializing the MAC address once from the permanent MAC
address during creation of the virtual interface and never touch it
again. This also means that userspace can set a different MAC address
which then stays like this forever and is not unexpectedly changed
by the driver.
It is not clear how many (if any) MAC addresses after the permanent MAC
address are reserved for a device, so set the locally admistered
bit for all MAC addresses modified from the permanent address.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Cc: stable@vger.kernel.org
---
drivers/net/wireless/marvell/mwifiex/cfg80211.c | 4 +-
drivers/net/wireless/marvell/mwifiex/init.c | 1 -
drivers/net/wireless/marvell/mwifiex/main.c | 54 ++++++++++++-------------
drivers/net/wireless/marvell/mwifiex/main.h | 5 ++-
4 files changed, 30 insertions(+), 34 deletions(-)
diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
index 5697a02e6b8d3..d3e1424bea390 100644
--- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c
+++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
@@ -962,8 +962,6 @@ mwifiex_init_new_priv_params(struct mwifiex_private *priv,
adapter->rx_locked = false;
spin_unlock_bh(&adapter->rx_proc_lock);
- mwifiex_set_mac_address(priv, dev, false, NULL);
-
return 0;
}
@@ -3115,7 +3113,7 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
priv->netdev = dev;
if (!adapter->mfg_mode) {
- mwifiex_set_mac_address(priv, dev, false, NULL);
+ mwifiex_set_default_mac_address(priv, dev);
ret = mwifiex_send_cmd(priv, HostCmd_CMD_SET_BSS_MODE,
HostCmd_ACT_GEN_SET, 0, NULL, true);
diff --git a/drivers/net/wireless/marvell/mwifiex/init.c b/drivers/net/wireless/marvell/mwifiex/init.c
index 8b61e45cd6678..0259c9f88486b 100644
--- a/drivers/net/wireless/marvell/mwifiex/init.c
+++ b/drivers/net/wireless/marvell/mwifiex/init.c
@@ -71,7 +71,6 @@ int mwifiex_init_priv(struct mwifiex_private *priv)
u32 i;
priv->media_connected = false;
- eth_broadcast_addr(priv->curr_addr);
priv->port_open = false;
priv->usb_port = MWIFIEX_USB_EP_DATA;
priv->pkt_tx_ctrl = 0;
diff --git a/drivers/net/wireless/marvell/mwifiex/main.c b/drivers/net/wireless/marvell/mwifiex/main.c
index 96d1f6039fbca..46acddd03ffd1 100644
--- a/drivers/net/wireless/marvell/mwifiex/main.c
+++ b/drivers/net/wireless/marvell/mwifiex/main.c
@@ -971,34 +971,16 @@ mwifiex_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
}
int mwifiex_set_mac_address(struct mwifiex_private *priv,
- struct net_device *dev, bool external,
- u8 *new_mac)
+ struct net_device *dev, u8 *new_mac)
{
int ret;
- u64 mac_addr, old_mac_addr;
+ u64 old_mac_addr;
- old_mac_addr = ether_addr_to_u64(priv->curr_addr);
+ netdev_info(dev, "%s: old: %pM new: %pM\n", __func__, priv->curr_addr, new_mac);
- if (external) {
- mac_addr = ether_addr_to_u64(new_mac);
- } else {
- /* Internal mac address change */
- if (priv->bss_type == MWIFIEX_BSS_TYPE_ANY)
- return -EOPNOTSUPP;
-
- mac_addr = old_mac_addr;
-
- if (priv->bss_type == MWIFIEX_BSS_TYPE_P2P) {
- mac_addr |= BIT_ULL(MWIFIEX_MAC_LOCAL_ADMIN_BIT);
- mac_addr += priv->bss_num;
- } else if (priv->adapter->priv[0] != priv) {
- /* Set mac address based on bss_type/bss_num */
- mac_addr ^= BIT_ULL(priv->bss_type + 8);
- mac_addr += priv->bss_num;
- }
- }
+ old_mac_addr = ether_addr_to_u64(priv->curr_addr);
- u64_to_ether_addr(mac_addr, priv->curr_addr);
+ ether_addr_copy(priv->curr_addr, new_mac);
/* Send request to firmware */
ret = mwifiex_send_cmd(priv, HostCmd_CMD_802_11_MAC_ADDRESS,
@@ -1015,6 +997,26 @@ int mwifiex_set_mac_address(struct mwifiex_private *priv,
return 0;
}
+int mwifiex_set_default_mac_address(struct mwifiex_private *priv,
+ struct net_device *dev)
+{
+ int priv_num;
+ u8 mac[ETH_ALEN];
+
+ ether_addr_copy(mac, priv->adapter->perm_addr);
+
+ for (priv_num = 0; priv_num < priv->adapter->priv_num; priv_num++)
+ if (priv == priv->adapter->priv[priv_num])
+ break;
+
+ if (priv_num) {
+ eth_addr_add(mac, priv_num);
+ mac[0] |= 0x2;
+ }
+
+ return mwifiex_set_mac_address(priv, dev, mac);
+}
+
/* CFG802.11 network device handler for setting MAC address.
*/
static int
@@ -1023,7 +1025,7 @@ mwifiex_ndo_set_mac_address(struct net_device *dev, void *addr)
struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
struct sockaddr *hw_addr = addr;
- return mwifiex_set_mac_address(priv, dev, true, hw_addr->sa_data);
+ return mwifiex_set_mac_address(priv, dev, hw_addr->sa_data);
}
/*
@@ -1364,10 +1366,6 @@ void mwifiex_init_priv_params(struct mwifiex_private *priv,
priv->assocresp_idx = MWIFIEX_AUTO_IDX_MASK;
priv->gen_idx = MWIFIEX_AUTO_IDX_MASK;
priv->num_tx_timeout = 0;
- if (is_valid_ether_addr(dev->dev_addr))
- ether_addr_copy(priv->curr_addr, dev->dev_addr);
- else
- ether_addr_copy(priv->curr_addr, priv->adapter->perm_addr);
if (GET_BSS_ROLE(priv) == MWIFIEX_BSS_ROLE_STA ||
GET_BSS_ROLE(priv) == MWIFIEX_BSS_ROLE_UAP) {
diff --git a/drivers/net/wireless/marvell/mwifiex/main.h b/drivers/net/wireless/marvell/mwifiex/main.h
index 529863edd7a25..dc07eb11f7752 100644
--- a/drivers/net/wireless/marvell/mwifiex/main.h
+++ b/drivers/net/wireless/marvell/mwifiex/main.h
@@ -1694,8 +1694,9 @@ void mwifiex_process_multi_chan_event(struct mwifiex_private *priv,
struct sk_buff *event_skb);
void mwifiex_multi_chan_resync(struct mwifiex_adapter *adapter);
int mwifiex_set_mac_address(struct mwifiex_private *priv,
- struct net_device *dev,
- bool external, u8 *new_mac);
+ struct net_device *dev, u8 *new_mac);
+int mwifiex_set_default_mac_address(struct mwifiex_private *priv,
+ struct net_device *dev);
void mwifiex_devdump_tmo_func(unsigned long function_context);
#ifdef CONFIG_DEBUG_FS
--
2.39.2
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 03/12] wifi: mwifiex: deduplicate code in mwifiex_cmd_tx_rate_cfg()
2024-08-26 11:01 [PATCH 00/12] mwifiex: two fixes and cleanup Sascha Hauer
2024-08-26 11:01 ` [PATCH 01/12] wifi: mwifiex: add missing locking Sascha Hauer
2024-08-26 11:01 ` [PATCH 02/12] wifi: mwifiex: fix MAC address handling Sascha Hauer
@ 2024-08-26 11:01 ` Sascha Hauer
2024-09-06 14:54 ` Francesco Dolcini
2024-08-26 11:01 ` [PATCH 04/12] wifi: mwifiex: use adapter as context pointer for mwifiex_hs_activated_event() Sascha Hauer
` (8 subsequent siblings)
11 siblings, 1 reply; 32+ messages in thread
From: Sascha Hauer @ 2024-08-26 11:01 UTC (permalink / raw)
To: Brian Norris, Francesco Dolcini, Kalle Valo
Cc: linux-wireless, linux-kernel, Sascha Hauer
The code block inside the if/else is the same with just using
pbitmap_rates if non NULL or priv->bitmap_rates otherwise. Deduplicate
the code by picking the correct pointer first and then using it
unconditionally.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
drivers/net/wireless/marvell/mwifiex/sta_cmd.c | 43 +++++++++-----------------
1 file changed, 14 insertions(+), 29 deletions(-)
diff --git a/drivers/net/wireless/marvell/mwifiex/sta_cmd.c b/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
index e2800a831c8ed..30dd4e58e2b1d 100644
--- a/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
+++ b/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
@@ -157,7 +157,7 @@ mwifiex_cmd_802_11_get_log(struct host_cmd_ds_command *cmd)
*/
static int mwifiex_cmd_tx_rate_cfg(struct mwifiex_private *priv,
struct host_cmd_ds_command *cmd,
- u16 cmd_action, u16 *pbitmap_rates)
+ u16 cmd_action, const u16 *pbitmap_rates)
{
struct host_cmd_ds_tx_rate_cfg *rate_cfg = &cmd->params.tx_rate_cfg;
struct mwifiex_rate_scope *rate_scope;
@@ -174,34 +174,19 @@ static int mwifiex_cmd_tx_rate_cfg(struct mwifiex_private *priv,
rate_scope->type = cpu_to_le16(TLV_TYPE_RATE_SCOPE);
rate_scope->length = cpu_to_le16
(sizeof(*rate_scope) - sizeof(struct mwifiex_ie_types_header));
- if (pbitmap_rates != NULL) {
- rate_scope->hr_dsss_rate_bitmap = cpu_to_le16(pbitmap_rates[0]);
- rate_scope->ofdm_rate_bitmap = cpu_to_le16(pbitmap_rates[1]);
- for (i = 0; i < ARRAY_SIZE(rate_scope->ht_mcs_rate_bitmap); i++)
- rate_scope->ht_mcs_rate_bitmap[i] =
- cpu_to_le16(pbitmap_rates[2 + i]);
- if (priv->adapter->fw_api_ver == MWIFIEX_FW_V15) {
- for (i = 0;
- i < ARRAY_SIZE(rate_scope->vht_mcs_rate_bitmap);
- i++)
- rate_scope->vht_mcs_rate_bitmap[i] =
- cpu_to_le16(pbitmap_rates[10 + i]);
- }
- } else {
- rate_scope->hr_dsss_rate_bitmap =
- cpu_to_le16(priv->bitmap_rates[0]);
- rate_scope->ofdm_rate_bitmap =
- cpu_to_le16(priv->bitmap_rates[1]);
- for (i = 0; i < ARRAY_SIZE(rate_scope->ht_mcs_rate_bitmap); i++)
- rate_scope->ht_mcs_rate_bitmap[i] =
- cpu_to_le16(priv->bitmap_rates[2 + i]);
- if (priv->adapter->fw_api_ver == MWIFIEX_FW_V15) {
- for (i = 0;
- i < ARRAY_SIZE(rate_scope->vht_mcs_rate_bitmap);
- i++)
- rate_scope->vht_mcs_rate_bitmap[i] =
- cpu_to_le16(priv->bitmap_rates[10 + i]);
- }
+ if (!pbitmap_rates)
+ pbitmap_rates = priv->bitmap_rates;
+
+ rate_scope->hr_dsss_rate_bitmap = cpu_to_le16(pbitmap_rates[0]);
+ rate_scope->ofdm_rate_bitmap = cpu_to_le16(pbitmap_rates[1]);
+
+ for (i = 0; i < ARRAY_SIZE(rate_scope->ht_mcs_rate_bitmap); i++)
+ rate_scope->ht_mcs_rate_bitmap[i] = cpu_to_le16(pbitmap_rates[2 + i]);
+
+ if (priv->adapter->fw_api_ver == MWIFIEX_FW_V15) {
+ for (i = 0; i < ARRAY_SIZE(rate_scope->vht_mcs_rate_bitmap); i++)
+ rate_scope->vht_mcs_rate_bitmap[i] =
+ cpu_to_le16(pbitmap_rates[10 + i]);
}
rate_drop = (struct mwifiex_rate_drop_pattern *) ((u8 *) rate_scope +
--
2.39.2
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 04/12] wifi: mwifiex: use adapter as context pointer for mwifiex_hs_activated_event()
2024-08-26 11:01 [PATCH 00/12] mwifiex: two fixes and cleanup Sascha Hauer
` (2 preceding siblings ...)
2024-08-26 11:01 ` [PATCH 03/12] wifi: mwifiex: deduplicate code in mwifiex_cmd_tx_rate_cfg() Sascha Hauer
@ 2024-08-26 11:01 ` Sascha Hauer
2024-09-06 15:03 ` Francesco Dolcini
2024-08-26 11:01 ` [PATCH 05/12] wifi: mwifiex: drop unnecessary initialization Sascha Hauer
` (7 subsequent siblings)
11 siblings, 1 reply; 32+ messages in thread
From: Sascha Hauer @ 2024-08-26 11:01 UTC (permalink / raw)
To: Brian Norris, Francesco Dolcini, Kalle Valo
Cc: linux-wireless, linux-kernel, Sascha Hauer
mwifiex_hs_activated_event() takes a struct mwifiex_private * as
context pointer which this function doesn't need directly and the callers
don't have. Use struct mwifiex_adapter * instead to simplify both the
function and the callers.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
drivers/net/wireless/marvell/mwifiex/cmdevt.c | 44 ++++++++++++---------------
drivers/net/wireless/marvell/mwifiex/main.c | 15 ++-------
drivers/net/wireless/marvell/mwifiex/main.h | 2 +-
3 files changed, 23 insertions(+), 38 deletions(-)
diff --git a/drivers/net/wireless/marvell/mwifiex/cmdevt.c b/drivers/net/wireless/marvell/mwifiex/cmdevt.c
index cdfb307e75131..0c175c6a1b201 100644
--- a/drivers/net/wireless/marvell/mwifiex/cmdevt.c
+++ b/drivers/net/wireless/marvell/mwifiex/cmdevt.c
@@ -367,8 +367,7 @@ static int mwifiex_dnld_sleep_confirm_cmd(struct mwifiex_adapter *adapter)
(test_bit(MWIFIEX_IS_HS_CONFIGURED, &adapter->work_flags) &&
!adapter->sleep_period.period)) {
adapter->pm_wakeup_card_req = true;
- mwifiex_hs_activated_event(mwifiex_get_priv
- (adapter, MWIFIEX_BSS_ROLE_ANY), true);
+ mwifiex_hs_activated_event(adapter, true);
}
return ret;
@@ -784,17 +783,16 @@ int mwifiex_exec_next_cmd(struct mwifiex_adapter *adapter)
spin_unlock_bh(&adapter->mwifiex_cmd_lock);
ret = mwifiex_dnld_cmd_to_fw(priv, cmd_node);
- priv = mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY);
+
/* Any command sent to the firmware when host is in sleep
* mode should de-configure host sleep. We should skip the
* host sleep configuration command itself though
*/
- if (priv && (host_cmd->command !=
- cpu_to_le16(HostCmd_CMD_802_11_HS_CFG_ENH))) {
+ if (host_cmd->command != cpu_to_le16(HostCmd_CMD_802_11_HS_CFG_ENH)) {
if (adapter->hs_activated) {
clear_bit(MWIFIEX_IS_HS_CONFIGURED,
&adapter->work_flags);
- mwifiex_hs_activated_event(priv, false);
+ mwifiex_hs_activated_event(adapter, false);
}
}
@@ -1160,27 +1158,27 @@ mwifiex_check_ps_cond(struct mwifiex_adapter *adapter)
* This event is generated by the driver, with a blank event body.
*/
void
-mwifiex_hs_activated_event(struct mwifiex_private *priv, u8 activated)
+mwifiex_hs_activated_event(struct mwifiex_adapter *adapter, u8 activated)
{
if (activated) {
if (test_bit(MWIFIEX_IS_HS_CONFIGURED,
- &priv->adapter->work_flags)) {
- priv->adapter->hs_activated = true;
- mwifiex_update_rxreor_flags(priv->adapter,
+ &adapter->work_flags)) {
+ adapter->hs_activated = true;
+ mwifiex_update_rxreor_flags(adapter,
RXREOR_FORCE_NO_DROP);
- mwifiex_dbg(priv->adapter, EVENT,
+ mwifiex_dbg(adapter, EVENT,
"event: hs_activated\n");
- priv->adapter->hs_activate_wait_q_woken = true;
+ adapter->hs_activate_wait_q_woken = true;
wake_up_interruptible(
- &priv->adapter->hs_activate_wait_q);
+ &adapter->hs_activate_wait_q);
} else {
- mwifiex_dbg(priv->adapter, EVENT,
+ mwifiex_dbg(adapter, EVENT,
"event: HS not configured\n");
}
} else {
- mwifiex_dbg(priv->adapter, EVENT,
+ mwifiex_dbg(adapter, EVENT,
"event: hs_deactivated\n");
- priv->adapter->hs_activated = false;
+ adapter->hs_activated = false;
}
}
@@ -1204,7 +1202,7 @@ int mwifiex_ret_802_11_hs_cfg(struct mwifiex_private *priv,
if (phs_cfg->action == cpu_to_le16(HS_ACTIVATE) &&
adapter->iface_type != MWIFIEX_USB) {
- mwifiex_hs_activated_event(priv, true);
+ mwifiex_hs_activated_event(adapter, true);
return 0;
} else {
mwifiex_dbg(adapter, CMD,
@@ -1217,11 +1215,11 @@ int mwifiex_ret_802_11_hs_cfg(struct mwifiex_private *priv,
if (conditions != HS_CFG_CANCEL) {
set_bit(MWIFIEX_IS_HS_CONFIGURED, &adapter->work_flags);
if (adapter->iface_type == MWIFIEX_USB)
- mwifiex_hs_activated_event(priv, true);
+ mwifiex_hs_activated_event(adapter, true);
} else {
clear_bit(MWIFIEX_IS_HS_CONFIGURED, &adapter->work_flags);
if (adapter->hs_activated)
- mwifiex_hs_activated_event(priv, false);
+ mwifiex_hs_activated_event(adapter, false);
}
return 0;
@@ -1250,9 +1248,7 @@ mwifiex_process_hs_config(struct mwifiex_adapter *adapter)
adapter->hs_activated = false;
clear_bit(MWIFIEX_IS_HS_CONFIGURED, &adapter->work_flags);
clear_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags);
- mwifiex_hs_activated_event(mwifiex_get_priv(adapter,
- MWIFIEX_BSS_ROLE_ANY),
- false);
+ mwifiex_hs_activated_event(adapter, false);
}
EXPORT_SYMBOL_GPL(mwifiex_process_hs_config);
@@ -1302,9 +1298,7 @@ mwifiex_process_sleep_confirm_resp(struct mwifiex_adapter *adapter,
}
adapter->pm_wakeup_card_req = true;
if (test_bit(MWIFIEX_IS_HS_CONFIGURED, &adapter->work_flags))
- mwifiex_hs_activated_event(mwifiex_get_priv
- (adapter, MWIFIEX_BSS_ROLE_ANY),
- true);
+ mwifiex_hs_activated_event(adapter, true);
adapter->ps_state = PS_STATE_SLEEP;
cmd->command = cpu_to_le16(command);
cmd->seq_num = cpu_to_le16(seq_num);
diff --git a/drivers/net/wireless/marvell/mwifiex/main.c b/drivers/net/wireless/marvell/mwifiex/main.c
index 46acddd03ffd1..588887aa29a79 100644
--- a/drivers/net/wireless/marvell/mwifiex/main.c
+++ b/drivers/net/wireless/marvell/mwifiex/main.c
@@ -415,10 +415,7 @@ int mwifiex_main_process(struct mwifiex_adapter *adapter)
if (adapter->hs_activated) {
clear_bit(MWIFIEX_IS_HS_CONFIGURED,
&adapter->work_flags);
- mwifiex_hs_activated_event
- (mwifiex_get_priv
- (adapter, MWIFIEX_BSS_ROLE_ANY),
- false);
+ mwifiex_hs_activated_event(adapter, false);
}
}
@@ -438,10 +435,7 @@ int mwifiex_main_process(struct mwifiex_adapter *adapter)
if (adapter->hs_activated) {
clear_bit(MWIFIEX_IS_HS_CONFIGURED,
&adapter->work_flags);
- mwifiex_hs_activated_event
- (mwifiex_get_priv
- (adapter, MWIFIEX_BSS_ROLE_ANY),
- false);
+ mwifiex_hs_activated_event(adapter, false);
}
}
@@ -460,10 +454,7 @@ int mwifiex_main_process(struct mwifiex_adapter *adapter)
if (adapter->hs_activated) {
clear_bit(MWIFIEX_IS_HS_CONFIGURED,
&adapter->work_flags);
- mwifiex_hs_activated_event
- (mwifiex_get_priv
- (adapter, MWIFIEX_BSS_ROLE_ANY),
- false);
+ mwifiex_hs_activated_event(adapter, false);
}
}
diff --git a/drivers/net/wireless/marvell/mwifiex/main.h b/drivers/net/wireless/marvell/mwifiex/main.h
index dc07eb11f7752..ce5b80af305a0 100644
--- a/drivers/net/wireless/marvell/mwifiex/main.h
+++ b/drivers/net/wireless/marvell/mwifiex/main.h
@@ -1129,7 +1129,7 @@ int mwifiex_ret_enh_power_mode(struct mwifiex_private *priv,
struct host_cmd_ds_command *resp,
struct mwifiex_ds_pm_cfg *pm_cfg);
void mwifiex_process_hs_config(struct mwifiex_adapter *adapter);
-void mwifiex_hs_activated_event(struct mwifiex_private *priv,
+void mwifiex_hs_activated_event(struct mwifiex_adapter *adapter,
u8 activated);
int mwifiex_set_hs_params(struct mwifiex_private *priv, u16 action,
int cmd_type, struct mwifiex_ds_hs_cfg *hs_cfg);
--
2.39.2
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 05/12] wifi: mwifiex: drop unnecessary initialization
2024-08-26 11:01 [PATCH 00/12] mwifiex: two fixes and cleanup Sascha Hauer
` (3 preceding siblings ...)
2024-08-26 11:01 ` [PATCH 04/12] wifi: mwifiex: use adapter as context pointer for mwifiex_hs_activated_event() Sascha Hauer
@ 2024-08-26 11:01 ` Sascha Hauer
2024-09-06 15:07 ` Francesco Dolcini
2024-08-26 11:01 ` [PATCH 06/12] wifi: mwifiex: make region_code_mapping_t const Sascha Hauer
` (6 subsequent siblings)
11 siblings, 1 reply; 32+ messages in thread
From: Sascha Hauer @ 2024-08-26 11:01 UTC (permalink / raw)
To: Brian Norris, Francesco Dolcini, Kalle Valo
Cc: linux-wireless, linux-kernel, Sascha Hauer
Several functions initialize the priv * without actually using the
initialized value. Drop the initialization.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
drivers/net/wireless/marvell/mwifiex/cmdevt.c | 6 ++----
drivers/net/wireless/marvell/mwifiex/txrx.c | 3 +--
2 files changed, 3 insertions(+), 6 deletions(-)
diff --git a/drivers/net/wireless/marvell/mwifiex/cmdevt.c b/drivers/net/wireless/marvell/mwifiex/cmdevt.c
index 0c175c6a1b201..8a2ad0038d36f 100644
--- a/drivers/net/wireless/marvell/mwifiex/cmdevt.c
+++ b/drivers/net/wireless/marvell/mwifiex/cmdevt.c
@@ -472,8 +472,7 @@ void mwifiex_free_cmd_buffer(struct mwifiex_adapter *adapter)
int mwifiex_process_event(struct mwifiex_adapter *adapter)
{
int ret, i;
- struct mwifiex_private *priv =
- mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY);
+ struct mwifiex_private *priv;
struct sk_buff *skb = adapter->event_skb;
u32 eventcause;
struct mwifiex_rxinfo *rx_info;
@@ -808,8 +807,7 @@ int mwifiex_exec_next_cmd(struct mwifiex_adapter *adapter)
int mwifiex_process_cmdresp(struct mwifiex_adapter *adapter)
{
struct host_cmd_ds_command *resp;
- struct mwifiex_private *priv =
- mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY);
+ struct mwifiex_private *priv;
int ret = 0;
uint16_t orig_cmdresp_no;
uint16_t cmdresp_no;
diff --git a/drivers/net/wireless/marvell/mwifiex/txrx.c b/drivers/net/wireless/marvell/mwifiex/txrx.c
index bd91678d26b49..f44e22f245110 100644
--- a/drivers/net/wireless/marvell/mwifiex/txrx.c
+++ b/drivers/net/wireless/marvell/mwifiex/txrx.c
@@ -24,8 +24,7 @@
int mwifiex_handle_rx_packet(struct mwifiex_adapter *adapter,
struct sk_buff *skb)
{
- struct mwifiex_private *priv =
- mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY);
+ struct mwifiex_private *priv;
struct rxpd *local_rx_pd;
struct mwifiex_rxinfo *rx_info = MWIFIEX_SKB_RXCB(skb);
int ret;
--
2.39.2
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 06/12] wifi: mwifiex: make region_code_mapping_t const
2024-08-26 11:01 [PATCH 00/12] mwifiex: two fixes and cleanup Sascha Hauer
` (4 preceding siblings ...)
2024-08-26 11:01 ` [PATCH 05/12] wifi: mwifiex: drop unnecessary initialization Sascha Hauer
@ 2024-08-26 11:01 ` Sascha Hauer
2024-09-06 15:08 ` Francesco Dolcini
2024-08-26 11:01 ` [PATCH 07/12] wifi: mwifiex: pass adapter to mwifiex_dnld_cmd_to_fw() Sascha Hauer
` (5 subsequent siblings)
11 siblings, 1 reply; 32+ messages in thread
From: Sascha Hauer @ 2024-08-26 11:01 UTC (permalink / raw)
To: Brian Norris, Francesco Dolcini, Kalle Valo
Cc: linux-wireless, linux-kernel, Sascha Hauer
region_code_mapping_t is not modified and shouldn't be. Mark it const.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
drivers/net/wireless/marvell/mwifiex/cfg80211.c | 2 +-
drivers/net/wireless/marvell/mwifiex/cfp.c | 4 ++--
drivers/net/wireless/marvell/mwifiex/main.h | 2 +-
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
index d3e1424bea390..8cf6267b03579 100644
--- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c
+++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
@@ -4701,7 +4701,7 @@ int mwifiex_register_cfg80211(struct mwifiex_adapter *adapter)
void *wdev_priv;
struct wiphy *wiphy;
struct mwifiex_private *priv = adapter->priv[MWIFIEX_BSS_TYPE_STA];
- u8 *country_code;
+ const u8 *country_code;
u32 thr, retry;
struct cfg80211_ops *ops;
diff --git a/drivers/net/wireless/marvell/mwifiex/cfp.c b/drivers/net/wireless/marvell/mwifiex/cfp.c
index d39092b992129..47c93dca6041b 100644
--- a/drivers/net/wireless/marvell/mwifiex/cfp.c
+++ b/drivers/net/wireless/marvell/mwifiex/cfp.c
@@ -153,7 +153,7 @@ struct region_code_mapping {
u8 region[IEEE80211_COUNTRY_STRING_LEN];
};
-static struct region_code_mapping region_code_mapping_t[] = {
+static const struct region_code_mapping region_code_mapping_t[] = {
{ 0x10, "US " }, /* US FCC */
{ 0x20, "CA " }, /* IC Canada */
{ 0x30, "FR " }, /* France */
@@ -165,7 +165,7 @@ static struct region_code_mapping region_code_mapping_t[] = {
};
/* This function converts integer code to region string */
-u8 *mwifiex_11d_code_2_region(u8 code)
+const u8 *mwifiex_11d_code_2_region(u8 code)
{
u8 i;
diff --git a/drivers/net/wireless/marvell/mwifiex/main.h b/drivers/net/wireless/marvell/mwifiex/main.h
index ce5b80af305a0..56f413cb6eb30 100644
--- a/drivers/net/wireless/marvell/mwifiex/main.h
+++ b/drivers/net/wireless/marvell/mwifiex/main.h
@@ -1569,7 +1569,7 @@ int mwifiex_add_wowlan_magic_pkt_filter(struct mwifiex_adapter *adapter);
int mwifiex_set_mgmt_ies(struct mwifiex_private *priv,
struct cfg80211_beacon_data *data);
int mwifiex_del_mgmt_ies(struct mwifiex_private *priv);
-u8 *mwifiex_11d_code_2_region(u8 code);
+const u8 *mwifiex_11d_code_2_region(u8 code);
void mwifiex_uap_set_channel(struct mwifiex_private *priv,
struct mwifiex_uap_bss_param *bss_cfg,
struct cfg80211_chan_def chandef);
--
2.39.2
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 07/12] wifi: mwifiex: pass adapter to mwifiex_dnld_cmd_to_fw()
2024-08-26 11:01 [PATCH 00/12] mwifiex: two fixes and cleanup Sascha Hauer
` (5 preceding siblings ...)
2024-08-26 11:01 ` [PATCH 06/12] wifi: mwifiex: make region_code_mapping_t const Sascha Hauer
@ 2024-08-26 11:01 ` Sascha Hauer
2024-09-06 15:11 ` Francesco Dolcini
2024-08-26 11:01 ` [PATCH 08/12] wifi: mwifiex: simplify mwifiex_setup_ht_caps() Sascha Hauer
` (4 subsequent siblings)
11 siblings, 1 reply; 32+ messages in thread
From: Sascha Hauer @ 2024-08-26 11:01 UTC (permalink / raw)
To: Brian Norris, Francesco Dolcini, Kalle Valo
Cc: linux-wireless, linux-kernel, Sascha Hauer
priv is not needed in mwifiex_dnld_cmd_to_fw(), so pass the adapter to
it as context pointer.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
drivers/net/wireless/marvell/mwifiex/cmdevt.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/drivers/net/wireless/marvell/mwifiex/cmdevt.c b/drivers/net/wireless/marvell/mwifiex/cmdevt.c
index 8a2ad0038d36f..402531a03ece3 100644
--- a/drivers/net/wireless/marvell/mwifiex/cmdevt.c
+++ b/drivers/net/wireless/marvell/mwifiex/cmdevt.c
@@ -159,11 +159,9 @@ static int mwifiex_cmd_host_cmd(struct mwifiex_private *priv,
* sending. Afterwards, it logs the command ID and action for debugging
* and sets up the command timeout timer.
*/
-static int mwifiex_dnld_cmd_to_fw(struct mwifiex_private *priv,
+static int mwifiex_dnld_cmd_to_fw(struct mwifiex_adapter *adapter,
struct cmd_ctrl_node *cmd_node)
{
-
- struct mwifiex_adapter *adapter = priv->adapter;
int ret;
struct host_cmd_ds_command *host_cmd;
uint16_t cmd_code;
@@ -742,7 +740,6 @@ mwifiex_insert_cmd_to_pending_q(struct mwifiex_adapter *adapter,
*/
int mwifiex_exec_next_cmd(struct mwifiex_adapter *adapter)
{
- struct mwifiex_private *priv;
struct cmd_ctrl_node *cmd_node;
int ret = 0;
struct host_cmd_ds_command *host_cmd;
@@ -766,7 +763,6 @@ int mwifiex_exec_next_cmd(struct mwifiex_adapter *adapter)
struct cmd_ctrl_node, list);
host_cmd = (struct host_cmd_ds_command *) (cmd_node->cmd_skb->data);
- priv = cmd_node->priv;
if (adapter->ps_state != PS_STATE_AWAKE) {
mwifiex_dbg(adapter, ERROR,
@@ -781,7 +777,7 @@ int mwifiex_exec_next_cmd(struct mwifiex_adapter *adapter)
spin_unlock_bh(&adapter->cmd_pending_q_lock);
spin_unlock_bh(&adapter->mwifiex_cmd_lock);
- ret = mwifiex_dnld_cmd_to_fw(priv, cmd_node);
+ ret = mwifiex_dnld_cmd_to_fw(adapter, cmd_node);
/* Any command sent to the firmware when host is in sleep
* mode should de-configure host sleep. We should skip the
--
2.39.2
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 08/12] wifi: mwifiex: simplify mwifiex_setup_ht_caps()
2024-08-26 11:01 [PATCH 00/12] mwifiex: two fixes and cleanup Sascha Hauer
` (6 preceding siblings ...)
2024-08-26 11:01 ` [PATCH 07/12] wifi: mwifiex: pass adapter to mwifiex_dnld_cmd_to_fw() Sascha Hauer
@ 2024-08-26 11:01 ` Sascha Hauer
2024-09-09 17:04 ` Francesco Dolcini
2024-08-26 11:01 ` [PATCH 09/12] wifi: mwifiex: fix indention Sascha Hauer
` (3 subsequent siblings)
11 siblings, 1 reply; 32+ messages in thread
From: Sascha Hauer @ 2024-08-26 11:01 UTC (permalink / raw)
To: Brian Norris, Francesco Dolcini, Kalle Valo
Cc: linux-wireless, linux-kernel, Sascha Hauer
In mwifiex_setup_ht_caps() first a local struct ieee80211_mcs_info
is initialized and afterwards copied over &ht_info->mcs. Simplify
this by initializing &ht_info->mcs directly.
While at it call memset on the u8 rx_mask[] array instead of the struct
which makes the intention clearer and we no longer have to assume the
rx_mask array is the first member of struct ieee80211_mcs_info.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
drivers/net/wireless/marvell/mwifiex/cfg80211.c | 16 +++++-----------
1 file changed, 5 insertions(+), 11 deletions(-)
diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
index 8cf6267b03579..8746943c17788 100644
--- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c
+++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
@@ -2904,16 +2904,12 @@ mwifiex_setup_ht_caps(struct ieee80211_sta_ht_cap *ht_info,
struct mwifiex_private *priv)
{
int rx_mcs_supp;
- struct ieee80211_mcs_info mcs_set;
- u8 *mcs = (u8 *)&mcs_set;
struct mwifiex_adapter *adapter = priv->adapter;
ht_info->ht_supported = true;
ht_info->ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
ht_info->ampdu_density = IEEE80211_HT_MPDU_DENSITY_NONE;
- memset(&ht_info->mcs, 0, sizeof(ht_info->mcs));
-
/* Fill HT capability information */
if (ISSUPP_CHANWIDTH40(adapter->hw_dot_11n_dev_cap))
ht_info->cap |= IEEE80211_HT_CAP_SUP_WIDTH_20_40;
@@ -2959,17 +2955,15 @@ mwifiex_setup_ht_caps(struct ieee80211_sta_ht_cap *ht_info,
ht_info->cap |= IEEE80211_HT_CAP_SM_PS;
rx_mcs_supp = GET_RXMCSSUPP(adapter->user_dev_mcs_support);
+
+ memset(&ht_info->mcs, 0, sizeof(ht_info->mcs));
/* Set MCS for 1x1/2x2 */
- memset(mcs, 0xff, rx_mcs_supp);
- /* Clear all the other values */
- memset(&mcs[rx_mcs_supp], 0,
- sizeof(struct ieee80211_mcs_info) - rx_mcs_supp);
+ memset(ht_info->mcs.rx_mask, 0xff, rx_mcs_supp);
+
if (priv->bss_mode == NL80211_IFTYPE_STATION ||
ISSUPP_CHANWIDTH40(adapter->hw_dot_11n_dev_cap))
/* Set MCS32 for infra mode or ad-hoc mode with 40MHz support */
- SETHT_MCS32(mcs_set.rx_mask);
-
- memcpy((u8 *) &ht_info->mcs, mcs, sizeof(struct ieee80211_mcs_info));
+ SETHT_MCS32(ht_info->mcs.rx_mask);
ht_info->mcs.tx_params = IEEE80211_HT_MCS_TX_DEFINED;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 09/12] wifi: mwifiex: fix indention
2024-08-26 11:01 [PATCH 00/12] mwifiex: two fixes and cleanup Sascha Hauer
` (7 preceding siblings ...)
2024-08-26 11:01 ` [PATCH 08/12] wifi: mwifiex: simplify mwifiex_setup_ht_caps() Sascha Hauer
@ 2024-08-26 11:01 ` Sascha Hauer
2024-09-06 15:15 ` Francesco Dolcini
2024-08-26 11:01 ` [PATCH 10/12] wifi: mwifiex: make locally used function static Sascha Hauer
` (2 subsequent siblings)
11 siblings, 1 reply; 32+ messages in thread
From: Sascha Hauer @ 2024-08-26 11:01 UTC (permalink / raw)
To: Brian Norris, Francesco Dolcini, Kalle Valo
Cc: linux-wireless, linux-kernel, Sascha Hauer
Align multiline if() under the opening brace.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
drivers/net/wireless/marvell/mwifiex/wmm.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/net/wireless/marvell/mwifiex/wmm.c b/drivers/net/wireless/marvell/mwifiex/wmm.c
index bcb61dab7dc86..1b1222c73728f 100644
--- a/drivers/net/wireless/marvell/mwifiex/wmm.c
+++ b/drivers/net/wireless/marvell/mwifiex/wmm.c
@@ -1428,13 +1428,13 @@ mwifiex_dequeue_tx_packet(struct mwifiex_adapter *adapter)
}
if (!ptr->is_11n_enabled ||
- ptr->ba_status ||
- priv->wps.session_enable) {
+ ptr->ba_status ||
+ priv->wps.session_enable) {
if (ptr->is_11n_enabled &&
- ptr->ba_status &&
- ptr->amsdu_in_ampdu &&
- mwifiex_is_amsdu_allowed(priv, tid) &&
- mwifiex_is_11n_aggragation_possible(priv, ptr,
+ ptr->ba_status &&
+ ptr->amsdu_in_ampdu &&
+ mwifiex_is_amsdu_allowed(priv, tid) &&
+ mwifiex_is_11n_aggragation_possible(priv, ptr,
adapter->tx_buf_size))
mwifiex_11n_aggregate_pkt(priv, ptr, ptr_index);
/* ra_list_spinlock has been freed in
--
2.39.2
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 10/12] wifi: mwifiex: make locally used function static
2024-08-26 11:01 [PATCH 00/12] mwifiex: two fixes and cleanup Sascha Hauer
` (8 preceding siblings ...)
2024-08-26 11:01 ` [PATCH 09/12] wifi: mwifiex: fix indention Sascha Hauer
@ 2024-08-26 11:01 ` Sascha Hauer
2024-09-06 15:16 ` Francesco Dolcini
2024-08-26 11:01 ` [PATCH 11/12] wifi: mwifiex: move common settings out of switch/case Sascha Hauer
2024-08-26 11:01 ` [PATCH 12/12] wifi: mwifiex: drop asynchronous init waiting code Sascha Hauer
11 siblings, 1 reply; 32+ messages in thread
From: Sascha Hauer @ 2024-08-26 11:01 UTC (permalink / raw)
To: Brian Norris, Francesco Dolcini, Kalle Valo
Cc: linux-wireless, linux-kernel, Sascha Hauer
mwifiex_is_tdls_off_chan() is only used locally. Make it static.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
drivers/net/wireless/marvell/mwifiex/main.h | 1 -
drivers/net/wireless/marvell/mwifiex/util.c | 2 +-
2 files changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/net/wireless/marvell/mwifiex/main.h b/drivers/net/wireless/marvell/mwifiex/main.h
index 56f413cb6eb30..f026e6069be3f 100644
--- a/drivers/net/wireless/marvell/mwifiex/main.h
+++ b/drivers/net/wireless/marvell/mwifiex/main.h
@@ -1604,7 +1604,6 @@ mwifiex_add_sta_entry(struct mwifiex_private *priv, const u8 *mac);
struct mwifiex_sta_node *
mwifiex_get_sta_entry(struct mwifiex_private *priv, const u8 *mac);
u8 mwifiex_is_tdls_chan_switching(struct mwifiex_private *priv);
-u8 mwifiex_is_tdls_off_chan(struct mwifiex_private *priv);
u8 mwifiex_is_send_cmd_allowed(struct mwifiex_private *priv);
int mwifiex_send_tdls_data_frame(struct mwifiex_private *priv, const u8 *peer,
u8 action_code, u8 dialog_token,
diff --git a/drivers/net/wireless/marvell/mwifiex/util.c b/drivers/net/wireless/marvell/mwifiex/util.c
index 1f1f6280a0f25..ea28d604ee69c 100644
--- a/drivers/net/wireless/marvell/mwifiex/util.c
+++ b/drivers/net/wireless/marvell/mwifiex/util.c
@@ -663,7 +663,7 @@ u8 mwifiex_is_tdls_chan_switching(struct mwifiex_private *priv)
return false;
}
-u8 mwifiex_is_tdls_off_chan(struct mwifiex_private *priv)
+static u8 mwifiex_is_tdls_off_chan(struct mwifiex_private *priv)
{
struct mwifiex_sta_node *sta_ptr;
--
2.39.2
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 11/12] wifi: mwifiex: move common settings out of switch/case
2024-08-26 11:01 [PATCH 00/12] mwifiex: two fixes and cleanup Sascha Hauer
` (9 preceding siblings ...)
2024-08-26 11:01 ` [PATCH 10/12] wifi: mwifiex: make locally used function static Sascha Hauer
@ 2024-08-26 11:01 ` Sascha Hauer
2024-09-09 17:09 ` Francesco Dolcini
2024-08-26 11:01 ` [PATCH 12/12] wifi: mwifiex: drop asynchronous init waiting code Sascha Hauer
11 siblings, 1 reply; 32+ messages in thread
From: Sascha Hauer @ 2024-08-26 11:01 UTC (permalink / raw)
To: Brian Norris, Francesco Dolcini, Kalle Valo
Cc: linux-wireless, linux-kernel, Sascha Hauer
In mwifiex_add_virtual_intf() several settings done in a switch/case
are the same in all cases. Move them out of the switch/case to
deduplicate the code.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
drivers/net/wireless/marvell/mwifiex/cfg80211.c | 16 +++++-----------
1 file changed, 5 insertions(+), 11 deletions(-)
diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
index 8746943c17788..2ce54a3fc32f8 100644
--- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c
+++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
@@ -3005,7 +3005,6 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
return ERR_PTR(-EFAULT);
}
- priv->wdev.wiphy = wiphy;
priv->wdev.iftype = NL80211_IFTYPE_STATION;
if (type == NL80211_IFTYPE_UNSPECIFIED)
@@ -3014,8 +3013,6 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
priv->bss_mode = type;
priv->bss_type = MWIFIEX_BSS_TYPE_STA;
- priv->frame_type = MWIFIEX_DATA_FRAME_TYPE_ETH_II;
- priv->bss_priority = 0;
priv->bss_role = MWIFIEX_BSS_ROLE_STA;
break;
@@ -3035,14 +3032,10 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
return ERR_PTR(-EFAULT);
}
- priv->wdev.wiphy = wiphy;
priv->wdev.iftype = NL80211_IFTYPE_AP;
priv->bss_type = MWIFIEX_BSS_TYPE_UAP;
- priv->frame_type = MWIFIEX_DATA_FRAME_TYPE_ETH_II;
- priv->bss_priority = 0;
priv->bss_role = MWIFIEX_BSS_ROLE_UAP;
- priv->bss_started = 0;
priv->bss_mode = type;
break;
@@ -3062,7 +3055,6 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
return ERR_PTR(-EFAULT);
}
- priv->wdev.wiphy = wiphy;
/* At start-up, wpa_supplicant tries to change the interface
* to NL80211_IFTYPE_STATION if it is not managed mode.
*/
@@ -3075,10 +3067,7 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
*/
priv->bss_type = MWIFIEX_BSS_TYPE_P2P;
- priv->frame_type = MWIFIEX_DATA_FRAME_TYPE_ETH_II;
- priv->bss_priority = 0;
priv->bss_role = MWIFIEX_BSS_ROLE_STA;
- priv->bss_started = 0;
if (mwifiex_cfg80211_init_p2p_client(priv)) {
memset(&priv->wdev, 0, sizeof(priv->wdev));
@@ -3092,6 +3081,11 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
return ERR_PTR(-EINVAL);
}
+ priv->wdev.wiphy = wiphy;
+ priv->bss_priority = 0;
+ priv->bss_started = 0;
+ priv->frame_type = MWIFIEX_DATA_FRAME_TYPE_ETH_II;
+
dev = alloc_netdev_mqs(sizeof(struct mwifiex_private *), name,
name_assign_type, ether_setup,
IEEE80211_NUM_ACS, 1);
--
2.39.2
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH 12/12] wifi: mwifiex: drop asynchronous init waiting code
2024-08-26 11:01 [PATCH 00/12] mwifiex: two fixes and cleanup Sascha Hauer
` (10 preceding siblings ...)
2024-08-26 11:01 ` [PATCH 11/12] wifi: mwifiex: move common settings out of switch/case Sascha Hauer
@ 2024-08-26 11:01 ` Sascha Hauer
2024-09-09 17:14 ` Francesco Dolcini
11 siblings, 1 reply; 32+ messages in thread
From: Sascha Hauer @ 2024-08-26 11:01 UTC (permalink / raw)
To: Brian Norris, Francesco Dolcini, Kalle Valo
Cc: linux-wireless, linux-kernel, Sascha Hauer
Historically all commands sent to the mwifiex driver have been
asynchronous. For this reason there is code that waits for the
last initialization command to complete before going on. Nowadays the
commands can be sent synchronously, meaning that they are completed
when the command call returns. This makes all the waiting code
unnecessary. It is removed in this patch.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
drivers/net/wireless/marvell/mwifiex/cmdevt.c | 16 ----------------
drivers/net/wireless/marvell/mwifiex/init.c | 18 +++++-------------
drivers/net/wireless/marvell/mwifiex/main.c | 25 +++----------------------
drivers/net/wireless/marvell/mwifiex/main.h | 6 ------
drivers/net/wireless/marvell/mwifiex/sta_cmd.c | 6 ------
drivers/net/wireless/marvell/mwifiex/util.c | 18 ------------------
6 files changed, 8 insertions(+), 81 deletions(-)
diff --git a/drivers/net/wireless/marvell/mwifiex/cmdevt.c b/drivers/net/wireless/marvell/mwifiex/cmdevt.c
index 402531a03ece3..8a614dc993b2c 100644
--- a/drivers/net/wireless/marvell/mwifiex/cmdevt.c
+++ b/drivers/net/wireless/marvell/mwifiex/cmdevt.c
@@ -892,18 +892,6 @@ int mwifiex_process_cmdresp(struct mwifiex_adapter *adapter)
ret = mwifiex_process_sta_cmdresp(priv, cmdresp_no, resp);
}
- /* Check init command response */
- if (adapter->hw_status == MWIFIEX_HW_STATUS_INITIALIZING) {
- if (ret) {
- mwifiex_dbg(adapter, ERROR,
- "%s: cmd %#x failed during\t"
- "initialization\n", __func__, cmdresp_no);
- mwifiex_init_fw_complete(adapter);
- return -1;
- } else if (adapter->last_init_cmd == cmdresp_no)
- adapter->hw_status = MWIFIEX_HW_STATUS_INIT_DONE;
- }
-
if (adapter->curr_cmd) {
if (adapter->curr_cmd->wait_q_enabled)
adapter->cmd_wait_q.status = ret;
@@ -1022,10 +1010,6 @@ mwifiex_cmd_timeout_func(struct timer_list *t)
mwifiex_cancel_pending_ioctl(adapter);
}
}
- if (adapter->hw_status == MWIFIEX_HW_STATUS_INITIALIZING) {
- mwifiex_init_fw_complete(adapter);
- return;
- }
if (adapter->if_ops.device_dump)
adapter->if_ops.device_dump(adapter);
diff --git a/drivers/net/wireless/marvell/mwifiex/init.c b/drivers/net/wireless/marvell/mwifiex/init.c
index 0259c9f88486b..b27596c7c02cb 100644
--- a/drivers/net/wireless/marvell/mwifiex/init.c
+++ b/drivers/net/wireless/marvell/mwifiex/init.c
@@ -486,7 +486,6 @@ int mwifiex_init_fw(struct mwifiex_adapter *adapter)
int ret;
struct mwifiex_private *priv;
u8 i, first_sta = true;
- int is_cmd_pend_q_empty;
adapter->hw_status = MWIFIEX_HW_STATUS_INITIALIZING;
@@ -508,7 +507,6 @@ int mwifiex_init_fw(struct mwifiex_adapter *adapter)
}
if (adapter->mfg_mode) {
adapter->hw_status = MWIFIEX_HW_STATUS_READY;
- ret = -EINPROGRESS;
} else {
for (i = 0; i < adapter->priv_num; i++) {
ret = mwifiex_sta_init_cmd(adapter->priv[i],
@@ -520,18 +518,12 @@ int mwifiex_init_fw(struct mwifiex_adapter *adapter)
}
}
- spin_lock_bh(&adapter->cmd_pending_q_lock);
- is_cmd_pend_q_empty = list_empty(&adapter->cmd_pending_q);
- spin_unlock_bh(&adapter->cmd_pending_q_lock);
- if (!is_cmd_pend_q_empty) {
- /* Send the first command in queue and return */
- if (mwifiex_main_process(adapter) != -1)
- ret = -EINPROGRESS;
- } else {
- adapter->hw_status = MWIFIEX_HW_STATUS_READY;
- }
+ adapter->hw_status = MWIFIEX_HW_STATUS_READY;
- return ret;
+ if (adapter->if_ops.init_fw_port)
+ adapter->if_ops.init_fw_port(adapter);
+
+ return 0;
}
/*
diff --git a/drivers/net/wireless/marvell/mwifiex/main.c b/drivers/net/wireless/marvell/mwifiex/main.c
index 588887aa29a79..63344e2e03656 100644
--- a/drivers/net/wireless/marvell/mwifiex/main.c
+++ b/drivers/net/wireless/marvell/mwifiex/main.c
@@ -354,13 +354,6 @@ int mwifiex_main_process(struct mwifiex_adapter *adapter)
if (adapter->cmd_resp_received) {
adapter->cmd_resp_received = false;
mwifiex_process_cmdresp(adapter);
-
- /* call mwifiex back when init_fw is done */
- if (adapter->hw_status == MWIFIEX_HW_STATUS_INIT_DONE) {
- adapter->hw_status = MWIFIEX_HW_STATUS_READY;
- mwifiex_init_fw_complete(adapter);
- maybe_quirk_fw_disable_ds(adapter);
- }
}
/* Check if we need to confirm Sleep Request
@@ -578,21 +571,11 @@ static int _mwifiex_fw_dpc(const struct firmware *firmware, void *context)
goto err_dnld_fw;
}
- adapter->init_wait_q_woken = false;
ret = mwifiex_init_fw(adapter);
- if (ret == -1) {
+ if (ret < 0)
goto err_init_fw;
- } else if (!ret) {
- adapter->hw_status = MWIFIEX_HW_STATUS_READY;
- goto done;
- }
- /* Wait for mwifiex_init to complete */
- if (!adapter->mfg_mode) {
- wait_event_interruptible(adapter->init_wait_q,
- adapter->init_wait_q_woken);
- if (adapter->hw_status != MWIFIEX_HW_STATUS_READY)
- goto err_init_fw;
- }
+
+ maybe_quirk_fw_disable_ds(adapter);
if (!adapter->wiphy) {
if (mwifiex_register_cfg80211(adapter)) {
@@ -1551,7 +1534,6 @@ mwifiex_reinit_sw(struct mwifiex_adapter *adapter)
adapter->hw_status = MWIFIEX_HW_STATUS_INITIALIZING;
clear_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags);
- init_waitqueue_head(&adapter->init_wait_q);
clear_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags);
adapter->hs_activated = false;
clear_bit(MWIFIEX_IS_CMD_TIMEDOUT, &adapter->work_flags);
@@ -1719,7 +1701,6 @@ mwifiex_add_card(void *card, struct completion *fw_done,
adapter->hw_status = MWIFIEX_HW_STATUS_INITIALIZING;
clear_bit(MWIFIEX_SURPRISE_REMOVED, &adapter->work_flags);
- init_waitqueue_head(&adapter->init_wait_q);
clear_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags);
adapter->hs_activated = false;
init_waitqueue_head(&adapter->hs_activate_wait_q);
diff --git a/drivers/net/wireless/marvell/mwifiex/main.h b/drivers/net/wireless/marvell/mwifiex/main.h
index f026e6069be3f..1eb0b5f9cb4a5 100644
--- a/drivers/net/wireless/marvell/mwifiex/main.h
+++ b/drivers/net/wireless/marvell/mwifiex/main.h
@@ -240,7 +240,6 @@ struct mwifiex_dbg {
enum MWIFIEX_HARDWARE_STATUS {
MWIFIEX_HW_STATUS_READY,
MWIFIEX_HW_STATUS_INITIALIZING,
- MWIFIEX_HW_STATUS_INIT_DONE,
MWIFIEX_HW_STATUS_RESET,
MWIFIEX_HW_STATUS_NOT_READY
};
@@ -869,8 +868,6 @@ struct mwifiex_adapter {
unsigned long work_flags;
u32 fw_release_number;
u8 intf_hdr_len;
- u16 init_wait_q_woken;
- wait_queue_head_t init_wait_q;
void *card;
struct mwifiex_if_ops if_ops;
atomic_t bypass_tx_pending;
@@ -923,7 +920,6 @@ struct mwifiex_adapter {
struct cmd_ctrl_node *curr_cmd;
/* spin lock for command */
spinlock_t mwifiex_cmd_lock;
- u16 last_init_cmd;
struct timer_list cmd_timer;
struct list_head cmd_free_q;
/* spin lock for cmd_free_q */
@@ -1064,8 +1060,6 @@ void mwifiex_free_priv(struct mwifiex_private *priv);
int mwifiex_init_fw(struct mwifiex_adapter *adapter);
-int mwifiex_init_fw_complete(struct mwifiex_adapter *adapter);
-
void mwifiex_shutdown_drv(struct mwifiex_adapter *adapter);
int mwifiex_dnld_fw(struct mwifiex_adapter *, struct mwifiex_fw_image *);
diff --git a/drivers/net/wireless/marvell/mwifiex/sta_cmd.c b/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
index 30dd4e58e2b1d..da89e15e5fe76 100644
--- a/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
+++ b/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
@@ -2406,11 +2406,5 @@ int mwifiex_sta_init_cmd(struct mwifiex_private *priv, u8 first_sta, bool init)
ret = mwifiex_send_cmd(priv, HostCmd_CMD_11N_CFG,
HostCmd_ACT_GEN_SET, 0, &tx_cfg, true);
- if (init) {
- /* set last_init_cmd before sending the command */
- priv->adapter->last_init_cmd = HostCmd_CMD_11N_CFG;
- ret = -EINPROGRESS;
- }
-
return ret;
}
diff --git a/drivers/net/wireless/marvell/mwifiex/util.c b/drivers/net/wireless/marvell/mwifiex/util.c
index ea28d604ee69c..4c5b1de0e936c 100644
--- a/drivers/net/wireless/marvell/mwifiex/util.c
+++ b/drivers/net/wireless/marvell/mwifiex/util.c
@@ -115,24 +115,6 @@ static struct mwifiex_debug_data items[] = {
static int num_of_items = ARRAY_SIZE(items);
-/*
- * Firmware initialization complete callback handler.
- *
- * This function wakes up the function waiting on the init
- * wait queue for the firmware initialization to complete.
- */
-int mwifiex_init_fw_complete(struct mwifiex_adapter *adapter)
-{
-
- if (adapter->hw_status == MWIFIEX_HW_STATUS_READY)
- if (adapter->if_ops.init_fw_port)
- adapter->if_ops.init_fw_port(adapter);
-
- adapter->init_wait_q_woken = true;
- wake_up_interruptible(&adapter->init_wait_q);
- return 0;
-}
-
/*
* This function sends init/shutdown command
* to firmware.
--
2.39.2
^ permalink raw reply related [flat|nested] 32+ messages in thread
* Re: [PATCH 01/12] wifi: mwifiex: add missing locking
2024-08-26 11:01 ` [PATCH 01/12] wifi: mwifiex: add missing locking Sascha Hauer
@ 2024-08-27 11:55 ` Francesco Dolcini
2024-09-02 6:30 ` [EXT] " David Lin
0 siblings, 1 reply; 32+ messages in thread
From: Francesco Dolcini @ 2024-08-27 11:55 UTC (permalink / raw)
To: Sascha Hauer
Cc: Brian Norris, Francesco Dolcini, Kalle Valo, linux-wireless,
linux-kernel
On Mon, Aug 26, 2024 at 01:01:22PM +0200, Sascha Hauer wrote:
> cfg80211_rx_assoc_resp() and cfg80211_rx_mlme_mgmt() need to be called
> with the wiphy locked, so lock it before calling these functions.
>
> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Fixes: 36995892c271 ("wifi: mwifiex: add host mlme for client mode")
Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com>
^ permalink raw reply [flat|nested] 32+ messages in thread
* RE: [EXT] Re: [PATCH 01/12] wifi: mwifiex: add missing locking
2024-08-27 11:55 ` Francesco Dolcini
@ 2024-09-02 6:30 ` David Lin
0 siblings, 0 replies; 32+ messages in thread
From: David Lin @ 2024-09-02 6:30 UTC (permalink / raw)
To: Francesco Dolcini, Sascha Hauer
Cc: Brian Norris, Kalle Valo, linux-wireless@vger.kernel.org,
linux-kernel@vger.kernel.org
Thanks. I will update this fix to nxpwifi.
> -----Original Message-----
> From: Francesco Dolcini <francesco@dolcini.it>
> Sent: Tuesday, August 27, 2024 7:56 PM
> To: Sascha Hauer <s.hauer@pengutronix.de>
> Cc: Brian Norris <briannorris@chromium.org>; Francesco Dolcini
> <francesco@dolcini.it>; Kalle Valo <kvalo@kernel.org>;
> linux-wireless@vger.kernel.org; linux-kernel@vger.kernel.org
> Subject: [EXT] Re: [PATCH 01/12] wifi: mwifiex: add missing locking
>
> Caution: This is an external email. Please take care when clicking links or
> opening attachments. When in doubt, report the message using the 'Report
> this email' button
>
>
> On Mon, Aug 26, 2024 at 01:01:22PM +0200, Sascha Hauer wrote:
> > cfg80211_rx_assoc_resp() and cfg80211_rx_mlme_mgmt() need to be called
> > with the wiphy locked, so lock it before calling these functions.
> >
> > Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
>
> Fixes: 36995892c271 ("wifi: mwifiex: add host mlme for client mode")
> Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com>
>
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 02/12] wifi: mwifiex: fix MAC address handling
2024-08-26 11:01 ` [PATCH 02/12] wifi: mwifiex: fix MAC address handling Sascha Hauer
@ 2024-09-06 14:40 ` Francesco Dolcini
2024-09-09 8:09 ` Sascha Hauer
0 siblings, 1 reply; 32+ messages in thread
From: Francesco Dolcini @ 2024-09-06 14:40 UTC (permalink / raw)
To: Sascha Hauer
Cc: Brian Norris, Francesco Dolcini, Kalle Valo, linux-wireless,
linux-kernel, stable
On Mon, Aug 26, 2024 at 01:01:23PM +0200, Sascha Hauer wrote:
> The mwifiex driver tries to derive the MAC addresses of the virtual
> interfaces from the permanent address by adding the bss_num of the
> particular interface used. It does so each time the virtual interface
> is changed from AP to station or the other way round. This means that
> the devices MAC address changes during a change_virtual_intf call which
> is pretty unexpected by userspace.
Is this the only reason for this patch or there are other reasons?
I'd like to understand the whole impact, to be sure the backport to
stable is what we want.
> Furthermore the driver doesn't use the permanent address to add the
> bss_num to, but instead the current MAC address increases each time
> we do a change_virtual_intf.
>
> Fix this by initializing the MAC address once from the permanent MAC
> address during creation of the virtual interface and never touch it
> again. This also means that userspace can set a different MAC address
> which then stays like this forever and is not unexpectedly changed
> by the driver.
>
> It is not clear how many (if any) MAC addresses after the permanent MAC
> address are reserved for a device, so set the locally admistered
> bit for all MAC addresses modified from the permanent address.
I wonder if we should not just use the same permanent mac address whatever
the virtual interface is. Do we have something similar in other wireless
drivers?
> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
> Cc: stable@vger.kernel.org
> ---
> drivers/net/wireless/marvell/mwifiex/cfg80211.c | 4 +-
> drivers/net/wireless/marvell/mwifiex/init.c | 1 -
> drivers/net/wireless/marvell/mwifiex/main.c | 54 ++++++++++++-------------
> drivers/net/wireless/marvell/mwifiex/main.h | 5 ++-
> 4 files changed, 30 insertions(+), 34 deletions(-)
>
...
> diff --git a/drivers/net/wireless/marvell/mwifiex/main.c b/drivers/net/wireless/marvell/mwifiex/main.c
> index 96d1f6039fbca..46acddd03ffd1 100644
> --- a/drivers/net/wireless/marvell/mwifiex/main.c
> +++ b/drivers/net/wireless/marvell/mwifiex/main.c
> @@ -971,34 +971,16 @@ mwifiex_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
> }
>
> int mwifiex_set_mac_address(struct mwifiex_private *priv,
> - struct net_device *dev, bool external,
> - u8 *new_mac)
> + struct net_device *dev, u8 *new_mac)
> {
> int ret;
> - u64 mac_addr, old_mac_addr;
> + u64 old_mac_addr;
>
> - old_mac_addr = ether_addr_to_u64(priv->curr_addr);
> + netdev_info(dev, "%s: old: %pM new: %pM\n", __func__, priv->curr_addr, new_mac);
>
> - if (external) {
> - mac_addr = ether_addr_to_u64(new_mac);
> - } else {
> - /* Internal mac address change */
> - if (priv->bss_type == MWIFIEX_BSS_TYPE_ANY)
> - return -EOPNOTSUPP;
this was the only usage of MWIFIEX_BSS_TYPE_ANY, correct? Did it had any
reason before?
> -
> - mac_addr = old_mac_addr;
> -
> - if (priv->bss_type == MWIFIEX_BSS_TYPE_P2P) {
> - mac_addr |= BIT_ULL(MWIFIEX_MAC_LOCAL_ADMIN_BIT);
> - mac_addr += priv->bss_num;
> - } else if (priv->adapter->priv[0] != priv) {
> - /* Set mac address based on bss_type/bss_num */
> - mac_addr ^= BIT_ULL(priv->bss_type + 8);
> - mac_addr += priv->bss_num;
> - }
> - }
> + old_mac_addr = ether_addr_to_u64(priv->curr_addr);
>
> - u64_to_ether_addr(mac_addr, priv->curr_addr);
> + ether_addr_copy(priv->curr_addr, new_mac);
>
> /* Send request to firmware */
> ret = mwifiex_send_cmd(priv, HostCmd_CMD_802_11_MAC_ADDRESS,
> @@ -1015,6 +997,26 @@ int mwifiex_set_mac_address(struct mwifiex_private *priv,
> return 0;
> }
>
> +int mwifiex_set_default_mac_address(struct mwifiex_private *priv,
> + struct net_device *dev)
> +{
> + int priv_num;
> + u8 mac[ETH_ALEN];
> +
> + ether_addr_copy(mac, priv->adapter->perm_addr);
> +
> + for (priv_num = 0; priv_num < priv->adapter->priv_num; priv_num++)
> + if (priv == priv->adapter->priv[priv_num])
> + break;
> +
> + if (priv_num) {
> + eth_addr_add(mac, priv_num);
> + mac[0] |= 0x2;
> + }
Please see my concern on this in the beginning of the email.
> @@ -1364,10 +1366,6 @@ void mwifiex_init_priv_params(struct mwifiex_private *priv,
> priv->assocresp_idx = MWIFIEX_AUTO_IDX_MASK;
> priv->gen_idx = MWIFIEX_AUTO_IDX_MASK;
> priv->num_tx_timeout = 0;
> - if (is_valid_ether_addr(dev->dev_addr))
> - ether_addr_copy(priv->curr_addr, dev->dev_addr);
> - else
> - ether_addr_copy(priv->curr_addr, priv->adapter->perm_addr);
With this change, when mfg_mode is true, priv->curr_addr will be not
initialized. Wanted?
Francesco
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 03/12] wifi: mwifiex: deduplicate code in mwifiex_cmd_tx_rate_cfg()
2024-08-26 11:01 ` [PATCH 03/12] wifi: mwifiex: deduplicate code in mwifiex_cmd_tx_rate_cfg() Sascha Hauer
@ 2024-09-06 14:54 ` Francesco Dolcini
0 siblings, 0 replies; 32+ messages in thread
From: Francesco Dolcini @ 2024-09-06 14:54 UTC (permalink / raw)
To: Sascha Hauer
Cc: Brian Norris, Francesco Dolcini, Kalle Valo, linux-wireless,
linux-kernel
On Mon, Aug 26, 2024 at 01:01:24PM +0200, Sascha Hauer wrote:
> The code block inside the if/else is the same with just using
> pbitmap_rates if non NULL or priv->bitmap_rates otherwise. Deduplicate
> the code by picking the correct pointer first and then using it
> unconditionally.
>
> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com>
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 04/12] wifi: mwifiex: use adapter as context pointer for mwifiex_hs_activated_event()
2024-08-26 11:01 ` [PATCH 04/12] wifi: mwifiex: use adapter as context pointer for mwifiex_hs_activated_event() Sascha Hauer
@ 2024-09-06 15:03 ` Francesco Dolcini
0 siblings, 0 replies; 32+ messages in thread
From: Francesco Dolcini @ 2024-09-06 15:03 UTC (permalink / raw)
To: Sascha Hauer
Cc: Brian Norris, Francesco Dolcini, Kalle Valo, linux-wireless,
linux-kernel
On Mon, Aug 26, 2024 at 01:01:25PM +0200, Sascha Hauer wrote:
> mwifiex_hs_activated_event() takes a struct mwifiex_private * as
> context pointer which this function doesn't need directly and the callers
> don't have. Use struct mwifiex_adapter * instead to simplify both the
> function and the callers.
>
> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com>
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 05/12] wifi: mwifiex: drop unnecessary initialization
2024-08-26 11:01 ` [PATCH 05/12] wifi: mwifiex: drop unnecessary initialization Sascha Hauer
@ 2024-09-06 15:07 ` Francesco Dolcini
0 siblings, 0 replies; 32+ messages in thread
From: Francesco Dolcini @ 2024-09-06 15:07 UTC (permalink / raw)
To: Sascha Hauer
Cc: Brian Norris, Francesco Dolcini, Kalle Valo, linux-wireless,
linux-kernel
On Mon, Aug 26, 2024 at 01:01:26PM +0200, Sascha Hauer wrote:
> Several functions initialize the priv * without actually using the
> initialized value. Drop the initialization.
>
> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com>
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 06/12] wifi: mwifiex: make region_code_mapping_t const
2024-08-26 11:01 ` [PATCH 06/12] wifi: mwifiex: make region_code_mapping_t const Sascha Hauer
@ 2024-09-06 15:08 ` Francesco Dolcini
0 siblings, 0 replies; 32+ messages in thread
From: Francesco Dolcini @ 2024-09-06 15:08 UTC (permalink / raw)
To: Sascha Hauer
Cc: Brian Norris, Francesco Dolcini, Kalle Valo, linux-wireless,
linux-kernel
On Mon, Aug 26, 2024 at 01:01:27PM +0200, Sascha Hauer wrote:
> region_code_mapping_t is not modified and shouldn't be. Mark it const.
>
> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com>
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 07/12] wifi: mwifiex: pass adapter to mwifiex_dnld_cmd_to_fw()
2024-08-26 11:01 ` [PATCH 07/12] wifi: mwifiex: pass adapter to mwifiex_dnld_cmd_to_fw() Sascha Hauer
@ 2024-09-06 15:11 ` Francesco Dolcini
0 siblings, 0 replies; 32+ messages in thread
From: Francesco Dolcini @ 2024-09-06 15:11 UTC (permalink / raw)
To: Sascha Hauer
Cc: Brian Norris, Francesco Dolcini, Kalle Valo, linux-wireless,
linux-kernel
On Mon, Aug 26, 2024 at 01:01:28PM +0200, Sascha Hauer wrote:
> priv is not needed in mwifiex_dnld_cmd_to_fw(), so pass the adapter to
> it as context pointer.
>
> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com>
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 09/12] wifi: mwifiex: fix indention
2024-08-26 11:01 ` [PATCH 09/12] wifi: mwifiex: fix indention Sascha Hauer
@ 2024-09-06 15:15 ` Francesco Dolcini
0 siblings, 0 replies; 32+ messages in thread
From: Francesco Dolcini @ 2024-09-06 15:15 UTC (permalink / raw)
To: Sascha Hauer
Cc: Brian Norris, Francesco Dolcini, Kalle Valo, linux-wireless,
linux-kernel
On Mon, Aug 26, 2024 at 01:01:30PM +0200, Sascha Hauer wrote:
> Align multiline if() under the opening brace.
>
> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com>
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 10/12] wifi: mwifiex: make locally used function static
2024-08-26 11:01 ` [PATCH 10/12] wifi: mwifiex: make locally used function static Sascha Hauer
@ 2024-09-06 15:16 ` Francesco Dolcini
0 siblings, 0 replies; 32+ messages in thread
From: Francesco Dolcini @ 2024-09-06 15:16 UTC (permalink / raw)
To: Sascha Hauer
Cc: Brian Norris, Francesco Dolcini, Kalle Valo, linux-wireless,
linux-kernel
On Mon, Aug 26, 2024 at 01:01:31PM +0200, Sascha Hauer wrote:
> mwifiex_is_tdls_off_chan() is only used locally. Make it static.
>
> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com>
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 02/12] wifi: mwifiex: fix MAC address handling
2024-09-06 14:40 ` Francesco Dolcini
@ 2024-09-09 8:09 ` Sascha Hauer
2024-09-09 16:42 ` Francesco Dolcini
0 siblings, 1 reply; 32+ messages in thread
From: Sascha Hauer @ 2024-09-09 8:09 UTC (permalink / raw)
To: Francesco Dolcini
Cc: Brian Norris, Kalle Valo, linux-wireless, linux-kernel, stable
On Fri, Sep 06, 2024 at 04:40:36PM +0200, Francesco Dolcini wrote:
> On Mon, Aug 26, 2024 at 01:01:23PM +0200, Sascha Hauer wrote:
> > The mwifiex driver tries to derive the MAC addresses of the virtual
> > interfaces from the permanent address by adding the bss_num of the
> > particular interface used. It does so each time the virtual interface
> > is changed from AP to station or the other way round. This means that
> > the devices MAC address changes during a change_virtual_intf call which
> > is pretty unexpected by userspace.
>
> Is this the only reason for this patch or there are other reasons?
> I'd like to understand the whole impact, to be sure the backport to
> stable is what we want.
>
> > Furthermore the driver doesn't use the permanent address to add the
> > bss_num to, but instead the current MAC address increases each time
> > we do a change_virtual_intf.
> >
> > Fix this by initializing the MAC address once from the permanent MAC
> > address during creation of the virtual interface and never touch it
> > again. This also means that userspace can set a different MAC address
> > which then stays like this forever and is not unexpectedly changed
> > by the driver.
> >
> > It is not clear how many (if any) MAC addresses after the permanent MAC
> > address are reserved for a device, so set the locally admistered
> > bit for all MAC addresses modified from the permanent address.
>
> I wonder if we should not just use the same permanent mac address whatever
> the virtual interface is. Do we have something similar in other wireless
> drivers?
Yes, there are at least four driver that generate different MAC
addresses for different vifs:
drivers/net/wireless/ath/ath6kl/cfg80211.c:3816
drivers/net/wireless/ath/wil6210/cfg80211.c:732
drivers/net/wireless/microchip/wilc1000/netdev.c:983
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c:606
(line numbers match 6.11-rc6):
For the mac80211 based drivers there are also tricks played to use
unique MAC addresses in ieee80211_assign_perm_addr().
For reference in mwifiex setting different MAC addresses for different
interfaces goes down to:
| commit 864164683678e27c931b5909c72a001b1b943f36
| Author: Xinming Hu <huxm@marvell.com>
| Date: Tue Feb 13 14:10:15 2018 +0800
|
| mwifiex: set different mac address for interfaces with same bss type
|
| Multiple interfaces with same bss type could affect each other if
| they are sharing the same mac address. In this patch, different
| mac address is assigned to new interface which have same bss type
| with exist interfaces.
|
| Signed-off-by: Xinming Hu <huxm@marvell.com>
| Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
>
> > Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
> > Cc: stable@vger.kernel.org
> > ---
> > drivers/net/wireless/marvell/mwifiex/cfg80211.c | 4 +-
> > drivers/net/wireless/marvell/mwifiex/init.c | 1 -
> > drivers/net/wireless/marvell/mwifiex/main.c | 54 ++++++++++++-------------
> > drivers/net/wireless/marvell/mwifiex/main.h | 5 ++-
> > 4 files changed, 30 insertions(+), 34 deletions(-)
> >
> ...
>
> > diff --git a/drivers/net/wireless/marvell/mwifiex/main.c b/drivers/net/wireless/marvell/mwifiex/main.c
> > index 96d1f6039fbca..46acddd03ffd1 100644
> > --- a/drivers/net/wireless/marvell/mwifiex/main.c
> > +++ b/drivers/net/wireless/marvell/mwifiex/main.c
> > @@ -971,34 +971,16 @@ mwifiex_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
> > }
> >
> > int mwifiex_set_mac_address(struct mwifiex_private *priv,
> > - struct net_device *dev, bool external,
> > - u8 *new_mac)
> > + struct net_device *dev, u8 *new_mac)
> > {
> > int ret;
> > - u64 mac_addr, old_mac_addr;
> > + u64 old_mac_addr;
> >
> > - old_mac_addr = ether_addr_to_u64(priv->curr_addr);
> > + netdev_info(dev, "%s: old: %pM new: %pM\n", __func__, priv->curr_addr, new_mac);
> >
> > - if (external) {
> > - mac_addr = ether_addr_to_u64(new_mac);
> > - } else {
> > - /* Internal mac address change */
> > - if (priv->bss_type == MWIFIEX_BSS_TYPE_ANY)
> > - return -EOPNOTSUPP;
> this was the only usage of MWIFIEX_BSS_TYPE_ANY, correct? Did it had any
> reason before?
I haven't found a path to get here with priv->bss_type ==
MWIFIEX_BSS_TYPE_ANY. This function is called from
mwifiex_init_new_priv_params() and mwifiex_add_virtual_intf(). Both
functions set priv->bss_type to something else or bail out with an error
before calling mwifiex_set_mac_address(). It's also called from the
ndo_set_mac_address method, but for a registered net device the bss_type
should also be set to something meaningful.
>
> > -
> > - mac_addr = old_mac_addr;
> > -
> > - if (priv->bss_type == MWIFIEX_BSS_TYPE_P2P) {
> > - mac_addr |= BIT_ULL(MWIFIEX_MAC_LOCAL_ADMIN_BIT);
> > - mac_addr += priv->bss_num;
> > - } else if (priv->adapter->priv[0] != priv) {
> > - /* Set mac address based on bss_type/bss_num */
> > - mac_addr ^= BIT_ULL(priv->bss_type + 8);
> > - mac_addr += priv->bss_num;
> > - }
> > - }
> > + old_mac_addr = ether_addr_to_u64(priv->curr_addr);
> >
> > - u64_to_ether_addr(mac_addr, priv->curr_addr);
> > + ether_addr_copy(priv->curr_addr, new_mac);
> >
> > /* Send request to firmware */
> > ret = mwifiex_send_cmd(priv, HostCmd_CMD_802_11_MAC_ADDRESS,
> > @@ -1015,6 +997,26 @@ int mwifiex_set_mac_address(struct mwifiex_private *priv,
> > return 0;
> > }
> >
> > +int mwifiex_set_default_mac_address(struct mwifiex_private *priv,
> > + struct net_device *dev)
> > +{
> > + int priv_num;
> > + u8 mac[ETH_ALEN];
> > +
> > + ether_addr_copy(mac, priv->adapter->perm_addr);
> > +
> > + for (priv_num = 0; priv_num < priv->adapter->priv_num; priv_num++)
> > + if (priv == priv->adapter->priv[priv_num])
> > + break;
> > +
> > + if (priv_num) {
> > + eth_addr_add(mac, priv_num);
> > + mac[0] |= 0x2;
> > + }
>
> Please see my concern on this in the beginning of the email.
>
> > @@ -1364,10 +1366,6 @@ void mwifiex_init_priv_params(struct mwifiex_private *priv,
> > priv->assocresp_idx = MWIFIEX_AUTO_IDX_MASK;
> > priv->gen_idx = MWIFIEX_AUTO_IDX_MASK;
> > priv->num_tx_timeout = 0;
> > - if (is_valid_ether_addr(dev->dev_addr))
> > - ether_addr_copy(priv->curr_addr, dev->dev_addr);
> > - else
> > - ether_addr_copy(priv->curr_addr, priv->adapter->perm_addr);
>
> With this change, when mfg_mode is true, priv->curr_addr will be not
> initialized. Wanted?
Not wanted, just me being ignorant. Let's have a look:
priv->adapter->perm_addr is initialized in the response handling of the
HostCmd_CMD_GET_HW_SPEC command. This command is only issued when
mfg_mode is false, so in mfg mode priv->adapter->perm_addr will be the
zero address.
The only documentation we have for mfg_mode is:
manufacturing mode enable:1, disable:0
I don't know what this really is about, but I could imagine that this
is for initial factory bringup when the chip is not parametrized and thus
doesn't have a permanent MAC address yet.
Sascha
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 02/12] wifi: mwifiex: fix MAC address handling
2024-09-09 8:09 ` Sascha Hauer
@ 2024-09-09 16:42 ` Francesco Dolcini
0 siblings, 0 replies; 32+ messages in thread
From: Francesco Dolcini @ 2024-09-09 16:42 UTC (permalink / raw)
To: Sascha Hauer, David Lin
Cc: Francesco Dolcini, Brian Norris, Kalle Valo, linux-wireless,
linux-kernel, stable
On Mon, Sep 09, 2024 at 10:09:33AM +0200, Sascha Hauer wrote:
> On Fri, Sep 06, 2024 at 04:40:36PM +0200, Francesco Dolcini wrote:
> > On Mon, Aug 26, 2024 at 01:01:23PM +0200, Sascha Hauer wrote:
> > > The mwifiex driver tries to derive the MAC addresses of the virtual
> > > interfaces from the permanent address by adding the bss_num of the
> > > particular interface used. It does so each time the virtual interface
> > > is changed from AP to station or the other way round. This means that
> > > the devices MAC address changes during a change_virtual_intf call which
> > > is pretty unexpected by userspace.
> >
> > Is this the only reason for this patch or there are other reasons?
> > I'd like to understand the whole impact, to be sure the backport to
> > stable is what we want.
> >
> > > Furthermore the driver doesn't use the permanent address to add the
> > > bss_num to, but instead the current MAC address increases each time
> > > we do a change_virtual_intf.
> > >
> > > Fix this by initializing the MAC address once from the permanent MAC
> > > address during creation of the virtual interface and never touch it
> > > again. This also means that userspace can set a different MAC address
> > > which then stays like this forever and is not unexpectedly changed
> > > by the driver.
> > >
> > > It is not clear how many (if any) MAC addresses after the permanent MAC
> > > address are reserved for a device, so set the locally admistered
> > > bit for all MAC addresses modified from the permanent address.
> >
> > I wonder if we should not just use the same permanent mac address whatever
> > the virtual interface is. Do we have something similar in other wireless
> > drivers?
>
> Yes, there are at least four driver that generate different MAC
> addresses for different vifs:
Ok, fine for me. It seems like there is some real use case requiring to have
different MAC addresses for each virtual interface, and given that mwifiex is
already like that, we should keep it that way.
It would be interesting to know from NXP if they do provide some guidance on
this topic to whoever is using their chips or the reality is what you
implemented here that we cannot assume anything on how many MAC addresses are
available is just the way it is.
David?
> > > Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
> > > Cc: stable@vger.kernel.org
> > > ---
> > > drivers/net/wireless/marvell/mwifiex/cfg80211.c | 4 +-
> > > drivers/net/wireless/marvell/mwifiex/init.c | 1 -
> > > drivers/net/wireless/marvell/mwifiex/main.c | 54 ++++++++++++-------------
> > > drivers/net/wireless/marvell/mwifiex/main.h | 5 ++-
> > > 4 files changed, 30 insertions(+), 34 deletions(-)
> > >
> > ...
> >
> > > diff --git a/drivers/net/wireless/marvell/mwifiex/main.c b/drivers/net/wireless/marvell/mwifiex/main.c
> > > index 96d1f6039fbca..46acddd03ffd1 100644
> > > --- a/drivers/net/wireless/marvell/mwifiex/main.c
> > > +++ b/drivers/net/wireless/marvell/mwifiex/main.c
> > > @@ -971,34 +971,16 @@ mwifiex_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
> > > }
> > >
> > > int mwifiex_set_mac_address(struct mwifiex_private *priv,
> > > - struct net_device *dev, bool external,
> > > - u8 *new_mac)
> > > + struct net_device *dev, u8 *new_mac)
> > > {
> > > int ret;
> > > - u64 mac_addr, old_mac_addr;
> > > + u64 old_mac_addr;
> > >
> > > - old_mac_addr = ether_addr_to_u64(priv->curr_addr);
> > > + netdev_info(dev, "%s: old: %pM new: %pM\n", __func__, priv->curr_addr, new_mac);
> > >
> > > - if (external) {
> > > - mac_addr = ether_addr_to_u64(new_mac);
> > > - } else {
> > > - /* Internal mac address change */
> > > - if (priv->bss_type == MWIFIEX_BSS_TYPE_ANY)
> > > - return -EOPNOTSUPP;
> > this was the only usage of MWIFIEX_BSS_TYPE_ANY, correct? Did it had any
> > reason before?
>
> I haven't found a path to get here with priv->bss_type ==
> MWIFIEX_BSS_TYPE_ANY. This function is called from
Ok, so maybe we can kill the MWIFIEX_BSS_TYPE_ANY in this patch also?
> > > @@ -1364,10 +1366,6 @@ void mwifiex_init_priv_params(struct mwifiex_private *priv,
> > > priv->assocresp_idx = MWIFIEX_AUTO_IDX_MASK;
> > > priv->gen_idx = MWIFIEX_AUTO_IDX_MASK;
> > > priv->num_tx_timeout = 0;
> > > - if (is_valid_ether_addr(dev->dev_addr))
> > > - ether_addr_copy(priv->curr_addr, dev->dev_addr);
> > > - else
> > > - ether_addr_copy(priv->curr_addr, priv->adapter->perm_addr);
> >
> > With this change, when mfg_mode is true, priv->curr_addr will be not
> > initialized. Wanted?
>
> Not wanted, just me being ignorant. Let's have a look:
>
> priv->adapter->perm_addr is initialized in the response handling of the
> HostCmd_CMD_GET_HW_SPEC command. This command is only issued when
> mfg_mode is false, so in mfg mode priv->adapter->perm_addr will be the
> zero address.
>
> The only documentation we have for mfg_mode is:
>
> manufacturing mode enable:1, disable:0
>
> I don't know what this really is about, but I could imagine that this
> is for initial factory bringup when the chip is not parametrized and thus
> doesn't have a permanent MAC address yet.
Not sure even myself, but I would advise to not break it.
Francesco
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 08/12] wifi: mwifiex: simplify mwifiex_setup_ht_caps()
2024-08-26 11:01 ` [PATCH 08/12] wifi: mwifiex: simplify mwifiex_setup_ht_caps() Sascha Hauer
@ 2024-09-09 17:04 ` Francesco Dolcini
0 siblings, 0 replies; 32+ messages in thread
From: Francesco Dolcini @ 2024-09-09 17:04 UTC (permalink / raw)
To: Sascha Hauer
Cc: Brian Norris, Francesco Dolcini, Kalle Valo, linux-wireless,
linux-kernel
On Mon, Aug 26, 2024 at 01:01:29PM +0200, Sascha Hauer wrote:
> In mwifiex_setup_ht_caps() first a local struct ieee80211_mcs_info
> is initialized and afterwards copied over &ht_info->mcs. Simplify
> this by initializing &ht_info->mcs directly.
>
> While at it call memset on the u8 rx_mask[] array instead of the struct
> which makes the intention clearer and we no longer have to assume the
> rx_mask array is the first member of struct ieee80211_mcs_info.
>
> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
I had a look at this, and it seems correct to me.
However my brain was really really confused to understand the previous code.
Better if someone else have a look also.
Francesco
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 11/12] wifi: mwifiex: move common settings out of switch/case
2024-08-26 11:01 ` [PATCH 11/12] wifi: mwifiex: move common settings out of switch/case Sascha Hauer
@ 2024-09-09 17:09 ` Francesco Dolcini
2024-09-09 20:21 ` Sascha Hauer
0 siblings, 1 reply; 32+ messages in thread
From: Francesco Dolcini @ 2024-09-09 17:09 UTC (permalink / raw)
To: Sascha Hauer
Cc: Brian Norris, Francesco Dolcini, Kalle Valo, linux-wireless,
linux-kernel
On Mon, Aug 26, 2024 at 01:01:32PM +0200, Sascha Hauer wrote:
> In mwifiex_add_virtual_intf() several settings done in a switch/case
> are the same in all cases. Move them out of the switch/case to
> deduplicate the code.
>
> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
> ---
> drivers/net/wireless/marvell/mwifiex/cfg80211.c | 16 +++++-----------
> 1 file changed, 5 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
> index 8746943c17788..2ce54a3fc32f8 100644
> --- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c
> +++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
> @@ -3005,7 +3005,6 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
> return ERR_PTR(-EFAULT);
> }
>
> - priv->wdev.wiphy = wiphy;
> priv->wdev.iftype = NL80211_IFTYPE_STATION;
>
> if (type == NL80211_IFTYPE_UNSPECIFIED)
> @@ -3014,8 +3013,6 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
> priv->bss_mode = type;
>
> priv->bss_type = MWIFIEX_BSS_TYPE_STA;
> - priv->frame_type = MWIFIEX_DATA_FRAME_TYPE_ETH_II;
> - priv->bss_priority = 0;
> priv->bss_role = MWIFIEX_BSS_ROLE_STA;
>
> break;
> @@ -3035,14 +3032,10 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
> return ERR_PTR(-EFAULT);
> }
>
> - priv->wdev.wiphy = wiphy;
> priv->wdev.iftype = NL80211_IFTYPE_AP;
>
> priv->bss_type = MWIFIEX_BSS_TYPE_UAP;
> - priv->frame_type = MWIFIEX_DATA_FRAME_TYPE_ETH_II;
> - priv->bss_priority = 0;
> priv->bss_role = MWIFIEX_BSS_ROLE_UAP;
> - priv->bss_started = 0;
> priv->bss_mode = type;
>
> break;
> @@ -3062,7 +3055,6 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
> return ERR_PTR(-EFAULT);
> }
>
> - priv->wdev.wiphy = wiphy;
> /* At start-up, wpa_supplicant tries to change the interface
> * to NL80211_IFTYPE_STATION if it is not managed mode.
> */
> @@ -3075,10 +3067,7 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
> */
> priv->bss_type = MWIFIEX_BSS_TYPE_P2P;
>
> - priv->frame_type = MWIFIEX_DATA_FRAME_TYPE_ETH_II;
> - priv->bss_priority = 0;
> priv->bss_role = MWIFIEX_BSS_ROLE_STA;
> - priv->bss_started = 0;
>
> if (mwifiex_cfg80211_init_p2p_client(priv)) {
> memset(&priv->wdev, 0, sizeof(priv->wdev));
> @@ -3092,6 +3081,11 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
> return ERR_PTR(-EINVAL);
> }
>
> + priv->wdev.wiphy = wiphy;
> + priv->bss_priority = 0;
> + priv->bss_started = 0;
This was not set before in all the 3 cases. Irrelevant? Worth checking and/or
mentioning in the commit message?
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 12/12] wifi: mwifiex: drop asynchronous init waiting code
2024-08-26 11:01 ` [PATCH 12/12] wifi: mwifiex: drop asynchronous init waiting code Sascha Hauer
@ 2024-09-09 17:14 ` Francesco Dolcini
2024-09-09 20:14 ` Sascha Hauer
0 siblings, 1 reply; 32+ messages in thread
From: Francesco Dolcini @ 2024-09-09 17:14 UTC (permalink / raw)
To: Sascha Hauer
Cc: Brian Norris, Francesco Dolcini, Kalle Valo, linux-wireless,
linux-kernel
On Mon, Aug 26, 2024 at 01:01:33PM +0200, Sascha Hauer wrote:
> Historically all commands sent to the mwifiex driver have been
> asynchronous. For this reason there is code that waits for the
> last initialization command to complete before going on. Nowadays the
> commands can be sent synchronously, meaning that they are completed
> when the command call returns. This makes all the waiting code
> unnecessary. It is removed in this patch.
I am not sure to understand this. Is the code to have asynchronous command gone
or it is just not used anymore? In the code here you remove waiting for the
firmware init to be complete, but from the patch is not clear why this is not
needed anymore. Maybe a specific commit you can reference in which such
support was removed?
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 12/12] wifi: mwifiex: drop asynchronous init waiting code
2024-09-09 17:14 ` Francesco Dolcini
@ 2024-09-09 20:14 ` Sascha Hauer
2024-09-10 8:30 ` Francesco Dolcini
0 siblings, 1 reply; 32+ messages in thread
From: Sascha Hauer @ 2024-09-09 20:14 UTC (permalink / raw)
To: Francesco Dolcini; +Cc: Brian Norris, Kalle Valo, linux-wireless, linux-kernel
On Mon, Sep 09, 2024 at 07:14:11PM +0200, Francesco Dolcini wrote:
> On Mon, Aug 26, 2024 at 01:01:33PM +0200, Sascha Hauer wrote:
> > Historically all commands sent to the mwifiex driver have been
> > asynchronous. For this reason there is code that waits for the
> > last initialization command to complete before going on. Nowadays the
> > commands can be sent synchronously, meaning that they are completed
> > when the command call returns. This makes all the waiting code
> > unnecessary. It is removed in this patch.
>
> I am not sure to understand this. Is the code to have asynchronous command gone
> or it is just not used anymore? In the code here you remove waiting for the
> firmware init to be complete, but from the patch is not clear why this is not
> needed anymore. Maybe a specific commit you can reference in which such
> support was removed?
Commands can still be sent asynchronously by passing sync=false to
mwifiex_send_cmd(), but this is no longer done in the initialization
phase as of:
| commit 7bff9c974e1a70819c30c37d8ec0d84d456f8237
| Author: Stone Piao <piaoyun@marvell.com>
| Date: Tue Sep 25 20:23:39 2012 -0700
|
| mwifiex: send firmware initialization commands synchronously
|
| The driver will send some commands to firmware during the
| initialization. Currently these commands are sent asynchronously,
| which means that we firstly insert all of them to a pre-allocated
| command queue, and then start to process them one by one. The
| command queue will soon be exhausted if we keep adding new
| initialization commands.
|
| This issue can be resolved by sending initialization commands
| synchronously because each command is consumed and the buffer is
| recycled before queuing next command.
|
| Signed-off-by: Stone Piao <piaoyun@marvell.com>
| Signed-off-by: Bing Zhao <bzhao@marvell.com>
| Signed-off-by: John W. Linville <linville@tuxdriver.com>
I'll mention this commit in the commit message next round.
Sascha
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 11/12] wifi: mwifiex: move common settings out of switch/case
2024-09-09 17:09 ` Francesco Dolcini
@ 2024-09-09 20:21 ` Sascha Hauer
2024-09-09 20:55 ` Francesco Dolcini
0 siblings, 1 reply; 32+ messages in thread
From: Sascha Hauer @ 2024-09-09 20:21 UTC (permalink / raw)
To: Francesco Dolcini; +Cc: Brian Norris, Kalle Valo, linux-wireless, linux-kernel
On Mon, Sep 09, 2024 at 07:09:19PM +0200, Francesco Dolcini wrote:
> On Mon, Aug 26, 2024 at 01:01:32PM +0200, Sascha Hauer wrote:
> > In mwifiex_add_virtual_intf() several settings done in a switch/case
> > are the same in all cases. Move them out of the switch/case to
> > deduplicate the code.
> >
> > Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
> > ---
> > drivers/net/wireless/marvell/mwifiex/cfg80211.c | 16 +++++-----------
> > 1 file changed, 5 insertions(+), 11 deletions(-)
> >
> > diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
> > index 8746943c17788..2ce54a3fc32f8 100644
> > --- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c
> > +++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
> > @@ -3005,7 +3005,6 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
> > return ERR_PTR(-EFAULT);
> > }
> >
> > - priv->wdev.wiphy = wiphy;
> > priv->wdev.iftype = NL80211_IFTYPE_STATION;
> >
> > if (type == NL80211_IFTYPE_UNSPECIFIED)
> > @@ -3014,8 +3013,6 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
> > priv->bss_mode = type;
> >
> > priv->bss_type = MWIFIEX_BSS_TYPE_STA;
> > - priv->frame_type = MWIFIEX_DATA_FRAME_TYPE_ETH_II;
> > - priv->bss_priority = 0;
> > priv->bss_role = MWIFIEX_BSS_ROLE_STA;
> >
> > break;
> > @@ -3035,14 +3032,10 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
> > return ERR_PTR(-EFAULT);
> > }
> >
> > - priv->wdev.wiphy = wiphy;
> > priv->wdev.iftype = NL80211_IFTYPE_AP;
> >
> > priv->bss_type = MWIFIEX_BSS_TYPE_UAP;
> > - priv->frame_type = MWIFIEX_DATA_FRAME_TYPE_ETH_II;
> > - priv->bss_priority = 0;
> > priv->bss_role = MWIFIEX_BSS_ROLE_UAP;
> > - priv->bss_started = 0;
> > priv->bss_mode = type;
> >
> > break;
> > @@ -3062,7 +3055,6 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
> > return ERR_PTR(-EFAULT);
> > }
> >
> > - priv->wdev.wiphy = wiphy;
> > /* At start-up, wpa_supplicant tries to change the interface
> > * to NL80211_IFTYPE_STATION if it is not managed mode.
> > */
> > @@ -3075,10 +3067,7 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
> > */
> > priv->bss_type = MWIFIEX_BSS_TYPE_P2P;
> >
> > - priv->frame_type = MWIFIEX_DATA_FRAME_TYPE_ETH_II;
> > - priv->bss_priority = 0;
> > priv->bss_role = MWIFIEX_BSS_ROLE_STA;
> > - priv->bss_started = 0;
> >
> > if (mwifiex_cfg80211_init_p2p_client(priv)) {
> > memset(&priv->wdev, 0, sizeof(priv->wdev));
> > @@ -3092,6 +3081,11 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
> > return ERR_PTR(-EINVAL);
> > }
> >
> > + priv->wdev.wiphy = wiphy;
> > + priv->bss_priority = 0;
> > + priv->bss_started = 0;
>
> This was not set before in all the 3 cases. Irrelevant? Worth checking and/or
> mentioning in the commit message?
bss_started is only used in AP mode, its value is irrelevant in station
or adhoc mode. I'll add that to the commit message.
Sascha
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 11/12] wifi: mwifiex: move common settings out of switch/case
2024-09-09 20:21 ` Sascha Hauer
@ 2024-09-09 20:55 ` Francesco Dolcini
0 siblings, 0 replies; 32+ messages in thread
From: Francesco Dolcini @ 2024-09-09 20:55 UTC (permalink / raw)
To: Sascha Hauer; +Cc: Brian Norris, Kalle Valo, linux-wireless, linux-kernel
Il 9 settembre 2024 22:21:41 CEST, Sascha Hauer <s.hauer@pengutronix.de> ha scritto:
>On Mon, Sep 09, 2024 at 07:09:19PM +0200, Francesco Dolcini wrote:
>> On Mon, Aug 26, 2024 at 01:01:32PM +0200, Sascha Hauer wrote:
>> > In mwifiex_add_virtual_intf() several settings done in a switch/case
>> > are the same in all cases. Move them out of the switch/case to
>> > deduplicate the code.
>> >
>> > Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
>> > ---
>> > drivers/net/wireless/marvell/mwifiex/cfg80211.c | 16 +++++-----------
>> > 1 file changed, 5 insertions(+), 11 deletions(-)
>> >
>> > diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
>> > index 8746943c17788..2ce54a3fc32f8 100644
>> > --- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c
>> > +++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
>> > @@ -3005,7 +3005,6 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
>> > return ERR_PTR(-EFAULT);
>> > }
>> >
>> > - priv->wdev.wiphy = wiphy;
>> > priv->wdev.iftype = NL80211_IFTYPE_STATION;
>> >
>> > if (type == NL80211_IFTYPE_UNSPECIFIED)
>> > @@ -3014,8 +3013,6 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
>> > priv->bss_mode = type;
>> >
>> > priv->bss_type = MWIFIEX_BSS_TYPE_STA;
>> > - priv->frame_type = MWIFIEX_DATA_FRAME_TYPE_ETH_II;
>> > - priv->bss_priority = 0;
>> > priv->bss_role = MWIFIEX_BSS_ROLE_STA;
>> >
>> > break;
>> > @@ -3035,14 +3032,10 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
>> > return ERR_PTR(-EFAULT);
>> > }
>> >
>> > - priv->wdev.wiphy = wiphy;
>> > priv->wdev.iftype = NL80211_IFTYPE_AP;
>> >
>> > priv->bss_type = MWIFIEX_BSS_TYPE_UAP;
>> > - priv->frame_type = MWIFIEX_DATA_FRAME_TYPE_ETH_II;
>> > - priv->bss_priority = 0;
>> > priv->bss_role = MWIFIEX_BSS_ROLE_UAP;
>> > - priv->bss_started = 0;
>> > priv->bss_mode = type;
>> >
>> > break;
>> > @@ -3062,7 +3055,6 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
>> > return ERR_PTR(-EFAULT);
>> > }
>> >
>> > - priv->wdev.wiphy = wiphy;
>> > /* At start-up, wpa_supplicant tries to change the interface
>> > * to NL80211_IFTYPE_STATION if it is not managed mode.
>> > */
>> > @@ -3075,10 +3067,7 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
>> > */
>> > priv->bss_type = MWIFIEX_BSS_TYPE_P2P;
>> >
>> > - priv->frame_type = MWIFIEX_DATA_FRAME_TYPE_ETH_II;
>> > - priv->bss_priority = 0;
>> > priv->bss_role = MWIFIEX_BSS_ROLE_STA;
>> > - priv->bss_started = 0;
>> >
>> > if (mwifiex_cfg80211_init_p2p_client(priv)) {
>> > memset(&priv->wdev, 0, sizeof(priv->wdev));
>> > @@ -3092,6 +3081,11 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
>> > return ERR_PTR(-EINVAL);
>> > }
>> >
>> > + priv->wdev.wiphy = wiphy;
>> > + priv->bss_priority = 0;
>> > + priv->bss_started = 0;
>>
>> This was not set before in all the 3 cases. Irrelevant? Worth checking and/or
>> mentioning in the commit message?
>
>bss_started is only used in AP mode, its value is irrelevant in station
>or adhoc mode. I'll add that to the commit message.
ack.
With this clarified in the commit message adds my reviewed-by
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 12/12] wifi: mwifiex: drop asynchronous init waiting code
2024-09-09 20:14 ` Sascha Hauer
@ 2024-09-10 8:30 ` Francesco Dolcini
0 siblings, 0 replies; 32+ messages in thread
From: Francesco Dolcini @ 2024-09-10 8:30 UTC (permalink / raw)
To: Sascha Hauer
Cc: Francesco Dolcini, Brian Norris, Kalle Valo, linux-wireless,
linux-kernel
On Mon, Sep 09, 2024 at 10:14:56PM +0200, Sascha Hauer wrote:
> On Mon, Sep 09, 2024 at 07:14:11PM +0200, Francesco Dolcini wrote:
> > On Mon, Aug 26, 2024 at 01:01:33PM +0200, Sascha Hauer wrote:
> > > Historically all commands sent to the mwifiex driver have been
> > > asynchronous. For this reason there is code that waits for the
> > > last initialization command to complete before going on. Nowadays the
> > > commands can be sent synchronously, meaning that they are completed
> > > when the command call returns. This makes all the waiting code
> > > unnecessary. It is removed in this patch.
> >
> > I am not sure to understand this. Is the code to have asynchronous command gone
> > or it is just not used anymore? In the code here you remove waiting for the
> > firmware init to be complete, but from the patch is not clear why this is not
> > needed anymore. Maybe a specific commit you can reference in which such
> > support was removed?
>
> Commands can still be sent asynchronously by passing sync=false to
> mwifiex_send_cmd(), but this is no longer done in the initialization
Understood. So this is just not unused code since quite some time.
To me the change looks ok, but I would appreciate if someone else can have
another look.
> | commit 7bff9c974e1a70819c30c37d8ec0d84d456f8237
> | Author: Stone Piao <piaoyun@marvell.com>
> | Date: Tue Sep 25 20:23:39 2012 -0700
> |
> | mwifiex: send firmware initialization commands synchronously
> |
> | The driver will send some commands to firmware during the
> | initialization. Currently these commands are sent asynchronously,
> | which means that we firstly insert all of them to a pre-allocated
> | command queue, and then start to process them one by one. The
> | command queue will soon be exhausted if we keep adding new
> | initialization commands.
> |
> | This issue can be resolved by sending initialization commands
> | synchronously because each command is consumed and the buffer is
> | recycled before queuing next command.
> |
> | Signed-off-by: Stone Piao <piaoyun@marvell.com>
> | Signed-off-by: Bing Zhao <bzhao@marvell.com>
> | Signed-off-by: John W. Linville <linville@tuxdriver.com>
>
> I'll mention this commit in the commit message next round.
Perfect, thanks.
^ permalink raw reply [flat|nested] 32+ messages in thread
end of thread, other threads:[~2024-09-10 8:31 UTC | newest]
Thread overview: 32+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-26 11:01 [PATCH 00/12] mwifiex: two fixes and cleanup Sascha Hauer
2024-08-26 11:01 ` [PATCH 01/12] wifi: mwifiex: add missing locking Sascha Hauer
2024-08-27 11:55 ` Francesco Dolcini
2024-09-02 6:30 ` [EXT] " David Lin
2024-08-26 11:01 ` [PATCH 02/12] wifi: mwifiex: fix MAC address handling Sascha Hauer
2024-09-06 14:40 ` Francesco Dolcini
2024-09-09 8:09 ` Sascha Hauer
2024-09-09 16:42 ` Francesco Dolcini
2024-08-26 11:01 ` [PATCH 03/12] wifi: mwifiex: deduplicate code in mwifiex_cmd_tx_rate_cfg() Sascha Hauer
2024-09-06 14:54 ` Francesco Dolcini
2024-08-26 11:01 ` [PATCH 04/12] wifi: mwifiex: use adapter as context pointer for mwifiex_hs_activated_event() Sascha Hauer
2024-09-06 15:03 ` Francesco Dolcini
2024-08-26 11:01 ` [PATCH 05/12] wifi: mwifiex: drop unnecessary initialization Sascha Hauer
2024-09-06 15:07 ` Francesco Dolcini
2024-08-26 11:01 ` [PATCH 06/12] wifi: mwifiex: make region_code_mapping_t const Sascha Hauer
2024-09-06 15:08 ` Francesco Dolcini
2024-08-26 11:01 ` [PATCH 07/12] wifi: mwifiex: pass adapter to mwifiex_dnld_cmd_to_fw() Sascha Hauer
2024-09-06 15:11 ` Francesco Dolcini
2024-08-26 11:01 ` [PATCH 08/12] wifi: mwifiex: simplify mwifiex_setup_ht_caps() Sascha Hauer
2024-09-09 17:04 ` Francesco Dolcini
2024-08-26 11:01 ` [PATCH 09/12] wifi: mwifiex: fix indention Sascha Hauer
2024-09-06 15:15 ` Francesco Dolcini
2024-08-26 11:01 ` [PATCH 10/12] wifi: mwifiex: make locally used function static Sascha Hauer
2024-09-06 15:16 ` Francesco Dolcini
2024-08-26 11:01 ` [PATCH 11/12] wifi: mwifiex: move common settings out of switch/case Sascha Hauer
2024-09-09 17:09 ` Francesco Dolcini
2024-09-09 20:21 ` Sascha Hauer
2024-09-09 20:55 ` Francesco Dolcini
2024-08-26 11:01 ` [PATCH 12/12] wifi: mwifiex: drop asynchronous init waiting code Sascha Hauer
2024-09-09 17:14 ` Francesco Dolcini
2024-09-09 20:14 ` Sascha Hauer
2024-09-10 8:30 ` Francesco Dolcini
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).