mirror of
https://github.com/armbian/build
synced 2025-09-24 19:47:06 +07:00
Switch entirely to fifteenhex repo for xradio driver as it performs better
This commit is contained in:
@@ -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);
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user