aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/libertas/main.c
diff options
context:
space:
mode:
authorHolger Schurig <holgerschurig@googlemail.com>2009-12-02 09:25:59 -0500
committerJohn W. Linville <linville@tuxdriver.com>2009-12-22 13:37:13 -0500
commitcd74468b8c56c1a809d9b7f913f11d8181c3a0b2 (patch)
tree36e25289edfc43728a09a38bc15b67079d15cb4d /drivers/net/wireless/libertas/main.c
parent55e1ff924414111a6afbfde00375a1302aef9353 (diff)
libertas: decouple mesh and rtap
While it's might be technically true that only MESH-enabled firmwares are also RTAP-enabled, I like to have this decoupled. Signed-off-by: Holger Schurig <holgerschurig@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/libertas/main.c')
-rw-r--r--drivers/net/wireless/libertas/main.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c
index b0799e347ba..ad343401189 100644
--- a/drivers/net/wireless/libertas/main.c
+++ b/drivers/net/wireless/libertas/main.c
@@ -1062,6 +1062,17 @@ void lbs_remove_card(struct lbs_private *priv)
1062EXPORT_SYMBOL_GPL(lbs_remove_card); 1062EXPORT_SYMBOL_GPL(lbs_remove_card);
1063 1063
1064 1064
1065static int lbs_rtap_supported(struct lbs_private *priv)
1066{
1067 if (MRVL_FW_MAJOR_REV(priv->fwrelease) == MRVL_FW_V5)
1068 return 1;
1069
1070 /* newer firmware use a capability mask */
1071 return ((MRVL_FW_MAJOR_REV(priv->fwrelease) >= MRVL_FW_V10) &&
1072 (priv->fwcapinfo & MESH_CAPINFO_ENABLE_MASK));
1073}
1074
1075
1065int lbs_start_card(struct lbs_private *priv) 1076int lbs_start_card(struct lbs_private *priv)
1066{ 1077{
1067 struct net_device *dev = priv->dev; 1078 struct net_device *dev = priv->dev;
@@ -1081,12 +1092,14 @@ int lbs_start_card(struct lbs_private *priv)
1081 1092
1082 lbs_update_channel(priv); 1093 lbs_update_channel(priv);
1083 1094
1095 lbs_init_mesh(priv);
1096
1084 /* 1097 /*
1085 * While rtap isn't related to mesh, only mesh-enabled 1098 * While rtap isn't related to mesh, only mesh-enabled
1086 * firmware implements the rtap functionality via 1099 * firmware implements the rtap functionality via
1087 * CMD_802_11_MONITOR_MODE. 1100 * CMD_802_11_MONITOR_MODE.
1088 */ 1101 */
1089 if (lbs_init_mesh(priv)) { 1102 if (lbs_rtap_supported(priv)) {
1090 if (device_create_file(&dev->dev, &dev_attr_lbs_rtap)) 1103 if (device_create_file(&dev->dev, &dev_attr_lbs_rtap))
1091 lbs_pr_err("cannot register lbs_rtap attribute\n"); 1104 lbs_pr_err("cannot register lbs_rtap attribute\n");
1092 } 1105 }
@@ -1120,7 +1133,9 @@ void lbs_stop_card(struct lbs_private *priv)
1120 netif_carrier_off(dev); 1133 netif_carrier_off(dev);
1121 1134
1122 lbs_debugfs_remove_one(priv); 1135 lbs_debugfs_remove_one(priv);
1123 if (lbs_deinit_mesh(priv)) 1136 lbs_deinit_mesh(priv);
1137
1138 if (lbs_rtap_supported(priv))
1124 device_remove_file(&dev->dev, &dev_attr_lbs_rtap); 1139 device_remove_file(&dev->dev, &dev_attr_lbs_rtap);
1125 1140
1126 /* Delete the timeout of the currently processing command */ 1141 /* Delete the timeout of the currently processing command */