mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-07-10 14:07:07 +08:00
mac80211: sync upstream (#7734)
* mac80211: fix HT40 mode for 6G band The channel offset used for VHT segment calculation was missing for HT Signed-off-by: Felix Fietkau <nbd@nbd.name> * mac80211: refresh patch Signed-off-by: Felix Fietkau <nbd@nbd.name> * mac80211: add missing change for encap offload on devices with sw rate control Signed-off-by: Felix Fietkau <nbd@nbd.name> Co-authored-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
b23e6fa3ee
commit
a74c473f42
@ -147,6 +147,9 @@ mac80211_hostapd_setup_base() {
|
|||||||
[ "$noscan" -gt 0 ] && hostapd_noscan=1
|
[ "$noscan" -gt 0 ] && hostapd_noscan=1
|
||||||
[ "$tx_burst" = 0 ] && tx_burst=
|
[ "$tx_burst" = 0 ] && tx_burst=
|
||||||
|
|
||||||
|
chan_ofs=0
|
||||||
|
[ "$band" = "6g" ] && chan_ofs=1
|
||||||
|
|
||||||
ieee80211n=1
|
ieee80211n=1
|
||||||
ht_capab=
|
ht_capab=
|
||||||
case "$htmode" in
|
case "$htmode" in
|
||||||
@ -154,7 +157,7 @@ mac80211_hostapd_setup_base() {
|
|||||||
HT40*|VHT40|VHT80|VHT160|HE40|HE80|HE160)
|
HT40*|VHT40|VHT80|VHT160|HE40|HE80|HE160)
|
||||||
case "$hwmode" in
|
case "$hwmode" in
|
||||||
a)
|
a)
|
||||||
case "$(( ($channel / 4) % 2 ))" in
|
case "$(( (($channel / 4) + $chan_ofs) % 2 ))" in
|
||||||
1) ht_capab="[HT40+]";;
|
1) ht_capab="[HT40+]";;
|
||||||
0) ht_capab="[HT40-]";;
|
0) ht_capab="[HT40-]";;
|
||||||
esac
|
esac
|
||||||
@ -223,8 +226,6 @@ mac80211_hostapd_setup_base() {
|
|||||||
enable_ac=0
|
enable_ac=0
|
||||||
vht_oper_chwidth=0
|
vht_oper_chwidth=0
|
||||||
vht_center_seg0=
|
vht_center_seg0=
|
||||||
chan_ofs=0
|
|
||||||
[ "$band" = "6g" ] && chan_ofs=1
|
|
||||||
|
|
||||||
idx="$channel"
|
idx="$channel"
|
||||||
case "$htmode" in
|
case "$htmode" in
|
||||||
|
@ -7,24 +7,6 @@ The software rate control cannot deal with encap offload, so fix it.
|
|||||||
Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
|
Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
|
||||||
---
|
---
|
||||||
|
|
||||||
--- a/net/mac80211/ieee80211_i.h
|
|
||||||
+++ b/net/mac80211/ieee80211_i.h
|
|
||||||
@@ -2024,6 +2024,15 @@ static inline void ieee80211_tx_skb(stru
|
|
||||||
ieee80211_tx_skb_tid(sdata, skb, 7);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static inline bool ieee80211_is_tx_data(struct sk_buff *skb)
|
|
||||||
+{
|
|
||||||
+ struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
|
|
||||||
+ struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
|
|
||||||
+
|
|
||||||
+ return info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP ||
|
|
||||||
+ ieee80211_is_data(hdr->frame_control);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
u32 ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action,
|
|
||||||
struct ieee802_11_elems *elems,
|
|
||||||
u64 filter, u32 crc, u8 *transmitter_bssid,
|
|
||||||
--- a/net/mac80211/rate.c
|
--- a/net/mac80211/rate.c
|
||||||
+++ b/net/mac80211/rate.c
|
+++ b/net/mac80211/rate.c
|
||||||
@@ -297,15 +297,11 @@ void ieee80211_check_rate_mask(struct ie
|
@@ -297,15 +297,11 @@ void ieee80211_check_rate_mask(struct ie
|
||||||
@ -44,7 +26,18 @@ Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void rc_send_low_basicrate(struct ieee80211_tx_rate *rate,
|
static void rc_send_low_basicrate(struct ieee80211_tx_rate *rate,
|
||||||
@@ -870,7 +866,6 @@ void ieee80211_get_tx_rates(struct ieee8
|
@@ -396,6 +392,10 @@ static bool rate_control_send_low(struct
|
||||||
|
int mcast_rate;
|
||||||
|
bool use_basicrate = false;
|
||||||
|
|
||||||
|
+ if (ieee80211_is_tx_data(txrc->skb) &&
|
||||||
|
+ info->flags & IEEE80211_TX_CTL_NO_ACK)
|
||||||
|
+ return false;
|
||||||
|
+
|
||||||
|
if (!pubsta || rc_no_data_or_no_ack_use_min(txrc)) {
|
||||||
|
__rate_control_send_low(txrc->hw, sband, pubsta, info,
|
||||||
|
txrc->rate_idx_mask);
|
||||||
|
@@ -870,7 +870,6 @@ void ieee80211_get_tx_rates(struct ieee8
|
||||||
int max_rates)
|
int max_rates)
|
||||||
{
|
{
|
||||||
struct ieee80211_sub_if_data *sdata;
|
struct ieee80211_sub_if_data *sdata;
|
||||||
@ -52,7 +45,7 @@ Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
|
|||||||
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
|
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
|
||||||
struct ieee80211_supported_band *sband;
|
struct ieee80211_supported_band *sband;
|
||||||
|
|
||||||
@@ -882,7 +877,7 @@ void ieee80211_get_tx_rates(struct ieee8
|
@@ -882,7 +881,7 @@ void ieee80211_get_tx_rates(struct ieee8
|
||||||
sdata = vif_to_sdata(vif);
|
sdata = vif_to_sdata(vif);
|
||||||
sband = sdata->local->hw.wiphy->bands[info->band];
|
sband = sdata->local->hw.wiphy->bands[info->band];
|
||||||
|
|
||||||
@ -117,3 +110,28 @@ Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
|
|||||||
|
|
||||||
if (info->control.flags & IEEE80211_TX_CTRL_FAST_XMIT) {
|
if (info->control.flags & IEEE80211_TX_CTRL_FAST_XMIT) {
|
||||||
struct sta_info *sta = container_of(txq->sta, struct sta_info,
|
struct sta_info *sta = container_of(txq->sta, struct sta_info,
|
||||||
|
--- a/include/net/mac80211.h
|
||||||
|
+++ b/include/net/mac80211.h
|
||||||
|
@@ -6728,4 +6728,22 @@ struct sk_buff *ieee80211_get_fils_disco
|
||||||
|
struct sk_buff *
|
||||||
|
ieee80211_get_unsol_bcast_probe_resp_tmpl(struct ieee80211_hw *hw,
|
||||||
|
struct ieee80211_vif *vif);
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * ieee80211_is_tx_data - check if frame is a data frame
|
||||||
|
+ *
|
||||||
|
+ * The function is used to check if a frame is a data frame. Frames with
|
||||||
|
+ * hardware encapsulation enabled are data frames.
|
||||||
|
+ *
|
||||||
|
+ * @skb: the frame to be transmitted.
|
||||||
|
+ */
|
||||||
|
+static inline bool ieee80211_is_tx_data(struct sk_buff *skb)
|
||||||
|
+{
|
||||||
|
+ struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
|
||||||
|
+ struct ieee80211_hdr *hdr = (void *) skb->data;
|
||||||
|
+
|
||||||
|
+ return info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP ||
|
||||||
|
+ ieee80211_is_data(hdr->frame_control);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
#endif /* MAC80211_H */
|
||||||
|
@ -48,7 +48,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
if (sdata->vif.type == NL80211_IFTYPE_MONITOR) {
|
if (sdata->vif.type == NL80211_IFTYPE_MONITOR) {
|
||||||
--- a/net/mac80211/ieee80211_i.h
|
--- a/net/mac80211/ieee80211_i.h
|
||||||
+++ b/net/mac80211/ieee80211_i.h
|
+++ b/net/mac80211/ieee80211_i.h
|
||||||
@@ -2224,6 +2224,8 @@ void ieee80211_dynamic_ps_timer(struct t
|
@@ -2215,6 +2215,8 @@ void ieee80211_dynamic_ps_timer(struct t
|
||||||
void ieee80211_send_nullfunc(struct ieee80211_local *local,
|
void ieee80211_send_nullfunc(struct ieee80211_local *local,
|
||||||
struct ieee80211_sub_if_data *sdata,
|
struct ieee80211_sub_if_data *sdata,
|
||||||
bool powersave);
|
bool powersave);
|
||||||
|
@ -0,0 +1,26 @@
|
|||||||
|
From: Ryder Lee <ryder.lee@mediatek.com>
|
||||||
|
Date: Fri, 18 Jun 2021 04:38:59 +0800
|
||||||
|
Subject: [PATCH] mac80211: check per vif offload_flags in Tx path
|
||||||
|
|
||||||
|
offload_flags has been introduced to indicate encap status of each interface.
|
||||||
|
An interface can encap offload at runtime, or if it has some extra limitations
|
||||||
|
it can simply override the flags, so it's more flexible to check offload_flags
|
||||||
|
in Tx path.
|
||||||
|
|
||||||
|
Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
|
||||||
|
Link: https://lore.kernel.org/r/177785418cf407808bf3a44760302d0647076990.1623961575.git.ryder.lee@mediatek.com
|
||||||
|
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
|
---
|
||||||
|
|
||||||
|
--- a/net/mac80211/tx.c
|
||||||
|
+++ b/net/mac80211/tx.c
|
||||||
|
@@ -3309,6 +3309,9 @@ static bool ieee80211_amsdu_aggregate(st
|
||||||
|
if (!ieee80211_hw_check(&local->hw, TX_AMSDU))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
+ if (sdata->vif.offload_flags & IEEE80211_OFFLOAD_ENCAP_ENABLED)
|
||||||
|
+ return false;
|
||||||
|
+
|
||||||
|
if (skb_is_gso(skb))
|
||||||
|
return false;
|
||||||
|
|
@ -0,0 +1,237 @@
|
|||||||
|
From 83216e3988cd196183542937c9bd58b279f946af Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michael Walle <michael@walle.cc>
|
||||||
|
Date: Mon, 12 Apr 2021 19:47:17 +0200
|
||||||
|
Subject: of: net: pass the dst buffer to of_get_mac_address()
|
||||||
|
|
||||||
|
of_get_mac_address() returns a "const void*" pointer to a MAC address.
|
||||||
|
Lately, support to fetch the MAC address by an NVMEM provider was added.
|
||||||
|
But this will only work with platform devices. It will not work with
|
||||||
|
PCI devices (e.g. of an integrated root complex) and esp. not with DSA
|
||||||
|
ports.
|
||||||
|
|
||||||
|
There is an of_* variant of the nvmem binding which works without
|
||||||
|
devices. The returned data of a nvmem_cell_read() has to be freed after
|
||||||
|
use. On the other hand the return of_get_mac_address() points to some
|
||||||
|
static data without a lifetime. The trick for now, was to allocate a
|
||||||
|
device resource managed buffer which is then returned. This will only
|
||||||
|
work if we have an actual device.
|
||||||
|
|
||||||
|
Change it, so that the caller of of_get_mac_address() has to supply a
|
||||||
|
buffer where the MAC address is written to. Unfortunately, this will
|
||||||
|
touch all drivers which use the of_get_mac_address().
|
||||||
|
|
||||||
|
Usually the code looks like:
|
||||||
|
|
||||||
|
const char *addr;
|
||||||
|
addr = of_get_mac_address(np);
|
||||||
|
if (!IS_ERR(addr))
|
||||||
|
ether_addr_copy(ndev->dev_addr, addr);
|
||||||
|
|
||||||
|
This can then be simply rewritten as:
|
||||||
|
|
||||||
|
of_get_mac_address(np, ndev->dev_addr);
|
||||||
|
|
||||||
|
Sometimes is_valid_ether_addr() is used to test the MAC address.
|
||||||
|
of_get_mac_address() already makes sure, it just returns a valid MAC
|
||||||
|
address. Thus we can just test its return code. But we have to be
|
||||||
|
careful if there are still other sources for the MAC address before the
|
||||||
|
of_get_mac_address(). In this case we have to keep the
|
||||||
|
is_valid_ether_addr() call.
|
||||||
|
|
||||||
|
The following coccinelle patch was used to convert common cases to the
|
||||||
|
new style. Afterwards, I've manually gone over the drivers and fixed the
|
||||||
|
return code variable: either used a new one or if one was already
|
||||||
|
available use that. Mansour Moufid, thanks for that coccinelle patch!
|
||||||
|
|
||||||
|
<spml>
|
||||||
|
@a@
|
||||||
|
identifier x;
|
||||||
|
expression y, z;
|
||||||
|
@@
|
||||||
|
- x = of_get_mac_address(y);
|
||||||
|
+ x = of_get_mac_address(y, z);
|
||||||
|
<...
|
||||||
|
- ether_addr_copy(z, x);
|
||||||
|
...>
|
||||||
|
|
||||||
|
@@
|
||||||
|
identifier a.x;
|
||||||
|
@@
|
||||||
|
- if (<+... x ...+>) {}
|
||||||
|
|
||||||
|
@@
|
||||||
|
identifier a.x;
|
||||||
|
@@
|
||||||
|
if (<+... x ...+>) {
|
||||||
|
...
|
||||||
|
}
|
||||||
|
- else {}
|
||||||
|
|
||||||
|
@@
|
||||||
|
identifier a.x;
|
||||||
|
expression e;
|
||||||
|
@@
|
||||||
|
- if (<+... x ...+>@e)
|
||||||
|
- {}
|
||||||
|
- else
|
||||||
|
+ if (!(e))
|
||||||
|
{...}
|
||||||
|
|
||||||
|
@@
|
||||||
|
expression x, y, z;
|
||||||
|
@@
|
||||||
|
- x = of_get_mac_address(y, z);
|
||||||
|
+ of_get_mac_address(y, z);
|
||||||
|
... when != x
|
||||||
|
</spml>
|
||||||
|
|
||||||
|
All drivers, except drivers/net/ethernet/aeroflex/greth.c, were
|
||||||
|
compile-time tested.
|
||||||
|
|
||||||
|
Suggested-by: Andrew Lunn <andrew@lunn.ch>
|
||||||
|
Signed-off-by: Michael Walle <michael@walle.cc>
|
||||||
|
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
---
|
||||||
|
arch/arm/mach-mvebu/kirkwood.c | 3 +-
|
||||||
|
arch/powerpc/sysdev/tsi108_dev.c | 5 +-
|
||||||
|
drivers/net/ethernet/aeroflex/greth.c | 6 +--
|
||||||
|
drivers/net/ethernet/allwinner/sun4i-emac.c | 10 ++--
|
||||||
|
drivers/net/ethernet/altera/altera_tse_main.c | 7 +--
|
||||||
|
drivers/net/ethernet/arc/emac_main.c | 8 +--
|
||||||
|
drivers/net/ethernet/atheros/ag71xx.c | 7 +--
|
||||||
|
drivers/net/ethernet/broadcom/bcm4908_enet.c | 7 +--
|
||||||
|
drivers/net/ethernet/broadcom/bcmsysport.c | 7 +--
|
||||||
|
drivers/net/ethernet/broadcom/bgmac-bcma.c | 10 ++--
|
||||||
|
drivers/net/ethernet/broadcom/bgmac-platform.c | 11 ++--
|
||||||
|
drivers/net/ethernet/cadence/macb_main.c | 11 ++--
|
||||||
|
drivers/net/ethernet/cavium/octeon/octeon_mgmt.c | 8 +--
|
||||||
|
drivers/net/ethernet/cavium/thunder/thunder_bgx.c | 5 +-
|
||||||
|
drivers/net/ethernet/davicom/dm9000.c | 10 ++--
|
||||||
|
drivers/net/ethernet/ethoc.c | 6 +--
|
||||||
|
drivers/net/ethernet/ezchip/nps_enet.c | 7 +--
|
||||||
|
drivers/net/ethernet/freescale/fec_main.c | 7 +--
|
||||||
|
drivers/net/ethernet/freescale/fec_mpc52xx.c | 7 +--
|
||||||
|
drivers/net/ethernet/freescale/fman/mac.c | 9 ++--
|
||||||
|
.../net/ethernet/freescale/fs_enet/fs_enet-main.c | 5 +-
|
||||||
|
drivers/net/ethernet/freescale/gianfar.c | 8 +--
|
||||||
|
drivers/net/ethernet/freescale/ucc_geth.c | 5 +-
|
||||||
|
drivers/net/ethernet/hisilicon/hisi_femac.c | 7 +--
|
||||||
|
drivers/net/ethernet/hisilicon/hix5hd2_gmac.c | 7 +--
|
||||||
|
drivers/net/ethernet/lantiq_xrx200.c | 7 +--
|
||||||
|
drivers/net/ethernet/marvell/mv643xx_eth.c | 5 +-
|
||||||
|
drivers/net/ethernet/marvell/mvneta.c | 6 +--
|
||||||
|
.../net/ethernet/marvell/prestera/prestera_main.c | 11 ++--
|
||||||
|
drivers/net/ethernet/marvell/pxa168_eth.c | 9 +---
|
||||||
|
drivers/net/ethernet/marvell/sky2.c | 8 ++-
|
||||||
|
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 11 ++--
|
||||||
|
drivers/net/ethernet/micrel/ks8851_common.c | 7 ++-
|
||||||
|
drivers/net/ethernet/microchip/lan743x_main.c | 5 +-
|
||||||
|
drivers/net/ethernet/nxp/lpc_eth.c | 4 +-
|
||||||
|
drivers/net/ethernet/qualcomm/qca_spi.c | 10 ++--
|
||||||
|
drivers/net/ethernet/qualcomm/qca_uart.c | 9 +---
|
||||||
|
drivers/net/ethernet/renesas/ravb_main.c | 12 +++--
|
||||||
|
drivers/net/ethernet/renesas/sh_eth.c | 5 +-
|
||||||
|
.../net/ethernet/samsung/sxgbe/sxgbe_platform.c | 13 ++---
|
||||||
|
drivers/net/ethernet/socionext/sni_ave.c | 10 ++--
|
||||||
|
.../net/ethernet/stmicro/stmmac/dwmac-anarion.c | 2 +-
|
||||||
|
.../ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c | 2 +-
|
||||||
|
.../net/ethernet/stmicro/stmmac/dwmac-generic.c | 2 +-
|
||||||
|
drivers/net/ethernet/stmicro/stmmac/dwmac-imx.c | 2 +-
|
||||||
|
.../net/ethernet/stmicro/stmmac/dwmac-intel-plat.c | 2 +-
|
||||||
|
.../net/ethernet/stmicro/stmmac/dwmac-ipq806x.c | 2 +-
|
||||||
|
.../net/ethernet/stmicro/stmmac/dwmac-lpc18xx.c | 2 +-
|
||||||
|
.../net/ethernet/stmicro/stmmac/dwmac-mediatek.c | 2 +-
|
||||||
|
drivers/net/ethernet/stmicro/stmmac/dwmac-meson.c | 2 +-
|
||||||
|
.../net/ethernet/stmicro/stmmac/dwmac-meson8b.c | 2 +-
|
||||||
|
drivers/net/ethernet/stmicro/stmmac/dwmac-oxnas.c | 2 +-
|
||||||
|
.../ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c | 2 +-
|
||||||
|
drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c | 2 +-
|
||||||
|
.../net/ethernet/stmicro/stmmac/dwmac-socfpga.c | 2 +-
|
||||||
|
drivers/net/ethernet/stmicro/stmmac/dwmac-sti.c | 2 +-
|
||||||
|
drivers/net/ethernet/stmicro/stmmac/dwmac-stm32.c | 2 +-
|
||||||
|
drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 2 +-
|
||||||
|
drivers/net/ethernet/stmicro/stmmac/dwmac-sunxi.c | 2 +-
|
||||||
|
.../net/ethernet/stmicro/stmmac/dwmac-visconti.c | 2 +-
|
||||||
|
drivers/net/ethernet/stmicro/stmmac/stmmac.h | 2 +-
|
||||||
|
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 2 +-
|
||||||
|
.../net/ethernet/stmicro/stmmac/stmmac_platform.c | 14 ++---
|
||||||
|
.../net/ethernet/stmicro/stmmac/stmmac_platform.h | 2 +-
|
||||||
|
drivers/net/ethernet/ti/am65-cpsw-nuss.c | 19 ++++---
|
||||||
|
drivers/net/ethernet/ti/cpsw.c | 7 +--
|
||||||
|
drivers/net/ethernet/ti/cpsw_new.c | 7 +--
|
||||||
|
drivers/net/ethernet/ti/davinci_emac.c | 8 +--
|
||||||
|
drivers/net/ethernet/ti/netcp_core.c | 7 +--
|
||||||
|
drivers/net/ethernet/wiznet/w5100-spi.c | 8 ++-
|
||||||
|
drivers/net/ethernet/wiznet/w5100.c | 2 +-
|
||||||
|
drivers/net/ethernet/xilinx/ll_temac_main.c | 8 +--
|
||||||
|
drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 15 +++---
|
||||||
|
drivers/net/ethernet/xilinx/xilinx_emaclite.c | 8 +--
|
||||||
|
drivers/net/wireless/ath/ath9k/init.c | 5 +-
|
||||||
|
drivers/net/wireless/mediatek/mt76/eeprom.c | 9 +---
|
||||||
|
drivers/net/wireless/ralink/rt2x00/rt2x00dev.c | 6 +--
|
||||||
|
drivers/of/of_net.c | 60 ++++++++++------------
|
||||||
|
drivers/staging/octeon/ethernet.c | 10 ++--
|
||||||
|
drivers/staging/wfx/main.c | 7 ++-
|
||||||
|
include/linux/of_net.h | 6 +--
|
||||||
|
include/net/dsa.h | 2 +-
|
||||||
|
net/dsa/dsa2.c | 2 +-
|
||||||
|
net/dsa/slave.c | 2 +-
|
||||||
|
net/ethernet/eth.c | 11 ++--
|
||||||
|
85 files changed, 218 insertions(+), 364 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||||
|
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||||
|
@@ -618,7 +618,6 @@ static int ath9k_of_init(struct ath_soft
|
||||||
|
struct ath_hw *ah = sc->sc_ah;
|
||||||
|
struct ath_common *common = ath9k_hw_common(ah);
|
||||||
|
enum ath_bus_type bus_type = common->bus_ops->ath_bus_type;
|
||||||
|
- const char *mac;
|
||||||
|
char eeprom_name[100];
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
@@ -641,9 +640,7 @@ static int ath9k_of_init(struct ath_soft
|
||||||
|
ah->ah_flags |= AH_NO_EEP_SWAP;
|
||||||
|
}
|
||||||
|
|
||||||
|
- mac = of_get_mac_address(np);
|
||||||
|
- if (!IS_ERR(mac))
|
||||||
|
- ether_addr_copy(common->macaddr, mac);
|
||||||
|
+ of_get_mac_address(np, common->macaddr);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
--- a/drivers/net/wireless/mediatek/mt76/eeprom.c
|
||||||
|
+++ b/drivers/net/wireless/mediatek/mt76/eeprom.c
|
||||||
|
@@ -90,15 +90,9 @@ out_put_node:
|
||||||
|
void
|
||||||
|
mt76_eeprom_override(struct mt76_dev *dev)
|
||||||
|
{
|
||||||
|
-#ifdef CONFIG_OF
|
||||||
|
struct device_node *np = dev->dev->of_node;
|
||||||
|
- const u8 *mac = NULL;
|
||||||
|
|
||||||
|
- if (np)
|
||||||
|
- mac = of_get_mac_address(np);
|
||||||
|
- if (!IS_ERR_OR_NULL(mac))
|
||||||
|
- ether_addr_copy(dev->macaddr, mac);
|
||||||
|
-#endif
|
||||||
|
+ of_get_mac_address(np, dev->macaddr);
|
||||||
|
|
||||||
|
if (!is_valid_ether_addr(dev->macaddr)) {
|
||||||
|
eth_random_addr(dev->macaddr);
|
||||||
|
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
|
||||||
|
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
|
||||||
|
@@ -990,11 +990,7 @@ static void rt2x00lib_rate(struct ieee80
|
||||||
|
|
||||||
|
void rt2x00lib_set_mac_address(struct rt2x00_dev *rt2x00dev, u8 *eeprom_mac_addr)
|
||||||
|
{
|
||||||
|
- const char *mac_addr;
|
||||||
|
-
|
||||||
|
- mac_addr = of_get_mac_address(rt2x00dev->dev->of_node);
|
||||||
|
- if (!IS_ERR(mac_addr))
|
||||||
|
- ether_addr_copy(eeprom_mac_addr, mac_addr);
|
||||||
|
+ of_get_mac_address(rt2x00dev->dev->of_node, eeprom_mac_addr);
|
||||||
|
|
||||||
|
if (!is_valid_ether_addr(eeprom_mac_addr)) {
|
||||||
|
eth_random_addr(eeprom_mac_addr);
|
Loading…
x
Reference in New Issue
Block a user