diff options
author | Holger Schurig <holgerschurig@googlemail.com> | 2009-12-02 09:25:59 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-12-22 13:37:13 -0500 |
commit | cd74468b8c56c1a809d9b7f913f11d8181c3a0b2 (patch) | |
tree | 36e25289edfc43728a09a38bc15b67079d15cb4d /drivers/net/wireless | |
parent | 55e1ff924414111a6afbfde00375a1302aef9353 (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')
-rw-r--r-- | drivers/net/wireless/libertas/main.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index b0799e347ba2..ad3434011897 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) | |||
1062 | EXPORT_SYMBOL_GPL(lbs_remove_card); | 1062 | EXPORT_SYMBOL_GPL(lbs_remove_card); |
1063 | 1063 | ||
1064 | 1064 | ||
1065 | static 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 | |||
1065 | int lbs_start_card(struct lbs_private *priv) | 1076 | int 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 */ |