wifi: brcmfmac: Add brcmf_c_set_cur_etheraddr() helper
authorHans de Goede <hdegoede@redhat.com>
Fri, 8 Jul 2022 13:37:11 +0000 (15:37 +0200)
committerKalle Valo <kvalo@kernel.org>
Thu, 28 Jul 2022 09:58:11 +0000 (12:58 +0300)
Add a little helper to send "cur_etheraddr" commands to the interface
and to handle the error reporting of it in a single place.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Arend van Spriel <aspriel@gmail.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20220708133712.102179-1-hdegoede@redhat.com
drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.h
drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c

index fe01da9..dccd8f4 100644 (file)
@@ -190,6 +190,17 @@ done:
        return err;
 }
 
+int brcmf_c_set_cur_etheraddr(struct brcmf_if *ifp, const u8 *addr)
+{
+       s32 err;
+
+       err = brcmf_fil_iovar_data_set(ifp, "cur_etheraddr", addr, ETH_ALEN);
+       if (err < 0)
+               bphy_err(ifp->drvr, "Setting cur_etheraddr failed, %d\n", err);
+
+       return err;
+}
+
 int brcmf_c_preinit_dcmds(struct brcmf_if *ifp)
 {
        struct brcmf_pub *drvr = ifp->drvr;
@@ -204,12 +215,9 @@ int brcmf_c_preinit_dcmds(struct brcmf_if *ifp)
 
        if (is_valid_ether_addr(ifp->mac_addr)) {
                /* set mac address */
-               err = brcmf_fil_iovar_data_set(ifp, "cur_etheraddr", ifp->mac_addr,
-                                              ETH_ALEN);
-               if (err < 0) {
-                       bphy_err(ifp->drvr, "Setting cur_etheraddr failed, %d\n", err);
+               err = brcmf_c_set_cur_etheraddr(ifp, ifp->mac_addr);
+               if (err < 0)
                        goto done;
-               }
        } else {
                /* retrieve mac address */
                err = brcmf_fil_iovar_data_get(ifp, "cur_etheraddr", ifp->mac_addr,
index 15accc8..7329eb7 100644 (file)
@@ -65,6 +65,7 @@ void brcmf_release_module_param(struct brcmf_mp_device *module_param);
 
 /* Sets dongle media info (drv_version, mac address). */
 int brcmf_c_preinit_dcmds(struct brcmf_if *ifp);
+int brcmf_c_set_cur_etheraddr(struct brcmf_if *ifp, const u8 *addr);
 
 #ifdef CONFIG_DMI
 void brcmf_dmi_probe(struct brcmf_mp_device *settings, u32 chip, u32 chiprev);
index 87aef21..bd164a0 100644 (file)
@@ -233,16 +233,12 @@ static int brcmf_netdev_set_mac_address(struct net_device *ndev, void *addr)
 {
        struct brcmf_if *ifp = netdev_priv(ndev);
        struct sockaddr *sa = (struct sockaddr *)addr;
-       struct brcmf_pub *drvr = ifp->drvr;
        int err;
 
        brcmf_dbg(TRACE, "Enter, bsscfgidx=%d\n", ifp->bsscfgidx);
 
-       err = brcmf_fil_iovar_data_set(ifp, "cur_etheraddr", sa->sa_data,
-                                      ETH_ALEN);
-       if (err < 0) {
-               bphy_err(drvr, "Setting cur_etheraddr failed, %d\n", err);
-       } else {
+       err = brcmf_c_set_cur_etheraddr(ifp, sa->sa_data);
+       if (err >= 0) {
                brcmf_dbg(TRACE, "updated to %pM\n", sa->sa_data);
                memcpy(ifp->mac_addr, sa->sa_data, ETH_ALEN);
                eth_hw_addr_set(ifp->ndev, ifp->mac_addr);