All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sascha Hauer <s.hauer@pengutronix.de>
To: Brian Norris <briannorris@chromium.org>,
	Francesco Dolcini <francesco@dolcini.it>,
	Kalle Valo <kvalo@kernel.org>
Cc: linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org,
	kernel@pengutronix.de
Subject: Re: [PATCH 11/31] wifi: mwifiex: use priv index as bss_num
Date: Thu, 22 Aug 2024 07:48:37 +0200	[thread overview]
Message-ID: <ZsbRNbcq6tBeKPID@pengutronix.de> (raw)
In-Reply-To: <20240820-mwifiex-cleanup-v1-11-320d8de4a4b7@pengutronix.de>

On Tue, Aug 20, 2024 at 01:55:36PM +0200, Sascha Hauer wrote:
> Instead of looking up an unused bss_num each time we add a virtual
> interface, associate a fixed bss_num to each priv and for simplicity
> just use the array index.
> 
> With bss_num unique to each priv mwifiex_get_priv_by_id() doesn't need
> the bss_type argument anymore, so it's removed.

I misunderstood the driver here. I thought bss_num specifies the
instance and bss_type specifies the type of this instance. It's the
other way round: bss_num is the nth instance of type bss_type. Also
the device doesn't have 16 instances of configurable type, instead
it only has 1 station mode instance. Hence, when
bss_type == MWIFIEX_BSS_TYPE_STA every other bss_num than 0 is invalid.
Likewise there are also only three instances of type
MWIFIEX_BSS_TYPE_UAP available.

I made some assumptions on this misunderstanding throughout this series,
so it needs rework.

It would be really great to have some documentation about these devices.

Sascha

> 
> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
> ---
>  drivers/net/wireless/marvell/mwifiex/cfg80211.c  | 11 ++---
>  drivers/net/wireless/marvell/mwifiex/cmdevt.c    |  6 +--
>  drivers/net/wireless/marvell/mwifiex/main.c      |  1 +
>  drivers/net/wireless/marvell/mwifiex/main.h      | 54 ++++--------------------
>  drivers/net/wireless/marvell/mwifiex/sta_event.c |  3 +-
>  drivers/net/wireless/marvell/mwifiex/txrx.c      |  9 ++--
>  6 files changed, 19 insertions(+), 65 deletions(-)
> 
> diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
> index 784f342a9bf23..d5a2c8f726b9e 100644
> --- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c
> +++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
> @@ -952,8 +952,6 @@ mwifiex_init_new_priv_params(struct mwifiex_private *priv,
>  		return -EOPNOTSUPP;
>  	}
>  
> -	priv->bss_num = mwifiex_get_unused_bss_num(adapter, priv->bss_type);
> -
>  	spin_lock_irqsave(&adapter->main_proc_lock, flags);
>  	adapter->main_locked = false;
>  	spin_unlock_irqrestore(&adapter->main_proc_lock, flags);
> @@ -2999,8 +2997,7 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
>  			return ERR_PTR(-EINVAL);
>  		}
>  
> -		priv = mwifiex_get_unused_priv_by_bss_type(
> -						adapter, MWIFIEX_BSS_TYPE_STA);
> +		priv = mwifiex_get_unused_priv(adapter);
>  		if (!priv) {
>  			mwifiex_dbg(adapter, ERROR,
>  				    "could not get free private struct\n");
> @@ -3029,8 +3026,7 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
>  			return ERR_PTR(-EINVAL);
>  		}
>  
> -		priv = mwifiex_get_unused_priv_by_bss_type(
> -						adapter, MWIFIEX_BSS_TYPE_UAP);
> +		priv = mwifiex_get_unused_priv(adapter);
>  		if (!priv) {
>  			mwifiex_dbg(adapter, ERROR,
>  				    "could not get free private struct\n");
> @@ -3056,8 +3052,7 @@ struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
>  			return ERR_PTR(-EINVAL);
>  		}
>  
> -		priv = mwifiex_get_unused_priv_by_bss_type(
> -						adapter, MWIFIEX_BSS_TYPE_P2P);
> +		priv = mwifiex_get_unused_priv(adapter);
>  		if (!priv) {
>  			mwifiex_dbg(adapter, ERROR,
>  				    "could not get free private struct\n");
> diff --git a/drivers/net/wireless/marvell/mwifiex/cmdevt.c b/drivers/net/wireless/marvell/mwifiex/cmdevt.c
> index 4f814110f750e..d91351384c6bb 100644
> --- a/drivers/net/wireless/marvell/mwifiex/cmdevt.c
> +++ b/drivers/net/wireless/marvell/mwifiex/cmdevt.c
> @@ -496,8 +496,7 @@ int mwifiex_process_event(struct mwifiex_adapter *adapter)
>  							(u16) eventcause;
>  
>  	/* Get BSS number and corresponding priv */
> -	priv = mwifiex_get_priv_by_id(adapter, EVENT_GET_BSS_NUM(eventcause),
> -				      EVENT_GET_BSS_TYPE(eventcause));
> +	priv = mwifiex_get_priv_by_id(adapter, EVENT_GET_BSS_NUM(eventcause));
>  	if (!priv)
>  		priv = mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY);
>  
> @@ -847,8 +846,7 @@ int mwifiex_process_cmdresp(struct mwifiex_adapter *adapter)
>  
>  	/* Get BSS number and corresponding priv */
>  	priv = mwifiex_get_priv_by_id(adapter,
> -			     HostCmd_GET_BSS_NO(le16_to_cpu(resp->seq_num)),
> -			     HostCmd_GET_BSS_TYPE(le16_to_cpu(resp->seq_num)));
> +			     HostCmd_GET_BSS_NO(le16_to_cpu(resp->seq_num)));
>  	if (!priv)
>  		priv = mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY);
>  	/* Clear RET_BIT from HostCmd */
> diff --git a/drivers/net/wireless/marvell/mwifiex/main.c b/drivers/net/wireless/marvell/mwifiex/main.c
> index 7cb90a6a8ccab..888f2801d6f2a 100644
> --- a/drivers/net/wireless/marvell/mwifiex/main.c
> +++ b/drivers/net/wireless/marvell/mwifiex/main.c
> @@ -85,6 +85,7 @@ static int mwifiex_register(void *card, struct device *dev,
>  		if (!adapter->priv[i])
>  			goto error;
>  
> +		adapter->priv[i]->bss_num = i;
>  		adapter->priv[i]->adapter = adapter;
>  		adapter->priv_num++;
>  	}
> diff --git a/drivers/net/wireless/marvell/mwifiex/main.h b/drivers/net/wireless/marvell/mwifiex/main.h
> index 541bc50a9561c..2938e55a38d79 100644
> --- a/drivers/net/wireless/marvell/mwifiex/main.h
> +++ b/drivers/net/wireless/marvell/mwifiex/main.h
> @@ -1297,20 +1297,12 @@ mwifiex_copy_rates(u8 *dest, u32 pos, u8 *src, int len)
>   * upon the BSS type and BSS number.
>   */
>  static inline struct mwifiex_private *
> -mwifiex_get_priv_by_id(struct mwifiex_adapter *adapter,
> -		       u8 bss_num, u8 bss_type)
> +mwifiex_get_priv_by_id(struct mwifiex_adapter *adapter, u8 bss_num)
>  {
> -	int i;
> -
> -	for (i = 0; i < adapter->priv_num; i++) {
> -		if (adapter->priv[i]->bss_mode == NL80211_IFTYPE_UNSPECIFIED)
> -			continue;
> +	if (bss_num >= MWIFIEX_MAX_BSS_NUM)
> +		return NULL;
>  
> -		if ((adapter->priv[i]->bss_num == bss_num) &&
> -		    (adapter->priv[i]->bss_type == bss_type))
> -			break;
> -	}
> -	return ((i < adapter->priv_num) ? adapter->priv[i] : NULL);
> +	return adapter->priv[bss_num];
>  }
>  
>  /*
> @@ -1332,47 +1324,19 @@ mwifiex_get_priv(struct mwifiex_adapter *adapter,
>  	return ((i < adapter->priv_num) ? adapter->priv[i] : NULL);
>  }
>  
> -/*
> - * This function checks available bss_num when adding new interface or
> - * changing interface type.
> - */
> -static inline u8
> -mwifiex_get_unused_bss_num(struct mwifiex_adapter *adapter, u8 bss_type)
> -{
> -	u8 i, j;
> -	int index[MWIFIEX_MAX_BSS_NUM];
> -
> -	memset(index, 0, sizeof(index));
> -	for (i = 0; i < adapter->priv_num; i++)
> -		if (adapter->priv[i]->bss_type == bss_type &&
> -		    !(adapter->priv[i]->bss_mode ==
> -		      NL80211_IFTYPE_UNSPECIFIED)) {
> -			index[adapter->priv[i]->bss_num] = 1;
> -		}
> -	for (j = 0; j < MWIFIEX_MAX_BSS_NUM; j++)
> -		if (!index[j])
> -			return j;
> -	return -1;
> -}
> -
>  /*
>   * This function returns the first available unused private structure pointer.
>   */
>  static inline struct mwifiex_private *
> -mwifiex_get_unused_priv_by_bss_type(struct mwifiex_adapter *adapter,
> -				    u8 bss_type)
> +mwifiex_get_unused_priv(struct mwifiex_adapter *adapter)
>  {
> -	u8 i;
> +	int i;
>  
>  	for (i = 0; i < adapter->priv_num; i++)
> -		if (adapter->priv[i]->bss_mode ==
> -		   NL80211_IFTYPE_UNSPECIFIED) {
> -			adapter->priv[i]->bss_num =
> -			mwifiex_get_unused_bss_num(adapter, bss_type);
> -			break;
> -		}
> +		if (adapter->priv[i]->bss_mode == NL80211_IFTYPE_UNSPECIFIED)
> +			return adapter->priv[i];
>  
> -	return ((i < adapter->priv_num) ? adapter->priv[i] : NULL);
> +	return NULL;
>  }
>  
>  /*
> diff --git a/drivers/net/wireless/marvell/mwifiex/sta_event.c b/drivers/net/wireless/marvell/mwifiex/sta_event.c
> index b5f3821a6a8f2..15f057d010a3d 100644
> --- a/drivers/net/wireless/marvell/mwifiex/sta_event.c
> +++ b/drivers/net/wireless/marvell/mwifiex/sta_event.c
> @@ -456,8 +456,7 @@ void mwifiex_process_multi_chan_event(struct mwifiex_private *priv,
>  		for (i = 0; i < intf_num; i++) {
>  			bss_type = grp_info->bss_type_numlist[i] >> 4;
>  			bss_num = grp_info->bss_type_numlist[i] & BSS_NUM_MASK;
> -			intf_priv = mwifiex_get_priv_by_id(adapter, bss_num,
> -							   bss_type);
> +			intf_priv = mwifiex_get_priv_by_id(adapter, bss_num);
>  			if (!intf_priv) {
>  				mwifiex_dbg(adapter, ERROR,
>  					    "Invalid bss_type bss_num\t"
> diff --git a/drivers/net/wireless/marvell/mwifiex/txrx.c b/drivers/net/wireless/marvell/mwifiex/txrx.c
> index f44e22f245110..21cfee3290377 100644
> --- a/drivers/net/wireless/marvell/mwifiex/txrx.c
> +++ b/drivers/net/wireless/marvell/mwifiex/txrx.c
> @@ -31,8 +31,7 @@ int mwifiex_handle_rx_packet(struct mwifiex_adapter *adapter,
>  
>  	local_rx_pd = (struct rxpd *) (skb->data);
>  	/* Get the BSS number from rxpd, get corresponding priv */
> -	priv = mwifiex_get_priv_by_id(adapter, local_rx_pd->bss_num &
> -				      BSS_NUM_MASK, local_rx_pd->bss_type);
> +	priv = mwifiex_get_priv_by_id(adapter, local_rx_pd->bss_num & BSS_NUM_MASK);
>  	if (!priv)
>  		priv = mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY);
>  
> @@ -165,8 +164,7 @@ static int mwifiex_host_to_card(struct mwifiex_adapter *adapter,
>  	struct mwifiex_txinfo *tx_info;
>  
>  	tx_info = MWIFIEX_SKB_TXCB(skb);
> -	priv = mwifiex_get_priv_by_id(adapter, tx_info->bss_num,
> -				      tx_info->bss_type);
> +	priv = mwifiex_get_priv_by_id(adapter, tx_info->bss_num);
>  	if (!priv) {
>  		mwifiex_dbg(adapter, ERROR,
>  			    "data: priv not found. Drop TX packet\n");
> @@ -281,8 +279,7 @@ int mwifiex_write_data_complete(struct mwifiex_adapter *adapter,
>  		return 0;
>  
>  	tx_info = MWIFIEX_SKB_TXCB(skb);
> -	priv = mwifiex_get_priv_by_id(adapter, tx_info->bss_num,
> -				      tx_info->bss_type);
> +	priv = mwifiex_get_priv_by_id(adapter, tx_info->bss_num);
>  	if (!priv)
>  		goto done;
>  
> 
> -- 
> 2.39.2
> 
> 

-- 
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 |

  reply	other threads:[~2024-08-22  5:48 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-08-20 11:55 [PATCH 00/31] wifi: mwifiex: cleanup driver Sascha Hauer
2024-08-20 11:55 ` [PATCH 01/31] wifi: mwifiex: remove unnecessary checks for valid priv Sascha Hauer
2024-08-22 17:58   ` Brian Norris
2024-08-20 11:55 ` [PATCH 02/31] wifi: mwifiex: use adapter as context pointer for mwifiex_hs_activated_event() Sascha Hauer
2024-08-20 11:55 ` [PATCH 03/31] wifi: mwifiex: drop HostCmd_CMD_802_11_MAC_ADDRESS response handling Sascha Hauer
2024-08-22 18:07   ` Brian Norris
2024-08-26  9:07     ` Sascha Hauer
2024-08-26 22:44       ` Brian Norris
2024-08-20 11:55 ` [PATCH 04/31] wifi: mwifiex: drop unnecessary initialization Sascha Hauer
2024-08-20 11:55 ` [PATCH 05/31] wifi: mwifiex: make region_code_mapping_t const Sascha Hauer
2024-08-20 11:55 ` [PATCH 06/31] wifi: mwifiex: use mwifiex_deauthenticate_all() Sascha Hauer
2024-08-20 11:55 ` [PATCH 07/31] wifi: mwifiex: pass adapter to mwifiex_dnld_cmd_to_fw() Sascha Hauer
2024-08-20 11:55 ` [PATCH 08/31] wifi: mwifiex: simplify mwifiex_setup_ht_caps() Sascha Hauer
2024-08-20 11:55 ` [PATCH 09/31] wifi: mwifiex: deduplicate code in mwifiex_cmd_tx_rate_cfg() Sascha Hauer
2024-08-20 11:55 ` [PATCH 10/31] wifi: mwifiex: fix indention Sascha Hauer
2024-08-22  9:36   ` [EXT] " David Lin
2024-08-22  9:53     ` Marc Kleine-Budde
2024-08-22 10:44       ` Marc Kleine-Budde
2024-08-22 11:59       ` David Lin
2024-08-22 12:05         ` Marc Kleine-Budde
2024-08-22 12:11           ` David Lin
2024-08-22 12:20             ` Marc Kleine-Budde
2024-08-26  9:37     ` Sascha Hauer
2024-08-26  9:48       ` David Lin
2024-08-26 10:17         ` Sascha Hauer
2024-08-20 11:55 ` [PATCH 11/31] wifi: mwifiex: use priv index as bss_num Sascha Hauer
2024-08-22  5:48   ` Sascha Hauer [this message]
2024-08-22 23:38   ` kernel test robot
2024-08-20 11:55 ` [PATCH 12/31] wifi: mwifiex: fix MAC address handling Sascha Hauer
2024-08-20 11:55 ` [PATCH 13/31] wifi: mwifiex: drop driver internal AP/STA limit counting Sascha Hauer
2024-08-20 11:55 ` [PATCH 14/31] wifi: mwifiex: iterate over privs in mwifiex_process_assoc_resp() Sascha Hauer
2024-08-20 11:55 ` [PATCH 15/31] wifi: mwifiex: add missing locking Sascha Hauer
2024-08-20 11:55 ` [PATCH 16/31] wifi: mwifiex: make locally used function static Sascha Hauer
2024-08-20 11:55 ` [PATCH 17/31] wifi: mwifiex: fix multiple station handling Sascha Hauer
2024-08-20 11:55 ` [PATCH 18/31] wifi: mwifiex: make mwifiex_enable_hs() safe for multiple station mode Sascha Hauer
2024-08-20 11:55 ` [PATCH 19/31] wifi: mwifiex: add function to send command specific to the adapter Sascha Hauer
2024-08-20 11:55 ` [PATCH 20/31] wifi: mwifiex: pass adapter to host sleep functions Sascha Hauer
2024-08-20 11:55 ` [PATCH 21/31] wifi: mwifiex: associate tx_power to the adapter Sascha Hauer
2024-08-20 11:55 ` [PATCH 22/31] wifi: mwifiex: pass adapter to mwifiex_init_shutdown_fw() Sascha Hauer
2024-08-20 11:55 ` [PATCH 23/31] wifi: mwifiex: pass adapter to mwifiex_disable_auto_ds() Sascha Hauer
2024-08-20 11:55 ` [PATCH 24/31] wifi: mwifiex: make txpwr specific to adapter Sascha Hauer
2024-08-20 11:55 ` [PATCH 25/31] wifi: mwifiex: return error on unexpected bss_num Sascha Hauer
2024-08-20 11:55 ` [PATCH 26/31] wifi: mwifiex: coalesce rules are adapter specific Sascha Hauer
2024-08-20 11:55 ` [PATCH 27/31] wifi: mwifiex: do not use mwifiex_get_priv() in mwifiex_dnld_sleep_confirm_cmd() Sascha Hauer
2024-08-20 11:55 ` [PATCH 28/31] wifi: mwifiex: move rx_ant/tx_ant to adapter Sascha Hauer
2024-08-20 11:55 ` [PATCH 29/31] wifi: mwifiex: pass adapter to mwifiex_fw_dump_event() Sascha Hauer
2024-08-20 11:55 ` [PATCH 30/31] wifi: mwifiex: move common settings out of switch/case Sascha Hauer
2024-08-20 11:55 ` [PATCH 31/31] wifi: mwifiex: allow to set MAC address in add_virtual_intf() Sascha Hauer
2024-08-20 13:34 ` [PATCH 00/31] wifi: mwifiex: cleanup driver Francesco Dolcini
2024-08-21 11:11   ` Sascha Hauer
2024-08-21 11:33   ` Sascha Hauer
2024-08-20 17:42 ` Kalle Valo
2024-08-21 11:12   ` Sascha Hauer
2024-08-21 14:07     ` Kalle Valo

Reply instructions:

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

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

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

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

  git send-email \
    --in-reply-to=ZsbRNbcq6tBeKPID@pengutronix.de \
    --to=s.hauer@pengutronix.de \
    --cc=briannorris@chromium.org \
    --cc=francesco@dolcini.it \
    --cc=kernel@pengutronix.de \
    --cc=kvalo@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-wireless@vger.kernel.org \
    /path/to/YOUR_REPLY

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

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.