mbox series

[v3,00/22] wifi: nxpwifi: create nxpwifi to support iw61x

Message ID 20240930063701.2566520-1-yu-hao.lin@nxp.com (mailing list archive)
Headers show
Series wifi: nxpwifi: create nxpwifi to support iw61x | expand

Message

David Lin Sept. 30, 2024, 6:36 a.m. UTC
This series adds support for IW61x which is a new family of 2.4/5 GHz
dual-band 1x1 Wi-Fi 6, Bluetooth/Bluetooth Low Energy 5.2 and 15.4
tri-radio single chip by NXP. These devices support 20/40/80MHz
single spatial stream in both STA and AP mode. Communication to the
IW61x is done via SDIO interface

This driver is a derivative of existing Mwifiex [1] and based on full-MAC
architecture [2]. It has been tested with i.MX8M Mini evaluation kits in
both AP and STA mode.

All code passes sparse and checkpatch.

Data sheet (require registration):
https://www.nxp.com/products/wireless-connectivity/wi-fi-plus-bluetooth-
plus-802-15-4/2-4-5-ghz-dual-band-1x1-wi-fi-6-802-11ax-plus-bluetooth-5-
4-plus-802-15-4-tri-radio-solution:IW612

This patch intents to add new driver nxpwifi for NXP IW61x and future new
chips/features support. 

[1] We had considered adding IW61x to mwifiex, however due to FW
    architecture, host command interface and supported features are
    significantly different, doing this on mwifiex will carry a lot of
    burdens. The effort of making sure no regression is also a huge effort.
    We must create a new driver nxpwifi. Subsequent NXP chipsets will be
    added and sustained on nxpwifi only.

[2] Some features, as of now, WPA2/WPA3 personal/enterprise are offloaded
    to host wpa_supplicant/hostapd.

v3:
   - Enable 802.11ax (Wi-Fi 6) for both AP and STA mode.
   - Extend driver verion string with hotfix number.
   - Remove Rx mlme work.
   - Remove all useless check of netif_carrier_ok().
   - Merge decl.h to cfg.h.
   - Remove unnecessary check for wiphy parameters setting.
   - Synchronize following commits from Mwifiex: 
     wifi: mwifiex: replace open-coded module_sdio_driver() 
     wifi: mwifiex: Fix interface type change 
     wifi: mwifiex: Do not return unused priv in mwifiex_get_priv_by_id() 
     wifi: mwifiex: increase max_num_akm_suites 
     wifi: mwifiex: duplicate static structs used in driver instances 
     wifi: mwifiex: keep mwifiex_cfg80211_ops constant 
     wifi: mwifiex: Fix uninitialized variable in 
                    mwifiex_cfg80211_authenticate() 
     wifi: mwifiex: remove unnecessary checks for valid priv 
     wifi: mwifiex: Fix memcpy() field-spanning write warning in
                    mwifiex_cmd_802_11_scan_ext() 
     wifi: mwifiex: Use IRQF_NO_AUTOEN flag in request_irq() 

v2:
   - Rename ioctl.h and sta_ioctl.c to cfg.h and sta_cfg.c.
   - Remove useless header file semaphore.h.
   - Use static variable for cookie.
   - Modify nxpwifi_register to use ERR_PTR, IS_ERR and PTR_ERR.
   - Use error number for error code.
   - Remove unnecessary private ie definitions.
   - Remove mutex async_mutex and related code.
   - Remove unnecessary work queue.
   - Add the support for PSK SHA256.
   - Use tasklet for Rx.
   - Remove unused functions.
   - Remove compile warning.

