Switch entirely to fifteenhex repo for xradio driver as it performs better

This commit is contained in:
Gunjan Gupta
2023-11-28 22:16:21 +05:30
parent 11b0243be1
commit 9131aac1c9
16 changed files with 10 additions and 761 deletions

View File

@@ -1,37 +0,0 @@
diff --git a/drivers/net/wireless/xradio/main.c b/drivers/net/wireless/xradio/main.c
index 2b76ede90..272afad2b 100644
--- a/drivers/net/wireless/xradio/main.c
+++ b/drivers/net/wireless/xradio/main.c
@@ -503,7 +503,11 @@ int xradio_core_init(struct sdio_func* func)
struct ieee80211_hw *dev;
struct xradio_common *hw_priv;
unsigned char randomaddr[ETH_ALEN];
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 13, 0)
const unsigned char *addr = NULL;
+#else
+ unsigned char addr[ETH_ALEN] = {0};
+#endif
//init xradio_common
dev = xradio_init_common(sizeof(struct xradio_common));
@@ -518,12 +522,20 @@ int xradio_core_init(struct sdio_func* func)
// fill in mac addresses
if (hw_priv->pdev->of_node) {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 13, 0)
addr = of_get_mac_address(hw_priv->pdev->of_node);
+#else
+ int ret = of_get_mac_address(hw_priv->pdev->of_node, addr);
+#endif
}
if (!addr) {
dev_warn(hw_priv->pdev, "no mac address provided, using random\n");
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 13, 0)
eth_random_addr(randomaddr);
addr = randomaddr;
+#else
+ eth_random_addr(addr);
+#endif
}
for (b = 0; b < XRWL_MAX_VIFS; b++) { /* MRK 5.5a */
memcpy(hw_priv->addresses[b].addr, addr, ETH_ALEN);

View File

@@ -1,34 +0,0 @@
From 986953136919131542184ea9f01aa76b0f089d3d Mon Sep 17 00:00:00 2001
From: root <Gunjan Gupta>
Date: Sun, 3 Sep 2023 00:18:53 +0000
Subject: [PATCH] Fix compilation on 5.19 kernel
Changes are from
https://github.com/fifteenhex/xradio/commit/e64ac79f417f85cadfa795c53b4591fd4aaf0f72.patch
---
drivers/net/wireless/xradio/ap.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/net/wireless/xradio/ap.c b/drivers/net/wireless/xradio/ap.c
index d047544fbf7e..f803f58ce10c 100644
--- a/drivers/net/wireless/xradio/ap.c
+++ b/drivers/net/wireless/xradio/ap.c
@@ -492,9 +492,15 @@ void xradio_bss_info_changed(struct ieee80211_hw *dev,
/* TODO:COMBO:Change this once
* mac80211 changes are available */
BUG_ON(!hw_priv->channel);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 19, 0)
+ hw_priv->ht_oper.ht_cap = sta->deflink.ht_cap;
+ priv->bss_params.operationalRateSet =__cpu_to_le32(
+ xradio_rate_mask_to_wsm(hw_priv, sta->deflink.supp_rates[hw_priv->channel->band]));
+#else
hw_priv->ht_oper.ht_cap = sta->ht_cap;
priv->bss_params.operationalRateSet =__cpu_to_le32(
xradio_rate_mask_to_wsm(hw_priv, sta->supp_rates[hw_priv->channel->band]));
+#endif
/* TODO by Icenowy: I think this may lead to some problems. */
// hw_priv->ht_oper.channel_type = info->channel_type;
hw_priv->ht_oper.operation_mode = info->ht_operation_mode;
--
2.34.1

View File

@@ -1,256 +0,0 @@
From 91769109b85ca90fa484d88919b381f2fec679e2 Mon Sep 17 00:00:00 2001
From: Gunjan Gupta <viraniac@gmail.com>
Date: Sat, 2 Sep 2023 22:52:47 +0000
Subject: [PATCH 1/3] Fix compilation with 6.0 kernel
changes taken from
https://github.com/fifteenhex/xradio/commit/99be7356e06ec11d34c5668585590e4c23e11871
---
drivers/net/wireless/xradio/ap.c | 56 +++++++++++++++++++++++--------
drivers/net/wireless/xradio/ap.h | 7 ++++
drivers/net/wireless/xradio/sta.c | 6 ++++
drivers/net/wireless/xradio/sta.h | 6 ++++
drivers/net/wireless/xradio/xradio.h | 1 ++++
4 files changed, 61 insertions(+), 14 deletions(-)
diff --git a/drivers/net/wireless/xradio/ap.c b/drivers/net/wireless/xradio/ap.c
index 6c48d26ec2ce..17eb5132ee84 100644
--- a/drivers/net/wireless/xradio/ap.c
+++ b/drivers/net/wireless/xradio/ap.c
@@ -219,7 +219,11 @@ static int xradio_set_tim_impl(struct xradio_vif *priv, bool aid0_bit_set)
ap_printk(XRADIO_DBG_MSG, "%s mcast: %s.\n", __func__,
aid0_bit_set ? "ena" : "dis");
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0)
+ skb = ieee80211_beacon_get_tim(priv->hw, priv->vif, &tim_offset, &tim_length, 0);
+#else
skb = ieee80211_beacon_get_tim(priv->hw, priv->vif, &tim_offset, &tim_length);
+#endif
if (!skb) {
__xradio_flush(hw_priv, true, priv->if_id);
return -ENOENT;
@@ -355,13 +359,25 @@ static int xradio_set_btcoexinfo(struct xradio_vif *priv)
return ret;
}
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0)
+void xradio_bss_info_changed(struct ieee80211_hw *dev,
+ struct ieee80211_vif *vif,
+ struct ieee80211_bss_conf *info,
+ u64 changed)
+#else
void xradio_bss_info_changed(struct ieee80211_hw *dev,
struct ieee80211_vif *vif,
struct ieee80211_bss_conf *info,
u32 changed)
+#endif
{
struct xradio_common *hw_priv = dev->priv;
struct xradio_vif *priv = xrwl_get_vif_from_ieee80211(vif);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0)
+ struct ieee80211_vif_cfg *cfg = &vif->cfg;
+#else
+ struct ieee80211_bss_conf *cfg = info;
+#endif
ap_printk(XRADIO_DBG_OPS, "%s\n", __func__);
@@ -377,9 +393,9 @@ void xradio_bss_info_changed(struct ieee80211_hw *dev,
struct wsm_arp_ipv4_filter filter = {0};
int i;
ap_printk(XRADIO_DBG_MSG, "[STA] BSS_CHANGED_ARP_FILTER cnt: %d\n",
- info->arp_addr_cnt);
+ cfg->arp_addr_cnt);
- if (info->arp_addr_cnt){
+ if (cfg->arp_addr_cnt){
if (vif->type == NL80211_IFTYPE_STATION)
filter.enable = (u32)XRADIO_ENABLE_ARP_FILTER_OFFLOAD;
else if (priv->join_status == XRADIO_JOIN_STATUS_AP)
@@ -390,10 +406,10 @@ void xradio_bss_info_changed(struct ieee80211_hw *dev,
/* Currently only one IP address is supported by firmware.
* In case of more IPs arp filtering will be disabled. */
- if (info->arp_addr_cnt > 0 &&
- info->arp_addr_cnt <= WSM_MAX_ARP_IP_ADDRTABLE_ENTRIES) {
- for (i = 0; i < info->arp_addr_cnt; i++) {
- filter.ipv4Address[i] = info->arp_addr_list[i];
+ if (cfg->arp_addr_cnt > 0 &&
+ cfg->arp_addr_cnt <= WSM_MAX_ARP_IP_ADDRTABLE_ENTRIES) {
+ for (i = 0; i < cfg->arp_addr_cnt; i++) {
+ filter.ipv4Address[i] = cfg->arp_addr_list[i];
ap_printk(XRADIO_DBG_NIY, "[STA]addr[%d]: 0x%X\n", i, filter.ipv4Address[i]);
}
} else
@@ -415,8 +431,8 @@ void xradio_bss_info_changed(struct ieee80211_hw *dev,
#ifdef HIDDEN_SSID
if(priv->join_status != XRADIO_JOIN_STATUS_AP) {
priv->hidden_ssid = info->hidden_ssid;
- priv->ssid_length = info->ssid_len;
- memcpy(priv->ssid, info->ssid, info->ssid_len);
+ priv->ssid_length = cfg->ssid_len;
+ memcpy(priv->ssid, cfg->ssid, cfg->ssid_len);
} else
ap_printk(XRADIO_DBG_NIY, "priv->join_status=%d\n", priv->join_status);
#endif
@@ -442,7 +458,7 @@ void xradio_bss_info_changed(struct ieee80211_hw *dev,
priv->wep_default_key_id = -1;
wsm_unlock_tx(hw_priv);
- if (!info->assoc /* && !info->ibss_joined */) {
+ if (!cfg->assoc /* && !info->ibss_joined */) {
priv->cqm_link_loss_count = XRADIO_LINK_LOSS_THOLD_DEF;
priv->cqm_beacon_loss_count = XRADIO_BSS_LOSS_THOLD_DEF;
priv->cqm_tx_failure_thold = 0;
@@ -460,7 +476,7 @@ void xradio_bss_info_changed(struct ieee80211_hw *dev,
int i;
struct xradio_vif *tmp_priv;
ap_printk(XRADIO_DBG_NIY, "BSS_CHANGED_ASSOC.\n");
- if (info->assoc) { /* TODO: ibss_joined */
+ if (cfg->assoc) { /* TODO: ibss_joined */
struct ieee80211_sta *sta = NULL;
if (info->dtim_period)
priv->join_dtim_period = info->dtim_period;
@@ -548,7 +564,7 @@ void xradio_bss_info_changed(struct ieee80211_hw *dev,
priv->bss_params.beaconLostCount = (priv->cqm_beacon_loss_count ?
priv->cqm_beacon_loss_count : priv->cqm_link_loss_count);
- priv->bss_params.aid = info->aid;
+ priv->bss_params.aid = cfg->aid;
if (priv->join_dtim_period < 1)
priv->join_dtim_period = 1;
@@ -589,7 +605,7 @@ void xradio_bss_info_changed(struct ieee80211_hw *dev,
hw_priv->ba_tid_mask, priv->if_id));
wsm_unlock_tx(hw_priv);
}
-
+
if (priv->vif->p2p) {
ap_printk(XRADIO_DBG_NIY, "[STA] Setting p2p powersave configuration.\n");
WARN_ON(wsm_set_p2p_ps_modeinfo(hw_priv, &priv->p2p_ps_modeinfo, priv->if_id));
@@ -706,11 +722,11 @@ void xradio_bss_info_changed(struct ieee80211_hw *dev,
}
if (changed & (BSS_CHANGED_PS | BSS_CHANGED_ASSOC)) {
- if (!info->ps)
+ if (!cfg->ps)
priv->powersave_mode.pmMode = WSM_PSM_ACTIVE;
else
priv->powersave_mode.pmMode = WSM_PSM_FAST_PS;
-
+
ap_printk(XRADIO_DBG_MSG, "[PowerSave] aid: %d, IsSTA: %s, Powersave: %s\n",
priv->bss_params.aid,
priv->join_status == XRADIO_JOIN_STATUS_STA ? "yes" : "no",
@@ -966,7 +982,11 @@ static int xradio_upload_beacon(struct xradio_vif *priv)
if (priv->vif->p2p || hw_priv->channel->band == NL80211_BAND_5GHZ)
frame.rate = WSM_TRANSMIT_RATE_6;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0)
+ frame.skb = ieee80211_beacon_get(priv->hw, priv->vif, 0);
+#else
frame.skb = ieee80211_beacon_get(priv->hw, priv->vif);
+#endif
if (WARN_ON(!frame.skb))
return -ENOMEM;
@@ -1234,7 +1254,11 @@ static int xradio_start_ap(struct xradio_vif *priv)
#ifndef HIDDEN_SSID
/* Get SSID */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0)
+ skb = ieee80211_beacon_get(priv->hw, priv->vif, 0);
+#else
skb = ieee80211_beacon_get(priv->hw, priv->vif);
+#endif
if (WARN_ON(!skb)) {
ap_printk(XRADIO_DBG_ERROR,"%s, ieee80211_beacon_get failed\n", __func__);
return -ENOMEM;
@@ -1559,7 +1583,11 @@ void xradio_ht_oper_update_work(struct work_struct *work)
.count = 1,
};
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0)
+ skb = ieee80211_beacon_get(priv->hw, priv->vif, 0);
+#else
skb = ieee80211_beacon_get(priv->hw, priv->vif);
+#endif
if (WARN_ON(!skb))
return;
diff --git a/drivers/net/wireless/xradio/ap.h b/drivers/net/wireless/xradio/ap.h
index 9d55fb86b125..36e243912615 100644
--- a/drivers/net/wireless/xradio/ap.h
+++ b/drivers/net/wireless/xradio/ap.h
@@ -29,10 +29,17 @@ int xradio_sta_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
void xradio_sta_notify(struct ieee80211_hw *dev, struct ieee80211_vif *vif,
enum sta_notify_cmd notify_cmd,
struct ieee80211_sta *sta);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0)
+void xradio_bss_info_changed(struct ieee80211_hw *dev,
+ struct ieee80211_vif *vif,
+ struct ieee80211_bss_conf *info,
+ u64 changed);
+#else
void xradio_bss_info_changed(struct ieee80211_hw *dev,
struct ieee80211_vif *vif,
struct ieee80211_bss_conf *info,
u32 changed);
+#endif
int xradio_ampdu_action(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_ampdu_params *params);
diff --git a/drivers/net/wireless/xradio/sta.c b/drivers/net/wireless/xradio/sta.c
index 529835732e12..5eb72ec56559 100644
--- a/drivers/net/wireless/xradio/sta.c
+++ b/drivers/net/wireless/xradio/sta.c
@@ -697,8 +697,14 @@ void xradio_configure_filter(struct ieee80211_hw *hw,
}
}
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0)
+int xradio_conf_tx(struct ieee80211_hw *dev, struct ieee80211_vif *vif,
+ unsigned int link_id, u16 queue,
+ const struct ieee80211_tx_queue_params *params)
+#else
int xradio_conf_tx(struct ieee80211_hw *dev, struct ieee80211_vif *vif,
u16 queue, const struct ieee80211_tx_queue_params *params)
+#endif
{
struct xradio_common *hw_priv = dev->priv;
struct xradio_vif *priv = xrwl_get_vif_from_ieee80211(vif);
diff --git a/drivers/net/wireless/xradio/sta.h b/drivers/net/wireless/xradio/sta.h
index d70274fe1959..5291eea7834c 100644
--- a/drivers/net/wireless/xradio/sta.h
+++ b/drivers/net/wireless/xradio/sta.h
@@ -50,8 +50,14 @@ void xradio_configure_filter(struct ieee80211_hw *dev,
unsigned int changed_flags,
unsigned int *total_flags,
u64 multicast);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0)
+int xradio_conf_tx(struct ieee80211_hw *dev, struct ieee80211_vif *vif,
+ unsigned int link_id, u16 queue,
+ const struct ieee80211_tx_queue_params *params);
+#else
int xradio_conf_tx(struct ieee80211_hw *dev, struct ieee80211_vif *vif,
u16 queue, const struct ieee80211_tx_queue_params *params);
+#endif
int xradio_get_stats(struct ieee80211_hw *dev,
struct ieee80211_low_level_stats *stats);
/* Not more a part of interface?
diff --git a/drivers/net/wireless/xradio/xradio.h b/drivers/net/wireless/xradio/xradio.h
index d565db0..9f47a8b 100644
--- a/drivers/net/wireless/xradio/xradio.h
+++ b/drivers/net/wireless/xradio/xradio.h
@@ -12,6 +12,7 @@
#ifndef XRADIO_H
#define XRADIO_H
+#include <linux/version.h>
#include <linux/wait.h>
#include <linux/mutex.h>
#include <linux/workqueue.h>
--
2.34.1

View File

@@ -1,47 +0,0 @@
From 9d899621bc784af194c0beff9588a01d571ec175 Mon Sep 17 00:00:00 2001
From: Gunjan Gupta <viraniac@gmail.com>
Date: Sat, 2 Sep 2023 23:01:19 +0000
Subject: [PATCH 2/3] Fix compilation on 6.1 kernel
Changes are based on
https://github.com/fifteenhex/xradio/commit/005f28cfe9e20b7f2dfd9d32d38ee97060dc707f.patch
---
drivers/net/wireless/xradio/ap.c | 4 ++++
drivers/net/wireless/xradio/wsm.c | 4 ++++
2 files changed, 8 insertions(+)
diff --git a/drivers/net/wireless/xradio/ap.c b/drivers/net/wireless/xradio/ap.c
index 17eb5132ee84..d4ec6c88d7b3 100644
--- a/drivers/net/wireless/xradio/ap.c
+++ b/drivers/net/wireless/xradio/ap.c
@@ -1145,7 +1145,11 @@ static int xradio_upload_null(struct xradio_vif *priv)
.rate = 0xFF,
};
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
+ frame.skb = ieee80211_nullfunc_get(priv->hw, priv->vif, 0, false);
+#else
frame.skb = ieee80211_nullfunc_get(priv->hw, priv->vif, false);
+#endif
if (WARN_ON(!frame.skb))
return -ENOMEM;
diff --git a/drivers/net/wireless/xradio/wsm.c b/drivers/net/wireless/xradio/wsm.c
index 3bf8bfde5b89..5961acec786a 100644
--- a/drivers/net/wireless/xradio/wsm.c
+++ b/drivers/net/wireless/xradio/wsm.c
@@ -2616,7 +2616,11 @@ static int xradio_get_prio_queue(struct xradio_vif *priv,
edca = &priv->edca.params[i];
score = ((edca->aifns + edca->cwMin) << 16) +
(edca->cwMax - edca->cwMin) *
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
+ (get_random_u32() & 0xFFFF);
+#else
(prandom_u32() & 0xFFFF);
+#endif
if (score < best && (winner < 0 || i != 3)) {
best = score;
winner = i;
--
2.34.1

View File

@@ -1,28 +0,0 @@
From 3a07e87ddc10f1c48d0ff40dabfb800e2715687c Mon Sep 17 00:00:00 2001
From: Gunjan Gupta <viraniac@gmail.com>
Date: Sun, 3 Sep 2023 09:48:57 +0000
Subject: [PATCH] Fix compilation on 6.2+ kernel
Changes are from
https://github.com/fifteenhex/xradio/commit/a2dd9cd8b1a8b8a8af8aaff90dfaa65fcf783e26
---
drivers/net/wireless/xradio/main.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/net/wireless/xradio/main.c b/drivers/net/wireless/xradio/main.c
index 272afad2ba6a..f072629828a9 100644
--- a/drivers/net/wireless/xradio/main.c
+++ b/drivers/net/wireless/xradio/main.c
@@ -163,6 +163,9 @@ static const struct ieee80211_ops xradio_ops = {
/*.channel_switch = xradio_channel_switch, */
.remain_on_channel = xradio_remain_on_channel,
.cancel_remain_on_channel = xradio_cancel_remain_on_channel,
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 2, 0))
+ .wake_tx_queue = ieee80211_handle_wake_tx_queue,
+#endif
};
--
2.34.1

View File

@@ -1,24 +0,0 @@
From 1ec43d0e6e6b52ff448eed53ce6397f5c6e6df88 Mon Sep 17 00:00:00 2001
From: Igor Pecovnik <igor.pecovnik@gmail.com>
Date: Tue, 6 Sep 2022 18:51:28 +0200
Subject: [PATCH] Linux 5.15.65
Signed-off-by: Igor Pecovnik <igor.pecovnik@gmail.com>
---
diff --git a/drivers/net/wireless/xradio/sdio.c b/drivers/net/wireless/xradio/sdio.c
index cfff47120337..97ade4c0902c 100644
--- a/drivers/net/wireless/xradio/sdio.c
+++ b/drivers/net/wireless/xradio/sdio.c
@@ -14,7 +14,7 @@
#include <linux/mmc/sdio_func.h>
#include <linux/mmc/card.h>
#include <linux/mmc/sdio.h>
-#include <asm/mach-types.h>
+#include <asm/types.h>
#include <linux/of.h>
#include <linux/of_irq.h>
#include <linux/interrupt.h>
--
Created with Armbian build tools https://github.com/armbian/build

View File

@@ -1,172 +0,0 @@
From c8002e5c4b415cf48a520b34852ae92e2f20bfd5 Mon Sep 17 00:00:00 2001
From: Gunjan Gupta <viraniac@gmail.com>
Date: Sun, 3 Sep 2023 11:02:51 +0000
Subject: [PATCH 1/2] Cleanup for some compilation warnings
---
drivers/net/wireless/xradio/bh.c | 12 ++++++------
drivers/net/wireless/xradio/fwio.c | 4 ++--
drivers/net/wireless/xradio/keys.c | 4 +++-
drivers/net/wireless/xradio/scan.c | 2 +-
drivers/net/wireless/xradio/tx.c | 4 ++--
drivers/net/wireless/xradio/wsm.c | 4 ++--
6 files changed, 16 insertions(+), 14 deletions(-)
diff --git a/drivers/net/wireless/xradio/bh.c b/drivers/net/wireless/xradio/bh.c
index c8a7b8615e5d..4cc50a98d5c2 100644
--- a/drivers/net/wireless/xradio/bh.c
+++ b/drivers/net/wireless/xradio/bh.c
@@ -323,11 +323,11 @@ static struct sk_buff *xradio_get_skb(struct xradio_common *hw_priv, size_t len)
} else {
skb = xradio_get_resv_skb(hw_priv, alloc_len);
if (skb) {
- xr_printk(XRADIO_DBG_WARN, "BH: no skb avail., using reserve skb (%d)!\n", alloc_len);
+ xr_printk(XRADIO_DBG_WARN, "BH: no skb avail., using reserve skb (%zu)!\n", alloc_len);
skb_reserve(skb, WSM_TX_EXTRA_HEADROOM + 8 /* TKIP IV */
- WSM_RX_EXTRA_HEADROOM);
} else {
- xr_printk(XRADIO_DBG_WARN, "BH - get_skb: no skb avail, no reserve (%d)!\n", alloc_len);
+ xr_printk(XRADIO_DBG_WARN, "BH - get_skb: no skb avail, no reserve (%zu)!\n", alloc_len);
}
}
} else {
@@ -467,7 +467,7 @@ static int xradio_bh_rx(struct xradio_common *hw_priv, u16* nextlen) {
return read_len;
if (read_len < sizeof(struct wsm_hdr) || (read_len > EFFECTIVE_BUF_SIZE)) {
- xr_printk(XRADIO_DBG_ERROR, "BH: Invalid read len: %d", read_len);
+ xr_printk(XRADIO_DBG_ERROR, "BH: Invalid read len: %zu", read_len);
return -1;
}
@@ -478,7 +478,7 @@ static int xradio_bh_rx(struct xradio_common *hw_priv, u16* nextlen) {
alloc_len = sdio_align_len(hw_priv, read_len);
/* Check if not exceeding XRADIO capabilities */
if (WARN_ON_ONCE(alloc_len > EFFECTIVE_BUF_SIZE)) {
- xr_printk(XRADIO_DBG_ERROR, "BH: Read aligned len: %d\n", alloc_len);
+ xr_printk(XRADIO_DBG_ERROR, "BH: Read aligned len: %zu\n", alloc_len);
}
/* Get skb buffer. */
@@ -514,7 +514,7 @@ static int xradio_bh_rx(struct xradio_common *hw_priv, u16* nextlen) {
wsm_len = __le32_to_cpu(wsm->len);
if (WARN_ON(wsm_len > read_len)) {
- xr_printk(XRADIO_DBG_ERROR, "BH: wsm is bigger than data read, read %d but frame is %d\n",
+ xr_printk(XRADIO_DBG_ERROR, "BH: wsm is bigger than data read, read %zu but frame is %zu\n",
read_len, wsm_len);
ret = -1;
goto out;
@@ -682,7 +682,7 @@ static int xradio_bh_tx(struct xradio_common *hw_priv){
/* Check if not exceeding XRADIO capabilities */
if (tx_len > EFFECTIVE_BUF_SIZE) {
- xr_printk(XRADIO_DBG_WARN, "BH: Write aligned len: %d\n", tx_len);
+ xr_printk(XRADIO_DBG_WARN, "BH: Write aligned len: %zu\n", tx_len);
}
/* Make sequence number. */
diff --git a/drivers/net/wireless/xradio/fwio.c b/drivers/net/wireless/xradio/fwio.c
index 29916ab26681..4b9d92a1bebd 100644
--- a/drivers/net/wireless/xradio/fwio.c
+++ b/drivers/net/wireless/xradio/fwio.c
@@ -62,7 +62,7 @@ static int xradio_get_hw_type(u32 config_reg_val, int *major_revision)
//u32 hif_vers = (config_reg_val >> 31) & 0x1;
/* Check if we have XRADIO*/
- if (hif_type == 0x4) {
+ if (hif_type == 0x4) {
*major_revision = 0x4;
hw_type = HIF_HW_TYPE_XRADIO;
} else {
@@ -164,7 +164,7 @@ static int xradio_parse_sdd(struct xradio_common *hw_priv, u32 *dpll)
pElement = FIND_NEXT_ELT(pElement);
}
- xr_printk(XRADIO_DBG_NIY, "FWIO: sdd size=%d parse len=%d.\n",
+ xr_printk(XRADIO_DBG_NIY, "FWIO: sdd size=%zu parse len=%d.\n",
hw_priv->sdd->size, parsedLength);
//
diff --git a/drivers/net/wireless/xradio/keys.c b/drivers/net/wireless/xradio/keys.c
index efa7044870f8..7e5cd6e1520c 100644
--- a/drivers/net/wireless/xradio/keys.c
+++ b/drivers/net/wireless/xradio/keys.c
@@ -62,7 +62,7 @@ int xradio_set_key(struct ieee80211_hw *dev, enum set_key_cmd cmd,
u8 *peer_addr = NULL;
int pairwise = (key->flags & IEEE80211_KEY_FLAG_PAIRWISE) ? 1 : 0;
int idx = xradio_alloc_key(hw_priv);
- struct wsm_add_key *wsm_key = &hw_priv->keys[idx];
+ struct wsm_add_key *wsm_key;
if (idx < 0) {
sta_printk(XRADIO_DBG_ERROR, "xradio_alloc_key failed!\n");
@@ -70,6 +70,8 @@ int xradio_set_key(struct ieee80211_hw *dev, enum set_key_cmd cmd,
goto finally;
}
+ wsm_key = &hw_priv->keys[idx];
+
BUG_ON(pairwise && !sta);
if (sta)
peer_addr = sta->addr;
diff --git a/drivers/net/wireless/xradio/scan.c b/drivers/net/wireless/xradio/scan.c
index ec34def497c1..d9101bfce9e9 100644
--- a/drivers/net/wireless/xradio/scan.c
+++ b/drivers/net/wireless/xradio/scan.c
@@ -887,7 +887,7 @@ void xradio_probe_work(struct work_struct *work)
if (!ret)
IEEE80211_SKB_CB(frame.skb)->flags |= IEEE80211_TX_STAT_ACK;
- BUG_ON(xradio_queue_remove(queue, hw_priv->pending_frame_id));
+ BUG_ON(xradio_queue_remove(queue, hw_priv->pending_frame_id));
if (ret) {
hw_priv->scan.direct_probe = 0;
diff --git a/drivers/net/wireless/xradio/tx.c b/drivers/net/wireless/xradio/tx.c
index af7f3698971e..029d37ebfde7 100644
--- a/drivers/net/wireless/xradio/tx.c
+++ b/drivers/net/wireless/xradio/tx.c
@@ -690,7 +690,7 @@ xradio_tx_h_crypt(struct xradio_vif *priv,
dev_dbg(priv->hw_priv->pdev,
"no space allocated for crypto headers.\n"
"headroom: %d, tailroom: %d, "
- "req_headroom: %d, req_tailroom: %d\n"
+ "req_headroom: %zu, req_tailroom: %zu\n"
"Please fix it in xradio_get_skb().\n",
skb_headroom(t->skb), skb_tailroom(t->skb),
iv_len + WSM_TX_EXTRA_HEADROOM, icv_len);
@@ -700,7 +700,7 @@ xradio_tx_h_crypt(struct xradio_vif *priv,
u8 *p;
dev_dbg(priv->hw_priv->pdev,
"Slowpath: tailroom is not big enough. "
- "Req: %d, got: %d.\n",
+ "Req: %zu, got: %d.\n",
icv_len, skb_tailroom(t->skb));
p = skb_push(t->skb, offset);
diff --git a/drivers/net/wireless/xradio/wsm.c b/drivers/net/wireless/xradio/wsm.c
index aab827a076e9..14aed3fca36f 100644
--- a/drivers/net/wireless/xradio/wsm.c
+++ b/drivers/net/wireless/xradio/wsm.c
@@ -1780,7 +1780,7 @@ int wsm_cmd_send(struct xradio_common *hw_priv,
hw_priv->wsm_cmd.ptr = NULL;
spin_unlock(&hw_priv->wsm_cmd.lock);
- wsm_printk(XRADIO_DBG_ERROR,"CMD timeout!>>> 0x%.4X (%d), buf_use=%d, bh_state=%d\n",
+ wsm_printk(XRADIO_DBG_ERROR,"CMD timeout!>>> 0x%.4X (%zu), buf_use=%d, bh_state=%d\n",
cmd, buf_len, hw_priv->hw_bufs_used, hw_priv->bh_error);
/* Race condition check to make sure _confirm is not called
* after exit of _send */
@@ -2009,7 +2009,7 @@ int wsm_handle_exception(struct xradio_common *hw_priv, u8 *data, size_t len)
reason_str[reason]);
} else {
wsm_printk(XRADIO_DBG_ERROR,"Firmware assert at %.*s, line %d, reason=0x%x\n",
- sizeof(fname), fname, reg[1], reg[2]);
+ (int) sizeof(fname), fname, reg[1], reg[2]);
}
for (i = 0; i < 12; i += 4) {
--
2.34.1

View File

@@ -1,65 +0,0 @@
From 18b7a87239ac483e52d86295d88aa88db3dada19 Mon Sep 17 00:00:00 2001
From: Gunjan Gupta <viraniac@gmail.com>
Date: Sun, 3 Sep 2023 11:10:50 +0000
Subject: [PATCH 2/2] Fix issues when doing insmod/rmmod and reboot
Based on
https://github.com/fifteenhex/xradio/commit/428a46e4eab939a63c9173324304a540c4ca8ca3
https://github.com/fifteenhex/xradio/commit/bb2c7169a26835abe1e90edb92951a348c8a45
---
drivers/net/wireless/xradio/main.c | 2 ++
drivers/net/wireless/xradio/sdio.c | 9 +++++++--
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/xradio/main.c b/drivers/net/wireless/xradio/main.c
index f072629828a9..374b161bb498 100644
--- a/drivers/net/wireless/xradio/main.c
+++ b/drivers/net/wireless/xradio/main.c
@@ -616,6 +616,7 @@ int xradio_core_init(struct sdio_func* func)
err2:
/* err1: MRK: unused label*/
xradio_free_common(dev);
+ sdio_set_drvdata(func, NULL);
return err;
}
@@ -628,6 +629,7 @@ void xradio_core_deinit(struct sdio_func* func)
xradio_unregister_bh(hw_priv);
xradio_pm_deinit(&hw_priv->pm_state);
xradio_free_common(hw_priv->hw);
+ sdio_set_drvdata(func, NULL);
}
return;
}
diff --git a/drivers/net/wireless/xradio/sdio.c b/drivers/net/wireless/xradio/sdio.c
index 6ef47a8c3202..e13f80828b41 100644
--- a/drivers/net/wireless/xradio/sdio.c
+++ b/drivers/net/wireless/xradio/sdio.c
@@ -203,17 +203,22 @@ static int sdio_probe(struct sdio_func *func,
xradio_core_init(func);
- try_module_get(func->dev.driver->owner);
return 0;
}
/* Disconnect Function to be called by SDIO stack when
* device is disconnected */
static void sdio_remove(struct sdio_func *func)
{
+ struct mmc_card *card = func->card;
+ xradio_core_deinit(func);
sdio_claim_host(func);
sdio_disable_func(func);
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0))
+ mmc_hw_reset(card);
+#else
+ mmc_hw_reset(card->host);
+#endif
sdio_release_host(func);
- module_put(func->dev.driver->owner);
}
static int sdio_suspend(struct device *dev)
--
2.34.1

View File

@@ -1,59 +0,0 @@
From 10691900f8fdd5ef6d5cadfd27b81c8c4ecd41c0 Mon Sep 17 00:00:00 2001
From: Gunjan Gupta <viraniac@gmail.com>
Date: Sat, 2 Sep 2023 23:11:04 +0000
Subject: [PATCH 3/3] Added fixes for vmmaped stack
Changes taken from
https://github.com/fifteenhex/xradio/commit/a835c4747be088978a055b9645e3c523d0c54fe1
---
drivers/net/wireless/xradio/sdio.c | 28 ++++++++++++++++++++++------
1 file changed, 22 insertions(+), 6 deletions(-)
diff --git a/drivers/net/wireless/xradio/sdio.c b/drivers/net/wireless/xradio/sdio.c
index cfff47120337..6c375f4ece46 100644
--- a/drivers/net/wireless/xradio/sdio.c
+++ b/drivers/net/wireless/xradio/sdio.c
@@ -36,18 +36,34 @@ static const struct sdio_device_id xradio_sdio_ids[] = {
int sdio_data_read(struct xradio_common* self, unsigned int addr,
void *dst, int count)
{
- int ret = sdio_memcpy_fromio(self->sdio_func, dst, addr, count);
-// printk("sdio_memcpy_fromio 0x%x:%d ret %d\n", addr, count, ret);
-// print_hex_dump_bytes("sdio read ", 0, dst, min(count,32));
+ int ret;
+
+ switch (count) {
+ case 4:
+ *((u32 *)dst) = sdio_readl(self->sdio_func, addr, &ret);
+ break;
+ default:
+ ret = sdio_memcpy_fromio(self->sdio_func, dst, addr, count);
+ break;
+ }
+
return ret;
}
int sdio_data_write(struct xradio_common* self, unsigned int addr,
const void *src, int count)
{
- int ret = sdio_memcpy_toio(self->sdio_func, addr, (void *)src, count);
-// printk("sdio_memcpy_toio 0x%x:%d ret %d\n", addr, count, ret);
-// print_hex_dump_bytes("sdio write", 0, src, min(count,32));
+ int ret;
+
+ switch (count) {
+ case 4:
+ sdio_writel(self->sdio_func, *((u32 *)src), addr, &ret);
+ break;
+ default:
+ ret = sdio_memcpy_toio(self->sdio_func, addr, (void *)src, count);
+ break;
+ }
+
return ret;
}
--
2.34.1