From e46232e69a23996e34448b7b5793445e9ec4e9b2 Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Mon, 11 Nov 2013 22:03:25 +0000 Subject: broadcom-wl: support more virtual interfaces Read the number of virtual interfaces to support from the device capabilities; as some newer devices can support up to 16. Signed-off-by: Nathan Hintz git-svn-id: svn://svn.openwrt.org/openwrt/trunk@38759 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/kernel/broadcom-wl/src/wlc.c | 45 ++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) (limited to 'package/kernel/broadcom-wl/src/wlc.c') diff --git a/package/kernel/broadcom-wl/src/wlc.c b/package/kernel/broadcom-wl/src/wlc.c index 21754a798c..50c40e802f 100644 --- a/package/kernel/broadcom-wl/src/wlc.c +++ b/package/kernel/broadcom-wl/src/wlc.c @@ -391,6 +391,37 @@ static int wlc_wsec_key(wlc_param param, void *null, void *value) return wl_bssiovar_set(interface, "wsec_key", vif, &wsec_key, sizeof(wsec_key)); } +static int wlc_cap(wlc_param param, void *data, void *value) +{ + char *iov = *((char **) data); + + if (param & GET) + return wl_iovar_get(interface, iov, value, BUFSIZE); + + return -1; +} + +static int wlc_bssmax(wlc_param param, void *data, void *value) +{ + int *val = (int *) value; + char *iov = *((char **) data); + int ret = -1; + + if (param & GET) { + ret = wl_iovar_get(interface, iov, wlbuf, BUFSIZE); + if (!ret) { + if (strstr(wlbuf, "mbss4")) + *val = 4; + else if (strstr(wlbuf, "mbss16")) + *val = 16; + else + *val = 1; + } + } + + return ret; +} + static inline int cw2ecw(int cw) { int i; @@ -954,6 +985,20 @@ static const struct wlc_call wlc_calls[] = { .handler = wlc_ioctl, .desc = "Band (0=auto, 1=5Ghz, 2=2.4GHz)" }, + { + .name = "cap", + .param = STRING|NOARG, + .handler = wlc_cap, + .data.str = "cap", + .desc = "Capabilities" + }, + { + .name = "bssmax", + .param = INT|NOARG, + .handler = wlc_bssmax, + .data.str = "cap", + .desc = "Number of VIF's supported" + }, }; #define wlc_calls_size (sizeof(wlc_calls) / sizeof(struct wlc_call)) -- cgit v1.2.3