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>
This commit is contained in:
parent
7a447be316
commit
9dd8eff3da
|
@ -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);
|
||||
|
||||
|
|
|
@ -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));
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue