From bedbef8ad3e75a304af6361af235302bcc61d06b Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Tue, 14 May 2024 06:39:01 +0000 Subject: [PATCH] 修改内核路径 --- kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_cfgvif.c | 226 ++++++++++++++++++-------------------------------------- 1 files changed, 74 insertions(+), 152 deletions(-) diff --git a/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_cfgvif.c b/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_cfgvif.c old mode 100644 new mode 100755 index 4980e82..e3b6001 --- a/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_cfgvif.c +++ b/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_cfgvif.c @@ -519,7 +519,7 @@ * role to station type while bringing down the interface */ if (p2p_ndev->ieee80211_ptr->iftype == NL80211_IFTYPE_STATION) { - WL_DBG_MEM(("%s, Change to GC base role\n", p2p_ndev->name)); + WL_DBG_MEM(("%s, Change to GC base role\n", __FUNCTION__)); return WL_IF_TYPE_P2P_GC; } @@ -888,7 +888,6 @@ WL_DBG(("%s:Mac addr" MACDBG "\n", __FUNCTION__, MAC2STRDBG(mac_addr))); -#if defined(SPECIFIC_MAC_GEN_SCHEME) if ((wl_iftype == WL_IF_TYPE_P2P_DISC) || (wl_iftype == WL_IF_TYPE_AP) || (wl_iftype == WL_IF_TYPE_P2P_GO) || (wl_iftype == WL_IF_TYPE_P2P_GC)) { /* Avoid invoking release mac addr code for interfaces using @@ -896,11 +895,6 @@ */ return BCME_OK; } -#else - if (wl_iftype == WL_IF_TYPE_P2P_DISC) { - return BCME_OK; - } -#endif /* SPECIFIC_MAC_GEN_SCHEME */ /* Fetch last two bytes of mac address */ org_toggle_bytes = ntoh16(*((u16 *)&ndev->dev_addr[4])); @@ -957,7 +951,7 @@ * released. Ensure to call wl_release_vif_macaddress to free up * the mac address. */ -#if defined(SPECIFIC_MAC_GEN_SCHEME) +#if defined (SPECIFIC_MAC_GEN_SCHEME) if (wl_iftype == WL_IF_TYPE_P2P_DISC || wl_iftype == WL_IF_TYPE_AP) { mac_addr[0] |= 0x02; } else if ((wl_iftype == WL_IF_TYPE_P2P_GO) || (wl_iftype == WL_IF_TYPE_P2P_GC)) { @@ -968,7 +962,7 @@ if (wl_iftype == WL_IF_TYPE_P2P_DISC) { mac_addr[0] |= 0x02; } -#endif /* SPECIFIC_MAC_GEN_SCHEME */ +#endif /* SEPCIFIC_MAC_GEN_SCHEME */ else { /* For locally administered mac addresses, we keep the * OUI part constant and just work on the last two bytes. @@ -1337,9 +1331,9 @@ if (is_p2p_group_iface(ndev->ieee80211_ptr) && (type == NL80211_IFTYPE_STATION)) { /* For role downgrade cases, we keep interface role as GC */ netinfo->iftype = WL_IF_TYPE_P2P_GC; - WL_DBG_MEM(("[%s] Set base role to GC, current role" + WL_DBG_MEM(("[%s] Set base role to GC, current role" "ndev->ieee80211_ptr->iftype = %d\n", - ndev->name, ndev->ieee80211_ptr->iftype)); + __FUNCTION__, ndev->ieee80211_ptr->iftype)); } else { netinfo->iftype = wl_iftype; } @@ -1544,16 +1538,11 @@ s32 wl_cfg80211_set_channel(struct wiphy *wiphy, struct net_device *dev, struct ieee80211_channel *chan, -#if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 6, 0)) - enum nl80211_channel_type channel_type -#else - enum nl80211_chan_width width -#endif -) + enum nl80211_channel_type channel_type) { chanspec_t chspec = INVCHANSPEC; chanspec_t cur_chspec = INVCHANSPEC; - u32 band_width = WL_CHANSPEC_BW_20, bw = WL_CHANSPEC_BW_20; + u32 bw = WL_CHANSPEC_BW_20; s32 err = BCME_OK; struct bcm_cfg80211 *cfg = wiphy_priv(wiphy); #if defined(CUSTOM_SET_CPUCORE) || defined(APSTA_RESTRICTED_CHANNEL) @@ -1562,39 +1551,6 @@ u16 center_freq = chan->center_freq; dev = ndev_to_wlc_ndev(dev, cfg); - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 6, 0)) - switch (channel_type) { - case NL80211_CHAN_HT40MINUS: - /* secondary channel is below the control channel */ - band_width = WL_CHANSPEC_BW_40; - break; - case NL80211_CHAN_HT40PLUS: - /* secondary channel is above the control channel */ - band_width = WL_CHANSPEC_BW_40; - break; - default: - band_width = WL_CHANSPEC_BW_20; - } -#else - switch (width) - { - case NL80211_CHAN_WIDTH_160: - band_width = WL_CHANSPEC_BW_160; - break; - case NL80211_CHAN_WIDTH_80P80: - case NL80211_CHAN_WIDTH_80: - band_width = WL_CHANSPEC_BW_80; - break; - case NL80211_CHAN_WIDTH_40: - band_width = WL_CHANSPEC_BW_40; - break; - default: - band_width = WL_CHANSPEC_BW_20; - break; - } -#endif - #ifdef WL_EXT_IAPSTA if (dev->ieee80211_ptr->iftype == NL80211_IFTYPE_AP || dev->ieee80211_ptr->iftype == NL80211_IFTYPE_P2P_GO) { @@ -1615,9 +1571,8 @@ #endif chspec = wl_freq_to_chanspec(center_freq); - WL_MSG(dev->name, "netdev_ifidx(%d) chan_width(%d) target channel(%s-%d %sMHz)\n", - dev->ifindex, width, CHSPEC2BANDSTR(chspec), - CHSPEC_CHANNEL(chspec), WLCWIDTH2STR(band_width)); + WL_MSG(dev->name, "netdev_ifidx(%d), chan_type(%d) target channel(%s-%d) \n", + dev->ifindex, channel_type, CHSPEC2BANDSTR(chspec), CHSPEC_CHANNEL(chspec)); #ifdef WL_P2P_6G if (!(cfg->p2p_6g_enabled)) { @@ -1629,6 +1584,22 @@ #ifdef WL_P2P_6G } #endif /* WL_P2P_6G */ + +#ifdef NOT_YET + switch (channel_type) { + case NL80211_CHAN_HT40MINUS: + /* secondary channel is below the control channel */ + chspec = CH40MHZ_CHSPEC(CHSPEC_CHANNEL(chspec), WL_CHANSPEC_CTL_SB_UPPER); + break; + case NL80211_CHAN_HT40PLUS: + /* secondary channel is above the control channel */ + chspec = CH40MHZ_CHSPEC(CHSPEC_CHANNEL(chspec), WL_CHANSPEC_CTL_SB_LOWER); + break; + default: + chspec = CH20MHZ_CHSPEC(CHSPEC_CHANNEL(chspec)); + + } +#endif /* NOT_YET */ #if defined(APSTA_RESTRICTED_CHANNEL) /* Some customer platform used limited number of channels @@ -1671,18 +1642,7 @@ if (err < 0) { WL_ERR(("Failed to get bandwidth information, err=%d\n", err)); return err; - } else if (bw < band_width) { - WL_ERR(("capability force band_width=0x%X to be 0x%X\n", band_width, bw)); - band_width = bw; } -#ifdef HOSTAPD_BW_SUPPORT - WL_MSG(dev->name, "hostapd bw(%sMHz) <= chip bw(%sMHz)\n", - wf_chspec_to_bw_str(band_width), wf_chspec_to_bw_str(bw)); -#else - WL_MSG(dev->name, "hostapd bw(%sMHz) => chip bw(%sMHz)\n", - wf_chspec_to_bw_str(band_width), wf_chspec_to_bw_str(bw)); - band_width = bw; -#endif /* In case of 5G downgrade BW to 80MHz as 160MHz channels falls in DFS */ if (CHSPEC_IS5G(chspec) && (bw == WL_CHANSPEC_BW_160)) { @@ -1690,7 +1650,7 @@ } set_channel: cur_chspec = wf_create_chspec_from_primary(wf_chspec_primary20_chan(chspec), - band_width, CHSPEC_BAND(chspec)); + bw, CHSPEC_BAND(chspec)); #ifdef WL_6G_BAND if (cfg->acs_chspec && CHSPEC_IS6G(cfg->acs_chspec) && @@ -2809,7 +2769,7 @@ dhd_pub_t *dhd = (dhd_pub_t *)(cfg->pub); #endif /* WLEASYMESH */ - new_chip = dhd_conf_new_chip_check(cfg->pub); + new_chip = wl_new_chip_check(dev); if ((bssidx = wl_get_bssidx_by_wdev(cfg, dev->ieee80211_ptr)) < 0) { WL_ERR(("Find p2p index from wdev(%p) failed\n", dev->ieee80211_ptr)); @@ -3718,23 +3678,14 @@ * hardcoded values in 'wl_cfg80211_set_channel()'. */ #if ((LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0)) && !defined(WL_COMPAT_WIRELESS)) -#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 19, 2) || defined(CFG80211_BKPORT_MLO) - if (!dev->ieee80211_ptr->u.ap.preset_chandef.chan) -#else - if (!dev->ieee80211_ptr->preset_chandef.chan) -#endif - { + if (!dev->ieee80211_ptr->preset_chandef.chan) { WL_ERR(("chan is NULL\n")); err = -EINVAL; goto fail; } if ((err = wl_cfg80211_set_channel(wiphy, dev, -#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 19, 2) || defined(CFG80211_BKPORT_MLO) - dev->ieee80211_ptr->u.ap.preset_chandef.chan, -#else - dev->ieee80211_ptr->preset_chandef.chan, -#endif /* CFG80211_BKPORT_MLO */ - info->chandef.width) < 0)) { + dev->ieee80211_ptr->preset_chandef.chan, + NL80211_CHAN_HT20) < 0)) { WL_ERR(("Set channel failed \n")); goto fail; } @@ -3828,11 +3779,7 @@ if (err) { WL_ERR(("ADD/SET beacon failed\n")); wl_flush_fw_log_buffer(dev, FW_LOGSET_MASK_ALL); -#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 19, 2) || defined(CFG80211_BKPORT_MLO) - wl_cfg80211_stop_ap(wiphy, dev, 0); -#else wl_cfg80211_stop_ap(wiphy, dev); -#endif /* CFG80211_BKPORT_MLO */ if (dev_role == NL80211_IFTYPE_AP) { #ifdef WL_EXT_IAPSTA if (!wl_ext_iapsta_iftype_enabled(dev, WL_IF_TYPE_AP)) { @@ -3873,11 +3820,7 @@ s32 wl_cfg80211_stop_ap( struct wiphy *wiphy, - struct net_device *dev -#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 19, 2) || defined(CFG80211_BKPORT_MLO) - , unsigned int link_id -#endif /* CFG80211_BKPORT_MLO */ - ) + struct net_device *dev) { int err = 0; u32 dev_role = 0; @@ -4561,10 +4504,8 @@ (reason == WLC_E_REASON_INITIAL_ASSOC) && (wl_get_mode_by_netdev(cfg, ndev) == WL_MODE_AP)) { if (!wl_get_drv_status(cfg, AP_CREATED, ndev)) { - char chan_str[64]; /* AP/GO brought up successfull in firmware */ - wl_ext_get_chan_str(ndev, chan_str, sizeof(chan_str)); - WL_MSG(ndev->name, "AP/GO Link up (%s)\n", chan_str); + WL_MSG(ndev->name, "AP/GO Link up\n"); wl_set_drv_status(cfg, AP_CREATED, ndev); if (delayed_work_pending(&cfg->ap_work)) { cancel_delayed_work_sync(&cfg->ap_work); @@ -5144,42 +5085,44 @@ } #endif /* WL_CFG80211_ACL */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 5, 0)) int wl_chspec_chandef(chanspec_t chanspec, - struct cfg80211_chan_def *chandef, struct wiphy *wiphy) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)) + struct cfg80211_chan_def *chandef, +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION (3, 5, 0) && (LINUX_VERSION_CODE <= (3, 7, 0))) + struct chan_info *chaninfo, +#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 5, 0)) */ + struct wiphy *wiphy) { uint16 freq = 0; + int chan_type = 0; + int channel = 0; struct ieee80211_channel *chan; if (!chandef) { return -1; - } else { - memset(chandef, 0, sizeof(*chandef)); } - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION (3, 8, 0)) - chandef->center_freq1 = wl_channel_to_frequency(CHSPEC_CHANNEL(chanspec), CHSPEC_BAND(chanspec)); - freq = wl_channel_to_frequency(wf_chspec_primary20_chan(chanspec), CHSPEC_BAND(chanspec)); - chandef->chan = ieee80211_get_channel(wiphy, freq); - chandef->center_freq2 = 0; + channel = CHSPEC_CHANNEL(chanspec); switch (CHSPEC_BW(chanspec)) { case WL_CHANSPEC_BW_20: - chandef->width = NL80211_CHAN_WIDTH_20; + chan_type = NL80211_CHAN_HT20; break; - case WL_CHANSPEC_BW_40: - chandef->width = NL80211_CHAN_WIDTH_40; + { + if (CHSPEC_SB_UPPER(chanspec)) { + channel += CH_10MHZ_APART; + } else { + channel -= CH_10MHZ_APART; + } + } + chan_type = NL80211_CHAN_HT40PLUS; break; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION (3, 8, 0)) case WL_CHANSPEC_BW_80: - chandef->width = NL80211_CHAN_WIDTH_80; - break; - case WL_CHANSPEC_BW_8080: { - /* XXX Left as is but need proper calculation for center_freq2 is used */ - int chan_type = 0; - int channel = 0; uint16 sb = CHSPEC_CTL_SB(chanspec); if (sb == WL_CHANSPEC_CTL_SB_LL) { @@ -5197,45 +5140,19 @@ chan_type = NL80211_CHAN_HT40MINUS; else if (sb == WL_CHANSPEC_CTL_SB_UL || sb == WL_CHANSPEC_CTL_SB_UU) chan_type = NL80211_CHAN_HT40PLUS; - freq = wl_channel_to_frequency(channel, CHSPEC_BAND(chanspec)); - chan = ieee80211_get_channel(wiphy, freq); - cfg80211_chandef_create(chandef, chan, chan_type); - return 0; - break; } - + break; case WL_CHANSPEC_BW_160: - chandef->width = NL80211_CHAN_WIDTH_160; - break; - default: - chandef->width = NL80211_CHAN_WIDTH_20; - break; - } - -#elif (LINUX_VERSION_CODE >= KERNEL_VERSION (3, 5, 0) && \ - (LINUX_VERSION_CODE <= KERNEL_VERSION (3, 7, 0))) - - int chan_type = 0; - int channel = 0; - channel = CHSPEC_CHANNEL(chanspec); - switch (CHSPEC_BW(chanspec)) { - case WL_CHANSPEC_BW_20: + channel = wf_chspec_primary20_chan(chanspec); + /* Using base chan_type as kernel does not define chan_type for 160 MHz */ chan_type = NL80211_CHAN_HT20; break; - case WL_CHANSPEC_BW_40: - if (CHSPEC_SB_UPPER(chanspec)) { - channel += CH_10MHZ_APART; - } else { - channel -= CH_10MHZ_APART; - } - chan_type = NL80211_CHAN_HT40PLUS; - break; - +#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION (3, 8, 0)) */ default: chan_type = NL80211_CHAN_HT20; break; - } + } freq = wl_channel_to_frequency(channel, CHSPEC_BAND(chanspec)); chan = ieee80211_get_channel(wiphy, freq); WL_DBG(("channel:%d freq:%d chan_type: %d chan_ptr:%p \n", @@ -5247,19 +5164,24 @@ return -EINVAL; } - chandef->freq = freq; - chandef->chan_type = chan_type; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION (3, 8, 0)) + cfg80211_chandef_create(chandef, chan, chan_type); +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION (3, 5, 0) && (LINUX_VERSION_CODE <= (3, 7, 0))) + chaninfo->freq = freq; + chaninfo->chan_type = chan_type; #endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION (3, 8, 0)) */ - return 0; } -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 5, 0)) void wl_cfg80211_ch_switch_notify(struct net_device *dev, uint16 chanspec, struct wiphy *wiphy) { u32 freq; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION (3, 8, 0)) struct cfg80211_chan_def chandef; +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION (3, 5, 0) && (LINUX_VERSION_CODE <= (3, 7, 0))) + struct chan_info chaninfo; +#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION (3, 8, 0)) */ if (!wiphy) { WL_ERR(("wiphy is null\n")); @@ -5274,21 +5196,21 @@ } #endif /* (LINUX_VERSION_CODE <= KERNEL_VERSION (3, 18, 0)) */ - if (wl_chspec_chandef(chanspec, &chandef, wiphy)) { +#if (LINUX_VERSION_CODE >= KERNEL_VERSION (3, 8, 0)) + if (wl_chspec_chandef(chanspec, &chandef, wiphy)) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION (3, 5, 0) && (LINUX_VERSION_CODE <= (3, 7, 0))) + if (wl_chspec_chandef(chanspec, &chaninfo, wiphy)) +#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION (3, 8, 0)) */ + { WL_ERR(("chspec_chandef failed\n")); return; } - #if (LINUX_VERSION_CODE >= KERNEL_VERSION (3, 8, 0)) freq = chandef.chan ? chandef.chan->center_freq : chandef.center_freq1; -#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 19, 2) || defined(CFG80211_BKPORT_MLO) - cfg80211_ch_switch_notify(dev, &chandef, 0); -#else cfg80211_ch_switch_notify(dev, &chandef); -#endif /* CFG80211_BKPORT_MLO */ #elif (LINUX_VERSION_CODE >= KERNEL_VERSION (3, 5, 0) && (LINUX_VERSION_CODE <= (3, 7, 0))) - freq = chandef.freq; - cfg80211_ch_switch_notify(dev, freq, chandef.chan_type); + freq = chan_info.freq; + cfg80211_ch_switch_notify(dev, freq, chan_info.chan_type); #endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION (3, 8, 0)) */ WL_MSG(dev->name, "Channel switch notification for freq: %d chanspec: 0x%x\n", -- Gitblit v1.6.2