patches/driver/bes2600/*-danctnix + arch/arm64/scs-...: rebased on danctnix baseline (#29 redo) #36

Closed
marfrit wants to merge 1 commits from claude-noether/kernel-agent:noether/kernel-agent-29-rebased-on-danctnix-clean into main
30 changed files with 285 additions and 146 deletions
@@ -22,7 +22,7 @@ diff --git a/arch/arm64/lib/Makefile b/arch/arm64/lib/Makefile
index 1234567..2345678 100644 index 1234567..2345678 100644
--- a/arch/arm64/lib/Makefile --- a/arch/arm64/lib/Makefile
+++ b/arch/arm64/lib/Makefile +++ b/arch/arm64/lib/Makefile
@@ -9,6 +9,10 @@ ifeq ($(CONFIG_KERNEL_MODE_NEON), y) @@ -9,6 +9,11 @@ ifeq ($(CONFIG_KERNEL_MODE_NEON), y)
obj-$(CONFIG_XOR_BLOCKS) += xor-neon.o obj-$(CONFIG_XOR_BLOCKS) += xor-neon.o
CFLAGS_xor-neon.o += $(CC_FLAGS_FPU) CFLAGS_xor-neon.o += $(CC_FLAGS_FPU)
CFLAGS_REMOVE_xor-neon.o += $(CC_FLAGS_NO_FPU) CFLAGS_REMOVE_xor-neon.o += $(CC_FLAGS_NO_FPU)
@@ -1,4 +1,4 @@
From 44b296647be9246c6802a86c082c6507669810b0 Mon Sep 17 00:00:00 2001 From 8fd20308ed53678c863a0ef52fb2c754e3adc63c Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com> From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Fri, 8 May 2026 00:17:46 +0200 Date: Fri, 8 May 2026 00:17:46 +0200
Subject: [PATCH 27/29] =?UTF-8?q?bes2600:=20Patch=20D=20=E2=80=94=20atomic?= Subject: [PATCH 27/29] =?UTF-8?q?bes2600:=20Patch=20D=20=E2=80=94=20atomic?=
@@ -58,10 +58,10 @@ Bestechnic addition rather than the upstream tree.
5 files changed, 85 insertions(+), 56 deletions(-) 5 files changed, 85 insertions(+), 56 deletions(-)
diff --git a/drivers/staging/bes2600/bes2600.h b/drivers/staging/bes2600/bes2600.h diff --git a/drivers/staging/bes2600/bes2600.h b/drivers/staging/bes2600/bes2600.h
index ec41141..31a411b 100644 index 84059c7..32bce5e 100644
--- a/drivers/staging/bes2600/bes2600.h --- a/drivers/staging/bes2600/bes2600.h
+++ b/drivers/staging/bes2600/bes2600.h +++ b/drivers/staging/bes2600/bes2600.h
@@ -356,15 +356,23 @@ struct bes2600_common { @@ -353,15 +353,23 @@ struct bes2600_common {
* Keeping in common structure for the time being. Will be moved to VIFF * Keeping in common structure for the time being. Will be moved to VIFF
* after the mechanism is clear */ * after the mechanism is clear */
u8 ba_tid_mask; u8 ba_tid_mask;
@@ -95,7 +95,7 @@ index ec41141..31a411b 100644
bool is_go_thru_go_neg; bool is_go_thru_go_neg;
u8 conf_listen_interval; u8 conf_listen_interval;
diff --git a/drivers/staging/bes2600/debug.c b/drivers/staging/bes2600/debug.c diff --git a/drivers/staging/bes2600/debug.c b/drivers/staging/bes2600/debug.c
index 0d68392..2d144ac 100644 index 47e27be..0ab79c0 100644
--- a/drivers/staging/bes2600/debug.c --- a/drivers/staging/bes2600/debug.c
+++ b/drivers/staging/bes2600/debug.c +++ b/drivers/staging/bes2600/debug.c
@@ -110,17 +110,20 @@ static int bes2600_status_show_common(struct seq_file *seq, void *v) @@ -110,17 +110,20 @@ static int bes2600_status_show_common(struct seq_file *seq, void *v)
@@ -125,10 +125,10 @@ index 0d68392..2d144ac 100644
seq_puts(seq, "BES2600 Wireless LAN driver status\n"); seq_puts(seq, "BES2600 Wireless LAN driver status\n");
seq_printf(seq, "Hardware: %d.%d\n", seq_printf(seq, "Hardware: %d.%d\n",
diff --git a/drivers/staging/bes2600/main.c b/drivers/staging/bes2600/main.c diff --git a/drivers/staging/bes2600/main.c b/drivers/staging/bes2600/main.c
index 90a8ff8..be375f5 100644 index 71dc4ae..8fc37b4 100644
--- a/drivers/staging/bes2600/main.c --- a/drivers/staging/bes2600/main.c
+++ b/drivers/staging/bes2600/main.c +++ b/drivers/staging/bes2600/main.c
@@ -490,7 +490,7 @@ static struct ieee80211_hw *bes2600_init_common(size_t hw_priv_data_len) @@ -501,7 +501,7 @@ static struct ieee80211_hw *bes2600_init_common(size_t hw_priv_data_len)
INIT_LIST_HEAD(&hw_priv->event_queue); INIT_LIST_HEAD(&hw_priv->event_queue);
INIT_WORK(&hw_priv->event_handler, bes2600_event_handler); INIT_WORK(&hw_priv->event_handler, bes2600_event_handler);
INIT_WORK(&hw_priv->ba_work, bes2600_ba_work); INIT_WORK(&hw_priv->ba_work, bes2600_ba_work);
@@ -138,10 +138,10 @@ index 90a8ff8..be375f5 100644
if (unlikely(bes2600_queue_stats_init(&hw_priv->tx_queue_stats, if (unlikely(bes2600_queue_stats_init(&hw_priv->tx_queue_stats,
diff --git a/drivers/staging/bes2600/sta.c b/drivers/staging/bes2600/sta.c diff --git a/drivers/staging/bes2600/sta.c b/drivers/staging/bes2600/sta.c
index 81f88ed..d94dd2e 100644 index 70b12f9..8af8150 100644
--- a/drivers/staging/bes2600/sta.c --- a/drivers/staging/bes2600/sta.c
+++ b/drivers/staging/bes2600/sta.c +++ b/drivers/staging/bes2600/sta.c
@@ -2342,14 +2342,19 @@ void bes2600_join_work(struct work_struct *work) @@ -2362,14 +2362,19 @@ void bes2600_join_work(struct work_struct *work)
//WARN_ON(wsm_reset(hw_priv, &reset, priv->if_id)); //WARN_ON(wsm_reset(hw_priv, &reset, priv->if_id));
WARN_ON(wsm_set_block_ack_policy(hw_priv, WARN_ON(wsm_set_block_ack_policy(hw_priv,
0, hw_priv->ba_tid_mask, priv->if_id)); 0, hw_priv->ba_tid_mask, priv->if_id));
@@ -168,7 +168,7 @@ index 81f88ed..d94dd2e 100644
mgmt_policy.protectedMgmtEnable = 0; mgmt_policy.protectedMgmtEnable = 0;
mgmt_policy.unprotectedMgmtFramesAllowed = 1; mgmt_policy.unprotectedMgmtFramesAllowed = 1;
@@ -2629,10 +2634,11 @@ void bes2600_ba_work(struct work_struct *work) @@ -2649,10 +2654,11 @@ void bes2600_ba_work(struct work_struct *work)
return;*/ return;*/
bes_devel("BA work****\n"); bes_devel("BA work****\n");
@@ -183,12 +183,12 @@ index 81f88ed..d94dd2e 100644
wsm_lock_tx(hw_priv); wsm_lock_tx(hw_priv);
@@ -2645,37 +2651,49 @@ void bes2600_ba_work(struct work_struct *work) @@ -2665,37 +2671,49 @@ void bes2600_ba_work(struct work_struct *work)
void bes2600_ba_timer(struct timer_list *t) void bes2600_ba_timer(struct timer_list *t)
{ {
bool ba_ena; bool ba_ena;
+ int cnt, acc, cnt_rx, acc_rx; + int cnt, acc, cnt_rx, acc_rx;
struct bes2600_common *hw_priv = from_timer(hw_priv, t, ba_timer); struct bes2600_common *hw_priv = timer_container_of(hw_priv, t, ba_timer);
- spin_lock_bh(&hw_priv->ba_lock); - spin_lock_bh(&hw_priv->ba_lock);
- bes2600_debug_ba(hw_priv, hw_priv->ba_cnt, hw_priv->ba_acc, - bes2600_debug_ba(hw_priv, hw_priv->ba_cnt, hw_priv->ba_acc,
@@ -251,7 +251,7 @@ index 81f88ed..d94dd2e 100644
hw_priv->ba_hist = 0; hw_priv->ba_hist = 0;
#if 0 #if 0
bes_devel("[STA] %s block ACK:\n", bes_devel("[STA] %s block ACK:\n",
@@ -2685,9 +2703,6 @@ void bes2600_ba_timer(struct timer_list *t) @@ -2705,9 +2723,6 @@ void bes2600_ba_timer(struct timer_list *t)
} }
} else if (hw_priv->ba_hist) } else if (hw_priv->ba_hist)
--hw_priv->ba_hist; --hw_priv->ba_hist;
@@ -262,10 +262,10 @@ index 81f88ed..d94dd2e 100644
int bes2600_vif_setup(struct bes2600_vif *priv) int bes2600_vif_setup(struct bes2600_vif *priv)
diff --git a/drivers/staging/bes2600/txrx.c b/drivers/staging/bes2600/txrx.c diff --git a/drivers/staging/bes2600/txrx.c b/drivers/staging/bes2600/txrx.c
index 346312c..82ef6fa 100644 index 3aef009..536b198 100644
--- a/drivers/staging/bes2600/txrx.c --- a/drivers/staging/bes2600/txrx.c
+++ b/drivers/staging/bes2600/txrx.c +++ b/drivers/staging/bes2600/txrx.c
@@ -995,14 +995,18 @@ bes2600_tx_h_ba_stat(struct bes2600_vif *priv, @@ -996,14 +996,18 @@ bes2600_tx_h_ba_stat(struct bes2600_vif *priv,
if (!ieee80211_is_data(t->hdr->frame_control)) if (!ieee80211_is_data(t->hdr->frame_control))
return; return;
@@ -289,7 +289,7 @@ index 346312c..82ef6fa 100644
} }
static int static int
@@ -1629,14 +1633,13 @@ bes2600_rx_h_ba_stat(struct bes2600_vif *priv, @@ -1651,14 +1655,13 @@ bes2600_rx_h_ba_stat(struct bes2600_vif *priv,
if (!priv->setbssparams_done) if (!priv->setbssparams_done)
return; return;
@@ -1,4 +1,4 @@
From f68fd5530f3bc3c2dc33cc5e3408047ff21a7676 Mon Sep 17 00:00:00 2001 From 1b5374d35bcc75e0f393e3d841288f91812eb7dc Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com> From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Fri, 8 May 2026 08:23:20 +0200 Date: Fri, 8 May 2026 08:23:20 +0200
Subject: [PATCH] =?UTF-8?q?bes2600:=20Patch=20H=20=E2=80=94=20bh.c=20hygie?= Subject: [PATCH] =?UTF-8?q?bes2600:=20Patch=20H=20=E2=80=94=20bh.c=20hygie?=
@@ -73,10 +73,10 @@ no semantic risk; the deleted code was either #if 0-gated
3 files changed, 28 insertions(+), 564 deletions(-) 3 files changed, 28 insertions(+), 564 deletions(-)
diff --git a/drivers/staging/bes2600/bh.c b/drivers/staging/bes2600/bh.c diff --git a/drivers/staging/bes2600/bh.c b/drivers/staging/bes2600/bh.c
index 0e0888e..e419e35 100644 index 61f6991..67dfad4 100644
--- a/drivers/staging/bes2600/bh.c --- a/drivers/staging/bes2600/bh.c
+++ b/drivers/staging/bes2600/bh.c +++ b/drivers/staging/bes2600/bh.c
@@ -316,83 +316,6 @@ int wsm_release_buffer_to_fw(struct bes2600_vif *priv, int count) @@ -317,83 +317,6 @@ int wsm_release_buffer_to_fw(struct bes2600_vif *priv, int count)
} }
#endif #endif
@@ -160,7 +160,7 @@ index 0e0888e..e419e35 100644
/* Must be called from BH thraed. */ /* Must be called from BH thraed. */
void bes2600_enable_powersave(struct bes2600_vif *priv, void bes2600_enable_powersave(struct bes2600_vif *priv,
@@ -402,475 +325,6 @@ void bes2600_enable_powersave(struct bes2600_vif *priv, @@ -403,475 +326,6 @@ void bes2600_enable_powersave(struct bes2600_vif *priv,
priv->powersave_enabled = enable; priv->powersave_enabled = enable;
} }
@@ -636,7 +636,7 @@ index 0e0888e..e419e35 100644
extern int bes2600_bh_read_ctrl_reg(struct bes2600_common *priv, u32 *ctrl_reg); extern int bes2600_bh_read_ctrl_reg(struct bes2600_common *priv, u32 *ctrl_reg);
@@ -1592,7 +1046,15 @@ static int bes2600_bh(void *arg) @@ -1599,7 +1053,15 @@ static int bes2600_bh(void *arg)
tx = 0; tx = 0;
@@ -653,7 +653,7 @@ index 0e0888e..e419e35 100644
tx_burst = hw_priv->wsm_caps.numInpChBufs - hw_priv->hw_bufs_used; tx_burst = hw_priv->wsm_caps.numInpChBufs - hw_priv->hw_bufs_used;
tx_allowed = tx_burst > 0; tx_allowed = tx_burst > 0;
@@ -1636,18 +1098,19 @@ static int bes2600_bh(void *arg) @@ -1643,18 +1105,19 @@ static int bes2600_bh(void *arg)
goto tx; goto tx;
done: done:
@@ -683,7 +683,7 @@ index 0e0888e..e419e35 100644
if (!term) { if (!term) {
bes_err("[BH] Fatal error, exiting.\n"); bes_err("[BH] Fatal error, exiting.\n");
sdio_work_debug(hw_priv->sbus_priv); sdio_work_debug(hw_priv->sbus_priv);
@@ -1656,4 +1119,3 @@ static int bes2600_bh(void *arg) @@ -1663,4 +1126,3 @@ static int bes2600_bh(void *arg)
} }
return 0; return 0;
} }
@@ -1,4 +1,4 @@
From f2cf586f89d31e297228fabec92dcea5c3fb7165 Mon Sep 17 00:00:00 2001 From 06fab777454d36ec5178730d8423285c2457d3ba Mon Sep 17 00:00:00 2001
From: "Claude (noether)" <claude@reauktion.de> From: "Claude (noether)" <claude@reauktion.de>
Date: Thu, 7 May 2026 11:30:09 +0200 Date: Thu, 7 May 2026 11:30:09 +0200
Subject: [PATCH 21/29] bes2600: bus_reset on connection-loss storm to dodge Subject: [PATCH 21/29] bes2600: bus_reset on connection-loss storm to dodge
@@ -122,7 +122,7 @@ index d1375bc..224c62d 100644
{ {
bool wifi_opened = false; bool wifi_opened = false;
diff --git a/drivers/staging/bes2600/bes_chardev.h b/drivers/staging/bes2600/bes_chardev.h diff --git a/drivers/staging/bes2600/bes_chardev.h b/drivers/staging/bes2600/bes_chardev.h
index 3f0c59b..310ab81 100644 index ca8419e..2a7cad7 100644
--- a/drivers/staging/bes2600/bes_chardev.h --- a/drivers/staging/bes2600/bes_chardev.h
+++ b/drivers/staging/bes2600/bes_chardev.h +++ b/drivers/staging/bes2600/bes_chardev.h
@@ -61,6 +61,7 @@ struct sbus_priv *bes2600_chrdev_get_sbus_priv_data(void); @@ -61,6 +61,7 @@ struct sbus_priv *bes2600_chrdev_get_sbus_priv_data(void);
@@ -147,10 +147,10 @@ index ca223dd..0d68392 100644
seq_puts(seq, "Filter: promisc\n"); seq_puts(seq, "Filter: promisc\n");
else if (priv->rx_filter.fcs) else if (priv->rx_filter.fcs)
diff --git a/drivers/staging/bes2600/main.c b/drivers/staging/bes2600/main.c diff --git a/drivers/staging/bes2600/main.c b/drivers/staging/bes2600/main.c
index 9d2aac5..d6da84a 100644 index 7cbb3a9..ff82f4d 100644
--- a/drivers/staging/bes2600/main.c --- a/drivers/staging/bes2600/main.c
+++ b/drivers/staging/bes2600/main.c +++ b/drivers/staging/bes2600/main.c
@@ -484,6 +484,8 @@ static struct ieee80211_hw *bes2600_init_common(size_t hw_priv_data_len) @@ -489,6 +489,8 @@ static struct ieee80211_hw *bes2600_init_common(size_t hw_priv_data_len)
spin_lock_init(&hw_priv->rtsvalue_lock); spin_lock_init(&hw_priv->rtsvalue_lock);
INIT_WORK(&hw_priv->dynamic_opt_txrx_work, bes2600_dynamic_opt_txrx_work); INIT_WORK(&hw_priv->dynamic_opt_txrx_work, bes2600_dynamic_opt_txrx_work);
INIT_WORK(&hw_priv->tx_policy_upload_work, tx_policy_upload_work); INIT_WORK(&hw_priv->tx_policy_upload_work, tx_policy_upload_work);
@@ -160,10 +160,10 @@ index 9d2aac5..d6da84a 100644
INIT_LIST_HEAD(&hw_priv->event_queue); INIT_LIST_HEAD(&hw_priv->event_queue);
INIT_WORK(&hw_priv->event_handler, bes2600_event_handler); INIT_WORK(&hw_priv->event_handler, bes2600_event_handler);
diff --git a/drivers/staging/bes2600/sta.c b/drivers/staging/bes2600/sta.c diff --git a/drivers/staging/bes2600/sta.c b/drivers/staging/bes2600/sta.c
index 1b78051..81f88ed 100644 index 139bdae..5868757 100644
--- a/drivers/staging/bes2600/sta.c --- a/drivers/staging/bes2600/sta.c
+++ b/drivers/staging/bes2600/sta.c +++ b/drivers/staging/bes2600/sta.c
@@ -266,6 +266,7 @@ void bes2600_stop(struct ieee80211_hw *dev, bool suspend) @@ -268,6 +268,7 @@ void bes2600_stop(struct ieee80211_hw *dev, bool suspend)
cancel_work_sync(&hw_priv->coex_work); cancel_work_sync(&hw_priv->coex_work);
coex_stop(hw_priv); coex_stop(hw_priv);
#endif #endif
@@ -171,7 +171,7 @@ index 1b78051..81f88ed 100644
bes2600_wifi_stop(hw_priv); bes2600_wifi_stop(hw_priv);
@@ -1659,6 +1660,70 @@ report: @@ -1675,6 +1676,70 @@ report:
spin_unlock(&priv->bss_loss_lock); spin_unlock(&priv->bss_loss_lock);
} }
@@ -242,7 +242,7 @@ index 1b78051..81f88ed 100644
void bes2600_connection_loss_work(struct work_struct *work) void bes2600_connection_loss_work(struct work_struct *work)
{ {
struct bes2600_vif *priv = struct bes2600_vif *priv =
@@ -1668,9 +1733,21 @@ void bes2600_connection_loss_work(struct work_struct *work) @@ -1684,9 +1749,21 @@ void bes2600_connection_loss_work(struct work_struct *work)
bes_devel("[CQM] Reporting connection loss.\n"); bes_devel("[CQM] Reporting connection loss.\n");
bes2600_pwr_clear_busy_event(priv->hw_priv, BES_PWR_LOCK_ON_BSS_LOST); bes2600_pwr_clear_busy_event(priv->hw_priv, BES_PWR_LOCK_ON_BSS_LOST);
@@ -266,7 +266,7 @@ index 1b78051..81f88ed 100644
ieee80211_connection_loss(priv->vif); ieee80211_connection_loss(priv->vif);
#ifdef WIFI_BT_COEXIST_EPTA_ENABLE #ifdef WIFI_BT_COEXIST_EPTA_ENABLE
// set disconnected in BSS_CHANGED_ASSOC // set disconnected in BSS_CHANGED_ASSOC
@@ -2621,6 +2698,7 @@ int bes2600_vif_setup(struct bes2600_vif *priv) @@ -2641,6 +2718,7 @@ int bes2600_vif_setup(struct bes2600_vif *priv)
/* Setup per vif workitems and locks */ /* Setup per vif workitems and locks */
spin_lock_init(&priv->vif_lock); spin_lock_init(&priv->vif_lock);
bes2600_decrypt_storm_init(priv); bes2600_decrypt_storm_init(priv);
@@ -1,4 +1,4 @@
From 4bc0a34c94094d9e896c5a2f45b54d8be6c0fca7 Mon Sep 17 00:00:00 2001 From 737f28e29c4b8253939e24b1d6b97d5605bb7ac4 Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com> From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Thu, 7 May 2026 21:19:49 +0200 Date: Thu, 7 May 2026 21:19:49 +0200
Subject: [PATCH 22/29] bes2600: replace a set of atomic_add() Subject: [PATCH 22/29] bes2600: replace a set of atomic_add()
@@ -23,10 +23,10 @@ Cherry-picked from upstream Linux:
2 files changed, 7 insertions(+), 7 deletions(-) 2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/drivers/staging/bes2600/bh.c b/drivers/staging/bes2600/bh.c diff --git a/drivers/staging/bes2600/bh.c b/drivers/staging/bes2600/bh.c
index 6385312..1d2773c 100644 index 175ab5e..fab3bf0 100644
--- a/drivers/staging/bes2600/bh.c --- a/drivers/staging/bes2600/bh.c
+++ b/drivers/staging/bes2600/bh.c +++ b/drivers/staging/bes2600/bh.c
@@ -101,7 +101,7 @@ void bes2600_unregister_bh(struct bes2600_common *hw_priv) @@ -102,7 +102,7 @@ void bes2600_unregister_bh(struct bes2600_common *hw_priv)
coex_deinit_mode(hw_priv); coex_deinit_mode(hw_priv);
#endif #endif
@@ -35,7 +35,7 @@ index 6385312..1d2773c 100644
wake_up(&hw_priv->bh_wq); wake_up(&hw_priv->bh_wq);
flush_workqueue(hw_priv->bh_workqueue); flush_workqueue(hw_priv->bh_workqueue);
@@ -590,7 +590,7 @@ static int bes2600_bh(void *arg) @@ -591,7 +591,7 @@ static int bes2600_bh(void *arg)
bes_devel("[BH] Device resume.\n"); bes_devel("[BH] Device resume.\n");
atomic_set(&hw_priv->bh_suspend, BES2600_BH_RESUMED); atomic_set(&hw_priv->bh_suspend, BES2600_BH_RESUMED);
wake_up(&hw_priv->bh_evt_wq); wake_up(&hw_priv->bh_evt_wq);
@@ -44,7 +44,7 @@ index 6385312..1d2773c 100644
continue; continue;
} }
@@ -758,9 +758,9 @@ tx: @@ -759,9 +759,9 @@ tx:
#if 0 /* count is not implemented */ #if 0 /* count is not implemented */
if (ret > 1) if (ret > 1)
@@ -56,7 +56,7 @@ index 6385312..1d2773c 100644
#endif #endif
#if defined(CONFIG_BES2600_NON_POWER_OF_TWO_BLOCKSIZES) #if defined(CONFIG_BES2600_NON_POWER_OF_TWO_BLOCKSIZES)
@@ -1134,7 +1134,7 @@ static int bes2600_bh_tx_helper(struct bes2600_common *hw_priv, @@ -1135,7 +1135,7 @@ static int bes2600_bh_tx_helper(struct bes2600_common *hw_priv,
tx_len += 4; tx_len += 4;
#endif #endif
@@ -65,7 +65,7 @@ index 6385312..1d2773c 100644
tx_len = hw_priv->sbus_ops->align_size( tx_len = hw_priv->sbus_ops->align_size(
hw_priv->sbus_priv, tx_len); hw_priv->sbus_priv, tx_len);
@@ -1435,7 +1435,7 @@ static int bes2600_bh(void *arg) @@ -1442,7 +1442,7 @@ static int bes2600_bh(void *arg)
bes_devel("[BH] Device resume.\n"); bes_devel("[BH] Device resume.\n");
atomic_set(&hw_priv->bh_suspend, BES2600_BH_RESUMED); atomic_set(&hw_priv->bh_suspend, BES2600_BH_RESUMED);
wake_up(&hw_priv->bh_evt_wq); wake_up(&hw_priv->bh_evt_wq);
@@ -1,4 +1,4 @@
From 65a4c39914f07bcb0fc01ea78b974e6901d3377d Mon Sep 17 00:00:00 2001 From 2fb72f06e54172479662257ae4ef9a61d6ba7092 Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com> From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Thu, 7 May 2026 21:20:46 +0200 Date: Thu, 7 May 2026 21:20:46 +0200
Subject: [PATCH 23/29] bes2600: fix missing destroy_workqueue() on error in Subject: [PATCH 23/29] bes2600: fix missing destroy_workqueue() on error in
@@ -34,10 +34,10 @@ Cherry-picked from upstream Linux:
1 file changed, 2 insertions(+) 1 file changed, 2 insertions(+)
diff --git a/drivers/staging/bes2600/main.c b/drivers/staging/bes2600/main.c diff --git a/drivers/staging/bes2600/main.c b/drivers/staging/bes2600/main.c
index d6da84a..90a8ff8 100644 index ff82f4d..89b5e2d 100644
--- a/drivers/staging/bes2600/main.c --- a/drivers/staging/bes2600/main.c
+++ b/drivers/staging/bes2600/main.c +++ b/drivers/staging/bes2600/main.c
@@ -497,6 +497,7 @@ static struct ieee80211_hw *bes2600_init_common(size_t hw_priv_data_len) @@ -502,6 +502,7 @@ static struct ieee80211_hw *bes2600_init_common(size_t hw_priv_data_len)
WLAN_LINK_ID_MAX, WLAN_LINK_ID_MAX,
bes2600_skb_dtor, bes2600_skb_dtor,
hw_priv))) { hw_priv))) {
@@ -45,7 +45,7 @@ index d6da84a..90a8ff8 100644
ieee80211_free_hw(hw); ieee80211_free_hw(hw);
return NULL; return NULL;
} }
@@ -508,6 +509,7 @@ static struct ieee80211_hw *bes2600_init_common(size_t hw_priv_data_len) @@ -513,6 +514,7 @@ static struct ieee80211_hw *bes2600_init_common(size_t hw_priv_data_len)
for (; i > 0; i--) for (; i > 0; i--)
bes2600_queue_deinit(&hw_priv->tx_queue[i - 1]); bes2600_queue_deinit(&hw_priv->tx_queue[i - 1]);
bes2600_queue_stats_deinit(&hw_priv->tx_queue_stats); bes2600_queue_stats_deinit(&hw_priv->tx_queue_stats);
@@ -1,4 +1,4 @@
From b717251598c95bb7ce7822ffa103216598f19b67 Mon Sep 17 00:00:00 2001 From d9e6361cf0c273f07aee94f24533a5f19e7ed4c0 Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com> From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Thu, 7 May 2026 21:24:01 +0200 Date: Thu, 7 May 2026 21:24:01 +0200
Subject: [PATCH 24/29] bes2600: fix concurrency UAF in bes2600_hw_scan and Subject: [PATCH 24/29] bes2600: fix concurrency UAF in bes2600_hw_scan and
@@ -38,7 +38,7 @@ Cherry-picked from upstream Linux:
1 file changed, 22 insertions(+), 15 deletions(-) 1 file changed, 22 insertions(+), 15 deletions(-)
diff --git a/drivers/staging/bes2600/scan.c b/drivers/staging/bes2600/scan.c diff --git a/drivers/staging/bes2600/scan.c b/drivers/staging/bes2600/scan.c
index ad5033b..16b5d0f 100644 index b944adc..3cd7b64 100644
--- a/drivers/staging/bes2600/scan.c --- a/drivers/staging/bes2600/scan.c
+++ b/drivers/staging/bes2600/scan.c +++ b/drivers/staging/bes2600/scan.c
@@ -257,18 +257,21 @@ int bes2600_hw_scan(struct ieee80211_hw *hw, @@ -257,18 +257,21 @@ int bes2600_hw_scan(struct ieee80211_hw *hw,
@@ -1,4 +1,4 @@
From d0f14e3ba7408e81ed4c76941b8a4c7abda0c61b Mon Sep 17 00:00:00 2001 From 91640bd96d36dd5769b1325e1b2130a95277e0e7 Mon Sep 17 00:00:00 2001
From: "Claude (noether)" <claude@reauktion.de> From: "Claude (noether)" <claude@reauktion.de>
Date: Wed, 6 May 2026 19:50:52 +0200 Date: Wed, 6 May 2026 19:50:52 +0200
Subject: [PATCH 20/29] bes2600: pre-empt AP-deauth-6 with mac80211 reassoc on Subject: [PATCH 20/29] bes2600: pre-empt AP-deauth-6 with mac80211 reassoc on
@@ -105,18 +105,18 @@ index 5228b22..ca223dd 100644
seq_puts(seq, "Filter: promisc\n"); seq_puts(seq, "Filter: promisc\n");
else if (priv->rx_filter.fcs) else if (priv->rx_filter.fcs)
diff --git a/drivers/staging/bes2600/sta.c b/drivers/staging/bes2600/sta.c diff --git a/drivers/staging/bes2600/sta.c b/drivers/staging/bes2600/sta.c
index 5f1a456..1b78051 100644 index bc6d483..139bdae 100644
--- a/drivers/staging/bes2600/sta.c --- a/drivers/staging/bes2600/sta.c
+++ b/drivers/staging/bes2600/sta.c +++ b/drivers/staging/bes2600/sta.c
@@ -448,6 +448,7 @@ void bes2600_remove_interface(struct ieee80211_hw *dev, @@ -464,6 +464,7 @@ void bes2600_remove_interface(struct ieee80211_hw *dev,
cancel_delayed_work_sync(&priv->join_timeout); cancel_delayed_work_sync(&priv->join_timeout);
cancel_delayed_work_sync(&priv->set_cts_work); cancel_delayed_work_sync(&priv->set_cts_work);
cancel_delayed_work_sync(&priv->pending_offchanneltx_work); cancel_delayed_work_sync(&priv->pending_offchanneltx_work);
+ cancel_work_sync(&priv->decrypt_storm_recover_work); + cancel_work_sync(&priv->decrypt_storm_recover_work);
del_timer_sync(&priv->mcast_timeout); timer_delete_sync(&priv->mcast_timeout);
/* TODO:COMBO: May be reset of these variables "delayed_link_loss and /* TODO:COMBO: May be reset of these variables "delayed_link_loss and
@@ -2619,6 +2620,7 @@ int bes2600_vif_setup(struct bes2600_vif *priv) @@ -2639,6 +2640,7 @@ int bes2600_vif_setup(struct bes2600_vif *priv)
/* Setup per vif workitems and locks */ /* Setup per vif workitems and locks */
spin_lock_init(&priv->vif_lock); spin_lock_init(&priv->vif_lock);
@@ -125,10 +125,10 @@ index 5f1a456..1b78051 100644
INIT_DELAYED_WORK(&priv->join_timeout, bes2600_join_timeout); INIT_DELAYED_WORK(&priv->join_timeout, bes2600_join_timeout);
INIT_WORK(&priv->unjoin_work, bes2600_unjoin_work); INIT_WORK(&priv->unjoin_work, bes2600_unjoin_work);
diff --git a/drivers/staging/bes2600/txrx.c b/drivers/staging/bes2600/txrx.c diff --git a/drivers/staging/bes2600/txrx.c b/drivers/staging/bes2600/txrx.c
index dbd1b23..346312c 100644 index 017f0d8..f6a66d6 100644
--- a/drivers/staging/bes2600/txrx.c --- a/drivers/staging/bes2600/txrx.c
+++ b/drivers/staging/bes2600/txrx.c +++ b/drivers/staging/bes2600/txrx.c
@@ -25,6 +25,78 @@ @@ -26,6 +26,78 @@
#define BES2600_INVALID_RATE_ID (0xFF) #define BES2600_INVALID_RATE_ID (0xFF)
@@ -207,7 +207,7 @@ index dbd1b23..346312c 100644
#ifdef CONFIG_BES2600_TESTMODE #ifdef CONFIG_BES2600_TESTMODE
#include "bes_nl80211_testmode_msg.h" #include "bes_nl80211_testmode_msg.h"
#endif /* CONFIG_BES2600_TESTMODE */ #endif /* CONFIG_BES2600_TESTMODE */
@@ -1672,6 +1744,8 @@ void bes2600_rx_cb(struct bes2600_vif *priv, @@ -1694,6 +1766,8 @@ void bes2600_rx_cb(struct bes2600_vif *priv,
goto drop; goto drop;
} else { } else {
bes_warn("[RX] Receive failure: %d.\n", arg->status); bes_warn("[RX] Receive failure: %d.\n", arg->status);
@@ -1,4 +1,4 @@
From ef24cdb8918b72006226ff18c4a8b9b504879510 Mon Sep 17 00:00:00 2001 From 0768e11da638457b3455e426de924f9e2e551641 Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com> From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Thu, 23 Apr 2026 20:04:11 +0200 Date: Thu, 23 Apr 2026 20:04:11 +0200
Subject: [PATCH 09/29] bes2600: drop BES2600_WRITE_DPD_TO_FILE kernel_*() file Subject: [PATCH 09/29] bes2600: drop BES2600_WRITE_DPD_TO_FILE kernel_*() file
@@ -1,4 +1,4 @@
From ebb5c579889e8cf98bdfe0f1b317e89cbb692948 Mon Sep 17 00:00:00 2001 From c3d28aea4603fec51b66cfa438dd546722d53272 Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com> From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Thu, 23 Apr 2026 20:19:27 +0200 Date: Thu, 23 Apr 2026 20:19:27 +0200
Subject: [PATCH 10/29] bes2600: drop orphan DATA_DUMP_OBSERVE and Subject: [PATCH 10/29] bes2600: drop orphan DATA_DUMP_OBSERVE and
@@ -118,10 +118,10 @@ index 133c945..d612c3c 100644
kfree(short_buf); kfree(short_buf);
release_firmware(fw_bin); release_firmware(fw_bin);
diff --git a/drivers/staging/bes2600/main.c b/drivers/staging/bes2600/main.c diff --git a/drivers/staging/bes2600/main.c b/drivers/staging/bes2600/main.c
index 6ed6b15..9d2aac5 100644 index 3b0b7a3..7cbb3a9 100644
--- a/drivers/staging/bes2600/main.c --- a/drivers/staging/bes2600/main.c
+++ b/drivers/staging/bes2600/main.c +++ b/drivers/staging/bes2600/main.c
@@ -790,41 +790,6 @@ void bes2600_core_release(struct bes2600_common *self) @@ -795,41 +795,6 @@ void bes2600_core_release(struct bes2600_common *self)
return; return;
} }
@@ -1,4 +1,4 @@
From 9012b74eea8d540c8637d7645093204d1e94e99a Mon Sep 17 00:00:00 2001 From 789ab98e4cd4a0c2c43a54da6462b6b05f3af8f2 Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com> From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Wed, 22 Apr 2026 13:04:27 +0200 Date: Wed, 22 Apr 2026 13:04:27 +0200
Subject: [PATCH 06/29] bes2600: enable CONFIG_BES2600_TESTMODE by default + Subject: [PATCH 06/29] bes2600: enable CONFIG_BES2600_TESTMODE by default +
@@ -108,10 +108,10 @@ index 605cea8..65cf703 100644
+ bes_err(fmt, ##__VA_ARGS__); \ + bes_err(fmt, ##__VA_ARGS__); \
+ } while (0) + } while (0)
diff --git a/drivers/staging/bes2600/sta.c b/drivers/staging/bes2600/sta.c diff --git a/drivers/staging/bes2600/sta.c b/drivers/staging/bes2600/sta.c
index aa69eb8..5f1a456 100644 index ca1c77c..bc6d483 100644
--- a/drivers/staging/bes2600/sta.c --- a/drivers/staging/bes2600/sta.c
+++ b/drivers/staging/bes2600/sta.c +++ b/drivers/staging/bes2600/sta.c
@@ -3633,7 +3633,7 @@ static int bes2600_set_power_save(struct ieee80211_hw *hw, @@ -3654,7 +3654,7 @@ static int bes2600_set_power_save(struct ieee80211_hw *hw,
* *
* Returns: 0 on success or non zero value on failure * Returns: 0 on success or non zero value on failure
*/ */
@@ -120,7 +120,7 @@ index aa69eb8..5f1a456 100644
{ {
struct bes_msg_start_stop_tsm *start_stop_tsm = struct bes_msg_start_stop_tsm *start_stop_tsm =
(struct bes_msg_start_stop_tsm *) data; (struct bes_msg_start_stop_tsm *) data;
@@ -3663,7 +3663,7 @@ int bes2600_start_stop_tsm(struct ieee80211_hw *hw, void *data) @@ -3684,7 +3684,7 @@ int bes2600_start_stop_tsm(struct ieee80211_hw *hw, void *data)
* *
* Returns: TSM parameters collected * Returns: TSM parameters collected
*/ */
@@ -129,7 +129,7 @@ index aa69eb8..5f1a456 100644
{ {
struct bes2600_common *hw_priv = hw->priv; struct bes2600_common *hw_priv = hw->priv;
struct bes_tsm_stats tsm_stats; struct bes_tsm_stats tsm_stats;
@@ -3703,7 +3703,7 @@ int bes2600_get_tsm_params(struct ieee80211_hw *hw) @@ -3724,7 +3724,7 @@ int bes2600_get_tsm_params(struct ieee80211_hw *hw)
* *
* Returns: Returns the last measured roam delay * Returns: Returns the last measured roam delay
*/ */
@@ -1,4 +1,4 @@
From 64eae76f4e237fa3149c858a7b1ac07b67559970 Mon Sep 17 00:00:00 2001 From 0c1f98df59fc3c330b370f1b5b54e8d780278d2a Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com> From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Thu, 23 Apr 2026 19:31:25 +0200 Date: Thu, 23 Apr 2026 19:31:25 +0200
Subject: [PATCH 08/29] bes2600: drop kernel_write() persistence from factory Subject: [PATCH 08/29] bes2600: drop kernel_write() persistence from factory
@@ -1,4 +1,4 @@
From b76c9904f88e3147644960925d8c9835341e99d7 Mon Sep 17 00:00:00 2001 From 4a1bbc7444c94be044fae4377ccd612a6cd28460 Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com> From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Wed, 22 Apr 2026 10:09:44 +0200 Date: Wed, 22 Apr 2026 10:09:44 +0200
Subject: [PATCH 01/29] bes2600: use request_firmware() for factory.txt read Subject: [PATCH 01/29] bes2600: use request_firmware() for factory.txt read
@@ -1,4 +1,4 @@
From 98c6e363f0522ded02b06802f003f3c2f168e564 Mon Sep 17 00:00:00 2001 From 13dd191defab19294d843218833860d0e1e33dcd Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com> From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Wed, 22 Apr 2026 12:17:56 +0200 Date: Wed, 22 Apr 2026 12:17:56 +0200
Subject: [PATCH 02/29] bes2600: default STANDARD_FACTORY_EFUSE_FLAG off for Subject: [PATCH 02/29] bes2600: default STANDARD_FACTORY_EFUSE_FLAG off for
@@ -1,4 +1,4 @@
From 20d349e2b5bffe25c17af2612d179b42e27c7414 Mon Sep 17 00:00:00 2001 From 40a0a1a0c72ae5b4ee538f6e8a5d0def522606af Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com> From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Wed, 22 Apr 2026 13:18:38 +0200 Date: Wed, 22 Apr 2026 13:18:38 +0200
Subject: [PATCH 03/29] bes2600: thread struct device * through factory Subject: [PATCH 03/29] bes2600: thread struct device * through factory
@@ -90,7 +90,7 @@ index 3835b0d..7dbe9f8 100644
u8* bes2600_get_factory_cali_data(u8 *file_buffer, u32 *data_len, char *path); u8* bes2600_get_factory_cali_data(u8 *file_buffer, u32 *data_len, char *path);
void factory_little_endian_cvrt(u8 *data); void factory_little_endian_cvrt(u8 *data);
diff --git a/drivers/staging/bes2600/bes2600_sdio.c b/drivers/staging/bes2600/bes2600_sdio.c diff --git a/drivers/staging/bes2600/bes2600_sdio.c b/drivers/staging/bes2600/bes2600_sdio.c
index b595365..371ef4f 100644 index 13d4ff1..f172d53 100644
--- a/drivers/staging/bes2600/bes2600_sdio.c --- a/drivers/staging/bes2600/bes2600_sdio.c
+++ b/drivers/staging/bes2600/bes2600_sdio.c +++ b/drivers/staging/bes2600/bes2600_sdio.c
@@ -30,6 +30,7 @@ @@ -30,6 +30,7 @@
@@ -1,4 +1,4 @@
From 8dd79199f8a09ee3af6853e01a2ab3bab7684d81 Mon Sep 17 00:00:00 2001 From b9e340c78cf7111dd29c9b31dae5fe73d8b5ceec Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com> From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Fri, 8 May 2026 00:03:50 +0200 Date: Fri, 8 May 2026 00:03:50 +0200
Subject: [PATCH 26/29] =?UTF-8?q?bes2600:=20Patch=20G=20=E2=80=94=20restor?= Subject: [PATCH 26/29] =?UTF-8?q?bes2600:=20Patch=20G=20=E2=80=94=20restor?=
@@ -103,7 +103,7 @@ copyrights is now resolved.
48 files changed, 223 insertions(+), 292 deletions(-) 48 files changed, 223 insertions(+), 292 deletions(-)
diff --git a/drivers/staging/bes2600/ap.c b/drivers/staging/bes2600/ap.c diff --git a/drivers/staging/bes2600/ap.c b/drivers/staging/bes2600/ap.c
index 71660d4..0a23790 100644 index 7b1e3b4..8a17545 100644
--- a/drivers/staging/bes2600/ap.c --- a/drivers/staging/bes2600/ap.c
+++ b/drivers/staging/bes2600/ap.c +++ b/drivers/staging/bes2600/ap.c
@@ -1,12 +1,9 @@ @@ -1,12 +1,9 @@
@@ -230,7 +230,7 @@ index 63c3275..ebec635 100644
#ifndef BES2600_PLAT_H_INCLUDED #ifndef BES2600_PLAT_H_INCLUDED
#define BES2600_PLAT_H_INCLUDED #define BES2600_PLAT_H_INCLUDED
diff --git a/drivers/staging/bes2600/bes2600_sdio.c b/drivers/staging/bes2600/bes2600_sdio.c diff --git a/drivers/staging/bes2600/bes2600_sdio.c b/drivers/staging/bes2600/bes2600_sdio.c
index b6b4e4e..3abda2a 100644 index 3834032..e85c524 100644
--- a/drivers/staging/bes2600/bes2600_sdio.c --- a/drivers/staging/bes2600/bes2600_sdio.c
+++ b/drivers/staging/bes2600/bes2600_sdio.c +++ b/drivers/staging/bes2600/bes2600_sdio.c
@@ -1,12 +1,13 @@ @@ -1,12 +1,13 @@
@@ -274,7 +274,7 @@ index 224c62d..02dcd43 100644
#include<linux/module.h> #include<linux/module.h>
#include <linux/init.h> #include <linux/init.h>
diff --git a/drivers/staging/bes2600/bes_chardev.h b/drivers/staging/bes2600/bes_chardev.h diff --git a/drivers/staging/bes2600/bes_chardev.h b/drivers/staging/bes2600/bes_chardev.h
index 310ab81..3e4eee6 100644 index 2a7cad7..9edb206 100644
--- a/drivers/staging/bes2600/bes_chardev.h --- a/drivers/staging/bes2600/bes_chardev.h
+++ b/drivers/staging/bes2600/bes_chardev.h +++ b/drivers/staging/bes2600/bes_chardev.h
@@ -1,12 +1,9 @@ @@ -1,12 +1,9 @@
@@ -429,7 +429,7 @@ index 92de90b..49477b3 100644
#ifndef __BES_PWR_H__ #ifndef __BES_PWR_H__
#define __BES_PWR_H__ #define __BES_PWR_H__
diff --git a/drivers/staging/bes2600/bh.c b/drivers/staging/bes2600/bh.c diff --git a/drivers/staging/bes2600/bh.c b/drivers/staging/bes2600/bh.c
index d5a8c77..0e0888e 100644 index febcaf4..61f6991 100644
--- a/drivers/staging/bes2600/bh.c --- a/drivers/staging/bes2600/bh.c
+++ b/drivers/staging/bes2600/bh.c +++ b/drivers/staging/bes2600/bh.c
@@ -1,12 +1,12 @@ @@ -1,12 +1,12 @@
@@ -758,7 +758,7 @@ index 5cfba46..bec3647 100644
#ifndef BES2600_ITP_H_INCLUDED #ifndef BES2600_ITP_H_INCLUDED
diff --git a/drivers/staging/bes2600/main.c b/drivers/staging/bes2600/main.c diff --git a/drivers/staging/bes2600/main.c b/drivers/staging/bes2600/main.c
index 90a8ff8..19f196f 100644 index 89b5e2d..71dc4ae 100644
--- a/drivers/staging/bes2600/main.c --- a/drivers/staging/bes2600/main.c
+++ b/drivers/staging/bes2600/main.c +++ b/drivers/staging/bes2600/main.c
@@ -1,12 +1,18 @@ @@ -1,12 +1,18 @@
@@ -833,7 +833,7 @@ index 0f6943e..ae70453 100644
#ifndef PM_H_INCLUDED #ifndef PM_H_INCLUDED
diff --git a/drivers/staging/bes2600/queue.c b/drivers/staging/bes2600/queue.c diff --git a/drivers/staging/bes2600/queue.c b/drivers/staging/bes2600/queue.c
index f050df6..cc606c1 100644 index d1b407b..b56ca43 100644
--- a/drivers/staging/bes2600/queue.c --- a/drivers/staging/bes2600/queue.c
+++ b/drivers/staging/bes2600/queue.c +++ b/drivers/staging/bes2600/queue.c
@@ -1,12 +1,12 @@ @@ -1,12 +1,12 @@
@@ -902,7 +902,7 @@ index 96b1d4c..43c2dae 100644
#ifndef BES2600_SBUS_H #ifndef BES2600_SBUS_H
diff --git a/drivers/staging/bes2600/scan.c b/drivers/staging/bes2600/scan.c diff --git a/drivers/staging/bes2600/scan.c b/drivers/staging/bes2600/scan.c
index 16b5d0f..fb1d298 100644 index 3cd7b64..1905471 100644
--- a/drivers/staging/bes2600/scan.c --- a/drivers/staging/bes2600/scan.c
+++ b/drivers/staging/bes2600/scan.c +++ b/drivers/staging/bes2600/scan.c
@@ -1,12 +1,12 @@ @@ -1,12 +1,12 @@
@@ -948,7 +948,7 @@ index 1f3adea..295be18 100644
#ifndef SCAN_H_INCLUDED #ifndef SCAN_H_INCLUDED
diff --git a/drivers/staging/bes2600/sta.c b/drivers/staging/bes2600/sta.c diff --git a/drivers/staging/bes2600/sta.c b/drivers/staging/bes2600/sta.c
index 81f88ed..bfd8ae9 100644 index 5868757..70b12f9 100644
--- a/drivers/staging/bes2600/sta.c --- a/drivers/staging/bes2600/sta.c
+++ b/drivers/staging/bes2600/sta.c +++ b/drivers/staging/bes2600/sta.c
@@ -1,12 +1,12 @@ @@ -1,12 +1,12 @@
@@ -971,7 +971,7 @@ index 81f88ed..bfd8ae9 100644
#include <linux/vmalloc.h> #include <linux/vmalloc.h>
diff --git a/drivers/staging/bes2600/sta.h b/drivers/staging/bes2600/sta.h diff --git a/drivers/staging/bes2600/sta.h b/drivers/staging/bes2600/sta.h
index e4e266c..6ea3b0f 100644 index 39b4b1a..a174e04 100644
--- a/drivers/staging/bes2600/sta.h --- a/drivers/staging/bes2600/sta.h
+++ b/drivers/staging/bes2600/sta.h +++ b/drivers/staging/bes2600/sta.h
@@ -1,12 +1,12 @@ @@ -1,12 +1,12 @@
@@ -1034,7 +1034,7 @@ index de82b30..7f42c04 100644
#ifndef __TX_LOOP_H__ #ifndef __TX_LOOP_H__
#define __TX_LOOP_H__ #define __TX_LOOP_H__
diff --git a/drivers/staging/bes2600/txrx.c b/drivers/staging/bes2600/txrx.c diff --git a/drivers/staging/bes2600/txrx.c b/drivers/staging/bes2600/txrx.c
index 346312c..7cdb7de 100644 index f6a66d6..3aef009 100644
--- a/drivers/staging/bes2600/txrx.c --- a/drivers/staging/bes2600/txrx.c
+++ b/drivers/staging/bes2600/txrx.c +++ b/drivers/staging/bes2600/txrx.c
@@ -1,12 +1,12 @@ @@ -1,12 +1,12 @@
@@ -1,4 +1,4 @@
From 0dde479994a84f9e968b327d5409c3a926acb69c Mon Sep 17 00:00:00 2001 From 22b799f5a21c0046aad46676519e5f03a0d105fd Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com> From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Sun, 26 Apr 2026 22:31:58 +0200 Date: Sun, 26 Apr 2026 22:31:58 +0200
Subject: [PATCH 15/29] bes2600: recover wedged firmware via mmc_hw_reset on Subject: [PATCH 15/29] bes2600: recover wedged firmware via mmc_hw_reset on
@@ -85,7 +85,7 @@ Signed-off-by: Markus Fritsche <fritsche.markus@gmail.com>
4 files changed, 95 insertions(+), 2 deletions(-) 4 files changed, 95 insertions(+), 2 deletions(-)
diff --git a/drivers/staging/bes2600/bes2600_sdio.c b/drivers/staging/bes2600/bes2600_sdio.c diff --git a/drivers/staging/bes2600/bes2600_sdio.c b/drivers/staging/bes2600/bes2600_sdio.c
index 3e04e8c..e5840c8 100644 index b9d836f..f7f86d7 100644
--- a/drivers/staging/bes2600/bes2600_sdio.c --- a/drivers/staging/bes2600/bes2600_sdio.c
+++ b/drivers/staging/bes2600/bes2600_sdio.c +++ b/drivers/staging/bes2600/bes2600_sdio.c
@@ -16,6 +16,7 @@ @@ -16,6 +16,7 @@
@@ -216,7 +216,7 @@ index a02d6d9..d1375bc 100644
bes2600_cdev.sbus_priv); bes2600_cdev.sbus_priv);
} }
diff --git a/drivers/staging/bes2600/bes_chardev.h b/drivers/staging/bes2600/bes_chardev.h diff --git a/drivers/staging/bes2600/bes_chardev.h b/drivers/staging/bes2600/bes_chardev.h
index 15602ba..3f0c59b 100644 index c627bb7..ca8419e 100644
--- a/drivers/staging/bes2600/bes_chardev.h --- a/drivers/staging/bes2600/bes_chardev.h
+++ b/drivers/staging/bes2600/bes_chardev.h +++ b/drivers/staging/bes2600/bes_chardev.h
@@ -60,6 +60,7 @@ struct sbus_priv *bes2600_chrdev_get_sbus_priv_data(void); @@ -60,6 +60,7 @@ struct sbus_priv *bes2600_chrdev_get_sbus_priv_data(void);
@@ -1,4 +1,4 @@
From 80e5e68c223b676698288fde62e527b96e1ac8e2 Mon Sep 17 00:00:00 2001 From 3942404ae16b134a55e48cb796d625b8b90e504f Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com> From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Tue, 28 Apr 2026 21:37:37 +0200 Date: Tue, 28 Apr 2026 21:37:37 +0200
Subject: [PATCH 19/29] bes2600: handle multi-function SDIO cards in Subject: [PATCH 19/29] bes2600: handle multi-function SDIO cards in
@@ -41,7 +41,7 @@ Signed-off-by: Markus Fritsche <fritsche.markus@gmail.com>
1 file changed, 23 insertions(+), 1 deletion(-) 1 file changed, 23 insertions(+), 1 deletion(-)
diff --git a/drivers/staging/bes2600/bes2600_sdio.c b/drivers/staging/bes2600/bes2600_sdio.c diff --git a/drivers/staging/bes2600/bes2600_sdio.c b/drivers/staging/bes2600/bes2600_sdio.c
index c9cb073..b998381 100644 index 5a0694a..c81c244 100644
--- a/drivers/staging/bes2600/bes2600_sdio.c --- a/drivers/staging/bes2600/bes2600_sdio.c
+++ b/drivers/staging/bes2600/bes2600_sdio.c +++ b/drivers/staging/bes2600/bes2600_sdio.c
@@ -1810,10 +1810,32 @@ static void bes2600_sdio_halt_device(struct sbus_priv *self) @@ -1810,10 +1810,32 @@ static void bes2600_sdio_halt_device(struct sbus_priv *self)
@@ -1,4 +1,4 @@
From 983bd62dd0ba9b25dfb986f39fc5a79145da6008 Mon Sep 17 00:00:00 2001 From dc1505f5bab24c5f0960dcc612ce51cd2e5aeddf Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com> From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Tue, 28 Apr 2026 16:54:06 +0200 Date: Tue, 28 Apr 2026 16:54:06 +0200
Subject: [PATCH 18/29] bes2600: self-detect when firmware does not honor PSM Subject: [PATCH 18/29] bes2600: self-detect when firmware does not honor PSM
@@ -1,4 +1,4 @@
From 19feb8181a75caa13442f5ac436b4014e68fe416 Mon Sep 17 00:00:00 2001 From e8550e55fc7d3910ee690359d89d96c86cfb0347 Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com> From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Wed, 22 Apr 2026 12:37:45 +0200 Date: Wed, 22 Apr 2026 12:37:45 +0200
Subject: [PATCH 04/29] bes2600: gate device LP-mode entry on successful Subject: [PATCH 04/29] bes2600: gate device LP-mode entry on successful
@@ -1,4 +1,4 @@
From 6168e9d34036bb6586be9ecb4f67f15401471aa0 Mon Sep 17 00:00:00 2001 From 40aec44a6e4de5aaf0066982601c99e648b0f1ec Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com> From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Tue, 28 Apr 2026 15:05:27 +0200 Date: Tue, 28 Apr 2026 15:05:27 +0200
Subject: [PATCH 16/29] bes2600: gate PM indication completion on pending Subject: [PATCH 16/29] bes2600: gate PM indication completion on pending
@@ -1,4 +1,4 @@
From 88557185112dafbfba0053e9b5229125a97f5154 Mon Sep 17 00:00:00 2001 From 894c502cd541079a8a26d61cd4289af9001b3046 Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com> From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Thu, 23 Apr 2026 20:35:17 +0200 Date: Thu, 23 Apr 2026 20:35:17 +0200
Subject: [PATCH 11/29] bes2600: demote 'wait pm ind timeout' from bes_err to Subject: [PATCH 11/29] bes2600: demote 'wait pm ind timeout' from bes_err to
@@ -1,4 +1,4 @@
From b7c4b0fc39f498376a38279b9745a55fc2141fc3 Mon Sep 17 00:00:00 2001 From 7a65dc374c671e20bd6303959ff234a179bc9ff7 Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com> From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Tue, 28 Apr 2026 15:23:34 +0200 Date: Tue, 28 Apr 2026 15:23:34 +0200
Subject: [PATCH 17/29] bes2600: short-circuit wake handshake when chip is Subject: [PATCH 17/29] bes2600: short-circuit wake handshake when chip is
@@ -80,7 +80,7 @@ Signed-off-by: Markus Fritsche <fritsche.markus@gmail.com>
2 files changed, 62 insertions(+), 9 deletions(-) 2 files changed, 62 insertions(+), 9 deletions(-)
diff --git a/drivers/staging/bes2600/bes2600_sdio.c b/drivers/staging/bes2600/bes2600_sdio.c diff --git a/drivers/staging/bes2600/bes2600_sdio.c b/drivers/staging/bes2600/bes2600_sdio.c
index e5840c8..c9cb073 100644 index f7f86d7..5a0694a 100644
--- a/drivers/staging/bes2600/bes2600_sdio.c --- a/drivers/staging/bes2600/bes2600_sdio.c
+++ b/drivers/staging/bes2600/bes2600_sdio.c +++ b/drivers/staging/bes2600/bes2600_sdio.c
@@ -1389,7 +1389,14 @@ static void bes2600_gpio_wakeup_mcu(struct sbus_priv *self, int flag) @@ -1389,7 +1389,14 @@ static void bes2600_gpio_wakeup_mcu(struct sbus_priv *self, int flag)
@@ -1,4 +1,4 @@
From 4be43770fd03391df66f9043280d55764e477221 Mon Sep 17 00:00:00 2001 From 445c619da88d69adf68e8cae08ad1b53f76fe57d Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com> From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Fri, 8 May 2026 00:22:14 +0200 Date: Fri, 8 May 2026 00:22:14 +0200
Subject: [PATCH 28/29] =?UTF-8?q?bes2600:=20Patch=20E=20=E2=80=94=20skip?= Subject: [PATCH 28/29] =?UTF-8?q?bes2600:=20Patch=20E=20=E2=80=94=20skip?=
@@ -37,10 +37,10 @@ Build verified: srcversion B5922B4933590F33207EE97 on ohm sandbox.
1 file changed, 24 insertions(+), 6 deletions(-) 1 file changed, 24 insertions(+), 6 deletions(-)
diff --git a/drivers/staging/bes2600/txrx.c b/drivers/staging/bes2600/txrx.c diff --git a/drivers/staging/bes2600/txrx.c b/drivers/staging/bes2600/txrx.c
index 84c34bc..bf17777 100644 index 536b198..cb718ad 100644
--- a/drivers/staging/bes2600/txrx.c --- a/drivers/staging/bes2600/txrx.c
+++ b/drivers/staging/bes2600/txrx.c +++ b/drivers/staging/bes2600/txrx.c
@@ -1942,13 +1942,31 @@ void bes2600_rx_cb(struct bes2600_vif *priv, @@ -1965,13 +1965,31 @@ void bes2600_rx_cb(struct bes2600_vif *priv,
if (unlikely(bes2600_itp_rxed(hw_priv, skb))) if (unlikely(bes2600_itp_rxed(hw_priv, skb)))
consume_skb(skb); consume_skb(skb);
else if (unlikely(early_data)) { else if (unlikely(early_data)) {
@@ -1,4 +1,4 @@
From 8539460bf141f9362daf30b927150fedd08e5717 Mon Sep 17 00:00:00 2001 From cd5f85e10480f02e289ea731b5eeec571000562c Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com> From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Wed, 22 Apr 2026 12:55:18 +0200 Date: Wed, 22 Apr 2026 12:55:18 +0200
Subject: [PATCH 05/29] bes2600: remove userspace /dev/bes2600 character device Subject: [PATCH 05/29] bes2600: remove userspace /dev/bes2600 character device
@@ -73,11 +73,11 @@ Follow-ups:
Signed-off-by: Markus Fritsche <fritsche.markus@gmail.com> Signed-off-by: Markus Fritsche <fritsche.markus@gmail.com>
--- ---
bes2600/bes_chardev.c | 519 ------------------------------------------ bes2600/bes_chardev.c | 568 +-----------------------------------------
1 file changed, 519 deletions(-) 1 file changed, 3 insertions(+), 565 deletions(-)
diff --git a/drivers/staging/bes2600/bes_chardev.c b/drivers/staging/bes2600/bes_chardev.c diff --git a/drivers/staging/bes2600/bes_chardev.c b/drivers/staging/bes2600/bes_chardev.c
index 9038e48..e2e4f1b 100644 index f89dcb8..e2e4f1b 100644
--- a/drivers/staging/bes2600/bes_chardev.c --- a/drivers/staging/bes2600/bes_chardev.c
+++ b/drivers/staging/bes2600/bes_chardev.c +++ b/drivers/staging/bes2600/bes_chardev.c
@@ -43,12 +43,6 @@ enum bus_probe_state { @@ -43,12 +43,6 @@ enum bus_probe_state {
@@ -93,10 +93,74 @@ index 9038e48..e2e4f1b 100644
atomic_t num_proc; atomic_t num_proc;
wait_queue_head_t open_wq; wait_queue_head_t open_wq;
spinlock_t status_lock; spinlock_t status_lock;
@@ -249,351 +243,18 @@ int bes2600_switch_bt(bool on) @@ -196,7 +190,7 @@ static int bes2600_switch_wifi(bool on)
return ret; return ret;
} }
-static int bes2600_switch_bt(bool on)
+int bes2600_switch_bt(bool on)
{
int ret = 0;
long status = 0;
@@ -229,11 +223,11 @@ static int bes2600_switch_bt(bool on)
/* check if there is a error when bootup */
ret = (status <= 0 || bes2600_chrdev_is_bus_error()) ? -1 : 0;
} else {
- bes_devel("bes2600 activate bt.\n");
+ bes_info("enable BT\n");
ret = bes2600_chrdev_switch_subsys(GPIO_WAKE_FLAG_BT_ON, SUBSYSTEM_BT, true);
}
} else {
- bes_devel("bes2600 deactivate bt.\n");
+ bes_info("disable BT\n");
bes2600_chrdev_switch_subsys(GPIO_WAKE_FLAG_BT_OFF, SUBSYSTEM_BT, false);
}
@@ -249,392 +243,18 @@ static int bes2600_switch_bt(bool on)
return ret;
}
-/*
- * This is a global function so we don't have to make many changes to
- * the driver.
- *
- * @wifi: 1 to turn on, 0 to turn off. Otherwise, leave unchanged
- * @bt: 1 to turn on, 0 to turn off. Otherwise, leave unchanged
- */
-int bes2600_chrdev_switch_subsys_glb(int wifi, int bt)
-{
- int ret = 0;
-
- switch (wifi) {
- case 0:
- ret = bes2600_switch_wifi(false);
- break;
- case 1:
- ret = bes2600_switch_wifi(true);
- break;
- default:
- break;
- }
-
- if (ret)
- goto result;
-
- switch (bt) {
- case 0:
- ret = bes2600_switch_bt(false);
- break;
- case 1:
- ret = bes2600_switch_bt(true);
- break;
- default:
- break;
- }
-
-result:
- return ret;
-}
-EXPORT_SYMBOL_GPL(bes2600_chrdev_switch_subsys_glb);
-
-static int bes2600_get_cmd_and_ifname(const char *str, char **result) -static int bes2600_get_cmd_and_ifname(const char *str, char **result)
-{ -{
- int cmd_len = 0; - int cmd_len = 0;
@@ -192,11 +256,11 @@ index 9038e48..e2e4f1b 100644
- probe_state = bes2600_cdev.bus_probe; - probe_state = bes2600_cdev.bus_probe;
- wait_state = bes2600_cdev.wait_state; - wait_state = bes2600_cdev.wait_state;
- spin_unlock(&bes2600_cdev.status_lock); - spin_unlock(&bes2600_cdev.status_lock);
-
- /* only work for wifi signal mode */ - /* only work for wifi signal mode */
- if (bes2600_cdev.fw_type != BES2600_FW_TYPE_WIFI_SIGNAL) - if (bes2600_cdev.fw_type != BES2600_FW_TYPE_WIFI_SIGNAL)
- return -EFAULT; - return -EFAULT;
-
- /* wait bus probe operation end */ - /* wait bus probe operation end */
- if (probe_state == BES2600_BUS_PROBE_START) { - if (probe_state == BES2600_BUS_PROBE_START) {
- bes_devel("wait bus probe operation end\n"); - bes_devel("wait bus probe operation end\n");
@@ -205,7 +269,7 @@ index 9038e48..e2e4f1b 100644
- HZ); - HZ);
- WARN_ON(status <= 0); - WARN_ON(status <= 0);
- } - }
-
- /* must wait previous operation end in critical section */ - /* must wait previous operation end in critical section */
- if (wait_state != BES2600_BOOT_WAIT_NONE) { - if (wait_state != BES2600_BOOT_WAIT_NONE) {
- bes_devel("wait previous operation end\n"); - bes_devel("wait previous operation end\n");
@@ -214,7 +278,7 @@ index 9038e48..e2e4f1b 100644
- HZ * 8); - HZ * 8);
- WARN_ON(status <= 0); - WARN_ON(status <= 0);
- } - }
-
- /* if dpd calibration is doing, modify wifi and bt state directly */ - /* if dpd calibration is doing, modify wifi and bt state directly */
- spin_lock(&bes2600_cdev.status_lock); - spin_lock(&bes2600_cdev.status_lock);
- if (bes2600_cdev.bus_probe == BES2600_BUS_PROBE_OK && !bes2600_cdev.dpd_calied) { - if (bes2600_cdev.bus_probe == BES2600_BUS_PROBE_OK && !bes2600_cdev.dpd_calied) {
@@ -233,16 +297,16 @@ index 9038e48..e2e4f1b 100644
- } - }
- bes2600_recyle_cmd_and_ifname_mem(info); - bes2600_recyle_cmd_and_ifname_mem(info);
- spin_unlock(&bes2600_cdev.status_lock); - spin_unlock(&bes2600_cdev.status_lock);
-
- /* wait probe done event */ - /* wait probe done event */
- status = wait_event_timeout(bes2600_cdev.probe_done_wq, - status = wait_event_timeout(bes2600_cdev.probe_done_wq,
- bes2600_bootup_end(), HZ * 8); - bes2600_bootup_end(), HZ * 8);
- WARN_ON(status <= 0); - WARN_ON(status <= 0);
-
- return (status <= 0 || bes2600_chrdev_is_bus_error()) ? -EFAULT : 0; - return (status <= 0 || bes2600_chrdev_is_bus_error()) ? -EFAULT : 0;
- } - }
- spin_unlock(&bes2600_cdev.status_lock); - spin_unlock(&bes2600_cdev.status_lock);
-
- /* process wifi/bt on/off operation */ - /* process wifi/bt on/off operation */
- if (bes2600_get_cmd_and_ifname(str, info) == 0) { - if (bes2600_get_cmd_and_ifname(str, info) == 0) {
- if (strncmp(info[1], "WIFI_ON", 7) == 0) { - if (strncmp(info[1], "WIFI_ON", 7) == 0) {
@@ -255,7 +319,7 @@ index 9038e48..e2e4f1b 100644
- ret = bes2600_switch_bt(0); - ret = bes2600_switch_bt(0);
- } - }
- } - }
-
- if (!ret && bes2600_chrdev_check_system_close()) - if (!ret && bes2600_chrdev_check_system_close())
- ret = bes2600_chrdev_do_system_close(bes2600_cdev.sbus_ops, - ret = bes2600_chrdev_do_system_close(bes2600_cdev.sbus_ops,
- bes2600_cdev.sbus_priv); - bes2600_cdev.sbus_priv);
@@ -344,8 +408,8 @@ index 9038e48..e2e4f1b 100644
- WARN_ON(status <= 0); - WARN_ON(status <= 0);
- -
- ret = (status <= 0 || bes2600_chrdev_is_bus_error()) ? -1 : 0; - ret = (status <= 0 || bes2600_chrdev_is_bus_error()) ? -1 : 0;
-
-
- return ret; - return ret;
-} -}
- -
@@ -360,7 +424,7 @@ index 9038e48..e2e4f1b 100644
- return -EFAULT; - return -EFAULT;
- } - }
- spin_unlock(&bes2600_cdev.status_lock); - spin_unlock(&bes2600_cdev.status_lock);
-
- /* wait probe done event */ - /* wait probe done event */
- status = wait_event_timeout(bes2600_cdev.probe_done_wq, - status = wait_event_timeout(bes2600_cdev.probe_done_wq,
- bes2600_bootup_end(), HZ * 8); - bes2600_bootup_end(), HZ * 8);
@@ -384,26 +448,26 @@ index 9038e48..e2e4f1b 100644
- return -EFAULT; - return -EFAULT;
- } - }
- spin_unlock(&bes2600_cdev.status_lock); - spin_unlock(&bes2600_cdev.status_lock);
-
- /* wait probe done event */ - /* wait probe done event */
- status = wait_event_timeout(bes2600_cdev.probe_done_wq, - status = wait_event_timeout(bes2600_cdev.probe_done_wq,
- bes2600_bootup_end(), HZ * 8); - bes2600_bootup_end(), HZ * 8);
- if (status <= 0 || bes2600_chrdev_is_bus_error()) - if (status <= 0 || bes2600_chrdev_is_bus_error())
- return -EFAULT; - return -EFAULT;
-
- bes_devel("bes2600 allow bt sleep.\n"); - bes_devel("bes2600 allow bt sleep.\n");
- ret = bes2600_chrdev_switch_subsys(GPIO_WAKE_FLAG_BT_LP_OFF, SUBSYSTEM_BT_LP, false); - ret = bes2600_chrdev_switch_subsys(GPIO_WAKE_FLAG_BT_LP_OFF, SUBSYSTEM_BT_LP, false);
-
- return ret; - return ret;
-} -}
-
-static int bes2600_op_set_wakeup_read_flag(const char *str) -static int bes2600_op_set_wakeup_read_flag(const char *str)
-{ -{
- bes_devel("%s is called, arg:%s\n", __func__, str); - bes_devel("%s is called, arg:%s\n", __func__, str);
- spin_lock(&bes2600_cdev.status_lock); - spin_lock(&bes2600_cdev.status_lock);
- bes2600_cdev.read_flag = BES_CDEV_READ_WAKEUP_STATE; - bes2600_cdev.read_flag = BES_CDEV_READ_WAKEUP_STATE;
- spin_unlock(&bes2600_cdev.status_lock); - spin_unlock(&bes2600_cdev.status_lock);
-
- return 0; - return 0;
-} -}
@@ -445,7 +509,7 @@ index 9038e48..e2e4f1b 100644
static int bes2600_chrdev_check_system_close_internal(void) static int bes2600_chrdev_check_system_close_internal(void)
{ {
@@ -603,123 +264,10 @@ static int bes2600_chrdev_check_system_close_internal(void) @@ -644,123 +264,10 @@ static int bes2600_chrdev_check_system_close_internal(void)
&& (bes2600_cdev.wifi_opened == false); && (bes2600_cdev.wifi_opened == false);
} }
@@ -569,7 +633,23 @@ index 9038e48..e2e4f1b 100644
#ifdef BES2600_WRITE_DPD_TO_FILE #ifdef BES2600_WRITE_DPD_TO_FILE
static int bes2600_chrdev_write_dpd_data_to_file(const char *path, void *buffer, int size) static int bes2600_chrdev_write_dpd_data_to_file(const char *path, void *buffer, int size)
@@ -1124,12 +672,6 @@ void bes2600_chrdev_update_signal_mode(void) @@ -1126,7 +633,6 @@ void bes2600_chrdev_wakeup_bt(void)
bes_err("Wakeup BT fail in resume\n");
}
}
-EXPORT_SYMBOL_GPL(bes2600_chrdev_wakeup_bt);
int bes2600_chrdev_get_fw_type(void)
{
@@ -1148,7 +654,6 @@ bool bes2600_chrdev_is_bus_error(void)
return error;
}
-EXPORT_SYMBOL_GPL(bes2600_chrdev_is_bus_error);
void bes2600_chrdev_update_signal_mode(void)
{
@@ -1167,12 +672,6 @@ void bes2600_chrdev_update_signal_mode(void)
static void bes2600_chrdev_wifi_force_close_work(struct work_struct *work) static void bes2600_chrdev_wifi_force_close_work(struct work_struct *work)
{ {
@@ -582,7 +662,7 @@ index 9038e48..e2e4f1b 100644
if (bes2600_chrdev_is_wifi_opened()) { if (bes2600_chrdev_is_wifi_opened()) {
bes_devel("system exeception, force wifi down\n"); bes_devel("system exeception, force wifi down\n");
@@ -1146,14 +688,6 @@ static void bes2600_chrdev_wifi_force_close_work(struct work_struct *work) @@ -1189,14 +688,6 @@ static void bes2600_chrdev_wifi_force_close_work(struct work_struct *work)
bes2600_chrdev_do_system_close(bes2600_cdev.sbus_ops, bes2600_chrdev_do_system_close(bes2600_cdev.sbus_ops,
bes2600_cdev.sbus_priv); bes2600_cdev.sbus_priv);
} }
@@ -597,7 +677,7 @@ index 9038e48..e2e4f1b 100644
} }
} }
@@ -1247,46 +781,6 @@ int bes2600_chrdev_wakeup_by_event_get(void) @@ -1290,46 +781,6 @@ int bes2600_chrdev_wakeup_by_event_get(void)
int bes2600_chrdev_init(struct sbus_ops *ops) int bes2600_chrdev_init(struct sbus_ops *ops)
{ {
@@ -644,7 +724,7 @@ index 9038e48..e2e4f1b 100644
/* initialise global variable */ /* initialise global variable */
atomic_set(&bes2600_cdev.num_proc, 0); atomic_set(&bes2600_cdev.num_proc, 0);
init_waitqueue_head(&bes2600_cdev.open_wq); init_waitqueue_head(&bes2600_cdev.open_wq);
@@ -1318,15 +812,6 @@ int bes2600_chrdev_init(struct sbus_ops *ops) @@ -1361,15 +812,6 @@ int bes2600_chrdev_init(struct sbus_ops *ops)
bes_devel("%s done\n", __func__); bes_devel("%s done\n", __func__);
return 0; return 0;
@@ -660,7 +740,7 @@ index 9038e48..e2e4f1b 100644
} }
void bes2600_chrdev_free(void) void bes2600_chrdev_free(void)
@@ -1336,9 +821,5 @@ void bes2600_chrdev_free(void) @@ -1379,9 +821,5 @@ void bes2600_chrdev_free(void)
bes2600_free_dpd_log_buffer(); bes2600_free_dpd_log_buffer();
#endif #endif
bes2600_chrdev_free_dpd_data(); bes2600_chrdev_free_dpd_data();
@@ -1,4 +1,4 @@
From 0ec58c0ad539e1e8d347b5527ce66cf847782338 Mon Sep 17 00:00:00 2001 From a70e882f3d5f4f9148206675562dddeecd3f4404 Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com> From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Fri, 8 May 2026 06:40:00 +0200 Date: Fri, 8 May 2026 06:40:00 +0200
Subject: [PATCH 29/29] =?UTF-8?q?bes2600:=20Patch=20C2=20=E2=80=94=20repla?= Subject: [PATCH 29/29] =?UTF-8?q?bes2600:=20Patch=20C2=20=E2=80=94=20repla?=
@@ -58,17 +58,18 @@ deltas would still be a net win for upstream-cleanliness — the
kernel.org submission story benefits from not using _irqsafe from kernel.org submission story benefits from not using _irqsafe from
process context. process context.
--- ---
bes2600/ap.c | 15 +++++++++++++-- bes2600/ap.c | 15 +++++++++++++--
bes2600/sta.c | 2 +- bes2600/bes_chardev.c | 33 ++++++++++++++++++++++++++++++++-
bes2600/txrx.c | 6 +++--- bes2600/sta.c | 2 +-
bes2600/wsm.c | 2 +- bes2600/txrx.c | 6 +++---
4 files changed, 18 insertions(+), 7 deletions(-) bes2600/wsm.c | 2 +-
5 files changed, 50 insertions(+), 8 deletions(-)
diff --git a/drivers/staging/bes2600/ap.c b/drivers/staging/bes2600/ap.c diff --git a/drivers/staging/bes2600/ap.c b/drivers/staging/bes2600/ap.c
index 0a23790..6d4428c 100644 index 8a17545..99e2da2 100644
--- a/drivers/staging/bes2600/ap.c --- a/drivers/staging/bes2600/ap.c
+++ b/drivers/staging/bes2600/ap.c +++ b/drivers/staging/bes2600/ap.c
@@ -62,8 +62,11 @@ int bes2600_sta_add(struct ieee80211_hw *hw, struct ieee80211_vif *vif, @@ -63,8 +63,11 @@ int bes2600_sta_add(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
struct bes2600_vif *priv = cw12xx_get_vif_from_ieee80211(vif); struct bes2600_vif *priv = cw12xx_get_vif_from_ieee80211(vif);
struct bes2600_link_entry *entry; struct bes2600_link_entry *entry;
struct sk_buff *skb; struct sk_buff *skb;
@@ -80,7 +81,7 @@ index 0a23790..6d4428c 100644
#ifdef P2P_MULTIVIF #ifdef P2P_MULTIVIF
WARN_ON(priv->if_id == CW12XX_GENERIC_IF_ID); WARN_ON(priv->if_id == CW12XX_GENERIC_IF_ID);
#endif #endif
@@ -92,9 +95,17 @@ int bes2600_sta_add(struct ieee80211_hw *hw, struct ieee80211_vif *vif, @@ -93,9 +96,17 @@ int bes2600_sta_add(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
IEEE80211_WMM_IE_STA_QOSINFO_AC_MASK) IEEE80211_WMM_IE_STA_QOSINFO_AC_MASK)
priv->sta_asleep_mask |= BIT(sta_priv->link_id); priv->sta_asleep_mask |= BIT(sta_priv->link_id);
entry->status = BES2600_LINK_HARD; entry->status = BES2600_LINK_HARD;
@@ -100,11 +101,69 @@ index 0a23790..6d4428c 100644
#ifdef AP_AGGREGATE_FW_FIX #ifdef AP_AGGREGATE_FW_FIX
hw_priv->connected_sta_cnt++; hw_priv->connected_sta_cnt++;
if(hw_priv->connected_sta_cnt>1) { if(hw_priv->connected_sta_cnt>1) {
diff --git a/drivers/staging/bes2600/bes_chardev.c b/drivers/staging/bes2600/bes_chardev.c
index 02dcd43..844f1d0 100644
--- a/drivers/staging/bes2600/bes_chardev.c
+++ b/drivers/staging/bes2600/bes_chardev.c
@@ -181,7 +181,7 @@ static int bes2600_switch_wifi(bool on)
return ret;
}
-int bes2600_switch_bt(bool on)
+static int bes2600_switch_bt(bool on)
{
int ret = 0;
long status = 0;
@@ -234,6 +234,36 @@ int bes2600_switch_bt(bool on)
return ret;
}
+/*
+ * Re-added for danctnix's bes2600_btuart.c (a danctnix-only file) which
+ * relies on the chardev utility API for BT power switching and bus-error
+ * checks. The userspace /dev/bes2600 chardev itself is removed by the
+ * remove-chardev-user-interface series; these in-kernel helpers stay.
+ *
+ * @wifi: 1 to turn on, 0 to turn off. Otherwise, leave unchanged
+ * @bt: 1 to turn on, 0 to turn off. Otherwise, leave unchanged
+ */
+int bes2600_chrdev_switch_subsys_glb(int wifi, int bt)
+{
+ int ret = 0;
+
+ switch (wifi) {
+ case 0: ret = bes2600_switch_wifi(false); break;
+ case 1: ret = bes2600_switch_wifi(true); break;
+ default: break;
+ }
+ if (ret)
+ return ret;
+
+ switch (bt) {
+ case 0: ret = bes2600_switch_bt(false); break;
+ case 1: ret = bes2600_switch_bt(true); break;
+ default: break;
+ }
+ return ret;
+}
+EXPORT_SYMBOL_GPL(bes2600_chrdev_switch_subsys_glb);
+
@@ -562,6 +592,7 @@ bool bes2600_chrdev_is_bus_error(void)
return error;
}
+EXPORT_SYMBOL_GPL(bes2600_chrdev_is_bus_error);
void bes2600_chrdev_update_signal_mode(void)
{
diff --git a/drivers/staging/bes2600/sta.c b/drivers/staging/bes2600/sta.c diff --git a/drivers/staging/bes2600/sta.c b/drivers/staging/bes2600/sta.c
index 7caeb4b..e64841a 100644 index 8af8150..2b63ff2 100644
--- a/drivers/staging/bes2600/sta.c --- a/drivers/staging/bes2600/sta.c
+++ b/drivers/staging/bes2600/sta.c +++ b/drivers/staging/bes2600/sta.c
@@ -1484,7 +1484,7 @@ void bes2600_event_handler(struct work_struct *work) @@ -1500,7 +1500,7 @@ void bes2600_event_handler(struct work_struct *work)
IEEE80211_STYPE_DEAUTH | IEEE80211_FCTL_TODS); IEEE80211_STYPE_DEAUTH | IEEE80211_FCTL_TODS);
deauth->u.deauth.reason_code = WLAN_REASON_DEAUTH_LEAVING; deauth->u.deauth.reason_code = WLAN_REASON_DEAUTH_LEAVING;
deauth->seq_ctrl = 0; deauth->seq_ctrl = 0;
@@ -114,10 +173,10 @@ index 7caeb4b..e64841a 100644
queue_work(priv->hw_priv->workqueue, &priv->set_tim_work); queue_work(priv->hw_priv->workqueue, &priv->set_tim_work);
break; break;
diff --git a/drivers/staging/bes2600/txrx.c b/drivers/staging/bes2600/txrx.c diff --git a/drivers/staging/bes2600/txrx.c b/drivers/staging/bes2600/txrx.c
index bf17777..de521a3 100644 index cb718ad..9074972 100644
--- a/drivers/staging/bes2600/txrx.c --- a/drivers/staging/bes2600/txrx.c
+++ b/drivers/staging/bes2600/txrx.c +++ b/drivers/staging/bes2600/txrx.c
@@ -1957,18 +1957,18 @@ void bes2600_rx_cb(struct bes2600_vif *priv, @@ -1980,18 +1980,18 @@ void bes2600_rx_cb(struct bes2600_vif *priv,
* path is taken. * path is taken.
*/ */
if (hw_priv->bes_power.pm_unsupported) { if (hw_priv->bes_power.pm_unsupported) {
@@ -1,4 +1,4 @@
From 8fc1bacdeda64feb751433ee827dc9647e23bee4 Mon Sep 17 00:00:00 2001 From 179c2e0bf852734631acfc56b2478775215cc5f6 Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com> From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Tue, 28 Apr 2026 14:32:18 +0200 Date: Tue, 28 Apr 2026 14:32:18 +0200
Subject: [PATCH 14/29] bes2600: widen scan-defer backoff to 30s and decay Subject: [PATCH 14/29] bes2600: widen scan-defer backoff to 30s and decay
@@ -61,7 +61,7 @@ Signed-off-by: Markus Fritsche <fritsche.markus@gmail.com>
1 file changed, 15 insertions(+), 2 deletions(-) 1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/drivers/staging/bes2600/scan.c b/drivers/staging/bes2600/scan.c diff --git a/drivers/staging/bes2600/scan.c b/drivers/staging/bes2600/scan.c
index faa1c90..ad5033b 100644 index 5f6af3b..b944adc 100644
--- a/drivers/staging/bes2600/scan.c --- a/drivers/staging/bes2600/scan.c
+++ b/drivers/staging/bes2600/scan.c +++ b/drivers/staging/bes2600/scan.c
@@ -22,9 +22,17 @@ @@ -22,9 +22,17 @@
@@ -1,4 +1,4 @@
From aff632ea648092aabee6b735819152d4a09ec95e Mon Sep 17 00:00:00 2001 From 844e2245a1ed517b3a0bc487fec1a100304f0b44 Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com> From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Fri, 24 Apr 2026 21:31:45 +0200 Date: Fri, 24 Apr 2026 21:31:45 +0200
Subject: [PATCH 13/29] bes2600: defer scan and soften WARN on firmware reject Subject: [PATCH 13/29] bes2600: defer scan and soften WARN on firmware reject
@@ -88,7 +88,7 @@ Signed-off-by: Markus Fritsche <fritsche.markus@gmail.com>
3 files changed, 83 insertions(+), 2 deletions(-) 3 files changed, 83 insertions(+), 2 deletions(-)
diff --git a/drivers/staging/bes2600/scan.c b/drivers/staging/bes2600/scan.c diff --git a/drivers/staging/bes2600/scan.c b/drivers/staging/bes2600/scan.c
index b2c22e7..faa1c90 100644 index 3bfa535..5f6af3b 100644
--- a/drivers/staging/bes2600/scan.c --- a/drivers/staging/bes2600/scan.c
+++ b/drivers/staging/bes2600/scan.c +++ b/drivers/staging/bes2600/scan.c
@@ -14,11 +14,50 @@ @@ -14,11 +14,50 @@
@@ -142,7 +142,7 @@ index b2c22e7..faa1c90 100644
#ifdef CONFIG_BES2600_TESTMODE #ifdef CONFIG_BES2600_TESTMODE
static int bes2600_advance_scan_start(struct bes2600_common *hw_priv) static int bes2600_advance_scan_start(struct bes2600_common *hw_priv)
{ {
@@ -702,10 +741,29 @@ void bes2600_scan_work(struct work_struct *work) @@ -703,10 +742,29 @@ void bes2600_scan_work(struct work_struct *work)
wsm_unlock_tx(hw_priv); wsm_unlock_tx(hw_priv);
} else } else
#endif #endif
@@ -1,4 +1,4 @@
From 1e9eb4581f113aa6cca2d0de325f9b61b80ebbee Mon Sep 17 00:00:00 2001 From 0f185172b020818faec9572fd800867db623a40e Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com> From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Thu, 7 May 2026 22:34:11 +0200 Date: Thu, 7 May 2026 22:34:11 +0200
Subject: [PATCH 25/29] =?UTF-8?q?bes2600:=20drop=20sdio=5Frx=5Fwork=20rela?= Subject: [PATCH 25/29] =?UTF-8?q?bes2600:=20drop=20sdio=5Frx=5Fwork=20rela?=
@@ -76,7 +76,7 @@ invalidated rep 2's throughput number).
4 files changed, 226 insertions(+), 64 deletions(-) 4 files changed, 226 insertions(+), 64 deletions(-)
diff --git a/drivers/staging/bes2600/bes2600_sdio.c b/drivers/staging/bes2600/bes2600_sdio.c diff --git a/drivers/staging/bes2600/bes2600_sdio.c b/drivers/staging/bes2600/bes2600_sdio.c
index b998381..b6b4e4e 100644 index c81c244..3834032 100644
--- a/drivers/staging/bes2600/bes2600_sdio.c --- a/drivers/staging/bes2600/bes2600_sdio.c
+++ b/drivers/staging/bes2600/bes2600_sdio.c +++ b/drivers/staging/bes2600/bes2600_sdio.c
@@ -29,6 +29,7 @@ @@ -29,6 +29,7 @@
@@ -334,7 +334,7 @@ index b998381..b6b4e4e 100644
new_ts = self->last_irq_timestamp; new_ts = self->last_irq_timestamp;
} while(old_ts != new_ts); } while(old_ts != new_ts);
} }
@@ -2244,8 +2264,12 @@ static int bes2600_sdio_suspend_noirq(struct device *dev) @@ -2243,8 +2263,12 @@ static int bes2600_sdio_suspend_noirq(struct device *dev)
if (func->num > 1) if (func->num > 1)
return 0; return 0;
@@ -350,10 +350,10 @@ index b998381..b6b4e4e 100644
return -EAGAIN; return -EAGAIN;
} }
diff --git a/drivers/staging/bes2600/bh.c b/drivers/staging/bes2600/bh.c diff --git a/drivers/staging/bes2600/bh.c b/drivers/staging/bes2600/bh.c
index 1d2773c..d5a8c77 100644 index fab3bf0..febcaf4 100644
--- a/drivers/staging/bes2600/bh.c --- a/drivers/staging/bes2600/bh.c
+++ b/drivers/staging/bes2600/bh.c +++ b/drivers/staging/bes2600/bh.c
@@ -958,6 +958,119 @@ static void bes2600_bh_parse_wakeup_event(struct bes2600_common *hw_priv, struct @@ -959,6 +959,119 @@ static void bes2600_bh_parse_wakeup_event(struct bes2600_common *hw_priv, struct
} }
} }
@@ -473,7 +473,7 @@ index 1d2773c..d5a8c77 100644
static int bes2600_bh_rx_helper(struct bes2600_common *priv, int *tx) static int bes2600_bh_rx_helper(struct bes2600_common *priv, int *tx)
{ {
struct sk_buff *skb = NULL; struct sk_buff *skb = NULL;
@@ -969,10 +1082,18 @@ static int bes2600_bh_rx_helper(struct bes2600_common *priv, int *tx) @@ -970,10 +1083,18 @@ static int bes2600_bh_rx_helper(struct bes2600_common *priv, int *tx)
u32 confirm_label = 0x0; /* wsm to mcu cmd cnfirm label */ u32 confirm_label = 0x0; /* wsm to mcu cmd cnfirm label */
#if defined(BES_SDIO_RX_MULTIPLE_ENABLE) #if defined(BES_SDIO_RX_MULTIPLE_ENABLE)
@@ -1,4 +1,4 @@
From 315986ea27e7508275e71a070461d243ce1a1058 Mon Sep 17 00:00:00 2001 From 2f9b4c719faf9563895c064439a7da25f35c8fc7 Mon Sep 17 00:00:00 2001
From: Markus Fritsche <fritsche.markus@gmail.com> From: Markus Fritsche <fritsche.markus@gmail.com>
Date: Thu, 23 Apr 2026 11:58:31 +0200 Date: Thu, 23 Apr 2026 11:58:31 +0200
Subject: [PATCH 07/29] bes2600: bounce SDIO TX buffers to avoid DMA OOB read Subject: [PATCH 07/29] bes2600: bounce SDIO TX buffers to avoid DMA OOB read
@@ -48,7 +48,7 @@ Signed-off-by: Markus Fritsche <fritsche.markus@gmail.com>
1 file changed, 38 insertions(+), 1 deletion(-) 1 file changed, 38 insertions(+), 1 deletion(-)
diff --git a/drivers/staging/bes2600/bes2600_sdio.c b/drivers/staging/bes2600/bes2600_sdio.c diff --git a/drivers/staging/bes2600/bes2600_sdio.c b/drivers/staging/bes2600/bes2600_sdio.c
index 371ef4f..3e04e8c 100644 index f172d53..b9d836f 100644
--- a/drivers/staging/bes2600/bes2600_sdio.c --- a/drivers/staging/bes2600/bes2600_sdio.c
+++ b/drivers/staging/bes2600/bes2600_sdio.c +++ b/drivers/staging/bes2600/bes2600_sdio.c
@@ -95,6 +95,7 @@ struct sbus_priv { @@ -95,6 +95,7 @@ struct sbus_priv {
@@ -105,7 +105,7 @@ index 371ef4f..3e04e8c 100644
#ifdef BES_SDIO_RXTX_TOGGLE #ifdef BES_SDIO_RXTX_TOGGLE
self->fw_started = false; self->fw_started = false;
#endif #endif
@@ -1985,6 +2016,12 @@ static void bes2600_sdio_remove(struct sdio_func *func) @@ -1984,6 +2015,12 @@ static void bes2600_sdio_remove(struct sdio_func *func)
if (self->single_gathered_buffer) { if (self->single_gathered_buffer) {
free_pages((unsigned long)self->single_gathered_buffer, get_order(MAX_SDIO_TRANSFER_LEN)); free_pages((unsigned long)self->single_gathered_buffer, get_order(MAX_SDIO_TRANSFER_LEN));
} }