David Lin (22):
  wifi: nxpwifi: add 802.11n files
  wifi: nxpwifi: add 802.11ac files
  wifi: nxpwifi: add 802.11ax files
  wifi: nxpwifi: add 802.11h file
  wifi: nxpwifi: add WMM files
  wifi: nxpwifi: add scan.c
  wifi: nxpwifi: add join.c
  wifi: nxpwifi: add cfp.c
  wifi: nxpwifi: add configuration files
  wifi: nxpwifi: implement cfg80211 ops
  wifi: nxpwifi: add host command file
  wifi: nxpwifi: add command and event files
  wifi: nxpwifi: add data path files
  wifi: nxpwifi: add debugfs file
  wifi: nxpwifi: add ethtool.c
  wifi: nxpwifi: add utility files
  wifi: nxpwifi: add initialization file
  wifi: nxpwifi: add core files
  wifi: nxpwifi: add sdio bus driver files
  wifi: nxpwifi: modify sdio_ids.h
  wifi: nxpwifi: add makefile and kconfig files
  wifi: nxpwifi: modify MAINTAINERS file

 MAINTAINERS                                   |    7 +
 drivers/net/wireless/Kconfig                  |    1 +
 drivers/net/wireless/Makefile                 |    1 +
 drivers/net/wireless/nxp/Kconfig              |   17 +
 drivers/net/wireless/nxp/Makefile             |    3 +
 drivers/net/wireless/nxp/nxpwifi/11ac.c       |  288 ++
 drivers/net/wireless/nxp/nxpwifi/11ac.h       |   32 +
 drivers/net/wireless/nxp/nxpwifi/11ax.c       |  388 ++
 drivers/net/wireless/nxp/nxpwifi/11ax.h       |   61 +
 drivers/net/wireless/nxp/nxpwifi/11h.c        |  432 ++
 drivers/net/wireless/nxp/nxpwifi/11n.c        |  848 ++++
 drivers/net/wireless/nxp/nxpwifi/11n.h        |  161 +
 drivers/net/wireless/nxp/nxpwifi/11n_aggr.c   |  275 ++
 drivers/net/wireless/nxp/nxpwifi/11n_aggr.h   |   21 +
 .../net/wireless/nxp/nxpwifi/11n_rxreorder.c  |  910 ++++
 .../net/wireless/nxp/nxpwifi/11n_rxreorder.h  |   72 +
 drivers/net/wireless/nxp/nxpwifi/Kconfig      |   22 +
 drivers/net/wireless/nxp/nxpwifi/Makefile     |   39 +
 drivers/net/wireless/nxp/nxpwifi/cfg.h        |  874 ++++
 drivers/net/wireless/nxp/nxpwifi/cfg80211.c   | 4003 +++++++++++++++++
 drivers/net/wireless/nxp/nxpwifi/cfg80211.h   |   19 +
 drivers/net/wireless/nxp/nxpwifi/cfp.c        |  475 ++
 drivers/net/wireless/nxp/nxpwifi/cmdevt.c     | 1286 ++++++
 drivers/net/wireless/nxp/nxpwifi/cmdevt.h     |   98 +
 drivers/net/wireless/nxp/nxpwifi/debugfs.c    | 1041 +++++
 drivers/net/wireless/nxp/nxpwifi/ethtool.c    |   58 +
 drivers/net/wireless/nxp/nxpwifi/fw.h         | 2322 ++++++++++
 drivers/net/wireless/nxp/nxpwifi/ie.c         |  501 +++
 drivers/net/wireless/nxp/nxpwifi/init.c       |  680 +++
 drivers/net/wireless/nxp/nxpwifi/join.c       |  910 ++++
 drivers/net/wireless/nxp/nxpwifi/main.c       | 1649 +++++++
 drivers/net/wireless/nxp/nxpwifi/main.h       | 1477 ++++++
 drivers/net/wireless/nxp/nxpwifi/scan.c       | 2831 ++++++++++++
 drivers/net/wireless/nxp/nxpwifi/sdio.c       | 2646 +++++++++++
 drivers/net/wireless/nxp/nxpwifi/sdio.h       |  340 ++
 drivers/net/wireless/nxp/nxpwifi/sta_cfg.c    | 1311 ++++++
 drivers/net/wireless/nxp/nxpwifi/sta_cmd.c    | 3309 ++++++++++++++
 drivers/net/wireless/nxp/nxpwifi/sta_event.c  |  861 ++++
 drivers/net/wireless/nxp/nxpwifi/sta_rx.c     |  243 +
 drivers/net/wireless/nxp/nxpwifi/sta_tx.c     |  208 +
 drivers/net/wireless/nxp/nxpwifi/txrx.c       |  357 ++
 drivers/net/wireless/nxp/nxpwifi/uap_cmd.c    | 1254 ++++++
 drivers/net/wireless/nxp/nxpwifi/uap_event.c  |  491 ++
 drivers/net/wireless/nxp/nxpwifi/uap_txrx.c   |  498 ++
 drivers/net/wireless/nxp/nxpwifi/util.c       |  999 ++++
 drivers/net/wireless/nxp/nxpwifi/util.h       |  121 +
 drivers/net/wireless/nxp/nxpwifi/wmm.c        | 1369 ++++++
 drivers/net/wireless/nxp/nxpwifi/wmm.h        |   78 +
 include/linux/mmc/sdio_ids.h                  |    3 +
 49 files changed, 35890 insertions(+)
 create mode 100644 drivers/net/wireless/nxp/Kconfig
 create mode 100644 drivers/net/wireless/nxp/Makefile
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/11ac.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/11ac.h
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/11ax.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/11ax.h
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/11h.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/11n.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/11n.h
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/11n_aggr.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/11n_aggr.h
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/11n_rxreorder.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/11n_rxreorder.h
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/Kconfig
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/Makefile
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/cfg.h
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/cfg80211.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/cfg80211.h
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/cfp.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/cmdevt.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/cmdevt.h
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/debugfs.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/ethtool.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/fw.h
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/ie.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/init.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/join.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/main.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/main.h
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/scan.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/sdio.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/sdio.h
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/sta_cfg.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/sta_cmd.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/sta_event.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/sta_rx.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/sta_tx.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/txrx.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/uap_cmd.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/uap_event.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/uap_txrx.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/util.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/util.h
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/wmm.c
 create mode 100644 drivers/net/wireless/nxp/nxpwifi/wmm.h


