Commit 4143a23d authored by Holger Schurig's avatar Holger Schurig Committed by John W. Linville

libertas: make mesh configurable

Mostly for the embedded people that know beforehand that they don't need
MESH at all and want to save some bytes, but also helpful for the upcoming
cfg80211 transition.

   text    data     bss     dec     hex filename
 114264    2308     140  116712   1c7e8 libertas.ko   with mesh
 105026    2000     140  107166   1a29e libertas.ko   without mesh
 --------------------------------------------------
  -9238    -308           -9546
Signed-off-by: default avatarHolger Schurig <holgerschurig@gmail.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 602114ae
...@@ -37,3 +37,9 @@ config LIBERTAS_DEBUG ...@@ -37,3 +37,9 @@ config LIBERTAS_DEBUG
depends on LIBERTAS depends on LIBERTAS
---help--- ---help---
Debugging support. Debugging support.
config LIBERTAS_MESH
bool "Enable mesh support"
depends on LIBERTAS
help
This enables Libertas' MESH support, used by e.g. the OLPC people.
...@@ -5,11 +5,11 @@ libertas-y += cmdresp.o ...@@ -5,11 +5,11 @@ libertas-y += cmdresp.o
libertas-y += debugfs.o libertas-y += debugfs.o
libertas-y += ethtool.o libertas-y += ethtool.o
libertas-y += main.o libertas-y += main.o
libertas-y += mesh.o
libertas-y += rx.o libertas-y += rx.o
libertas-y += scan.o libertas-y += scan.o
libertas-y += tx.o libertas-y += tx.o
libertas-y += wext.o libertas-y += wext.o
libertas-$(CONFIG_LIBERTAS_MESH) += mesh.o
usb8xxx-objs += if_usb.o usb8xxx-objs += if_usb.o
libertas_cs-objs += if_cs.o libertas_cs-objs += if_cs.o
......
...@@ -998,6 +998,8 @@ int lbs_prepare_and_send_command(struct lbs_private *priv, ...@@ -998,6 +998,8 @@ int lbs_prepare_and_send_command(struct lbs_private *priv,
ret = 0; ret = 0;
break; break;
#ifdef CONFIG_LIBERTAS_MESH
case CMD_BT_ACCESS: case CMD_BT_ACCESS:
ret = lbs_cmd_bt_access(cmdptr, cmd_action, pdata_buf); ret = lbs_cmd_bt_access(cmdptr, cmd_action, pdata_buf);
break; break;
...@@ -1006,6 +1008,8 @@ int lbs_prepare_and_send_command(struct lbs_private *priv, ...@@ -1006,6 +1008,8 @@ int lbs_prepare_and_send_command(struct lbs_private *priv,
ret = lbs_cmd_fwt_access(cmdptr, cmd_action, pdata_buf); ret = lbs_cmd_fwt_access(cmdptr, cmd_action, pdata_buf);
break; break;
#endif
case CMD_802_11_BEACON_CTRL: case CMD_802_11_BEACON_CTRL:
ret = lbs_cmd_bcn_ctrl(priv, cmdptr, cmd_action); ret = lbs_cmd_bcn_ctrl(priv, cmdptr, cmd_action);
break; break;
......
...@@ -39,12 +39,14 @@ struct lbs_private { ...@@ -39,12 +39,14 @@ struct lbs_private {
/* Mesh */ /* Mesh */
struct net_device *mesh_dev; /* Virtual device */ struct net_device *mesh_dev; /* Virtual device */
#ifdef CONFIG_LIBERTAS_MESH
u32 mesh_connect_status; u32 mesh_connect_status;
struct lbs_mesh_stats mstats; struct lbs_mesh_stats mstats;
int mesh_open; int mesh_open;
uint16_t mesh_tlv; uint16_t mesh_tlv;
u8 mesh_ssid[IEEE80211_MAX_SSID_LEN + 1]; u8 mesh_ssid[IEEE80211_MAX_SSID_LEN + 1];
u8 mesh_ssid_len; u8 mesh_ssid_len;
#endif
/* Monitor mode */ /* Monitor mode */
struct net_device *rtap_net_dev; struct net_device *rtap_net_dev;
......
...@@ -114,9 +114,11 @@ const struct ethtool_ops lbs_ethtool_ops = { ...@@ -114,9 +114,11 @@ const struct ethtool_ops lbs_ethtool_ops = {
.get_drvinfo = lbs_ethtool_get_drvinfo, .get_drvinfo = lbs_ethtool_get_drvinfo,
.get_eeprom = lbs_ethtool_get_eeprom, .get_eeprom = lbs_ethtool_get_eeprom,
.get_eeprom_len = lbs_ethtool_get_eeprom_len, .get_eeprom_len = lbs_ethtool_get_eeprom_len,
#ifdef CONFIG_LIBERTAS_MESH
.get_sset_count = lbs_mesh_ethtool_get_sset_count, .get_sset_count = lbs_mesh_ethtool_get_sset_count,
.get_ethtool_stats = lbs_mesh_ethtool_get_stats, .get_ethtool_stats = lbs_mesh_ethtool_get_stats,
.get_strings = lbs_mesh_ethtool_get_strings, .get_strings = lbs_mesh_ethtool_get_strings,
#endif
.get_wol = lbs_ethtool_get_wol, .get_wol = lbs_ethtool_get_wol,
.set_wol = lbs_ethtool_set_wol, .set_wol = lbs_ethtool_set_wol,
}; };
......
...@@ -9,6 +9,8 @@ ...@@ -9,6 +9,8 @@
#include <net/lib80211.h> #include <net/lib80211.h>
#ifdef CONFIG_LIBERTAS_MESH
/* Mesh statistics */ /* Mesh statistics */
struct lbs_mesh_stats { struct lbs_mesh_stats {
u32 fwd_bcast_cnt; /* Fwd: Broadcast counter */ u32 fwd_bcast_cnt; /* Fwd: Broadcast counter */
...@@ -89,5 +91,20 @@ void lbs_mesh_ethtool_get_strings(struct net_device *dev, ...@@ -89,5 +91,20 @@ void lbs_mesh_ethtool_get_strings(struct net_device *dev,
#define lbs_mesh_open(priv) (priv->mesh_open) #define lbs_mesh_open(priv) (priv->mesh_open)
#define lbs_mesh_connected(priv) (priv->mesh_connect_status == LBS_CONNECTED) #define lbs_mesh_connected(priv) (priv->mesh_connect_status == LBS_CONNECTED)
#else
#define lbs_init_mesh(priv)
#define lbs_deinit_mesh(priv)
#define lbs_add_mesh(priv)
#define lbs_remove_mesh(priv)
#define lbs_mesh_set_dev(priv, dev, rxpd) (dev)
#define lbs_mesh_set_txpd(priv, dev, txpd)
#define lbs_mesh_config(priv, enable, chan)
#define lbs_mesh_open(priv) (0)
#define lbs_mesh_connected(priv) (0)
#endif
#endif #endif
...@@ -298,6 +298,7 @@ static int lbs_get_nick(struct net_device *dev, struct iw_request_info *info, ...@@ -298,6 +298,7 @@ static int lbs_get_nick(struct net_device *dev, struct iw_request_info *info,
return 0; return 0;
} }
#ifdef CONFIG_LIBERTAS_MESH
static int mesh_get_nick(struct net_device *dev, struct iw_request_info *info, static int mesh_get_nick(struct net_device *dev, struct iw_request_info *info,
struct iw_point *dwrq, char *extra) struct iw_point *dwrq, char *extra)
{ {
...@@ -321,6 +322,7 @@ static int mesh_get_nick(struct net_device *dev, struct iw_request_info *info, ...@@ -321,6 +322,7 @@ static int mesh_get_nick(struct net_device *dev, struct iw_request_info *info,
lbs_deb_leave(LBS_DEB_WEXT); lbs_deb_leave(LBS_DEB_WEXT);
return 0; return 0;
} }
#endif
static int lbs_set_rts(struct net_device *dev, struct iw_request_info *info, static int lbs_set_rts(struct net_device *dev, struct iw_request_info *info,
struct iw_param *vwrq, char *extra) struct iw_param *vwrq, char *extra)
...@@ -422,6 +424,7 @@ static int lbs_get_mode(struct net_device *dev, ...@@ -422,6 +424,7 @@ static int lbs_get_mode(struct net_device *dev,
return 0; return 0;
} }
#ifdef CONFIG_LIBERTAS_MESH
static int mesh_wlan_get_mode(struct net_device *dev, static int mesh_wlan_get_mode(struct net_device *dev,
struct iw_request_info *info, u32 * uwrq, struct iw_request_info *info, u32 * uwrq,
char *extra) char *extra)
...@@ -433,6 +436,7 @@ static int mesh_wlan_get_mode(struct net_device *dev, ...@@ -433,6 +436,7 @@ static int mesh_wlan_get_mode(struct net_device *dev,
lbs_deb_leave(LBS_DEB_WEXT); lbs_deb_leave(LBS_DEB_WEXT);
return 0; return 0;
} }
#endif
static int lbs_get_txpow(struct net_device *dev, static int lbs_get_txpow(struct net_device *dev,
struct iw_request_info *info, struct iw_request_info *info,
...@@ -1010,6 +1014,7 @@ static int lbs_set_freq(struct net_device *dev, struct iw_request_info *info, ...@@ -1010,6 +1014,7 @@ static int lbs_set_freq(struct net_device *dev, struct iw_request_info *info,
return ret; return ret;
} }
#ifdef CONFIG_LIBERTAS_MESH
static int lbs_mesh_set_freq(struct net_device *dev, static int lbs_mesh_set_freq(struct net_device *dev,
struct iw_request_info *info, struct iw_request_info *info,
struct iw_freq *fwrq, char *extra) struct iw_freq *fwrq, char *extra)
...@@ -1061,6 +1066,7 @@ static int lbs_mesh_set_freq(struct net_device *dev, ...@@ -1061,6 +1066,7 @@ static int lbs_mesh_set_freq(struct net_device *dev,
lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", ret); lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", ret);
return ret; return ret;
} }
#endif
static int lbs_set_rate(struct net_device *dev, struct iw_request_info *info, static int lbs_set_rate(struct net_device *dev, struct iw_request_info *info,
struct iw_param *vwrq, char *extra) struct iw_param *vwrq, char *extra)
...@@ -2110,6 +2116,7 @@ static int lbs_set_essid(struct net_device *dev, struct iw_request_info *info, ...@@ -2110,6 +2116,7 @@ static int lbs_set_essid(struct net_device *dev, struct iw_request_info *info,
return ret; return ret;
} }
#ifdef CONFIG_LIBERTAS_MESH
static int lbs_mesh_get_essid(struct net_device *dev, static int lbs_mesh_get_essid(struct net_device *dev,
struct iw_request_info *info, struct iw_request_info *info,
struct iw_point *dwrq, char *extra) struct iw_point *dwrq, char *extra)
...@@ -2163,6 +2170,7 @@ static int lbs_mesh_set_essid(struct net_device *dev, ...@@ -2163,6 +2170,7 @@ static int lbs_mesh_set_essid(struct net_device *dev,
lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", ret); lbs_deb_leave_args(LBS_DEB_WEXT, "ret %d", ret);
return ret; return ret;
} }
#endif
/** /**
* @brief Connect to the AP or Ad-hoc Network with specific bssid * @brief Connect to the AP or Ad-hoc Network with specific bssid
...@@ -2269,7 +2277,13 @@ static const iw_handler lbs_handler[] = { ...@@ -2269,7 +2277,13 @@ static const iw_handler lbs_handler[] = {
(iw_handler) lbs_get_encodeext,/* SIOCGIWENCODEEXT */ (iw_handler) lbs_get_encodeext,/* SIOCGIWENCODEEXT */
(iw_handler) NULL, /* SIOCSIWPMKSA */ (iw_handler) NULL, /* SIOCSIWPMKSA */
}; };
struct iw_handler_def lbs_handler_def = {
.num_standard = ARRAY_SIZE(lbs_handler),
.standard = (iw_handler *) lbs_handler,
.get_wireless_stats = lbs_get_wireless_stats,
};
#ifdef CONFIG_LIBERTAS_MESH
static const iw_handler mesh_wlan_handler[] = { static const iw_handler mesh_wlan_handler[] = {
(iw_handler) NULL, /* SIOCSIWCOMMIT */ (iw_handler) NULL, /* SIOCSIWCOMMIT */
(iw_handler) lbs_get_name, /* SIOCGIWNAME */ (iw_handler) lbs_get_name, /* SIOCGIWNAME */
...@@ -2327,14 +2341,10 @@ static const iw_handler mesh_wlan_handler[] = { ...@@ -2327,14 +2341,10 @@ static const iw_handler mesh_wlan_handler[] = {
(iw_handler) lbs_get_encodeext,/* SIOCGIWENCODEEXT */ (iw_handler) lbs_get_encodeext,/* SIOCGIWENCODEEXT */
(iw_handler) NULL, /* SIOCSIWPMKSA */ (iw_handler) NULL, /* SIOCSIWPMKSA */
}; };
struct iw_handler_def lbs_handler_def = {
.num_standard = ARRAY_SIZE(lbs_handler),
.standard = (iw_handler *) lbs_handler,
.get_wireless_stats = lbs_get_wireless_stats,
};
struct iw_handler_def mesh_handler_def = { struct iw_handler_def mesh_handler_def = {
.num_standard = ARRAY_SIZE(mesh_wlan_handler), .num_standard = ARRAY_SIZE(mesh_wlan_handler),
.standard = (iw_handler *) mesh_wlan_handler, .standard = (iw_handler *) mesh_wlan_handler,
.get_wireless_stats = lbs_get_wireless_stats, .get_wireless_stats = lbs_get_wireless_stats,
}; };
#endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment