]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
wifi: rtl8xxxu: declare concurrent mode support for 8188f
authorMartin Kaistra <martin.kaistra@linutronix.de>
Fri, 22 Dec 2023 10:14:42 +0000 (11:14 +0100)
committerKalle Valo <kvalo@kernel.org>
Wed, 10 Jan 2024 14:52:58 +0000 (16:52 +0200)
Everything is in place now for concurrent mode, we can tell the system
that we support it.
We will allow a maximum of 2 virtual interfaces, one of them can be in
AP mode.

Signed-off-by: Martin Kaistra <martin.kaistra@linutronix.de>
Reviewed-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://msgid.link/20231222101442.626837-22-martin.kaistra@linutronix.de
drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8188f.c
drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c

index 62e6318bc092462e9e6ed145a21806d77cb1c122..803c76b3209c4802e962302653c1f51fc0c457c5 100644 (file)
@@ -1992,6 +1992,7 @@ struct rtl8xxxu_fileops {
        u8 init_reg_rxfltmap:1;
        u8 init_reg_pkt_life_time:1;
        u8 init_reg_hmtfr:1;
+       u8 supports_concurrent:1;
        u8 ampdu_max_time;
        u8 ustime_tsf_edca;
        u16 max_aggr_num;
index 574a5fe95154325731aeb8b92e94e6bfdcabd215..464216d007ce8257ea23f2701467931d6ca2790c 100644 (file)
@@ -1752,6 +1752,7 @@ struct rtl8xxxu_fileops rtl8188fu_fops = {
        .supports_ap = 1,
        .max_macid_num = 16,
        .max_sec_cam_num = 16,
+       .supports_concurrent = 1,
        .adda_1t_init = 0x03c00014,
        .adda_1t_path_on = 0x03c00014,
        .trxff_boundary = 0x3f7f,
index 911155843655871f9a8105eec07c24ad7cceecbf..921d25e152cf6e63757ffce39db9c30c3b69f7a3 100644 (file)
@@ -7665,6 +7665,20 @@ static void rtl8xxxu_deinit_led(struct rtl8xxxu_priv *priv)
        led_classdev_unregister(led);
 }
 
+struct ieee80211_iface_limit rtl8xxxu_limits[] = {
+       { .max = 2, .types = BIT(NL80211_IFTYPE_STATION), },
+       { .max = 1, .types = BIT(NL80211_IFTYPE_AP), },
+};
+
+struct ieee80211_iface_combination rtl8xxxu_combinations[] = {
+       {
+               .limits = rtl8xxxu_limits,
+               .n_limits = ARRAY_SIZE(rtl8xxxu_limits),
+               .max_interfaces = 2,
+               .num_different_channels = 1,
+       },
+};
+
 static int rtl8xxxu_probe(struct usb_interface *interface,
                          const struct usb_device_id *id)
 {
@@ -7811,6 +7825,11 @@ static int rtl8xxxu_probe(struct usb_interface *interface,
                hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_AP);
        hw->queues = 4;
 
+       if (priv->fops->supports_concurrent) {
+               hw->wiphy->iface_combinations = rtl8xxxu_combinations;
+               hw->wiphy->n_iface_combinations = ARRAY_SIZE(rtl8xxxu_combinations);
+       }
+
        sband = &rtl8xxxu_supported_band;
        sband->ht_cap.ht_supported = true;
        sband->ht_cap.ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;