base-commit: 5a4d42c1688c88f3be6aef46b0ea6c32694cd2b8

Comments

Reto Schneider Sept. 30, 2024, 8:41 a.m. UTC | #1
Hi David,

Answering here because an OEM proposed using the IW612 in an upcoming 
product of my employer.

On 30.09.24 08:36, David Lin wrote:
> [1] We had considered adding IW61x to mwifiex, however due to FW
>      architecture, host command interface and supported features are
>      significantly different, doing this on mwifiex will carry a lot of
>      burdens. The effort of making sure no regression is also a huge effort.
>      We must create a new driver nxpwifi. Subsequent NXP chipsets will be
>      added and sustained on nxpwifi only.

As developer, this sounds like a huge red flag. In the long-term 
interest of my employer, I'd oppose using this type of hardware in our 
products even if you manage to upstream the driver (as is).

Kind regards,
Reto
David Lin Oct. 2, 2024, 1:29 a.m. UTC | #2
Hi Reto,

> From: Reto Schneider <rs@hqv.ch>
> Sent: Monday, September 30, 2024 4:42 PM
> To: David Lin <yu-hao.lin@nxp.com>; linux-wireless@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org; briannorris@chromium.org;
> kvalo@kernel.org; francesco@dolcini.it; Pete Hsieh
> <tsung-hsien.hsieh@nxp.com>; s.hauer@pengutronix.de
> Subject: [EXT] Re: [PATCH v3 00/22] wifi: nxpwifi: create nxpwifi to support
> iw61x
> 
> Hi David,
> 
> Answering here because an OEM proposed using the IW612 in an upcoming
> product of my employer.
> 
> On 30.09.24 08:36, David Lin wrote:
> > [1] We had considered adding IW61x to mwifiex, however due to FW
> >      architecture, host command interface and supported features are
> >      significantly different, doing this on mwifiex will carry a lot of
> >      burdens. The effort of making sure no regression is also a huge
> effort.
> >      We must create a new driver nxpwifi. Subsequent NXP chipsets will
> be
> >      added and sustained on nxpwifi only.
> 
> As developer, this sounds like a huge red flag. In the long-term interest of my
> employer, I'd oppose using this type of hardware in our products even if you
> manage to upstream the driver (as is).
> 
> Kind regards,
> Reto

Mwifiex has been put in “Odds Fixes” state for quite some time. 
Now we have planned to add series of new chips and features. 
Although some of the codes are from Mwifiex, we do spend much effort to enhance the FW/driver interfaces and a few other areas
Our proposal is, mwifiex continues support only existing devices. New NXP connectivity chips and features will be added to nxpwifi only.
We are also committed to regular QA and maintenance for nxpwifi.  

May I know what is your concern on upstream this driver so we can better address it?

David
Reto Schneider Oct. 2, 2024, 3:26 p.m. UTC | #3
Hi David,

On 02.10.24 03:29, David Lin wrote:
> Mwifiex has been put in “Odds Fixes” state for quite some time.

What I read: NXP (who has taken over the Marvell BLE/Wi-Fi business) is 
not willing to maintain products once they have sold it.

> Now we have planned to add series of new chips and features.
> Although some of the codes are from Mwifiex, we do spend much effort to enhance the FW/driver interfaces and a few other areas
> Our proposal is, mwifiex continues support only existing devices.

mwifiex does not continue to do anything on its own, it requires 
continuous maintenance. And NXP is not doing that:

$ git log --no-merges --oneline drivers/net/wireless/marvell/mwifiex/ | 
wc -l
643
$ git log --no-merges drivers/net/wireless/marvell/mwifiex/ | grep 
^Author:.*nxp.com | wc -l
7

> New NXP connectivity chips and features will be added to nxpwifi only.
> We are also committed to regular QA and maintenance for nxpwifi.

