brcm80211: cleanup work
cover brcm80211: cleanup work
cleanup and rework on both drivers although mostly on brcmfmac.
This series is intended for v3.9 and applies to the master branch of wireless-next.
Arend van Spriel (9):
brcmsmac: use perimeter lock in add_interface() callback
brcmsmac: allow user-space setting of interface address
brcmfmac: assure USB dongle firmware is reset upon module unload
brcmfmac: define pr_fmt in one place
brcmfmac: remove rx helper function from bus interface
brcmfmac: remove brcmf_proto_hdrpull() from bus interface
brcmfmac: remove unused event related definitions
brcmfmac: cleanup netdev transmit callback
brcmfmac: remove unnecessary curly braces in dhd_attach()
Hante Meuleman (7):
brcmfmac: do not reconfigure refill rx on 0-length packet.
brcmfmac: removed deprecated set_bitrate_mask support
brcmfmac: Use dedicated trace level for CDC.
brcmfmac: Remove unused caching dongle error.
brcmfmac: Return correct error on netdev xmit.
brcmfmac: Removing obsolete variables and inline functions.
brcmfmac: Update init code routines from interface up.
Piotr Haber (2):
brcmsmac: increase timer reference count for new timers only
brcmsmac: remove dead code
drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c | 2 - .../net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c | 2 - drivers/net/wireless/brcm80211/brcmfmac/dhd.h | 39 ++------ drivers/net/wireless/brcm80211/brcmfmac/dhd_bus.h | 19 +--- drivers/net/wireless/brcm80211/brcmfmac/dhd_cdc.c | 48 +++------- .../net/wireless/brcm80211/brcmfmac/dhd_common.c | 2 - drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h | 50 +++++------ .../net/wireless/brcm80211/brcmfmac/dhd_linux.c | 90 +++++++++++-------- drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c | 24 ++--- .../net/wireless/brcm80211/brcmfmac/sdio_chip.c | 2 - drivers/net/wireless/brcm80211/brcmfmac/usb.c | 27 ++++-- .../net/wireless/brcm80211/brcmfmac/wl_cfg80211.c | 94 +++----------------- drivers/net/wireless/brcm80211/brcmsmac/ampdu.c | 7 +- .../net/wireless/brcm80211/brcmsmac/mac80211_if.c | 10 ++- drivers/net/wireless/brcm80211/brcmsmac/main.c | 7 +- drivers/net/wireless/brcm80211/brcmsmac/scb.h | 1 - 16 files changed, 146 insertions(+), 278 deletions(-)
Signature · 1 line
1.7.10.4
PATCH 1/18 brcmsmac: increase timer reference count for new timers only
From: Piotr Haber <[email protected]>
On hardware reintialization reference count of already existing timers would be increased again. This leads to problems on module unloading.
--- drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c +4 -3
@@ -1407,9 +1407,10 @@ void brcms_add_timer(struct brcms_timer *t, uint ms, int periodic)#endif t->ms = ms; t->periodic = (bool ) periodic; - t->set = true; - -atomic_inc (&t->wl->callbacks); +if (!t->set) { + t->set = true; +atomic_inc (&t->wl->callbacks); + }ieee80211_queue_delayed_work (hw, &t->dly_wrk,msecs_to_jiffies (ms)); }
Signature · 1 line
1.7.10.4
PATCH 2/18 brcmsmac: use perimeter lock in add_interface() callback
In reply to Arend van SprielAll callbacks that access driver functions should do that under perimeter lock protection. The add_interface() callback was lacking this lock.
--- drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c +2 -0
@@ -362,8 +362,10 @@ brcms_ops_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)return -EOPNOTSUPP ; } +spin_lock_bh (&wl->lock); wl->mute_tx = false;brcms_c_mute (wl->wlc, false); +spin_unlock_bh (&wl->lock);return 0 ; }
Signature · 1 line
1.7.10.4
PATCH 3/18 brcmsmac: allow user-space setting of interface address
In reply to Arend van SprielThe interface address of the wireless device is determined by the permanent address stored in the device. This patch allows it to be overridden from user-space.
--- drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c | 1 + drivers/net/wireless/brcm80211/brcmsmac/main.c | 7 +++---- 2 files changed, 4 insertions(+), 4 deletions(-)
drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c +1 -0
@@ -363,6 +363,7 @@ brcms_ops_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif) }spin_lock_bh (&wl->lock); +memcpy (wl->pub->cur_etheraddr, vif->addr,sizeof (vif->addr)); wl->mute_tx = false;brcms_c_mute (wl->wlc, false);spin_unlock_bh (&wl->lock);
drivers/net/wireless/brcm80211/brcmsmac/main.c +3 -4
@@ -2473,6 +2473,7 @@ static void brcms_b_tx_fifo_resume(struct brcms_hardware *wlc_hw,static void brcms_b_mute (struct brcms_hardware *wlc_hw,bool mute_tx) {static const u8 null_ether_addr[ETH_ALEN ] = {0 ,0 ,0 ,0 ,0 ,0 }; +u8 *ethaddr = wlc_hw->wlc->pub->cur_etheraddr;if (mute_tx) {/* suspend tx fifos */
@@ -2482,8 +2483,7 @@ static void brcms_b_mute(struct brcms_hardware *wlc_hw, bool mute_tx)brcms_b_tx_fifo_suspend (wlc_hw,TX_AC_VI_FIFO );/* zero the address match register so we do not send ACKs */ -brcms_b_set_addrmatch (wlc_hw,RCM_MAC_OFFSET , - null_ether_addr); +brcms_b_set_addrmatch (wlc_hw,RCM_MAC_OFFSET , null_ether_addr); }else {/* resume tx fifos */ brcms_b_tx_fifo_resume (wlc_hw,TX_DATA_FIFO );
@@ -2492,8 +2492,7 @@ static void brcms_b_mute(struct brcms_hardware *wlc_hw, bool mute_tx)brcms_b_tx_fifo_resume (wlc_hw,TX_AC_VI_FIFO );/* Restore address */ -brcms_b_set_addrmatch (wlc_hw,RCM_MAC_OFFSET , - wlc_hw->etheraddr); +brcms_b_set_addrmatch (wlc_hw,RCM_MAC_OFFSET , ethaddr); }wlc_phy_mute_upd (wlc_hw->band->pi, mute_tx,0 );
Signature · 1 line
1.7.10.4
PATCH 4/18 brcmsmac: remove dead code
In reply to Arend van SprielFrom: Piotr Haber <[email protected]>
Dead code after AMPDU restructure.
--- drivers/net/wireless/brcm80211/brcmsmac/ampdu.c | 7 ++----- drivers/net/wireless/brcm80211/brcmsmac/scb.h | 1 - 2 files changed, 2 insertions(+), 6 deletions(-)
drivers/net/wireless/brcm80211/brcmsmac/ampdu.c +2 -5
@@ -961,7 +961,6 @@ brcms_c_ampdu_dotxstatus_complete(struct ampdu_info *ampdu, struct scb *scb,/* if acked then clear bit and free packet */ if ((bindex <AMPDU_TX_BA_MAX_WSIZE ) &&isset (bitmap, bindex)) { - ini->tx_in_transit--; ini->txretry[index] =0 ;/*
@@ -990,7 +989,6 @@ brcms_c_ampdu_dotxstatus_complete(struct ampdu_info *ampdu, struct scb *scb,if (retry && (ini->txretry[index] < (int )retry_limit)) {int ret; ini->txretry[index]++; - ini->tx_in_transit--; ret =brcms_c_txfifo (wlc, queue, p);/* * We shouldn't be out of space in the DMA
@@ -1000,7 +998,6 @@ brcms_c_ampdu_dotxstatus_complete(struct ampdu_info *ampdu, struct scb *scb,WARN_ONCE (ret,"queue %d out of txds\n" , queue); }else {/* Retry timeout */ - ini->tx_in_transit--;ieee80211_tx_info_clear_status (tx_info); tx_info->status.ampdu_ack_len =0 ; tx_info->status.ampdu_len =1 ;
@@ -1009,8 +1006,8 @@ brcms_c_ampdu_dotxstatus_complete(struct ampdu_info *ampdu, struct scb *scb,skb_pull (p,D11_PHY_HDR_LEN );skb_pull (p,D11_TXH_LEN );brcms_dbg_ht (wlc->hw->d11core, -"BA Timeout, seq %d, in_transit %d\n" , - seq, ini->tx_in_transit); +"BA Timeout, seq %d\n" , + seq);ieee80211_tx_status_irqsafe (wlc->pub->ieee_hw, p); }
drivers/net/wireless/brcm80211/brcmsmac/scb.h +0 -1
@@ -36,7 +36,6 @@/* structure to store per-tid state for the ampdu initiator */ struct scb_ampdu_tid_ini { -u8 tx_in_transit;/* number of pending mpdus in transit in driver */ u8 tid;/* initiator tid for easy lookup */ /* tx retry count; indexed by seq modulo */ u8 txretry[AMPDU_TX_BA_MAX_WSIZE ];
Signature · 1 line
1.7.10.4
PATCH 5/18 brcmfmac: do not reconfigure refill rx on 0-length packet.
In reply to Arend van SprielFrom: Hante Meuleman <[email protected]>
When USB device gets removed rx complete comes with 0-length packets. Do not refill those packets. In some rare cases it can cause infinite loop.
--- drivers/net/wireless/brcm80211/brcmfmac/usb.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/net/wireless/brcm80211/brcmfmac/usb.c +5 -1
@@ -467,7 +467,11 @@ static void brcmf_usb_rx_complete(struct urb *urb) devinfo->bus_pub.bus->dstats.rx_errors++; }else brcmf_rx_packet (devinfo->dev, ifidx, skb); -brcmf_usb_rx_refill (devinfo, req); +/* zero lenght packets indicate usb "failure". Do not refill */ +if (urb->actual_length) +brcmf_usb_rx_refill (devinfo, req); +else +brcmf_usb_enq (devinfo, &devinfo->rx_freeq, req,NULL ); }else {brcmu_pkt_buf_free_skb (skb);brcmf_usb_enq (devinfo, &devinfo->rx_freeq, req,NULL );
Signature · 1 line
1.7.10.4
PATCH 6/18 brcmfmac: removed deprecated set_bitrate_mask support
In reply to Arend van SprielFrom: Hante Meuleman <[email protected]>
Set bitrate_mask is not desired anymore. The firmware will determine the correct rates to be used.
--- .../net/wireless/brcm80211/brcmfmac/wl_cfg80211.c | 62 -------------------- 1 file changed, 62 deletions(-)
drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c +0 -62
@@ -2011,67 +2011,6 @@ done:return err; } -static s32 -brcmf_cfg80211_set_bitrate_mask (struct wiphy *wiphy,struct net_device *ndev, -const u8 *addr, -const struct cfg80211_bitrate_mask *mask) -{ -struct brcmf_if *ifp =netdev_priv (ndev); -struct brcm_rateset_le rateset_le; -s32 rate; -s32 val; -s32 err_bg; -s32 err_a; -u32 legacy; -s32 err =0 ; - -brcmf_dbg (TRACE ,"Enter\n" ); -if (!check_vif_up (ifp->vif)) -return -EIO ; - -/* addr param is always NULL. ignore it */ -/* Get current rateset */ - err =brcmf_fil_cmd_data_get (ifp,BRCMF_C_GET_CURR_RATESET , - &rateset_le,sizeof (rateset_le)); -if (err) { -brcmf_err ("could not get current rateset (%d)\n" , err); - goto done; - } - - legacy =ffs (mask->control[IEEE80211_BAND_2GHZ ].legacy &0xFFFF ); -if (!legacy) - legacy =ffs (mask->control[IEEE80211_BAND_5GHZ ].legacy & -0xFFFF ); - - val = wl_g_rates[legacy -1 ].bitrate *100000 ; - -if (val <le32_to_cpu (rateset_le.count)) -/* Select rate by rateset index */ - rate = rateset_le.rates[val] &0x7f ; -else -/* Specified rate in bps */ - rate = val /500000 ; - -brcmf_dbg (CONN ,"rate %d mbps\n" , rate /2 ); - -/* -* -* Set rate override, -* Since the is a/b/g-blind, both a/bg_rate are enforced. -*/ - err_bg =brcmf_fil_iovar_int_set (ifp,"bg_rate" , rate); - err_a =brcmf_fil_iovar_int_set (ifp,"a_rate" , rate); -if (err_bg && err_a) { -brcmf_err ("could not set fixed rate (%d) (%d)\n" , err_bg, - err_a); - err = err_bg | err_a; - } - -done: -brcmf_dbg (TRACE ,"Exit\n" ); -return err; -} -static s32 brcmf_inform_single_bss (struct brcmf_cfg80211_info *cfg,struct brcmf_bss_info_le *bi) {
@@ -3703,7 +3642,6 @@ static struct cfg80211_ops wl_cfg80211_ops = { .set_default_key = brcmf_cfg80211_config_default_key, .set_default_mgmt_key = brcmf_cfg80211_config_default_mgmt_key, .set_power_mgmt = brcmf_cfg80211_set_power_mgmt, - .set_bitrate_mask = brcmf_cfg80211_set_bitrate_mask, .connect = brcmf_cfg80211_connect, .disconnect = brcmf_cfg80211_disconnect, .suspend = brcmf_cfg80211_suspend,
Signature · 1 line
1.7.10.4
PATCH 7/18 brcmfmac: assure USB dongle firmware is reset upon module unload
In reply to Arend van SprielUpon unloading the brcmfmac module the USB firmware should be reset as the device remains powered. The reset assures a known device state when a new brcmfmac driver load is being done.
--- drivers/net/wireless/brcm80211/brcmfmac/dhd.h | 1 + drivers/net/wireless/brcm80211/brcmfmac/dhd_bus.h | 3 ++- drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c | 11 +++++++++++ drivers/net/wireless/brcm80211/brcmfmac/usb.c | 13 +++++++++++++ 4 files changed, 27 insertions(+), 1 deletion(-)
drivers/net/wireless/brcm80211/brcmfmac/dhd.h +1 -0
@@ -39,6 +39,7 @@#define BRCMF_C_GET_BSSID 23#define BRCMF_C_GET_SSID 25#define BRCMF_C_SET_SSID 26 +#define BRCMF_C_TERMINATED 28#define BRCMF_C_GET_CHANNEL 29#define BRCMF_C_SET_CHANNEL 30#define BRCMF_C_GET_SRL 31
drivers/net/wireless/brcm80211/brcmfmac/dhd_bus.h +2 -1
@@ -154,7 +154,8 @@ static inline void brcmf_rx_packet(struct device *dev, int ifidx,extern int brcmf_attach (uint bus_hdrlen,struct device *dev);/* Indication from bus module regarding removal/absence of dongle */ extern void brcmf_detach (struct device *dev); - +/* Indication from bus module that dongle should be reset */ +extern void brcmf_dev_reset (struct device *dev);/* Indication from bus module to change flow-control state */ extern void brcmf_txflowblock (struct device *dev,bool state);
drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c +11 -0
@@ -845,6 +845,17 @@ static void brcmf_bus_detach(struct brcmf_pub *drvr) } } +void brcmf_dev_reset (struct device *dev) +{ +struct brcmf_bus *bus_if =dev_get_drvdata (dev); +struct brcmf_pub *drvr = bus_if->drvr; + +if (drvr ==NULL ) +return ; + +brcmf_fil_cmd_int_set (drvr->iflist[0 ],BRCMF_C_TERMINATED ,1 ); +} +void brcmf_detach (struct device *dev) {int i;
drivers/net/wireless/brcm80211/brcmfmac/usb.c +13 -0
@@ -1524,10 +1524,23 @@ static void brcmf_release_fw(struct list_head *q) } } +static int brcmf_usb_reset_device (struct device *dev,void *notused) +{ +/* device past is the usb interface so we +* need to use parent here. +*/ +brcmf_dev_reset (dev->parent); +return 0 ; +}void brcmf_usb_exit (void ) { +struct device_driver *drv = &brcmf_usbdrvr.drvwrap.driver; +int ret; +brcmf_dbg (USB ,"Enter\n" ); + ret =driver_for_each_device (drv,NULL ,NULL , + brcmf_usb_reset_device);usb_deregister (&brcmf_usbdrvr);brcmf_release_fw (&fw_image_list); }
Signature · 1 line
1.7.10.4
PATCH 8/18 brcmfmac: define pr_fmt in one place
In reply to Arend van SprielSeveral source files (but not all) define the pr_fmt() macro in exactly the same way. Instead this commit defines it in a header file so driver logging is consistent.
--- drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c | 2 -- .../net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c | 2 -- drivers/net/wireless/brcm80211/brcmfmac/dhd_cdc.c | 2 -- drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c | 2 -- drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h | 17 +++++------------ drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c | 2 -- drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c | 2 -- drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c | 2 -- drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c | 2 -- 9 files changed, 5 insertions(+), 28 deletions(-)
drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c +0 -2
@@ -15,8 +15,6 @@*/ /* ****************** SDIO CARD Interface Functions **************************/ -#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt -#include <linux/types.h> #include <linux/netdevice.h> #include <linux/export.h>
drivers/net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c +0 -2
@@ -14,8 +14,6 @@* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt -#include <linux/types.h> #include <linux/netdevice.h> #include <linux/mmc/sdio.h>
drivers/net/wireless/brcm80211/brcmfmac/dhd_cdc.c +0 -2
@@ -19,8 +19,6 @@* For certain dcmd codes, the dongle interprets string data from the host. ******************************************************************************/ -#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt -#include <linux/types.h> #include <linux/netdevice.h>
drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c +0 -2
@@ -14,8 +14,6 @@* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt -#include <linux/kernel.h> #include <linux/string.h> #include <linux/netdevice.h>
drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h +5 -12
@@ -34,19 +34,12 @@#define BRCMF_SCAN_VAL 0x4000#define BRCMF_CONN_VAL 0x8000 -/* Macro for error messages. net_ratelimit() is used when driver -* debugging is not selected. When debugging the driver error -* messages are as important as other tracing or even more so. -*/ -#ifdef CONFIG_BRCMDBG +/* set default print format */ +#undef pr_fmt +#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt + +/* error messages are always logged */ #define brcmf_err (fmt, ...) pr_err("%s: " fmt, __func__, ##__VA_ARGS__) -#else -#define brcmf_err (fmt, ...) \ - do { \ - if (net_ratelimit()) \ - pr_err("%s: " fmt, __func__, ##__VA_ARGS__); \ - } while (0) -#endif #if defined(DEBUG )
drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c +0 -2
@@ -14,8 +14,6 @@* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt -#include <linux/kernel.h> #include <linux/etherdevice.h> #include <linux/module.h>
drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c +0 -2
@@ -14,8 +14,6 @@* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt -#include <linux/types.h> #include <linux/kernel.h> #include <linux/kthread.h>
drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c +0 -2
@@ -15,8 +15,6 @@*/ /* ***** SDIO interface chip backplane handle functions ***** */ -#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt -#include <linux/types.h> #include <linux/netdevice.h> #include <linux/mmc/card.h>
drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c +0 -2
@@ -16,8 +16,6 @@/* Toplevel file. Relies on dhd_linux.c to send commands to the dongle. */ -#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt -#include <linux/kernel.h> #include <linux/etherdevice.h> #include <net/cfg80211.h>
Signature · 1 line
1.7.10.4
Re: [PATCH 08/18] brcmfmac: define pr_fmt in one place
Quoted 3 lines · Arend van Spriel
Several source files (but not all) define the
pr_fmt()macro in exactly the same way. Instead this commit defines it in a header file so driver logging is consistent.
The commit message doesn't describe the change to brcm_err
drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h
Quoted 1 line
drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h +0
-0
[]
Quoted 22 lines
drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h +5
-12@@ -34,19 +34,12 @@#define BRCMF_SCAN_VAL 0x4000#define BRCMF_CONN_VAL 0x8000 -/* Macro for error messages. net_ratelimit() is used when driver -* debugging is not selected. When debugging the driver error -* messages are as important as other tracing or even more so. -*/ -#ifdef CONFIG_BRCMDBG +/* set default print format */ +#undef pr_fmt +#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt + +/* error messages are always logged */ #define brcmf_err (fmt, ...) pr_err("%s: " fmt, __func__, ##__VA_ARGS__) -#else -#define brcmf_err (fmt, ...) \ - do { \ - if (net_ratelimit()) \ - pr_err("%s: " fmt, __func__, ##__VA_ARGS__); \ - } while (0) -#endif
Re: [PATCH 08/18] brcmfmac: define pr_fmt in one place
Quoted 6 lines · Joe Perches
Quoted 3 lines · Arend van Spriel
Several source files (but not all) define the
pr_fmt()macro in exactly the same way. Instead this commit defines it in a header file so driver logging is consistent.The commit message doesn't describe the change to
brcm_err
Thanks, Joe
I actually did not intend to change that. The net_ratelimit stuff should stay.
John,
I will resubmit this patch.
Gr. AvS
Quoted 27 lines
drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h
Quoted 1 line
drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h +0
-0[]
Quoted 22 lines
drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h +5
-12@@ -34,19 +34,12 @@#define BRCMF_SCAN_VAL 0x4000#define BRCMF_CONN_VAL 0x8000 -/* Macro for error messages. net_ratelimit() is used when driver -* debugging is not selected. When debugging the driver error -* messages are as important as other tracing or even more so. -*/ -#ifdef CONFIG_BRCMDBG +/* set default print format */ +#undef pr_fmt +#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt + +/* error messages are always logged */ #define brcmf_err (fmt, ...) pr_err("%s: " fmt, __func__, ##__VA_ARGS__) -#else -#define brcmf_err (fmt, ...) \ - do { \ - if (net_ratelimit()) \ - pr_err("%s: " fmt, __func__, ##__VA_ARGS__); \ - } while (0) -#endif
PATCH v2 8/18 brcmfmac: define pr_fmt in one place
In reply to Arend van SprielSeveral source files (but not all) define the pr_fmt() macro in exactly the same way. Instead this commit defines it in a header file so driver logging is consistent.
---
Hi John,
Joe caught this so here is the replacement patch for previous patch with message id: <[email protected]>
Regards,
Arend
--- drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c | 2 -- drivers/net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c | 2 -- drivers/net/wireless/brcm80211/brcmfmac/dhd_cdc.c | 2 -- drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c | 2 -- drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h | 4 ++++ drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c | 2 -- drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c | 2 -- drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c | 2 -- drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c | 2 -- 9 files changed, 4 insertions(+), 16 deletions(-)
drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c +0 -2
@@ -15,8 +15,6 @@*/ /* ****************** SDIO CARD Interface Functions **************************/ -#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt -#include <linux/types.h> #include <linux/netdevice.h> #include <linux/export.h>
drivers/net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c +0 -2
@@ -14,8 +14,6 @@* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt -#include <linux/types.h> #include <linux/netdevice.h> #include <linux/mmc/sdio.h>
drivers/net/wireless/brcm80211/brcmfmac/dhd_cdc.c +0 -2
@@ -19,8 +19,6 @@* For certain dcmd codes, the dongle interprets string data from the host. ******************************************************************************/ -#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt -#include <linux/types.h> #include <linux/netdevice.h>
drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c +0 -2
@@ -14,8 +14,6 @@* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt -#include <linux/kernel.h> #include <linux/string.h> #include <linux/netdevice.h>
drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h +4 -0
@@ -34,6 +34,10 @@#define BRCMF_SCAN_VAL 0x4000#define BRCMF_CONN_VAL 0x8000 +/* set default print format */ +#undef pr_fmt +#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt +/* Macro for error messages. net_ratelimit() is used when driver * debugging is not selected. When debugging the driver error * messages are as important as other tracing or even more so.
drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c +0 -2
@@ -14,8 +14,6 @@* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt -#include <linux/kernel.h> #include <linux/etherdevice.h> #include <linux/module.h>
drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c +0 -2
@@ -14,8 +14,6 @@* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt -#include <linux/types.h> #include <linux/kernel.h> #include <linux/kthread.h>
drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c +0 -2
@@ -15,8 +15,6 @@*/ /* ***** SDIO interface chip backplane handle functions ***** */ -#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt -#include <linux/types.h> #include <linux/netdevice.h> #include <linux/mmc/card.h>
drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c +0 -2
@@ -16,8 +16,6 @@/* Toplevel file. Relies on dhd_linux.c to send commands to the dongle. */ -#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt -#include <linux/kernel.h> #include <linux/etherdevice.h> #include <net/cfg80211.h>
Signature · 1 line
1.7.10.4
Re: [PATCH v2 08/18] brcmfmac: define pr_fmt in one place
Quoted 85 lines · Arend van Spriel
Several source files (but not all) define the
pr_fmt()macro in exactly the same way. Instead this commit defines it in a header file so driver logging is consistent.Cc Joe Perches <[email protected]>Reviewed-by Hante Meuleman <[email protected]>Reviewed-by Pieter-Paul Giesberts <[email protected]>Signed-off-by Arend van Spriel <[email protected]>---
Hi John,Joe caught this so here is the replacement patch for previous patch with message id: <[email protected]>
Regards,
Arend--- drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c | 2 -- drivers/net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c | 2 -- drivers/net/wireless/brcm80211/brcmfmac/dhd_cdc.c | 2 -- drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c | 2 -- drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h | 4 ++++ drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c | 2 -- drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c | 2 -- drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c | 2 -- drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c | 2 -- 9 files changed, 4 insertions(+), 16 deletions(-)drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c +0
-2@@ -15,8 +15,6 @@*/ /* ****************** SDIO CARD Interface Functions **************************/ -#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt -#include <linux/types.h> #include <linux/netdevice.h> #include <linux/export.h> drivers/net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c +0
-2@@ -14,8 +14,6 @@* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt -#include <linux/types.h> #include <linux/netdevice.h> #include <linux/mmc/sdio.h> drivers/net/wireless/brcm80211/brcmfmac/dhd_cdc.c +0
-2@@ -19,8 +19,6 @@* For certain dcmd codes, the dongle interprets string data from the host. ******************************************************************************/ -#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt -#include <linux/types.h> #include <linux/netdevice.h> drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c +0
-2@@ -14,8 +14,6 @@* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt -#include <linux/kernel.h> #include <linux/string.h> #include <linux/netdevice.h> drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h +0
-0
drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h line 40
Quoted 7 lines
drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h +4
-0@@ -34,6 +34,10 @@#define BRCMF_SCAN_VAL 0x4000#define BRCMF_CONN_VAL 0x8000 +/* set default print format */ +#undef pr_fmt +#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt +
The only negative I see to this is that
any pr_<level> in any include file like:
include/linux/netdevice.h:1892: pr_info("netif_stop_queue() cannot be called before register_netdev()\n");
may not be prefixed.
I expect that one day all these
#define pr_fmt(fmt) KBUILD_MODNAME etc...
will be made unnecessary as kernel.h should
be eventually changed to make it the default.
Something like:
Re: [PATCH v2 08/18] brcmfmac: define pr_fmt in one place
Quoted 101 lines · Joe Perches
Quoted 85 lines · Arend van Spriel
Several source files (but not all) define the
pr_fmt()macro in exactly the same way. Instead this commit defines it in a header file so driver logging is consistent.Cc Joe Perches <[email protected]>Reviewed-by Hante Meuleman <[email protected]>Reviewed-by Pieter-Paul Giesberts <[email protected]>Signed-off-by Arend van Spriel <[email protected]>---
Hi John,Joe caught this so here is the replacement patch for previous patch with message id: <[email protected]>
Regards,
Arend--- drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c | 2 -- drivers/net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c | 2 -- drivers/net/wireless/brcm80211/brcmfmac/dhd_cdc.c | 2 -- drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c | 2 -- drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h | 4 ++++ drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c | 2 -- drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c | 2 -- drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c | 2 -- drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c | 2 -- 9 files changed, 4 insertions(+), 16 deletions(-)drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c +0
-2@@ -15,8 +15,6 @@*/ /* ****************** SDIO CARD Interface Functions **************************/ -#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt -#include <linux/types.h> #include <linux/netdevice.h> #include <linux/export.h> drivers/net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c +0
-2@@ -14,8 +14,6 @@* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt -#include <linux/types.h> #include <linux/netdevice.h> #include <linux/mmc/sdio.h> drivers/net/wireless/brcm80211/brcmfmac/dhd_cdc.c +0
-2@@ -19,8 +19,6 @@* For certain dcmd codes, the dongle interprets string data from the host. ******************************************************************************/ -#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt -#include <linux/types.h> #include <linux/netdevice.h> drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c +0
-2@@ -14,8 +14,6 @@* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt -#include <linux/kernel.h> #include <linux/string.h> #include <linux/netdevice.h> drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h +0
-0drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h line 40
Quoted 7 lines
drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h +4
-0@@ -34,6 +34,10 @@#define BRCMF_SCAN_VAL 0x4000#define BRCMF_CONN_VAL 0x8000 +/* set default print format */ +#undef pr_fmt +#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt +The only negative I see to this is that
any pr_<level> in any include file like:
include/linux/netdevice.h:1892:pr_info("netif_stop_queue() cannot be called before register_netdev()\n");may not be prefixed.
Quoted 8 lines
I expect that one day all these
#definepr_fmt(fmt)KBUILD_MODNAMEetc...
will be made unnecessary askernel.hshould
be eventually changed to make it the default.Something like:
Got my vote for that.
Regards,
Arend
PATCH 9/18 brcmfmac: remove rx helper function from bus interface
In reply to Arend van SprielThe bus interface provided a wrapper function to pass a single packet to the common driver part filling a skb queue with one packet. For clarity the caller now sets up the skb queue and call the rx bus interface function.
--- drivers/net/wireless/brcm80211/brcmfmac/dhd_bus.h | 13 ++----------- drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c | 4 ++-- drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c | 7 +++++-- drivers/net/wireless/brcm80211/brcmfmac/usb.c | 5 ++++- 4 files changed, 13 insertions(+), 16 deletions(-)
drivers/net/wireless/brcm80211/brcmfmac/dhd_bus.h +2 -11
@@ -138,17 +138,8 @@ extern bool brcmf_c_prec_enq(struct device *dev, struct pktq *q, struct sk_buff *pkt, int prec);/* Receive frame for delivery to OS. Callee disposes of rxp. */ -extern void brcmf_rx_frame (struct device *dev,u8 ifidx, -struct sk_buff_head *rxlist); -static inline void brcmf_rx_packet (struct device *dev,int ifidx, -struct sk_buff *pkt) -{ -struct sk_buff_head q; - -skb_queue_head_init (&q); -skb_queue_tail (&q, pkt); -brcmf_rx_frame (dev, ifidx, &q); -} +extern void brcmf_rx_frames (struct device *dev,u8 ifidx, +struct sk_buff_head *rxlist);/* Indication from bus module regarding presence/insertion of dongle. */ extern int brcmf_attach (uint bus_hdrlen,struct device *dev);
drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c +2 -2
@@ -248,8 +248,8 @@ void brcmf_txflowblock(struct device *dev, bool state) } } -void brcmf_rx_frame (struct device *dev,u8 ifidx, -struct sk_buff_head *skb_list) +void brcmf_rx_frames (struct device *dev,u8 ifidx, +struct sk_buff_head *skb_list) {unsigned char *eth;uint len;
drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c +5 -2
@@ -1405,7 +1405,7 @@ static u8 brcmf_sdbrcm_rxglom(struct brcmf_sdio *bus, u8 rxseq) }/* sent any remaining packets up */ if (bus->glom.qlen) -brcmf_rx_frame (bus->sdiodev->dev, ifidx, &bus->glom); +brcmf_rx_frames (bus->sdiodev->dev, ifidx, &bus->glom); bus->sdcnt.rxglomframes++; bus->sdcnt.rxglompkts += bus->glom.qlen;
@@ -1556,6 +1556,7 @@ static void brcmf_pad(struct brcmf_sdio *bus, u16 *pad, u16 *rdlen)static uint brcmf_sdio_readframes (struct brcmf_sdio *bus,uint maxframes) {struct sk_buff *pkt;/* Packet for event or data frames */ +struct sk_buff_head pktlist;/* needed for bus interface */ u16 pad;/* Number of pad bytes to read */ uint rxleft =0 ;/* Remaining number of frames allowed */ int sdret;/* Return code from calls */
@@ -1766,7 +1767,9 @@ static uint brcmf_sdio_readframes(struct brcmf_sdio *bus, uint maxframes)continue ; } -brcmf_rx_packet (bus->sdiodev->dev, ifidx, pkt); +skb_queue_head_init (&pktlist); +skb_queue_tail (&pktlist, pkt); +brcmf_rx_frames (bus->sdiodev->dev, ifidx, &pktlist); } rxcount = maxframes - rxleft;
drivers/net/wireless/brcm80211/brcmfmac/usb.c +4 -1
@@ -443,6 +443,7 @@ static void brcmf_usb_rx_complete(struct urb *urb)struct brcmf_usbreq *req = (struct brcmf_usbreq *)urb->context;struct brcmf_usbdev_info *devinfo = req->devinfo;struct sk_buff *skb; +struct sk_buff_head skbq;int ifidx =0 ;brcmf_dbg (USB ,"Enter, urb->status=%d\n" , urb->status);
@@ -460,13 +461,15 @@ static void brcmf_usb_rx_complete(struct urb *urb) }if (devinfo->bus_pub.state ==BRCMFMAC_USB_STATE_UP ) { +skb_queue_head_init (&skbq); +skb_queue_tail (&skbq, skb);skb_put (skb, urb->actual_length);if (brcmf_proto_hdrpull (devinfo->dev, &ifidx, skb) !=0 ) {brcmf_err ("rx protocol error\n" );brcmu_pkt_buf_free_skb (skb); devinfo->bus_pub.bus->dstats.rx_errors++; }else -brcmf_rx_packet (devinfo->dev, ifidx, skb); +brcmf_rx_frames (devinfo->dev, ifidx, &skbq);/* zero lenght packets indicate usb "failure". Do not refill */ if (urb->actual_length)brcmf_usb_rx_refill (devinfo, req);
Signature · 1 line
1.7.10.4
PATCH 10/18 brcmfmac: remove brcmf_proto_hdrpull() from bus interface
In reply to Arend van SprielThe use of the function brcmf_proto_hdrpull() is moved to the common part of the driver and consequently it can be removed from the bus interface.
--- drivers/net/wireless/brcm80211/brcmfmac/dhd.h | 4 ++++ drivers/net/wireless/brcm80211/brcmfmac/dhd_bus.h | 7 +------ drivers/net/wireless/brcm80211/brcmfmac/dhd_cdc.c | 6 +++--- drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c | 19 +++++++++++++++---- drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c | 19 ++----------------- drivers/net/wireless/brcm80211/brcmfmac/usb.c | 17 ++++------------- 6 files changed, 29 insertions(+), 43 deletions(-)
drivers/net/wireless/brcm80211/brcmfmac/dhd.h +4 -0
@@ -577,6 +577,10 @@ extern int brcmf_proto_cdc_query_dcmd(struct brcmf_pub *drvr, int ifidx,extern int brcmf_proto_cdc_set_dcmd (struct brcmf_pub *drvr,int ifidx,uint cmd,void *buf,uint len); +/* Remove any protocol-specific data header. */ +extern int brcmf_proto_hdrpull (struct brcmf_pub *drvr,u8 *ifidx, +struct sk_buff *rxp); +extern int brcmf_net_attach (struct brcmf_if *ifp);extern struct brcmf_if *brcmf_add_if (struct brcmf_pub *drvr,int ifidx,s32 bssidx,char *name,u8 *mac_addr);
drivers/net/wireless/brcm80211/brcmfmac/dhd_bus.h +1 -6
@@ -130,16 +130,11 @@ int brcmf_bus_rxctl(struct brcmf_bus *bus, unsigned char *msg, uint len)* interface functions from common layer */ -/* Remove any protocol-specific data header. */ -extern int brcmf_proto_hdrpull (struct device *dev,int *ifidx, -struct sk_buff *rxp); -extern bool brcmf_c_prec_enq (struct device *dev,struct pktq *q,struct sk_buff *pkt,int prec);/* Receive frame for delivery to OS. Callee disposes of rxp. */ -extern void brcmf_rx_frames (struct device *dev,u8 ifidx, -struct sk_buff_head *rxlist); +extern void brcmf_rx_frames (struct device *dev,struct sk_buff_head *rxlist);/* Indication from bus module regarding presence/insertion of dongle. */ extern int brcmf_attach (uint bus_hdrlen,struct device *dev);
drivers/net/wireless/brcm80211/brcmfmac/dhd_cdc.c +3 -3
@@ -303,12 +303,10 @@ void brcmf_proto_hdrpush(struct brcmf_pub *drvr, int ifidx,BDC_SET_IF_IDX (h, ifidx); } -int brcmf_proto_hdrpull (struct device *dev,int *ifidx, +int brcmf_proto_hdrpull (struct brcmf_pub *drvr,u8 *ifidx,struct sk_buff *pktbuf) {struct brcmf_proto_bdc_header *h; -struct brcmf_bus *bus_if =dev_get_drvdata (dev); -struct brcmf_pub *drvr = bus_if->drvr;brcmf_dbg (TRACE ,"Enter\n" );
@@ -346,6 +344,8 @@ int brcmf_proto_hdrpull(struct device *dev, int *ifidx,skb_pull (pktbuf,BDC_HEADER_LEN );skb_pull (pktbuf, h->data_offset <<2 ); +if (pktbuf->len ==0 ) +return -ENODATA ;return 0 ; }
drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c +15 -4
@@ -248,8 +248,7 @@ void brcmf_txflowblock(struct device *dev, bool state) } } -void brcmf_rx_frames (struct device *dev,u8 ifidx, -struct sk_buff_head *skb_list) +void brcmf_rx_frames (struct device *dev,struct sk_buff_head *skb_list) {unsigned char *eth;uint len;
@@ -257,12 +256,24 @@ void brcmf_rx_frames(struct device *dev, u8 ifidx,struct brcmf_if *ifp;struct brcmf_bus *bus_if =dev_get_drvdata (dev);struct brcmf_pub *drvr = bus_if->drvr; +u8 ifidx; +int ret;brcmf_dbg (TRACE ,"Enter\n" ); skb_queue_walk_safe(skb_list, skb, pnext) {skb_unlink (skb, skb_list); +/* process and remove protocol-specific header +*/ + ret =brcmf_proto_hdrpull (drvr, &ifidx, skb); +if (ret <0 ) { +if (ret != -ENODATA ) + bus_if->dstats.rx_errors++; +brcmu_pkt_buf_free_skb (skb); +continue ; + } +/* Get the protocol, maintain skb around eth_type_trans() * The main reason for this hack is for the limitation of * Linux 2.4 where 'eth_type_trans' uses the
@@ -326,13 +337,13 @@ void brcmf_rx_frames(struct device *dev, u8 ifidx,void brcmf_txcomplete (struct device *dev,struct sk_buff *txp,bool success) { -uint ifidx; +u8 ifidx;struct ethhdr *eh;u16 type;struct brcmf_bus *bus_if =dev_get_drvdata (dev);struct brcmf_pub *drvr = bus_if->drvr; -brcmf_proto_hdrpull (dev, &ifidx, txp); +brcmf_proto_hdrpull (drvr, &ifidx, txp); eh = (struct ethhdr *)(txp->data); type =ntohs (eh->h_proto);
drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c +2 -17
@@ -1167,7 +1167,6 @@ static u8 brcmf_sdbrcm_rxglom(struct brcmf_sdio *bus, u8 rxseq)int errcode;u8 doff, sfdoff; -int ifidx =0 ;bool usechain = bus->use_rxchain;struct brcmf_sdio_read rd_new;
@@ -1386,13 +1385,6 @@ static u8 brcmf_sdbrcm_rxglom(struct brcmf_sdio *bus, u8 rxseq)skb_unlink (pfirst, &bus->glom);brcmu_pkt_buf_free_skb (pfirst);continue ; - }else if (brcmf_proto_hdrpull (bus->sdiodev->dev, - &ifidx, pfirst) !=0 ) { -brcmf_err ("rx protocol error\n" ); - bus->sdiodev->bus_if->dstats.rx_errors++; -skb_unlink (pfirst, &bus->glom); -brcmu_pkt_buf_free_skb (pfirst); -continue ; } brcmf_dbg_hex_dump(BRCMF_GLOM_ON(),
@@ -1405,7 +1397,7 @@ static u8 brcmf_sdbrcm_rxglom(struct brcmf_sdio *bus, u8 rxseq) }/* sent any remaining packets up */ if (bus->glom.qlen) -brcmf_rx_frames (bus->sdiodev->dev, ifidx, &bus->glom); +brcmf_rx_frames (bus->sdiodev->dev, &bus->glom); bus->sdcnt.rxglomframes++; bus->sdcnt.rxglompkts += bus->glom.qlen;
@@ -1560,7 +1552,6 @@ static uint brcmf_sdio_readframes(struct brcmf_sdio *bus, uint maxframes)u16 pad;/* Number of pad bytes to read */ uint rxleft =0 ;/* Remaining number of frames allowed */ int sdret;/* Return code from calls */ -int ifidx =0 ;uint rxcount =0 ;/* Total frames read */ struct brcmf_sdio_read *rd = &bus->cur_read, rd_new;u8 head_read =0 ;
@@ -1759,17 +1750,11 @@ static uint brcmf_sdio_readframes(struct brcmf_sdio *bus, uint maxframes)if (pkt->len ==0 ) {brcmu_pkt_buf_free_skb (pkt);continue ; - }else if (brcmf_proto_hdrpull (bus->sdiodev->dev, &ifidx, - pkt) !=0 ) { -brcmf_err ("rx protocol error\n" ); -brcmu_pkt_buf_free_skb (pkt); - bus->sdiodev->bus_if->dstats.rx_errors++; -continue ; }skb_queue_head_init (&pktlist);skb_queue_tail (&pktlist, pkt); -brcmf_rx_frames (bus->sdiodev->dev, ifidx, &pktlist); +brcmf_rx_frames (bus->sdiodev->dev, &pktlist); } rxcount = maxframes - rxleft;
drivers/net/wireless/brcm80211/brcmfmac/usb.c +4 -13
@@ -444,14 +444,14 @@ static void brcmf_usb_rx_complete(struct urb *urb)struct brcmf_usbdev_info *devinfo = req->devinfo;struct sk_buff *skb;struct sk_buff_head skbq; -int ifidx =0 ;brcmf_dbg (USB ,"Enter, urb->status=%d\n" , urb->status);brcmf_usb_del_fromq (devinfo, req); skb = req->skb; req->skb =NULL ; -if (urb->status ==0 ) { +/* zero lenght packets indicate usb "failure". Do not refill */ +if (urb->status ==0 && urb->actual_length) { devinfo->bus_pub.bus->dstats.rx_packets++; }else { devinfo->bus_pub.bus->dstats.rx_errors++;
@@ -464,17 +464,8 @@ static void brcmf_usb_rx_complete(struct urb *urb)skb_queue_head_init (&skbq);skb_queue_tail (&skbq, skb);skb_put (skb, urb->actual_length); -if (brcmf_proto_hdrpull (devinfo->dev, &ifidx, skb) !=0 ) { -brcmf_err ("rx protocol error\n" ); -brcmu_pkt_buf_free_skb (skb); - devinfo->bus_pub.bus->dstats.rx_errors++; - }else -brcmf_rx_frames (devinfo->dev, ifidx, &skbq); -/* zero lenght packets indicate usb "failure". Do not refill */ -if (urb->actual_length) -brcmf_usb_rx_refill (devinfo, req); -else -brcmf_usb_enq (devinfo, &devinfo->rx_freeq, req,NULL ); +brcmf_rx_frames (devinfo->dev, &skbq); +brcmf_usb_rx_refill (devinfo, req); }else {brcmu_pkt_buf_free_skb (skb);brcmf_usb_enq (devinfo, &devinfo->rx_freeq, req,NULL );
Signature · 1 line
1.7.10.4
PATCH 11/18 brcmfmac: Use dedicated trace level for CDC.
In reply to Arend van SprielFrom: Hante Meuleman <[email protected]>
CDC debug is partly done with TRACE and partly with CTL, however CDC hardly ever needs debugging. Use dedicated level CDC and replace TRACE and CTL in dhd_cdc with that.
--- drivers/net/wireless/brcm80211/brcmfmac/dhd_cdc.c | 16 +++++----- drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h | 31 ++++++++++---------- .../net/wireless/brcm80211/brcmfmac/dhd_linux.c | 2 +- 3 files changed, 24 insertions(+), 25 deletions(-)
drivers/net/wireless/brcm80211/brcmfmac/dhd_cdc.c +7 -9
@@ -105,7 +105,7 @@ static int brcmf_proto_cdc_msg(struct brcmf_pub *drvr)int len =le32_to_cpu (prot->msg.len) +sizeof (struct brcmf_proto_cdc_dcmd ); -brcmf_dbg (TRACE ,"Enter\n" ); +brcmf_dbg (CDC ,"Enter\n" );/* NOTE : cdc->msg.len holds the desired length of the buffer to be * returned. Only up to CDC_MAX_MSG_SIZE of this buffer area
@@ -123,7 +123,7 @@ static int brcmf_proto_cdc_cmplt(struct brcmf_pub *drvr, u32 id, u32 len)int ret;struct brcmf_proto *prot = drvr->prot; -brcmf_dbg (TRACE ,"Enter\n" ); +brcmf_dbg (CDC ,"Enter\n" ); len +=sizeof (struct brcmf_proto_cdc_dcmd ); do { ret = brcmf_bus_rxctl(drvr->bus_if, (unsigned char *)&prot->msg,
@@ -145,8 +145,7 @@ brcmf_proto_cdc_query_dcmd(struct brcmf_pub *drvr, int ifidx, uint cmd,int ret =0 , retries =0 ;u32 id, flags; -brcmf_dbg (TRACE ,"Enter\n" ); -brcmf_dbg (CTL ,"cmd %d len %d\n" , cmd, len); +brcmf_dbg (CDC ,"Enter, cmd %d len %d\n" , cmd, len);/* Respond "bcmerror" and "bcmerrorstr" with local cache */ if (cmd ==BRCMF_C_GET_VAR && buf) {
@@ -226,8 +225,7 @@ int brcmf_proto_cdc_set_dcmd(struct brcmf_pub *drvr, int ifidx, uint cmd,int ret =0 ;u32 flags, id; -brcmf_dbg (TRACE ,"Enter\n" ); -brcmf_dbg (CTL ,"cmd %d len %d\n" , cmd, len); +brcmf_dbg (CDC ,"Enter, cmd %d len %d\n" , cmd, len);memset (msg,0 ,sizeof (struct brcmf_proto_cdc_dcmd ));
@@ -285,7 +283,7 @@ void brcmf_proto_hdrpush(struct brcmf_pub *drvr, int ifidx, {struct brcmf_proto_bdc_header *h; -brcmf_dbg (TRACE ,"Enter\n" ); +brcmf_dbg (CDC ,"Enter\n" );/* Push BDC header used to convey priority for buses that don't */
@@ -308,7 +306,7 @@ int brcmf_proto_hdrpull(struct brcmf_pub *drvr, u8 *ifidx, {struct brcmf_proto_bdc_header *h; -brcmf_dbg (TRACE ,"Enter\n" ); +brcmf_dbg (CDC ,"Enter\n" );/* Pop BDC header used to convey priority for buses that don't */
@@ -334,7 +332,7 @@ int brcmf_proto_hdrpull(struct brcmf_pub *drvr, u8 *ifidx, }if (h->flags &BDC_FLAG_SUM_GOOD ) { -brcmf_dbg (INFO ,"%s: BDC packet received with good rx-csum, flags 0x%x\n" , +brcmf_dbg (CDC ,"%s: BDC rcv, good checksum, flags 0x%x\n" ,brcmf_ifname (drvr, *ifidx), h->flags);pkt_set_sum_good (pktbuf, true); }
drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h +16 -15
@@ -18,21 +18,22 @@#define _BRCMF_DBG_H_/* message levels */ -#define BRCMF_TRACE_VAL 0x0002 -#define BRCMF_INFO_VAL 0x0004 -#define BRCMF_DATA_VAL 0x0008 -#define BRCMF_CTL_VAL 0x0010 -#define BRCMF_TIMER_VAL 0x0020 -#define BRCMF_HDRS_VAL 0x0040 -#define BRCMF_BYTES_VAL 0x0080 -#define BRCMF_INTR_VAL 0x0100 -#define BRCMF_GLOM_VAL 0x0200 -#define BRCMF_EVENT_VAL 0x0400 -#define BRCMF_BTA_VAL 0x0800 -#define BRCMF_FIL_VAL 0x1000 -#define BRCMF_USB_VAL 0x2000 -#define BRCMF_SCAN_VAL 0x4000 -#define BRCMF_CONN_VAL 0x8000 +#define BRCMF_TRACE_VAL 0x00000002 +#define BRCMF_INFO_VAL 0x00000004 +#define BRCMF_DATA_VAL 0x00000008 +#define BRCMF_CTL_VAL 0x00000010 +#define BRCMF_TIMER_VAL 0x00000020 +#define BRCMF_HDRS_VAL 0x00000040 +#define BRCMF_BYTES_VAL 0x00000080 +#define BRCMF_INTR_VAL 0x00000100 +#define BRCMF_GLOM_VAL 0x00000200 +#define BRCMF_EVENT_VAL 0x00000400 +#define BRCMF_BTA_VAL 0x00000800 +#define BRCMF_FIL_VAL 0x00001000 +#define BRCMF_USB_VAL 0x00002000 +#define BRCMF_SCAN_VAL 0x00004000 +#define BRCMF_CONN_VAL 0x00008000 +#define BRCMF_CDC_VAL 0x00010000/* set default print format */ #undef pr_fmt
drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c +1 -1
@@ -459,7 +459,7 @@ static int brcmf_ethtool(struct brcmf_if *ifp, void __user *uaddr)sprintf (info.version,"%lu" , drvr->drv_version);if (copy_to_user (uaddr, &info,sizeof (info)))return -EFAULT ; -brcmf_dbg (CTL ,"given %*s, returning %s\n" , +brcmf_dbg (TRACE ,"given %*s, returning %s\n" , (int )sizeof (drvname), drvname, info.driver);break ;
Signature · 1 line
1.7.10.4
PATCH 12/18 brcmfmac: remove unused event related definitions
In reply to Arend van SprielThe driver had some global definitions in dhd.h to map event identifiers to event names. With redesign of firmware event processing this has all moved to fweh module so these definitions can be removed.
--- drivers/net/wireless/brcm80211/brcmfmac/dhd.h | 7 ------- 1 file changed, 7 deletions(-)
drivers/net/wireless/brcm80211/brcmfmac/dhd.h +0 -7
@@ -520,11 +520,6 @@ struct brcmf_pub {#endif }; -struct bcmevent_name { -uint event; -const char *name; -}; -struct brcmf_if_event {u8 ifidx;u8 action;
@@ -564,8 +559,6 @@ static inline s32 brcmf_ndev_bssidx(struct net_device *ndev)return ifp->bssidx; } -extern const struct bcmevent_name bcmevent_names[]; -extern int brcmf_netdev_wait_pend8021x (struct net_device *ndev);/* Return pointer to interface name */
Signature · 1 line
1.7.10.4
PATCH 13/18 brcmfmac: cleanup netdev transmit callback
In reply to Arend van SprielThe header of the ethernet packet is processed conditionally, but the check is wrong as it checks skb length is at least ETH_ALEN. It should check it is at least sizeof struct ethhdr instead.
--- .../net/wireless/brcm80211/brcmfmac/dhd_linux.c | 22 ++++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-)
drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c +13 -9
@@ -165,6 +165,7 @@ static int brcmf_netdev_start_xmit(struct sk_buff *skb, struct net_device *ndev)int ret;struct brcmf_if *ifp =netdev_priv (ndev);struct brcmf_pub *drvr = ifp->drvr; +struct ethhdr *eh;brcmf_dbg (TRACE ,"Enter\n" );
@@ -202,17 +203,20 @@ static int brcmf_netdev_start_xmit(struct sk_buff *skb, struct net_device *ndev) } } -/* Update multicast statistic */ -if (skb->len >=ETH_ALEN ) { -u8 *pktdata = (u8 *)(skb->data); -struct ethhdr *eh = (struct ethhdr *)pktdata; - -if (is_multicast_ether_addr (eh->h_dest)) - drvr->tx_multicast++; -if (ntohs (eh->h_proto) ==ETH_P_PAE ) -atomic_inc (&drvr->pend_8021x_cnt); +/* validate length for ether packet */ +if (skb->len <sizeof (*eh)) { + ret = -EINVAL ; +dev_kfree_skb (skb); + goto done; } +/* handle ethernet header */ + eh = (struct ethhdr *)(skb->data); +if (is_multicast_ether_addr (eh->h_dest)) + drvr->tx_multicast++; +if (ntohs (eh->h_proto) ==ETH_P_PAE ) +atomic_inc (&drvr->pend_8021x_cnt); +/* If the protocol uses a data header, apply it */ brcmf_proto_hdrpush (drvr, ifp->idx, skb);
Signature · 1 line
1.7.10.4
PATCH 14/18 brcmfmac: remove unnecessary curly braces in dhd_attach()
In reply to Arend van SprielStumbled into a curly braces used for if statement with only one conditional statement. Removing them.
--- drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c +1 -2
@@ -890,9 +890,8 @@ void brcmf_detach(struct device *dev)brcmf_bus_detach (drvr); -if (drvr->prot) { +if (drvr->prot)brcmf_proto_detach (drvr); - }brcmf_debugfs_detach (drvr); bus_if->drvr =NULL ;
Signature · 1 line
1.7.10.4
PATCH 15/18 brcmfmac: Remove unused caching dongle error.
In reply to Arend van SprielFrom: Hante Meuleman <[email protected]>
CDC errors are retained. However, it is never used so it can be removed.
--- drivers/net/wireless/brcm80211/brcmfmac/dhd.h | 3 --- drivers/net/wireless/brcm80211/brcmfmac/dhd_cdc.c | 22 ++------------------- 2 files changed, 2 insertions(+), 23 deletions(-)
drivers/net/wireless/brcm80211/brcmfmac/dhd.h +0 -3
@@ -496,9 +496,6 @@ struct brcmf_pub {/* Last error return */ int bcmerror; -/* Last error from dongle */ -int dongle_error; -/* Suspend disable flag flag */ int suspend_disable_flag;/* "1" to disable all extra powersaving during suspend */
drivers/net/wireless/brcm80211/brcmfmac/dhd_cdc.c +2 -20
@@ -147,18 +147,6 @@ brcmf_proto_cdc_query_dcmd(struct brcmf_pub *drvr, int ifidx, uint cmd,brcmf_dbg (CDC ,"Enter, cmd %d len %d\n" , cmd, len); -/* Respond "bcmerror" and "bcmerrorstr" with local cache */ -if (cmd ==BRCMF_C_GET_VAR && buf) { -if (!strcmp ((char *)buf,"bcmerrorstr" )) { -strncpy ((char *)buf,"bcm_error" , -BCME_STRLEN ); - goto done; - }else if (!strcmp ((char *)buf,"bcmerror" )) { - *(int *)buf = drvr->dongle_error; - goto done; - } - } -memset (msg,0 ,sizeof (struct brcmf_proto_cdc_dcmd )); msg->cmd =cpu_to_le32 (cmd);
@@ -207,11 +195,8 @@ retry: }/* Check the ERROR flag */ -if (flags &CDC_DCMD_ERROR ) { +if (flags &CDC_DCMD_ERROR ) ret =le32_to_cpu (msg->status); -/* Cache error from dongle */ - drvr->dongle_error = ret; - } done:return ret;
@@ -258,11 +243,8 @@ int brcmf_proto_cdc_set_dcmd(struct brcmf_pub *drvr, int ifidx, uint cmd, }/* Check the ERROR flag */ -if (flags &CDC_DCMD_ERROR ) { +if (flags &CDC_DCMD_ERROR ) ret =le32_to_cpu (msg->status); -/* Cache error from dongle */ - drvr->dongle_error = ret; - } done:return ret;
Signature · 1 line
1.7.10.4
PATCH 16/18 brcmfmac: Return correct error on netdev xmit.
In reply to Arend van SprielFrom: Hante Meuleman <[email protected]>
Netdev xmit routine brcfm_netdev_start_xmit was defined incorrectly and used wrong return codes. Always eat the packet and return ok. Remove drvr_up check since it is not relevant.
--- .../net/wireless/brcm80211/brcmfmac/dhd_linux.c | 22 +++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-)
drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c +12 -10
@@ -160,7 +160,8 @@ static void brcmf_netdev_set_multicast_list(struct net_device *ndev)schedule_work (&ifp->multicast_work); } -static int brcmf_netdev_start_xmit (struct sk_buff *skb,struct net_device *ndev) +static netdev_tx_t brcmf_netdev_start_xmit (struct sk_buff *skb, +struct net_device *ndev) {int ret;struct brcmf_if *ifp =netdev_priv (ndev);
@@ -169,20 +170,21 @@ static int brcmf_netdev_start_xmit(struct sk_buff *skb, struct net_device *ndev)brcmf_dbg (TRACE ,"Enter\n" ); -/* Reject if down */ -if (!drvr->bus_if->drvr_up || - (drvr->bus_if->state !=BRCMF_BUS_DATA )) { -brcmf_err ("xmit rejected drvup=%d state=%d\n" , - drvr->bus_if->drvr_up, - drvr->bus_if->state); +/* Can the device send data? */ +if (drvr->bus_if->state !=BRCMF_BUS_DATA ) { +brcmf_err ("xmit rejected state=%d\n" , drvr->bus_if->state);netif_stop_queue (ndev); -return -ENODEV ; +dev_kfree_skb (skb); + ret = -ENODEV ; + goto done; }if (!drvr->iflist[ifp->idx]) {brcmf_err ("bad ifidx %d\n" , ifp->idx);netif_stop_queue (ndev); -return -ENODEV ; +dev_kfree_skb (skb); + ret = -ENODEV ; + goto done; }/* Make sure there's enough room for any header */
@@ -230,7 +232,7 @@ done: drvr->bus_if->dstats.tx_packets++;/* Return ok: we always eat the packet */ -return 0 ; +return NETDEV_TX_OK ; }void brcmf_txflowblock (struct device *dev,bool state)
Signature · 1 line
1.7.10.4
PATCH 17/18 brcmfmac: Removing obsolete variables and inline functions.
In reply to Arend van SprielFrom: Hante Meuleman <[email protected]>
--- drivers/net/wireless/brcm80211/brcmfmac/dhd.h | 24 --------------------- drivers/net/wireless/brcm80211/brcmfmac/dhd_cdc.c | 2 -- 2 files changed, 26 deletions(-)
drivers/net/wireless/brcm80211/brcmfmac/dhd.h +0 -24
@@ -481,33 +481,14 @@ struct brcmf_pub {unsigned long drv_version;/* Version of dongle-resident driver */ u8 mac[ETH_ALEN ];/* MAC address obtained from dongle */ -/* Additional stats for the bus level */ -/* Multicast data packets sent to dongle */ unsigned long tx_multicast; -/* Packets flushed due to unscheduled sendup thread */ -unsigned long rx_flushed; -/* Number of times dpc scheduled by watchdog timer */ -unsigned long wd_dpc_sched; - -/* Number of flow control pkts recvd */ -unsigned long fc_packets; - -/* Last error return */ -int bcmerror; - -/* Suspend disable flag flag */ -int suspend_disable_flag;/* "1" to disable all extra powersaving -during suspend */ -int in_suspend;/* flag set to 1 when early suspend called */ -int dtim_skip;/* dtim skip , default 0 means wake each dtim */ struct brcmf_if *iflist[BRCMF_MAX_IFS ];struct mutex proto_block;unsigned char proto_buf[BRCMF_DCMD_MAXLEN ]; -u8 macvalue[ETH_ALEN ];atomic_t pend_8021x_cnt;wait_queue_head_t pend_8021x_wait;
@@ -550,11 +531,6 @@ struct brcmf_if {u8 mac_addr[ETH_ALEN ]; }; -static inline s32 brcmf_ndev_bssidx (struct net_device *ndev) -{ -struct brcmf_if *ifp =netdev_priv (ndev); -return ifp->bssidx; -}extern int brcmf_netdev_wait_pend8021x (struct net_device *ndev);
drivers/net/wireless/brcm80211/brcmfmac/dhd_cdc.c +0 -2
@@ -92,8 +92,6 @@ struct brcmf_proto_bdc_header {struct brcmf_proto {u16 reqid; -u8 pending; -u32 lastcmd;u8 bus_header[BUS_HEADER_LEN ];struct brcmf_proto_cdc_dcmd msg;unsigned char buf[BRCMF_DCMD_MAXLEN +ROUND_UP_MARGIN ];
Signature · 1 line
1.7.10.4
PATCH 18/18 brcmfmac: Update init code routines from interface up.
In reply to Arend van SprielFrom: Hante Meuleman <[email protected]>
On interface up dongle gets inialized. Move UP command to common routine and update these common init routines using ifp.
--- .../net/wireless/brcm80211/brcmfmac/dhd_linux.c | 9 ++---- .../net/wireless/brcm80211/brcmfmac/wl_cfg80211.c | 30 +++++++++----------- 2 files changed, 15 insertions(+), 24 deletions(-)
drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c +2 -7
@@ -585,14 +585,9 @@ static int brcmf_netdev_open(struct net_device *ndev)/* Get current TOE mode from dongle */ if (brcmf_fil_iovar_int_get (ifp,"toe_ol" , &toe_ol) >=0 && (toe_ol &TOE_TX_CSUM_OL ) !=0 ) - drvr->iflist[ifp->idx]->ndev->features |= -NETIF_F_IP_CSUM ; + ndev->features |=NETIF_F_IP_CSUM ;else - drvr->iflist[ifp->idx]->ndev->features &= - ~NETIF_F_IP_CSUM ; - -/* make sure RF is ready for work */ -brcmf_fil_cmd_int_set (ifp,BRCMF_C_UP ,0 ); + ndev->features &= ~NETIF_F_IP_CSUM ;/* Allow transmit calls */ netif_start_queue (ndev);
drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c +13 -17
@@ -4265,9 +4265,8 @@ void brcmf_cfg80211_detach(struct brcmf_cfg80211_info *cfg) }static s32 -brcmf_dongle_roam (struct net_device *ndev,u32 roamvar,u32 bcn_timeout) +brcmf_dongle_roam (struct brcmf_if *ifp,u32 roamvar,u32 bcn_timeout) { -struct brcmf_if *ifp =netdev_priv (ndev);s32 err =0 ;__le32 roamtrigger[2 ];__le32 roam_delta[2 ];
@@ -4318,10 +4317,9 @@ dongle_rom_out: }static s32 -brcmf_dongle_scantime (struct net_device *ndev,s32 scan_assoc_time, +brcmf_dongle_scantime (struct brcmf_if *ifp,s32 scan_assoc_time,s32 scan_unassoc_time,s32 scan_passive_time) { -struct brcmf_if *ifp =netdev_priv (ndev);s32 err =0 ; err = brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_SCAN_CHANNEL_TIME,
@@ -4391,6 +4389,7 @@ static s32 brcmf_config_dongle(struct brcmf_cfg80211_info *cfg) {struct net_device *ndev;struct wireless_dev *wdev; +struct brcmf_if *ifp;s32 power_mode;s32 err =0 ;
@@ -4399,35 +4398,34 @@ static s32 brcmf_config_dongle(struct brcmf_cfg80211_info *cfg) ndev =cfg_to_ndev (cfg); wdev = ndev->ieee80211_ptr; + ifp =netdev_priv (ndev); + +/* make sure RF is ready for work */ +brcmf_fil_cmd_int_set (ifp,BRCMF_C_UP ,0 ); -brcmf_dongle_scantime (ndev,WL_SCAN_CHANNEL_TIME , -WL_SCAN_UNASSOC_TIME ,WL_SCAN_PASSIVE_TIME ); +brcmf_dongle_scantime (ifp,WL_SCAN_CHANNEL_TIME , +WL_SCAN_UNASSOC_TIME ,WL_SCAN_PASSIVE_TIME ); power_mode = cfg->pwr_save ?PM_FAST :PM_OFF ; - err =brcmf_fil_cmd_int_set (netdev_priv (ndev),BRCMF_C_SET_PM , - power_mode); + err =brcmf_fil_cmd_int_set (ifp,BRCMF_C_SET_PM , power_mode);if (err) goto default_conf_out;brcmf_dbg (INFO ,"power save set to %s\n" , (power_mode ?"enabled" :"disabled" )); - err =brcmf_dongle_roam (ndev, (cfg->roam_on ?0 :1 ), -WL_BEACON_TIMEOUT ); + err =brcmf_dongle_roam (ifp, (cfg->roam_on ?0 :1 ),WL_BEACON_TIMEOUT );if (err) goto default_conf_out; err =brcmf_cfg80211_change_iface (wdev->wiphy, ndev, wdev->iftype,NULL ,NULL ); -if (err && err != -EINPROGRESS ) +if (err) goto default_conf_out; err =brcmf_dongle_probecap (cfg);if (err) goto default_conf_out; -/* -EINPROGRESS: Call commit handler */ - -default_conf_out: - cfg->dongle_up = true; +default_conf_out:return err;
@@ -4436,8 +4434,6 @@ default_conf_out:static s32 __brcmf_cfg80211_up (struct brcmf_if *ifp) {set_bit (BRCMF_VIF_STATUS_READY , &ifp->vif->sme_state); -if (ifp->idx) -return 0 ;return brcmf_config_dongle (ifp->drvr->config); }
Signature · 1 line
1.7.10.4