Search Linux Wireless

[PATCH 13/17] staging: brcm80211: separated public from private ioctl functions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxxx>
Reviewed-by: Franky Lin <frankyl@xxxxxxxxxxxx>
Signed-off-by: Roland Vossen <rvossen@xxxxxxxxxxxx>
---
 drivers/staging/brcm80211/brcmfmac/dhd.h         |    2 +
 drivers/staging/brcm80211/brcmfmac/dhd_linux.c   |   24 ++++++++++++++-------
 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;
-- 
1.7.4.1


--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux