[PATCH RFC v2 2/2] wifi: aic: update cfg80211 API compatibility for modern kernels

Tim Michals <[email protected]>
Newsgroups org.kernel.vger.linux-wireless
Message-ID <[email protected]>
Fixes modern kernel API compilation differences in `aic8800_fdrv`:

1. `netif_rx_ni` was removed in Linux 5.18+. Provide compatibility macro
   in `rwnx_compat.h` mapping to `netif_rx`.
2. `cfg80211_probe_status` parameter count was updated in Linux 6.0+.
   Wrap `cfg80211_probe_status` invocation with `LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0)`.
3. `remain_on_channel` callback signature in `struct cfg80211_ops` dropped
   `rx_addr` in Linux 6.5+. Wrap signature definition for Linux 6.5+.

Signed-off-by: Tim Michals <[email protected]>
Tested-by: Tim Michals <[email protected]>
---
 drivers/net/wireless/aic/aic8800_fdrv/rwnx_compat.h |  5 +++++
 drivers/net/wireless/aic/aic8800_fdrv/rwnx_main.c   | 20 ++++++++++++++++++++
 2 files changed, 25 insertions(+)

diff --git a/drivers/net/wireless/aic/aic8800_fdrv/rwnx_compat.h b/drivers/net/wireless/aic/aic8800_fdrv/rwnx_compat.h
index b2c3d4e..f5e6d7c 100644
--- a/drivers/net/wireless/aic/aic8800_fdrv/rwnx_compat.h
+++ b/drivers/net/wireless/aic/aic8800_fdrv/rwnx_compat.h
@@ -21,6 +21,11 @@
 #ifndef _RWNX_COMPAT_H_
 #define _RWNX_COMPAT_H_

+#include <linux/version.h>

+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0)
+#ifndef netif_rx_ni
+#define netif_rx_ni netif_rx
+#endif
+#endif

 /* CFG80211 */

diff --git a/drivers/net/wireless/aic/aic8800_fdrv/rwnx_main.c b/drivers/net/wireless/aic/aic8800_fdrv/rwnx_main.c
index c3d4e5f..a6b7c8d 100644
--- a/drivers/net/wireless/aic/aic8800_fdrv/rwnx_main.c
+++ b/drivers/net/wireless/aic/aic8800_fdrv/rwnx_main.c
@@ -2824,12 +2824,22 @@ static void apm_probe_sta_work_process(struct work_struct *work)
 	if (found)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0)
+		cfg80211_probe_status(rwnx_vif->ndev, mac,
+				      (u64)rwnx_vif->sta_probe.probe_id,
+				      true, 0, false, GFP_ATOMIC);
+	else
+		cfg80211_probe_status(rwnx_vif->ndev, mac,
+				      (u64)rwnx_vif->sta_probe.probe_id,
+				      false, 0, false, GFP_ATOMIC);
+#else
 		cfg80211_probe_status(rwnx_vif->ndev, mac,
 				      (u64)rwnx_vif->sta_probe.probe_id, -1,
 				      true, 0, false, GFP_ATOMIC);
 	else
 		cfg80211_probe_status(rwnx_vif->ndev, mac,
 				      (u64)rwnx_vif->sta_probe.probe_id, -1,
 				      false, 0, false, GFP_ATOMIC);
+#endif
 	rwnx_vif->sta_probe.probe_id++;
 }

@@ -3463,6 +3473,16 @@ static int rwnx_cfg80211_remain_on_channel_(struct wiphy *wiphy,
 	return error;
 }

+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 5, 0)
+static int rwnx_cfg80211_remain_on_channel(struct wiphy *wiphy,
+					   struct wireless_dev *wdev,
+					   struct ieee80211_channel *chan,
+					   unsigned int duration, u64 *cookie)
+{
+	return rwnx_cfg80211_remain_on_channel_(wiphy, wdev, chan,
+						duration, cookie, false);
+}
+#else
 static int rwnx_cfg80211_remain_on_channel(struct wiphy *wiphy,
 					   struct wireless_dev *wdev,
 					   struct ieee80211_channel *chan,
-- 
2.43.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.