What I read: NXP is eager to support new hardware, but does not take 
adequate support of hardware they sold in the past.

> May I know what is your concern on upstream this driver so we can better address it?

 From my PoV as a potential customer: NXP cleaning up the mwifiex driver 
would give me confidence that whatever comes next from NXP will be taken 
care of adequately too. Also in the long term, which is a must when 
choosing components for products that need to be supported for many 
years to come.

Kind regards,
Reto
David Lin Oct. 3, 2024, 4:30 a.m. UTC | #4
Hi Reto,

> From: Reto Schneider <rs@hqv.ch>
> Sent: Wednesday, October 2, 2024 11:26 PM
> To: David Lin <yu-hao.lin@nxp.com>
> Cc: linux-kernel@vger.kernel.org; briannorris@chromium.org;
> kvalo@kernel.org; francesco@dolcini.it; Pete Hsieh
> <tsung-hsien.hsieh@nxp.com>; s.hauer@pengutronix.de;
> linux-wireless@vger.kernel.org
> Subject: Re: [EXT] Re: [PATCH v3 00/22] wifi: nxpwifi: create nxpwifi to
> support iw61x 
> 
> Hi David,
> 
> On 02.10.24 03:29, David Lin wrote:
> > Mwifiex has been put in “Odds Fixes” state for quite some time.
> 
> What I read: NXP (who has taken over the Marvell BLE/Wi-Fi business) is not
> willing to maintain products once they have sold it.
> 
> > Now we have planned to add series of new chips and features.
> > Although some of the codes are from Mwifiex, we do spend much effort
> > to enhance the FW/driver interfaces and a few other areas Our proposal is,
> mwifiex continues support only existing devices.
> 
> mwifiex does not continue to do anything on its own, it requires continuous
> maintenance. And NXP is not doing that:
> 
> $ git log --no-merges --oneline drivers/net/wireless/marvell/mwifiex/ | wc -l
> 643
> $ git log --no-merges drivers/net/wireless/marvell/mwifiex/ | grep
> ^Author:.*nxp.com | wc -l
> 7
> 
> > New NXP connectivity chips and features will be added to nxpwifi only.
> > We are also committed to regular QA and maintenance for nxpwifi.
> 
> What I read: NXP is eager to support new hardware, but does not take
> adequate support of hardware they sold in the past.

I can understand the concern. 
Indeed mwifiex was left unattended for some time due to internal reasons.
NXP maintainers were removed due to this also driver is put in "Odds fixes" state. 
We resumed on maintaining since last year and you may have seen we continue
fixing issues and add features for example, WPA3, which is a mandatory security requirement for WFA.

Below are some fixes PR for your reference, 
Accepted:
https://patchwork.kernel.org/project/linux-wireless/patch/20231208234029.2197-1-yu-hao.lin@nxp.com/
https://patchwork.kernel.org/project/linux-wireless/patch/20231215005118.17031-1-yu-hao.lin@nxp.com/
https://patchwork.kernel.org/project/linux-wireless/patch/20231221015511.1032128-1-yu-hao.lin@nxp.com/
https://patchwork.kernel.org/project/linux-wireless/patch/20240704033001.603419-2-yu-hao.lin@nxp.com/
Pending approval:
https://patchwork.kernel.org/project/linux-wireless/patch/20240902084311.2607-1-yu-hao.lin@nxp.com/
https://patchwork.kernel.org/project/linux-wireless/patch/20240830080719.826142-1-yu-hao.lin@nxp.com/

> 
> > May I know what is your concern on upstream this driver so we can better
> address it?
> 
>  From my PoV as a potential customer: NXP cleaning up the mwifiex driver
> would give me confidence that whatever comes next from NXP will be taken
> care of adequately too. Also in the long term, which is a must when
> choosing components for products that need to be supported for many
> years to come.
> 
> Kind regards,
> Reto

I can understand.  We have completed the clean-up on nxpwifi. 
We could have done this on mwifiex. But given mwifiex “Odds fixes”, and new chips based on new FW interface,
adding new device on mwifiex would carry a lot of burdens and make the code even bigger and harder to maintain. 
Therefore, we propose continue supporting existing chips in mwifiex. Do real issue fixes, not code clean up 
In summary, we have done code clean up on nxpwifi plus improvements in few other areas. We would like to
propose nxpwifi as a base for new chip and feature support. It doesn’t conflict with our mwifiex maintenance 

With this I hope you would support nxpwifi upstream. Please let me know if you have any further concerns.

David
Reto Schneider Oct. 3, 2024, 8:37 a.m. UTC | #5
Hi David,

