aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/wireless/libertas/main.c2
-rw-r--r--drivers/net/wireless/libertas/wext.c104
-rw-r--r--drivers/net/wireless/libertas/wext.h1
3 files changed, 106 insertions, 1 deletions
diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c
index 5dde49bbda85..61cf95b73430 100644
--- a/drivers/net/wireless/libertas/main.c
+++ b/drivers/net/wireless/libertas/main.c
@@ -925,7 +925,7 @@ int libertas_add_mesh(wlan_private *priv, struct device *dev)
925 SET_NETDEV_DEV(priv->mesh_dev, dev); 925 SET_NETDEV_DEV(priv->mesh_dev, dev);
926 926
927#ifdef WIRELESS_EXT 927#ifdef WIRELESS_EXT
928 mesh_dev->wireless_handlers = (struct iw_handler_def *)&libertas_handler_def; 928 mesh_dev->wireless_handlers = (struct iw_handler_def *)&mesh_handler_def;
929#endif 929#endif
930#define NETIF_F_DYNALLOC 16 930#define NETIF_F_DYNALLOC 16
931 931
diff --git a/drivers/net/wireless/libertas/wext.c b/drivers/net/wireless/libertas/wext.c
index 2edc10c3327f..e91de104ad67 100644
--- a/drivers/net/wireless/libertas/wext.c
+++ b/drivers/net/wireless/libertas/wext.c
@@ -372,6 +372,30 @@ static int wlan_get_nick(struct net_device *dev, struct iw_request_info *info,
372 return 0; 372 return 0;
373} 373}
374 374
375static int mesh_get_nick(struct net_device *dev, struct iw_request_info *info,
376 struct iw_point *dwrq, char *extra)
377{
378 wlan_private *priv = dev->priv;
379 wlan_adapter *adapter = priv->adapter;
380
381 lbs_deb_enter(LBS_DEB_WEXT);
382
383 /* Use nickname to indicate that mesh is on */
384
385 if (adapter->connect_status == libertas_connected) {
386 strncpy(extra, "Mesh", 12);
387 extra[12] = '\0';
388 dwrq->length = strlen(extra) + 1;
389 }
390
391 else {
392 extra[0] = '\0';
393 dwrq->length = 1 ;
394 }
395
396 lbs_deb_leave(LBS_DEB_WEXT);
397 return 0;
398}
375static int wlan_set_rts(struct net_device *dev, struct iw_request_info *info, 399static int wlan_set_rts(struct net_device *dev, struct iw_request_info *info,
376 struct iw_param *vwrq, char *extra) 400 struct iw_param *vwrq, char *extra)
377{ 401{
@@ -492,6 +516,18 @@ static int wlan_get_mode(struct net_device *dev,
492 return 0; 516 return 0;
493} 517}
494 518
519static int mesh_wlan_get_mode(struct net_device *dev,
520 struct iw_request_info *info, u32 * uwrq,
521 char *extra)
522{
523 lbs_deb_enter(LBS_DEB_WEXT);
524
525 *uwrq = IW_MODE_REPEAT ;
526
527 lbs_deb_leave(LBS_DEB_WEXT);
528 return 0;
529}
530
495static int wlan_get_txpow(struct net_device *dev, 531static int wlan_get_txpow(struct net_device *dev,
496 struct iw_request_info *info, 532 struct iw_request_info *info,
497 struct iw_param *vwrq, char *extra) 533 struct iw_param *vwrq, char *extra)
@@ -2342,6 +2378,63 @@ static const iw_handler wlan_handler[] = {
2342 (iw_handler) NULL, /* SIOCSIWPMKSA */ 2378 (iw_handler) NULL, /* SIOCSIWPMKSA */
2343}; 2379};
2344 2380
2381static const iw_handler mesh_wlan_handler[] = {
2382 (iw_handler) NULL, /* SIOCSIWCOMMIT */
2383 (iw_handler) wlan_get_name, /* SIOCGIWNAME */
2384 (iw_handler) NULL, /* SIOCSIWNWID */
2385 (iw_handler) NULL, /* SIOCGIWNWID */
2386 (iw_handler) wlan_set_freq, /* SIOCSIWFREQ */
2387 (iw_handler) wlan_get_freq, /* SIOCGIWFREQ */
2388 (iw_handler) NULL, /* SIOCSIWMODE */
2389 (iw_handler) mesh_wlan_get_mode, /* SIOCGIWMODE */
2390 (iw_handler) NULL, /* SIOCSIWSENS */
2391 (iw_handler) NULL, /* SIOCGIWSENS */
2392 (iw_handler) NULL, /* SIOCSIWRANGE */
2393 (iw_handler) wlan_get_range, /* SIOCGIWRANGE */
2394 (iw_handler) NULL, /* SIOCSIWPRIV */
2395 (iw_handler) NULL, /* SIOCGIWPRIV */
2396 (iw_handler) NULL, /* SIOCSIWSTATS */
2397 (iw_handler) NULL, /* SIOCGIWSTATS */
2398 iw_handler_set_spy, /* SIOCSIWSPY */
2399 iw_handler_get_spy, /* SIOCGIWSPY */
2400 iw_handler_set_thrspy, /* SIOCSIWTHRSPY */
2401 iw_handler_get_thrspy, /* SIOCGIWTHRSPY */
2402 (iw_handler) NULL, /* SIOCSIWAP */
2403 (iw_handler) NULL, /* SIOCGIWAP */
2404 (iw_handler) NULL, /* SIOCSIWMLME */
2405 (iw_handler) NULL, /* SIOCGIWAPLIST - deprecated */
2406 (iw_handler) libertas_set_scan, /* SIOCSIWSCAN */
2407 (iw_handler) libertas_get_scan, /* SIOCGIWSCAN */
2408 (iw_handler) NULL, /* SIOCSIWESSID */
2409 (iw_handler) NULL, /* SIOCGIWESSID */
2410 (iw_handler) NULL, /* SIOCSIWNICKN */
2411 (iw_handler) mesh_get_nick, /* SIOCGIWNICKN */
2412 (iw_handler) NULL, /* -- hole -- */
2413 (iw_handler) NULL, /* -- hole -- */
2414 (iw_handler) wlan_set_rate, /* SIOCSIWRATE */
2415 (iw_handler) wlan_get_rate, /* SIOCGIWRATE */
2416 (iw_handler) wlan_set_rts, /* SIOCSIWRTS */
2417 (iw_handler) wlan_get_rts, /* SIOCGIWRTS */
2418 (iw_handler) wlan_set_frag, /* SIOCSIWFRAG */
2419 (iw_handler) wlan_get_frag, /* SIOCGIWFRAG */
2420 (iw_handler) wlan_set_txpow, /* SIOCSIWTXPOW */
2421 (iw_handler) wlan_get_txpow, /* SIOCGIWTXPOW */
2422 (iw_handler) wlan_set_retry, /* SIOCSIWRETRY */
2423 (iw_handler) wlan_get_retry, /* SIOCGIWRETRY */
2424 (iw_handler) wlan_set_encode, /* SIOCSIWENCODE */
2425 (iw_handler) wlan_get_encode, /* SIOCGIWENCODE */
2426 (iw_handler) wlan_set_power, /* SIOCSIWPOWER */
2427 (iw_handler) wlan_get_power, /* SIOCGIWPOWER */
2428 (iw_handler) NULL, /* -- hole -- */
2429 (iw_handler) NULL, /* -- hole -- */
2430 (iw_handler) wlan_set_genie, /* SIOCSIWGENIE */
2431 (iw_handler) wlan_get_genie, /* SIOCGIWGENIE */
2432 (iw_handler) wlan_set_auth, /* SIOCSIWAUTH */
2433 (iw_handler) wlan_get_auth, /* SIOCGIWAUTH */
2434 (iw_handler) wlan_set_encodeext,/* SIOCSIWENCODEEXT */
2435 (iw_handler) wlan_get_encodeext,/* SIOCGIWENCODEEXT */
2436 (iw_handler) NULL, /* SIOCSIWPMKSA */
2437};
2345struct iw_handler_def libertas_handler_def = { 2438struct iw_handler_def libertas_handler_def = {
2346 .num_standard = sizeof(wlan_handler) / sizeof(iw_handler), 2439 .num_standard = sizeof(wlan_handler) / sizeof(iw_handler),
2347 .num_private = sizeof(wlan_private_handler) / sizeof(iw_handler), 2440 .num_private = sizeof(wlan_private_handler) / sizeof(iw_handler),
@@ -2352,3 +2445,14 @@ struct iw_handler_def libertas_handler_def = {
2352 .private_args = (struct iw_priv_args *)wlan_private_args, 2445 .private_args = (struct iw_priv_args *)wlan_private_args,
2353 .get_wireless_stats = wlan_get_wireless_stats, 2446 .get_wireless_stats = wlan_get_wireless_stats,
2354}; 2447};
2448
2449struct iw_handler_def mesh_handler_def = {
2450 .num_standard = sizeof(mesh_wlan_handler) / sizeof(iw_handler),
2451 .num_private = sizeof(wlan_private_handler) / sizeof(iw_handler),
2452 .num_private_args = sizeof(wlan_private_args) /
2453 sizeof(struct iw_priv_args),
2454 .standard = (iw_handler *) mesh_wlan_handler,
2455 .private = (iw_handler *) wlan_private_handler,
2456 .private_args = (struct iw_priv_args *)wlan_private_args,
2457 .get_wireless_stats = wlan_get_wireless_stats,
2458};
diff --git a/drivers/net/wireless/libertas/wext.h b/drivers/net/wireless/libertas/wext.h
index fb7e828dd9be..d555056b25b7 100644
--- a/drivers/net/wireless/libertas/wext.h
+++ b/drivers/net/wireless/libertas/wext.h
@@ -58,6 +58,7 @@ struct wlan_ioctl_regrdwr {
58}; 58};
59 59
60extern struct iw_handler_def libertas_handler_def; 60extern struct iw_handler_def libertas_handler_def;
61extern struct iw_handler_def mesh_handler_def;
61int libertas_do_ioctl(struct net_device *dev, struct ifreq *req, int i); 62int libertas_do_ioctl(struct net_device *dev, struct ifreq *req, int i);
62int wlan_radio_ioctl(wlan_private * priv, u8 option); 63int wlan_radio_ioctl(wlan_private * priv, u8 option);
63 64