Commit b54846da authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge tag 'wireless-next-2024-01-25' of...

Merge tag 'wireless-next-2024-01-25' of git://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next

Kalle Valo says:

====================
wireless-next patches for v6.9

The first "new features" pull request for v6.9. We have only driver
changes this time and most of them are for Realtek drivers. Really
nice to see activity in Broadcom drivers again.

Major changes:

rtwl8xxxu
 * RTL8188F: concurrent interface support
 * Channel Switch Announcement (CSA) support in AP mode

brcmfmac
 * per-vendor feature support
 * per-vendor SAE password setup

rtlwifi
 * speed up USB firmware initialisation

* tag 'wireless-next-2024-01-25' of git://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next: (105 commits)
  wifi: iwlegacy: Use kcalloc() instead of kzalloc()
  wifi: rtw89: fix disabling concurrent mode TX hang issue
  wifi: rtw89: fix HW scan timeout due to TSF sync issue
  wifi: rtw89: add wait/completion for abort scan
  wifi: rtw89: fix null pointer access when abort scan
  wifi: rtw89: disable RTS when broadcast/multicast
  wifi: rtw89: Set default CQM config if not present
  wifi: rtw89: refine hardware scan C2H events
  wifi: rtw89: refine add_chan H2C command to encode_bits
  wifi: rtw89: 8922a: add BTG functions to assist BT coexistence to control TX/RX
  wifi: rtw89: 8922a: add TX power related ops
  wifi: rtw89: 8922a: add register definitions of H2C, C2H, page, RRSR and EDCCA
  wifi: rtw89: 8922a: add chip_ops related to BB init
  wifi: rtw89: 8922a: add chip_ops::{enable,disable}_bb_rf
  wifi: rtw89: add mlo_dbcc_mode for WiFi 7 chips
  wifi: rtlwifi: Speed up firmware loading for USB
  wifi: rtl8xxxu: add missing number of sec cam entries for all variants
  wifi: brcmfmac: allow per-vendor event handling
  wifi: brcmfmac: avoid invalid list operation when vendor attach fails
  wifi: brcmfmac: Demote vendor-specific attach/detach messages to info
  ...
====================

Link: https://lore.kernel.org/r/20240125104030.B6CA6C433C7@smtp.kernel.org


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 767ec326 acf868ff
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -1082,6 +1082,22 @@ static inline bool b43_using_pio_transfers(struct b43_wldev *dev)
	return dev->__using_pio_transfers;
}

static inline void b43_wake_queue(struct b43_wldev *dev, int queue_prio)
{
	if (dev->qos_enabled)
		ieee80211_wake_queue(dev->wl->hw, queue_prio);
	else
		ieee80211_wake_queue(dev->wl->hw, 0);
}

static inline void b43_stop_queue(struct b43_wldev *dev, int queue_prio)
{
	if (dev->qos_enabled)
		ieee80211_stop_queue(dev->wl->hw, queue_prio);
	else
		ieee80211_stop_queue(dev->wl->hw, 0);
}