On 03.10.24 06:30, David Lin wrote:
> With this I hope you would support nxpwifi upstream. Please let me know if you have any further concerns.

Just to be clear: I am not a Wi-Fi developer. Just a (potential) 
customer trying to express that the way NXP is (not) taking care of its 
upstream Wi-Fi drivers does not inspire confidence in me.

More words are unlikely to change my opinion about this. What would 
change my mind: NPX becoming maintainer of the 
drivers/net/wireless/marvell drivers. Two of them are even orphaned.

Kind regards,
Reto
David Lin Oct. 11, 2024, 12:53 a.m. UTC | #6
Hi Kalle,

	There is no more comments for nxpwifi patch v3 till now. I wonder if I can
create the single patch for final review?

Thanks & Regards,
David

> From: David Lin <yu-hao.lin@nxp.com>
> Sent: Monday, September 30, 2024 2:37 PM
> To: linux-wireless@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org; briannorris@chromium.org;
> kvalo@kernel.org; francesco@dolcini.it; Pete Hsieh
> <tsung-hsien.hsieh@nxp.com>; s.hauer@pengutronix.de; David Lin
> <yu-hao.lin@nxp.com>
> Subject: [PATCH v3 00/22] wifi: nxpwifi: create nxpwifi to support iw61x
> 
> This series adds support for IW61x which is a new family of 2.4/5 GHz
> dual-band 1x1 Wi-Fi 6, Bluetooth/Bluetooth Low Energy 5.2 and 15.4
> tri-radio single chip by NXP. These devices support 20/40/80MHz single
> spatial stream in both STA and AP mode. Communication to the IW61x is
> done via SDIO interface
> 
> This driver is a derivative of existing Mwifiex [1] and based on full-MAC
> architecture [2]. It has been tested with i.MX8M Mini evaluation kits in both
> AP and STA mode.
> 
> All code passes sparse and checkpatch.
> 
> Data sheet (require registration):
> https://www.nxp.com/products/wireless-connectivity/wi-fi-plus-bluetooth-
> plus-802-15-4/2-4-5-ghz-dual-band-1x1-wi-fi-6-802-11ax-plus-bluetooth-5-
> 4-plus-802-15-4-tri-radio-solution:IW612
> 
> This patch intents to add new driver nxpwifi for NXP IW61x and future new
> chips/features support.
> 
> [1] We had considered adding IW61x to mwifiex, however due to FW
>     architecture, host command interface and supported features are
>     significantly different, doing this on mwifiex will carry a lot of
>     burdens. The effort of making sure no regression is also a huge effort.
>     We must create a new driver nxpwifi. Subsequent NXP chipsets will be
>     added and sustained on nxpwifi only.
> 
> [2] Some features, as of now, WPA2/WPA3 personal/enterprise are offloaded
>     to host wpa_supplicant/hostapd.
> 
> v3:
>    - Enable 802.11ax (Wi-Fi 6) for both AP and STA mode.
>    - Extend driver verion string with hotfix number.
>    - Remove Rx mlme work.
>    - Remove all useless check of netif_carrier_ok().
>    - Merge decl.h to cfg.h.
>    - Remove unnecessary check for wiphy parameters setting.
>    - Synchronize following commits from Mwifiex:
>      wifi: mwifiex: replace open-coded module_sdio_driver()
>      wifi: mwifiex: Fix interface type change
>      wifi: mwifiex: Do not return unused priv in mwifiex_get_priv_by_id()
>      wifi: mwifiex: increase max_num_akm_suites
>      wifi: mwifiex: duplicate static structs used in driver instances
>      wifi: mwifiex: keep mwifiex_cfg80211_ops constant
>      wifi: mwifiex: Fix uninitialized variable in
>                     mwifiex_cfg80211_authenticate()
>      wifi: mwifiex: remove unnecessary checks for valid priv
>      wifi: mwifiex: Fix memcpy() field-spanning write warning in
>                     mwifiex_cmd_802_11_scan_ext()
>      wifi: mwifiex: Use IRQF_NO_AUTOEN flag in request_irq()
> 
> v2:
>    - Rename ioctl.h and sta_ioctl.c to cfg.h and sta_cfg.c.
>    - Remove useless header file semaphore.h.
>    - Use static variable for cookie.
>    - Modify nxpwifi_register to use ERR_PTR, IS_ERR and PTR_ERR.
>    - Use error number for error code.
>    - Remove unnecessary private ie definitions.
>    - Remove mutex async_mutex and related code.
>    - Remove unnecessary work queue.
>    - Add the support for PSK SHA256.
>    - Use tasklet for Rx.
>    - Remove unused functions.
>    - Remove compile warning.
>