diff options
author | Roland Vossen <rvossen@broadcom.com> | 2011-09-13 07:49:53 (GMT) |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-09-16 18:41:54 (GMT) |
commit | 9dd8eff3da331b795ab6879a6b3a8b88d5adf658 (patch) | |
tree | fbd7e88f102cc67faa8fd8e5d3c5750bbc71cb5f | |
parent | 7a447be316f99bf8a15a52612f25ee53632908dc (diff) | |
download | linux-fsl-qoriq-9dd8eff3da331b795ab6879a6b3a8b88d5adf658.tar.xz |
staging: brcm80211: separated public from private ioctl functions
net_device ioctl handler was called both by the OS as by the driver
itself. Split the ioctl handler into two functions to make code paths
more clear.
Reviewed-by: Arend van Spriel <arend@broadcom.com>
Reviewed-by: Franky Lin <frankyl@broadcom.com>
Signed-off-by: Roland Vossen <rvossen@broadcom.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r-- | drivers/staging/brcm80211/brcmfmac/dhd.h | 2 | ||||
-rw-r--r-- | drivers/staging/brcm80211/brcmfmac/dhd_linux.c | 24 | ||||
-rw-r--r-- | drivers/staging/brcm80211/brcmfmac/wl_cfg80211.c | 2 |
3 files changed, 19 insertions, 9 deletions
diff --git a/drivers/staging/brcm80211/brcmfmac/dhd.h b/drivers/staging/brcm80211/brcmfmac/dhd.h index 9f84837..93a1bfc 100644 --- a/drivers/staging/brcm80211/brcmfmac/dhd.h +++ b/drivers/staging/brcm80211/brcmfmac/dhd.h @@ -715,6 +715,8 @@ extern struct brcmf_pub *brcmf_attach(struct brcmf_bus *bus, extern int brcmf_net_attach(struct brcmf_pub *drvr, int idx); extern int brcmf_netdev_wait_pend8021x(struct net_device *dev); +extern int brcmf_netdev_ioctl_priv(struct net_device *net, struct ifreq *ifr); + /* Indication from bus module regarding removal/absence of dongle */ extern void brcmf_detach(struct brcmf_pub *drvr); diff --git a/drivers/staging/brcm80211/brcmfmac/dhd_linux.c b/drivers/staging/brcm80211/brcmfmac/dhd_linux.c index cfdd645..4bc231e 100644 --- a/drivers/staging/brcm80211/brcmfmac/dhd_linux.c +++ b/drivers/staging/brcm80211/brcmfmac/dhd_linux.c @@ -950,13 +950,7 @@ static int brcmf_netdev_ioctl_entry(struct net_device *net, struct ifreq *ifr, int cmd) { struct brcmf_info *drvr_priv = *(struct brcmf_info **) netdev_priv(net); - struct brcmf_c_ioctl ioc; - int bcmerror = 0; - int buflen = 0; - void *buf = NULL; - uint driver = 0; int ifidx; - bool is_set_key_cmd; ifidx = brcmf_net2idx(drvr_priv, net); brcmf_dbg(TRACE, "ifidx %d, cmd 0x%04x\n", ifidx, cmd); @@ -967,8 +961,22 @@ static int brcmf_netdev_ioctl_entry(struct net_device *net, struct ifreq *ifr, if (cmd == SIOCETHTOOL) return brcmf_ethtool(drvr_priv, ifr->ifr_data); - if (cmd != SIOCDEVPRIVATE) - return -EOPNOTSUPP; + return -EOPNOTSUPP; +} + +/* called only from within this driver, handles cmd == SIOCDEVPRIVATE */ +int brcmf_netdev_ioctl_priv(struct net_device *net, struct ifreq *ifr) +{ + struct brcmf_c_ioctl ioc; + int bcmerror = 0; + int buflen = 0; + void *buf = NULL; + uint driver = 0; + bool is_set_key_cmd; + struct brcmf_info *drvr_priv = *(struct brcmf_info **) netdev_priv(net); + int ifidx; + + ifidx = brcmf_net2idx(drvr_priv, net); memset(&ioc, 0, sizeof(ioc)); diff --git a/drivers/staging/brcm80211/brcmfmac/wl_cfg80211.c b/drivers/staging/brcm80211/brcmfmac/wl_cfg80211.c index 198f0cc..3fa0c1b 100644 --- a/drivers/staging/brcm80211/brcmfmac/wl_cfg80211.c +++ b/drivers/staging/brcm80211/brcmfmac/wl_cfg80211.c @@ -286,7 +286,7 @@ brcmf_dev_ioctl(struct net_device *dev, u32 cmd, void *arg, u32 len) fs = get_fs(); set_fs(get_ds()); - err = dev->netdev_ops->ndo_do_ioctl(dev, &ifr, SIOCDEVPRIVATE); + err = brcmf_netdev_ioctl_priv(dev, &ifr); set_fs(fs); return err; |