/* Message printing */
__printf(2, 3) void b43info(struct b43_wl *wl, const char *fmt, ...);
__printf(2, 3) void b43err(struct b43_wl *wl, const char *fmt, ...);
+2 −2
Original line number Diff line number Diff line
@@ -1399,7 +1399,7 @@ int b43_dma_tx(struct b43_wldev *dev, struct sk_buff *skb)
	    should_inject_overflow(ring)) {
		/* This TX ring is full. */
		unsigned int skb_mapping = skb_get_queue_mapping(skb);
		ieee80211_stop_queue(dev->wl->hw, skb_mapping);
		b43_stop_queue(dev, skb_mapping);
		dev->wl->tx_queue_stopped[skb_mapping] = true;
		ring->stopped = true;
		if (b43_debug(dev, B43_DBG_DMAVERBOSE)) {
@@ -1570,7 +1570,7 @@ void b43_dma_handle_txstatus(struct b43_wldev *dev,
	} else {
		/* If the driver queue is running wake the corresponding
		 * mac80211 queue. */
		ieee80211_wake_queue(dev->wl->hw, ring->queue_prio);
		b43_wake_queue(dev, ring->queue_prio);
		if (b43_debug(dev, B43_DBG_DMAVERBOSE)) {
			b43dbg(dev->wl, "Woke up TX ring %d\n", ring->index);
		}
+9 −7
Original line number Diff line number Diff line
@@ -2587,7 +2587,8 @@ static void b43_request_firmware(struct work_struct *work)

start_ieee80211:
	wl->hw->queues = B43_QOS_QUEUE_NUM;
	if (!modparam_qos || dev->fw.opensource)
	if (!modparam_qos || dev->fw.opensource ||
	    dev->dev->chip_id == BCMA_CHIP_ID_BCM4331)
		wl->hw->queues = 1;

	err = ieee80211_register_hw(wl->hw);
@@ -3603,7 +3604,7 @@ static void b43_tx_work(struct work_struct *work)
				err = b43_dma_tx(dev, skb);
			if (err == -ENOSPC) {
				wl->tx_queue_stopped[queue_num] = true;
				ieee80211_stop_queue(wl->hw, queue_num);
				b43_stop_queue(dev, queue_num);
				skb_queue_head(&wl->tx_queue[queue_num], skb);
				break;
			}
@@ -3627,6 +3628,7 @@ static void b43_op_tx(struct ieee80211_hw *hw,
		      struct sk_buff *skb)
{
	struct b43_wl *wl = hw_to_b43_wl(hw);
	u16 skb_queue_mapping;

	if (unlikely(skb->len < 2 + 2 + 6)) {
		/* Too short, this can't be a valid frame. */
@@ -3635,12 +3637,12 @@ static void b43_op_tx(struct ieee80211_hw *hw,
	}
	B43_WARN_ON(skb_shinfo(skb)->nr_frags);

	skb_queue_tail(&wl->tx_queue[skb->queue_mapping], skb);
	if (!wl->tx_queue_stopped[skb->queue_mapping]) {
	skb_queue_mapping = skb_get_queue_mapping(skb);
	skb_queue_tail(&wl->tx_queue[skb_queue_mapping], skb);
	if (!wl->tx_queue_stopped[skb_queue_mapping])
		ieee80211_queue_work(wl->hw, &wl->tx_work);
	} else {
		ieee80211_stop_queue(wl->hw, skb->queue_mapping);
	}
	else
		b43_stop_queue(wl->current_dev, skb_queue_mapping);
}

static void b43_qos_params_upload(struct b43_wldev *dev,
+3 −3
Original line number Diff line number Diff line
@@ -525,7 +525,7 @@ int b43_pio_tx(struct b43_wldev *dev, struct sk_buff *skb)
	if (total_len > (q->buffer_size - q->buffer_used)) {
		/* Not enough memory on the queue. */
		err = -EBUSY;
		ieee80211_stop_queue(dev->wl->hw, skb_get_queue_mapping(skb));
		b43_stop_queue(dev, skb_get_queue_mapping(skb));
		q->stopped = true;
		goto out;
	}
@@ -552,7 +552,7 @@ int b43_pio_tx(struct b43_wldev *dev, struct sk_buff *skb)
	if (((q->buffer_size - q->buffer_used) < roundup(2 + 2 + 6, 4)) ||
	    (q->free_packet_slots == 0)) {
		/* The queue is full. */
		ieee80211_stop_queue(dev->wl->hw, skb_get_queue_mapping(skb));
		b43_stop_queue(dev, skb_get_queue_mapping(skb));
		q->stopped = true;
	}

@@ -587,7 +587,7 @@ void b43_pio_handle_txstatus(struct b43_wldev *dev,
	list_add(&pack->list, &q->packets_list);

	if (q->stopped) {
		ieee80211_wake_queue(dev->wl->hw, q->queue_prio);
		b43_wake_queue(dev, q->queue_prio);
		q->stopped = false;
	}
}
+19 −7
Original line number Diff line number Diff line
@@ -7,21 +7,33 @@
#include <core.h>
#include <bus.h>
#include <fwvid.h>
#include <feature.h>

#include "vops.h"

static int brcmf_bca_attach(struct brcmf_pub *drvr)
#define BRCMF_BCA_E_LAST		212

static void brcmf_bca_feat_attach(struct brcmf_if *ifp)
{
	pr_err("%s: executing\n", __func__);
	return 0;
	/* SAE support not confirmed so disabling for now */
	ifp->drvr->feat_flags &= ~BIT(BRCMF_FEAT_SAE);
}

static void brcmf_bca_detach(struct brcmf_pub *drvr)
static int brcmf_bca_alloc_fweh_info(struct brcmf_pub *drvr)
{
	pr_err("%s: executing\n", __func__);
	struct brcmf_fweh_info *fweh;

	fweh = kzalloc(struct_size(fweh, evt_handler, BRCMF_BCA_E_LAST),
		       GFP_KERNEL);
	if (!fweh)
		return -ENOMEM;

	fweh->num_event_codes = BRCMF_BCA_E_LAST;
	drvr->fweh = fweh;
	return 0;
}

const struct brcmf_fwvid_ops brcmf_bca_ops = {
	.attach = brcmf_bca_attach,
	.detach = brcmf_bca_detach,
	.feat_attach = brcmf_bca_feat_attach,
	.alloc_fweh_info = brcmf_bca_alloc_fweh_info,
};
Loading