aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/libertas
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/libertas')
-rw-r--r--drivers/net/wireless/libertas/Kconfig6
-rw-r--r--drivers/net/wireless/libertas/Makefile2
-rw-r--r--drivers/net/wireless/libertas/cmd.c4
-rw-r--r--drivers/net/wireless/libertas/dev.h2
-rw-r--r--drivers/net/wireless/libertas/ethtool.c2
-rw-r--r--drivers/net/wireless/libertas/mesh.h17
-rw-r--r--drivers/net/wireless/libertas/wext.c20
7 files changed, 47 insertions, 6 deletions
diff --git a/drivers/net/wireless/libertas/Kconfig b/drivers/net/wireless/libertas/Kconfig
index 30aa9d48d67e..0485c9957575 100644
--- a/drivers/net/wireless/libertas/Kconfig
+++ b/drivers/net/wireless/libertas/Kconfig
@@ -37,3 +37,9 @@ config LIBERTAS_DEBUG
37 depends on LIBERTAS 37 depends on LIBERTAS
38 ---help--- 38 ---help---
39 Debugging support. 39 Debugging support.
40
41config LIBERTAS_MESH
42 bool "Enable mesh support"
43 depends on LIBERTAS
44 help
45 This enables Libertas' MESH support, used by e.g. the OLPC people.
diff --git a/drivers/net/wireless/libertas/Makefile b/drivers/net/wireless/libertas/Makefile
index b188cd97a053..45e870e33117 100644
--- a/drivers/net/wireless/libertas/Makefile
+++ b/drivers/net/wireless/libertas/Makefile
@@ -5,11 +5,11 @@ libertas-y += cmdresp.o
5libertas-y += debugfs.o 5libertas-y += debugfs.o
6libertas-y += ethtool.o 6libertas-y += ethtool.o
7libertas-y += main.o 7libertas-y += main.o
8libertas-y += mesh.o
9libertas-y += rx.o 8libertas-y += rx.o
10libertas-y += scan.o 9libertas-y += scan.o
11libertas-y += tx.o 10libertas-y += tx.o
12libertas-y += wext.o 11libertas-y += wext.o
12libertas-$(CONFIG_LIBERTAS_MESH) += mesh.o
13 13
14usb8xxx-objs += if_usb.o 14usb8xxx-objs += if_usb.o
15libertas_cs-objs += if_cs.o 15libertas_cs-objs += if_cs.o
diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c
index 4a198113f9be..4a0d8f4188ca 100644
--- a/drivers/net/wireless/libertas/cmd.c
+++ b/drivers/net/wireless/libertas/cmd.c
@@ -998,6 +998,8 @@ int lbs_prepare_and_send_command(struct lbs_private *priv,
998 ret = 0; 998 ret = 0;
999 break; 999 break;
1000 1000
1001#ifdef CONFIG_LIBERTAS_MESH
1002
1001 case CMD_BT_ACCESS: 1003 case CMD_BT_ACCESS:
1002 ret = lbs_cmd_bt_access(cmdptr, cmd_action, pdata_buf); 1004 ret = lbs_cmd_bt_access(cmdptr, cmd_action, pdata_buf);
1003 break; 1005 break;
@@ -1006,6 +1008,8 @@ int lbs_prepare_and_send_command(struct lbs_private *priv,
1006 ret = lbs_cmd_fwt_access(cmdptr, cmd_action, pdata_buf); 1008 ret = lbs_cmd_fwt_access(cmdptr, cmd_action, pdata_buf);
1007 break; 1009 break;
1008 1010
1011#endif
1012
1009 case CMD_802_11_BEACON_CTRL: 1013 case CMD_802_11_BEACON_CTRL:
1010 ret = lbs_cmd_bcn_ctrl(priv, cmdptr, cmd_action); 1014 ret = lbs_cmd_bcn_ctrl(priv, cmdptr, cmd_action);
1011 break; 1015 break;
diff --git a/drivers/net/wireless/libertas/dev.h b/drivers/net/wireless/libertas/dev.h
index 159de3ec9c44..7330ab8521cc 100644
--- a/drivers/net/wireless/libertas/dev.h
+++ b/drivers/net/wireless/libertas/dev.h
@@ -39,12 +39,14 @@ struct lbs_private {
39 39
40 /* Mesh */ 40 /* Mesh */
41 struct net_device *mesh_dev; /* Virtual device */ 41 struct net_device *mesh_dev; /* Virtual device */
42#ifdef CONFIG_LIBERTAS_MESH
42 u32 mesh_connect_status; 43 u32 mesh_connect_status;
43 struct lbs_mesh_stats mstats; 44 struct lbs_mesh_stats mstats;
44 int mesh_open; 45 int mesh_open;
45 uint16_t mesh_tlv; 46 uint16_t mesh_tlv;
46 u8 mesh_ssid[IEEE80211_MAX_SSID_LEN + 1]; 47 u8 mesh_ssid[IEEE80211_MAX_SSID_LEN + 1];
47 u8 mesh_ssid_len; 48 u8 mesh_ssid_len;
49#endif
48 50
49 /* Monitor mode */ 51 /* Monitor mode */
50 struct net_device *rtap_net_dev; 52 struct net_device *rtap_net_dev;
diff --git a/drivers/net/wireless/libertas/ethtool.c b/drivers/net/wireless/libertas/ethtool.c
index 63d020374c2b..3804a58d7f4e 100644
--- a/drivers/net/wireless/libertas/ethtool.c
+++ b/drivers/net/wireless/libertas/ethtool.c
@@ -114,9 +114,11 @@ const struct ethtool_ops lbs_ethtool_ops = {
114 .get_drvinfo = lbs_ethtool_get_drvinfo, 114 .get_drvinfo = lbs_ethtool_get_drvinfo,
115 .get_eeprom = lbs_ethtool_get_eeprom, 115 .get_eeprom = lbs_ethtool_get_eeprom,
116 .get_eeprom_len = lbs_ethtool_get_eeprom_len, 116 .get_eeprom_len = lbs_ethtool_get_eeprom_len,
117#ifdef CONFIG_LIBERTAS_MESH
117 .get_sset_count = lbs_mesh_ethtool_get_sset_count, 118 .get_sset_count = lbs_mesh_ethtool_get_sset_count,
118 .get_ethtool_stats = lbs_mesh_ethtool_get_stats, 119 .get_ethtool_stats = lbs_mesh_ethtool_get_stats,
119 .get_strings = lbs_mesh_ethtool_get_strings, 120 .get_strings = lbs_mesh_ethtool_get_strings,
121#endif
120 .get_wol = lbs_ethtool_get_wol, 122 .get_wol = lbs_ethtool_get_wol,
121 .set_wol = lbs_ethtool_set_wol, 123 .set_wol = lbs_ethtool_set_wol,
122}; 124};
diff --git a/drivers/net/wireless/libertas/mesh.h b/drivers/net/wireless/libertas/mesh.h
index 388c39281b7d..e2573303a328 100644
--- a/drivers/net/wireless/libertas/mesh.h
+++ b/drivers/net/wireless/libertas/mesh.h
@@ -9,6 +9,8 @@
9#include <net/lib80211.h> 9#include <net/lib80211.h>
10 10
11 11
12#ifdef CONFIG_LIBERTAS_MESH
13
12/* Mesh statistics */ 14/* Mesh statistics */
13struct lbs_mesh_stats { 15struct lbs_mesh_stats {
14 u32 fwd_bcast_cnt; /* Fwd: Broadcast counter */ 16 u32 fwd_bcast_cnt; /* Fwd: Broadcast counter */
@@ -89,5 +91,20 @@ void lbs_mesh_ethtool_get_strings(struct net_device *dev,
89#define lbs_mesh_open(priv) (priv->mesh_open) 91#define lbs_mesh_open(priv) (priv->mesh_open)
90#define lbs_mesh_connected(priv) (priv->mesh_connect_status == LBS_CONNECTED) 92#define lbs_mesh_connected(priv) (priv->mesh_connect_status == LBS_CONNECTED)
91 93
94#else
95
96#define lbs_init_mesh(priv)
97#define lbs_deinit_mesh(priv)
98#define lbs_add_mesh(priv)
99#define lbs_remove_mesh(priv)
100#define lbs_mesh_set_dev(priv, dev, rxpd) (dev)
101#define lbs_mesh_set_txpd(priv, dev, txpd)
102#define lbs_mesh_config(priv, enable, chan)
103#define lbs_mesh_open(priv) (0)
104#define lbs_mesh_connected(priv) (0)
105
106#endif
107
108
92 109
93#endif 110#endif
diff --git a/drivers/net/wireless/libertas/wext.c b/drivers/net/wireless/libertas/wext.c
index c0c7bc40b109..f07ba0b6c5f1 100644
--- a/drivers/net/wireless/libertas/wext.c
+++ b/drivers/net/wireless/libertas/wext.c
@@ -298,6 +298,7 @@ static int lbs_get_nick(struct net_device *dev, struct iw_request_info *info,
298 return 0; 298 return 0;
299} 299}
300 300
301#ifdef CONFIG_LIBERTAS_MESH
301static int mesh_get_nick(struct net_device *dev, struct iw_request_info *info, 302static int mesh_get_nick(struct net_device *dev, struct iw_request_info *info,
302 struct iw_point *dwrq, char *extra) 303 struct iw_point *dwrq, char *extra)
303{ 304{
@@ -321,6 +322,7 @@ static int mesh_get_nick(struct net_device *dev, struct iw_request_info *info,
321 lbs_deb_leave(LBS_DEB_WEXT); 322 lbs_deb_leave(LBS_DEB_WEXT);
322 return 0; 323 return 0;
323} 324}
325#endif
324 326
325static int lbs_set_rts(struct net_device *dev, struct iw_request_info *info, 327static int lbs_set_rts(struct net_device *dev, struct iw_request_info *info,
326 struct iw_param *vwrq, char *extra) 328 struct iw_param *vwrq, char *extra)
@@ -422,6 +424,7 @@ static int lbs_get_mode(struct net_device *dev,
422 return 0; 424 return 0;
423} 425}
424 426
427#ifdef CONFIG_LIBERTAS_MESH
425static int mesh_wlan_get_mode(struct net_device *dev, 428static int mesh_wlan_get_mode(struct net_device *dev,
426 struct iw_request_info *info, u32 * uwrq, 429 struct iw_request_info *info, u32 * uwrq,
427 char *extra) 430 char *extra)
@@ -433,6 +436,7 @@ static int mesh_wlan_get_mode(struct net_device *dev,
433 lbs_deb_leave(LBS_DEB_WEXT); 436 lbs_deb_leave(LBS_DEB_WEXT);
434 return 0; 437 return 0;
435} 438}
439#endif
436 440
437static int lbs_get_txpow(struct net_device *dev, 441static int lbs_get_txpow(struct net_device *dev,
438 struct iw_request_info *info, 442 struct iw_request_info *info,
@@ -1010,6 +1014,7 @@ out:
1010 return ret; 1014 return ret;
1011} 1015}
1012 1016
1017#ifdef CONFIG_LIBERTAS_MESH
1013static int lbs_mesh_set_freq(struct net_device *dev, 1018static int lbs_mesh_set_freq(struct net_device *dev,
1014 struct iw_request_info *info, 1019 struct iw_request_info *info,
1015 struct iw_freq *fwrq, char *extra) 1020 struct iw_freq *fwrq, char *extra)
@@ -1061,6 +1066,7 @@ out:
1061 lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", ret); 1066 lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", ret);
1062 return ret; 1067 return ret;
1063} 1068}
1069#endif
1064 1070
1065static int lbs_set_rate(struct net_device *dev, struct iw_request_info *info, 1071static int lbs_set_rate(struct net_device *dev, struct iw_request_info *info,
1066 struct iw_param *vwrq, char *extra) 1072 struct iw_param *vwrq, char *extra)
@@ -2110,6 +2116,7 @@ out:
2110 return ret; 2116 return ret;
2111} 2117}
2112 2118
2119#ifdef CONFIG_LIBERTAS_MESH
2113static int lbs_mesh_get_essid(struct net_device *dev, 2120static int lbs_mesh_get_essid(struct net_device *dev,
2114 struct iw_request_info *info, 2121 struct iw_request_info *info,
2115 struct iw_point *dwrq, char *extra) 2122 struct iw_point *dwrq, char *extra)
@@ -2163,6 +2170,7 @@ static int lbs_mesh_set_essid(struct net_device *dev,
2163 lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", ret); 2170 lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", ret);
2164 return ret; 2171 return ret;
2165} 2172}
2173#endif
2166 2174
2167/** 2175/**
2168 * @brief Connect to the AP or Ad-hoc Network with specific bssid 2176 * @brief Connect to the AP or Ad-hoc Network with specific bssid
@@ -2269,7 +2277,13 @@ static const iw_handler lbs_handler[] = {
2269 (iw_handler) lbs_get_encodeext,/* SIOCGIWENCODEEXT */ 2277 (iw_handler) lbs_get_encodeext,/* SIOCGIWENCODEEXT */
2270 (iw_handler) NULL, /* SIOCSIWPMKSA */ 2278 (iw_handler) NULL, /* SIOCSIWPMKSA */
2271}; 2279};
2280struct iw_handler_def lbs_handler_def = {
2281 .num_standard = ARRAY_SIZE(lbs_handler),
2282 .standard = (iw_handler *) lbs_handler,
2283 .get_wireless_stats = lbs_get_wireless_stats,
2284};
2272 2285
2286#ifdef CONFIG_LIBERTAS_MESH
2273static const iw_handler mesh_wlan_handler[] = { 2287static const iw_handler mesh_wlan_handler[] = {
2274 (iw_handler) NULL, /* SIOCSIWCOMMIT */ 2288 (iw_handler) NULL, /* SIOCSIWCOMMIT */
2275 (iw_handler) lbs_get_name, /* SIOCGIWNAME */ 2289 (iw_handler) lbs_get_name, /* SIOCGIWNAME */
@@ -2327,14 +2341,10 @@ static const iw_handler mesh_wlan_handler[] = {
2327 (iw_handler) lbs_get_encodeext,/* SIOCGIWENCODEEXT */ 2341 (iw_handler) lbs_get_encodeext,/* SIOCGIWENCODEEXT */
2328 (iw_handler) NULL, /* SIOCSIWPMKSA */ 2342 (iw_handler) NULL, /* SIOCSIWPMKSA */
2329}; 2343};
2330struct iw_handler_def lbs_handler_def = {
2331 .num_standard = ARRAY_SIZE(lbs_handler),
2332 .standard = (iw_handler *) lbs_handler,
2333 .get_wireless_stats = lbs_get_wireless_stats,
2334};
2335 2344
2336struct iw_handler_def mesh_handler_def = { 2345struct iw_handler_def mesh_handler_def = {
2337 .num_standard = ARRAY_SIZE(mesh_wlan_handler), 2346 .num_standard = ARRAY_SIZE(mesh_wlan_handler),
2338 .standard = (iw_handler *) mesh_wlan_handler, 2347 .standard = (iw_handler *) mesh_wlan_handler,
2339 .get_wireless_stats = lbs_get_wireless_stats, 2348 .get_wireless_stats = lbs_get_wireless_stats,
2340}; 2349};
2350#endif