From 2dd4faea959c32531b9b8e76998bac439151487f Mon Sep 17 00:00:00 2001 From: Lin Ma Date: Wed, 3 Aug 2011 13:43:03 -0700 Subject: net: wireless: bcmdhd: Eliminate nested IOCTL call Signed-off-by: Dmitry Shmidt Change-Id: I215f25caaa613ffe90fd33019c5c829ef268ba0c Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/35574 Tested-by: Per VAHLNE Reviewed-by: Jonas ABERG --- drivers/net/wireless/bcmdhd/dhd_linux.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'drivers/net/wireless/bcmdhd/dhd_linux.c') diff --git a/drivers/net/wireless/bcmdhd/dhd_linux.c b/drivers/net/wireless/bcmdhd/dhd_linux.c index 3035cf8d5da..c345b1815d0 100644 --- a/drivers/net/wireless/bcmdhd/dhd_linux.c +++ b/drivers/net/wireless/bcmdhd/dhd_linux.c @@ -4123,6 +4123,30 @@ int net_os_wake_unlock(struct net_device *dev) return ret; } +int dhd_ioctl_entry_local(struct net_device *net, wl_ioctl_t *ioc, int cmd) +{ + int ifidx; + int ret = 0; + dhd_info_t *dhd = NULL; + + if (!net || !netdev_priv(net)) { + DHD_ERROR(("%s invalid parameter\n", __FUNCTION__)); + return -EINVAL; + } + + dhd = *(dhd_info_t **)netdev_priv(net); + ifidx = dhd_net2idx(dhd, net); + if (ifidx == DHD_BAD_IF) { + DHD_ERROR(("%s bad ifidx\n", __FUNCTION__)); + return -ENODEV; + } + + DHD_OS_WAKE_LOCK(&dhd->pub); + ret = dhd_wl_ioctl(&dhd->pub, ifidx, ioc, ioc->buf, ioc->len); + DHD_OS_WAKE_UNLOCK(&dhd->pub); + + return ret; +} #ifdef PROP_TXSTATUS extern int dhd_wlfc_interface_entry_update(void* state, ewlfc_mac_entry_action_t action, uint8 ifid, -- cgit v1.2.3