All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sascha Hauer <s.hauer@pengutronix.de>
To: Jeff Chen <jeff.chen_1@nxp.com>
Cc: linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org,
	briannorris@chromium.org, johannes@sipsolutions.net,
	francesco@dolcini.it, tsung-hsien.hsieh@nxp.com
Subject: Re: [PATCH v7 12/22] wifi: nxpwifi: introduce command and event handling infrastructure#
Date: Tue, 25 Nov 2025 16:04:01 +0100	[thread overview]
Message-ID: <aSXFYfWo3fade3Dg@pengutronix.de> (raw)
In-Reply-To: <20251117110046.2810811-13-jeff.chen_1@nxp.com>

Hi Jeff,

On Mon, Nov 17, 2025 at 07:00:36PM +0800, Jeff Chen wrote:
 +/* This function handles the command response.
> + *
> + * After processing, the function cleans the command node and puts
> + * it back to the command free queue.
> + */
> +int nxpwifi_process_cmdresp(struct nxpwifi_adapter *adapter)
> +{
> +	struct host_cmd_ds_command *resp;
> +	struct nxpwifi_private *priv =
> +		nxpwifi_get_priv(adapter, NXPWIFI_BSS_ROLE_ANY);
> +	int ret = 0;
> +	u16 orig_cmdresp_no;
> +	u16 cmdresp_no;
> +	u16 cmdresp_result;
> +
> +	if (!adapter->curr_cmd || !adapter->curr_cmd->resp_skb) {
> +		resp = (struct host_cmd_ds_command *)adapter->upld_buf;
> +		nxpwifi_dbg(adapter, ERROR,
> +			    "CMD_RESP: NULL curr_cmd, %#x\n",
> +			    le16_to_cpu(resp->command));
> +		return -EINVAL;
> +	}
> +
> +	resp = (struct host_cmd_ds_command *)adapter->curr_cmd->resp_skb->data;
> +	orig_cmdresp_no = le16_to_cpu(resp->command);
> +	cmdresp_no = (orig_cmdresp_no & HOST_CMD_ID_MASK);
> +
> +	if (adapter->curr_cmd->cmd_no != cmdresp_no) {
> +		nxpwifi_dbg(adapter, ERROR,
> +			    "cmdresp error: cmd=0x%x cmd_resp=0x%x\n",
> +			    adapter->curr_cmd->cmd_no, cmdresp_no);
> +		return -EINVAL;
> +	}
> +	/* Now we got response from FW, cancel the command timer */
> +	timer_delete_sync(&adapter->cmd_timer);
> +	clear_bit(NXPWIFI_IS_CMD_TIMEDOUT, &adapter->work_flags);
> +
> +	if (adapter->curr_cmd->cmd_flag & CMD_F_HOSTCMD) {
> +		/* Copy original response back to response buffer */
> +		struct nxpwifi_ds_misc_cmd *hostcmd;
> +		u16 size = le16_to_cpu(resp->size);
> +
> +		nxpwifi_dbg(adapter, INFO,
> +			    "info: host cmd resp size = %d\n", size);
> +		size = min_t(u16, size, NXPWIFI_SIZE_OF_CMD_BUFFER);
> +		if (adapter->curr_cmd->data_buf) {
> +			hostcmd = adapter->curr_cmd->data_buf;
> +			hostcmd->len = size;
> +			memcpy(hostcmd->cmd, resp, size);
> +		}
> +	}
> +
> +	/* Get BSS number and corresponding priv */
> +	priv = nxpwifi_get_priv_by_id
> +	       (adapter, HOST_GET_BSS_NO(le16_to_cpu(resp->seq_num)),
> +		HOST_GET_BSS_TYPE(le16_to_cpu(resp->seq_num)));
> +	if (!priv)
> +		priv = nxpwifi_get_priv(adapter, NXPWIFI_BSS_ROLE_ANY);
> +	/* Clear RET_BIT from HOST */
> +	resp->command = cpu_to_le16(orig_cmdresp_no & HOST_CMD_ID_MASK);
> +
> +	cmdresp_no = le16_to_cpu(resp->command);
> +	cmdresp_result = le16_to_cpu(resp->result);
> +
> +	/* Save the last command response to debug log */
> +	adapter->dbg.last_cmd_resp_index =
> +			(adapter->dbg.last_cmd_resp_index + 1) % DBG_CMD_NUM;
> +	adapter->dbg.last_cmd_resp_id[adapter->dbg.last_cmd_resp_index] =
> +								orig_cmdresp_no;
> +
> +	nxpwifi_dbg(adapter, CMD,
> +		    "cmd: CMD_RESP: 0x%x, result %d, len %d, seqno 0x%x\n",
> +		    orig_cmdresp_no, cmdresp_result,
> +		    le16_to_cpu(resp->size), le16_to_cpu(resp->seq_num));
> +	nxpwifi_dbg_dump(adapter, CMD_D, "CMD_RESP buffer:", resp,
> +			 le16_to_cpu(resp->size));
> +
> +	if (!(orig_cmdresp_no & HOST_RET_BIT)) {
> +		nxpwifi_dbg(adapter, ERROR, "CMD_RESP: invalid cmd resp\n");
> +		if (adapter->curr_cmd->wait_q_enabled)
> +			adapter->cmd_wait_q.status = -1;
> +
> +		nxpwifi_recycle_cmd_node(adapter, adapter->curr_cmd);
> +		spin_lock_bh(&adapter->nxpwifi_cmd_lock);
> +		adapter->curr_cmd = NULL;
> +		spin_unlock_bh(&adapter->nxpwifi_cmd_lock);
> +		return -EINVAL;
> +	}
> +
> +	if (adapter->curr_cmd->cmd_flag & CMD_F_HOSTCMD) {
> +		adapter->curr_cmd->cmd_flag &= ~CMD_F_HOSTCMD;
> +		if (cmdresp_result == HOST_RESULT_OK &&
> +		    cmdresp_no == HOST_CMD_802_11_HS_CFG_ENH)
> +			ret = nxpwifi_ret_802_11_hs_cfg(priv, resp);
> +	} else {
> +		if (resp->result != HOST_RESULT_OK) {
> +			nxpwifi_process_cmdresp_error(priv, resp);
> +			return -EFAULT;
> +		}
> +		if (adapter->curr_cmd->cmd_resp) {
> +			void *data_buf = adapter->curr_cmd->data_buf;
> +
> +			ret = adapter->curr_cmd->cmd_resp(priv, resp,
> +							  cmdresp_no,
> +							  data_buf);
> +		}
> +	}
> +
> +	/* Check init command response */
> +	if (adapter->hw_status == NXPWIFI_HW_STATUS_INITIALIZING) {
> +		if (ret) {
> +			nxpwifi_dbg(adapter, ERROR,
> +				    "%s: cmd %#x failed during\t"
> +				    "initialization\n", __func__, cmdresp_no);
> +			nxpwifi_init_fw_complete(adapter);
> +			return ret;
> +		} else if (adapter->last_init_cmd == cmdresp_no) {
> +			adapter->hw_status = NXPWIFI_HW_STATUS_INIT_DONE;
> +		}
> +	}

If this driver now goes upstream could you have a look at the cleanup
patches I sent for the mwifiex driver and see which ones apply here as
well?

At least this asynchronous initialization seems entirely unnecessary,
see:

https://lore.kernel.org/all/20241202-mwifiex-cleanup-1-v3-12-317a6ce0dd5b@pengutronix.de/

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 |

  reply	other threads:[~2025-11-25 15:04 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-17 11:00 [PATCH v7 00/22] wifi: nxpwifi: create nxpwifi to support iw61x Jeff Chen
2025-11-17 11:00 ` [PATCH v7 01/22] wifi: nxpwifi: Add 802.11n support for client and AP modes Jeff Chen
2025-11-17 11:00 ` [PATCH v7 02/22] wifi: nxpwifi: add initial support for 802.11ac Jeff Chen
2025-11-17 11:00 ` [PATCH v7 03/22] wifi: nxpwifi: add initial support for 802.11ax Jeff Chen
2025-11-17 11:00 ` [PATCH v7 04/22] wifi: nxpwifi: add support for 802.11h (DFS and TPC) Jeff Chen
2025-11-17 11:00 ` [PATCH v7 05/22] wifi: nxpwifi: add support for WMM Jeff Chen
2025-11-17 11:00 ` [PATCH v7 06/22] wifi: nxpwifi: add scan support Jeff Chen
2025-11-17 11:00 ` [PATCH v7 07/22] wifi: nxpwifi: add join and association support Jeff Chen
2025-11-17 11:00 ` [PATCH v7 08/22] wifi: nxpwifi: add channel/frequency/power (cfp) support Jeff Chen
2025-11-17 11:00 ` [PATCH v7 09/22] wifi: nxpwifi: add configuration support Jeff Chen
2025-11-17 11:00 ` [PATCH v7 10/22] wifi: nxpwifi: implement cfg80211 ops for STA and AP modes Jeff Chen
2025-11-17 11:00 ` [PATCH v7 11/22] wifi: nxpwifi: add firmware command and TLV definitions Jeff Chen
2025-11-17 11:00 ` [PATCH v7 12/22] wifi: nxpwifi: introduce command and event handling infrastructure Jeff Chen
2025-11-25 15:04   ` Sascha Hauer [this message]
2025-11-17 11:00 ` [PATCH v7 13/22] wifi: nxpwifi: add data path support for STA and AP modes Jeff Chen
2025-11-17 11:00 ` [PATCH v7 14/22] wifi: nxpwifi: add debugfs support for diagnostics and testing Jeff Chen
2025-11-17 11:00 ` [PATCH v7 15/22] wifi: nxpwifi: add ethtool support for Wake-on-LAN Jeff Chen
2025-11-17 11:00 ` [PATCH v7 16/22] wifi: nxpwifi: add utility and IE handling support Jeff Chen
2025-11-17 11:00 ` [PATCH v7 17/22] wifi: nxpwifi: add driver initialization and shutdown support Jeff Chen
2025-11-17 11:00 ` [PATCH v7 18/22] wifi: nxpwifi: add core driver implementation Jeff Chen
2025-11-20 15:47   ` Abdun Nihaal
2025-12-05  8:33     ` jeff.chen_1
2025-11-17 11:00 ` [PATCH v7 19/22] wifi: nxpwifi: add initial SDIO bus driver support Jeff Chen
2025-11-17 11:00 ` [PATCH v7 20/22] wifi: nxpwifi: add NXP vendor and IW61x device IDs to sdio_ids.h Jeff Chen
2025-11-17 11:00 ` [PATCH v7 21/22] wifi: nxpwifi: add Kconfig and Makefile for kernel integration Jeff Chen
2025-11-17 11:00 ` [PATCH v7 22/22] wifi: nxpwifi: add MAINTAINERS entry for nxpwifi driver Jeff Chen
2025-11-17 19:10 ` [PATCH v7 00/22] wifi: nxpwifi: create nxpwifi to support iw61x Jeff Johnson
2025-11-20  9:01   ` Johannes Berg
2025-12-05  8:23     ` Jeff Chen
2025-12-05  8:12   ` Jeff Chen

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=aSXFYfWo3fade3Dg@pengutronix.de \
    --to=s.hauer@pengutronix.de \
    --cc=briannorris@chromium.org \
    --cc=francesco@dolcini.it \
    --cc=jeff.chen_1@nxp.com \
    --cc=johannes@sipsolutions.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=tsung-hsien.hsieh@nxp.com \
    /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.