diff options
author | Michael Buesch <mbuesch@freenet.de> | 2006-02-02 12:43:25 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2006-03-27 11:18:27 -0500 |
commit | 9e4a375b15c9940b13e66e224570b35c471c0128 (patch) | |
tree | 1eb2e1cbbf37eb84deb59fef2a3c9bc4acdb1e18 /drivers | |
parent | a4a600d3e17f450666a9086465122103e96140d7 (diff) |
[PATCH] bcm43xx: Remove function bcm43xx_channel_is_allowed()
Geographical restriction should become part of the 80211 stack,
so every driver does not have to duplicate it.
Signed-off-by: Michael Buesch <mbuesch@freenet.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/wireless/bcm43xx/bcm43xx_main.c | 166 |
1 files changed, 1 insertions, 165 deletions
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/bcm43xx/bcm43xx_main.c index 521777f56a3d..c0ec503102c8 100644 --- a/drivers/net/wireless/bcm43xx/bcm43xx_main.c +++ b/drivers/net/wireless/bcm43xx/bcm43xx_main.c | |||
@@ -82,10 +82,6 @@ static int modparam_locale = -1; | |||
82 | module_param_named(locale, modparam_locale, int, 0444); | 82 | module_param_named(locale, modparam_locale, int, 0444); |
83 | MODULE_PARM_DESC(country, "Select LocaleCode 0-11 (For travelers)"); | 83 | MODULE_PARM_DESC(country, "Select LocaleCode 0-11 (For travelers)"); |
84 | 84 | ||
85 | static int modparam_outdoor; | ||
86 | module_param_named(outdoor, modparam_outdoor, int, 0444); | ||
87 | MODULE_PARM_DESC(outdoor, "Set to 1, if you are using the device outdoor, 0 otherwise."); | ||
88 | |||
89 | static int modparam_noleds; | 85 | static int modparam_noleds; |
90 | module_param_named(noleds, modparam_noleds, int, 0444); | 86 | module_param_named(noleds, modparam_noleds, int, 0444); |
91 | MODULE_PARM_DESC(noleds, "Turn off all LED activity"); | 87 | MODULE_PARM_DESC(noleds, "Turn off all LED activity"); |
@@ -1088,163 +1084,13 @@ static int bcm43xx_read_sprom(struct bcm43xx_private *bcm) | |||
1088 | return 0; | 1084 | return 0; |
1089 | } | 1085 | } |
1090 | 1086 | ||
1091 | static int bcm43xx_channel_is_allowed(struct bcm43xx_private *bcm, u8 channel, | ||
1092 | u8 *max_power, u8 *flags) | ||
1093 | { | ||
1094 | /* THIS FUNCTION DOES _NOT_ ENFORCE REGULATORY DOMAIN COMPLIANCE. | ||
1095 | * It is only a helper function to make life easier to | ||
1096 | * select legal channels and transmission powers. | ||
1097 | */ | ||
1098 | |||
1099 | u8 phytype = bcm->current_core->phy->type; | ||
1100 | int allowed = 0; | ||
1101 | |||
1102 | *max_power = 0; | ||
1103 | *flags = 0; | ||
1104 | |||
1105 | //FIXME: Set max_power and maybe flags | ||
1106 | /*FIXME: Allowed channels are sometimes different for outdoor | ||
1107 | * or indoor use. See modparam_outdoor. | ||
1108 | */ | ||
1109 | /* From b specs Max Power BPHY: | ||
1110 | * USA: 1000mW | ||
1111 | * Europe: 100mW | ||
1112 | * Japan: 10mW/MHz | ||
1113 | */ | ||
1114 | |||
1115 | switch (bcm->sprom.locale) { | ||
1116 | case BCM43xx_LOCALE_WORLD: | ||
1117 | if (phytype == BCM43xx_PHYTYPE_A) { | ||
1118 | allowed = 1;//FIXME | ||
1119 | } else if (phytype == BCM43xx_PHYTYPE_B) { | ||
1120 | if (channel >= 1 && channel <= 13) | ||
1121 | allowed = 1; | ||
1122 | } else { | ||
1123 | if (channel >= 1 && channel <= 13) | ||
1124 | allowed = 1; | ||
1125 | } | ||
1126 | break; | ||
1127 | case BCM43xx_LOCALE_THAILAND: | ||
1128 | if (phytype == BCM43xx_PHYTYPE_A) { | ||
1129 | allowed = 1;//FIXME | ||
1130 | } else if (phytype == BCM43xx_PHYTYPE_B) { | ||
1131 | if (channel >= 1 && channel <= 14) | ||
1132 | allowed = 1; | ||
1133 | } else { | ||
1134 | if (channel >= 1 && channel <= 14) | ||
1135 | allowed = 1; | ||
1136 | } | ||
1137 | break; | ||
1138 | case BCM43xx_LOCALE_ISRAEL: | ||
1139 | if (phytype == BCM43xx_PHYTYPE_A) { | ||
1140 | allowed = 1;//FIXME | ||
1141 | } else if (phytype == BCM43xx_PHYTYPE_B) { | ||
1142 | if (channel >= 5 && channel <= 7) | ||
1143 | allowed = 1; | ||
1144 | } else { | ||
1145 | if (channel >= 5 && channel <= 7) | ||
1146 | allowed = 1; | ||
1147 | } | ||
1148 | break; | ||
1149 | case BCM43xx_LOCALE_JORDAN: | ||
1150 | if (phytype == BCM43xx_PHYTYPE_A) { | ||
1151 | allowed = 1;//FIXME | ||
1152 | } else if (phytype == BCM43xx_PHYTYPE_B) { | ||
1153 | if (channel >= 10 && channel <= 13) | ||
1154 | allowed = 1; | ||
1155 | } else { | ||
1156 | if (channel >= 10 && channel <= 13) | ||
1157 | allowed = 1; | ||
1158 | } | ||
1159 | break; | ||
1160 | case BCM43xx_LOCALE_CHINA: | ||
1161 | if (phytype == BCM43xx_PHYTYPE_A) { | ||
1162 | allowed = 1;//FIXME | ||
1163 | } else if (phytype == BCM43xx_PHYTYPE_B) { | ||
1164 | if (channel >= 1 && channel <= 13) | ||
1165 | allowed = 1; | ||
1166 | } else { | ||
1167 | if (channel >= 1 && channel <= 13) | ||
1168 | allowed = 1; | ||
1169 | } | ||
1170 | break; | ||
1171 | case BCM43xx_LOCALE_JAPAN: | ||
1172 | if (phytype == BCM43xx_PHYTYPE_A) { | ||
1173 | allowed = 1;//FIXME | ||
1174 | } else if (phytype == BCM43xx_PHYTYPE_B) { | ||
1175 | //FIXME: This seems to be wrong. | ||
1176 | if (channel >= 1 && channel <= 14) | ||
1177 | allowed = 1; | ||
1178 | } else { | ||
1179 | //FIXME: This seems to be wrong. | ||
1180 | if (channel >= 1 && channel <= 14) | ||
1181 | allowed = 1; | ||
1182 | } | ||
1183 | break; | ||
1184 | case BCM43xx_LOCALE_USA_CANADA_ANZ: | ||
1185 | if (phytype == BCM43xx_PHYTYPE_A) { | ||
1186 | allowed = 1;//FIXME | ||
1187 | } else if (phytype == BCM43xx_PHYTYPE_B) { | ||
1188 | if (channel >= 1 && channel <= 13) | ||
1189 | allowed = 1; | ||
1190 | } else { | ||
1191 | if (channel >= 1 && channel <= 11) | ||
1192 | allowed = 1; | ||
1193 | } | ||
1194 | break; | ||
1195 | case BCM43xx_LOCALE_EUROPE: | ||
1196 | if (phytype == BCM43xx_PHYTYPE_A) { | ||
1197 | allowed = 1;//FIXME | ||
1198 | } else if (phytype == BCM43xx_PHYTYPE_B) { | ||
1199 | if (channel >= 1 && channel <= 13) | ||
1200 | allowed = 1; | ||
1201 | } else { | ||
1202 | if (channel >= 1 && channel <= 13) | ||
1203 | allowed = 1; | ||
1204 | } | ||
1205 | break; | ||
1206 | case BCM43xx_LOCALE_USA_LOW: | ||
1207 | if (phytype == BCM43xx_PHYTYPE_A) { | ||
1208 | allowed = 1;//FIXME | ||
1209 | } else if (phytype == BCM43xx_PHYTYPE_B) { | ||
1210 | if (channel >= 1 && channel <= 13) | ||
1211 | allowed = 1; | ||
1212 | } else { | ||
1213 | if (channel >= 1 && channel <= 11) | ||
1214 | allowed = 1; | ||
1215 | } | ||
1216 | break; | ||
1217 | case BCM43xx_LOCALE_JAPAN_HIGH: | ||
1218 | if (phytype == BCM43xx_PHYTYPE_A) { | ||
1219 | allowed = 1;//FIXME | ||
1220 | } else if (phytype == BCM43xx_PHYTYPE_B) { | ||
1221 | //FIXME? | ||
1222 | if (channel >= 1 && channel <= 14) | ||
1223 | allowed = 1; | ||
1224 | } else { | ||
1225 | if (channel >= 1 && channel <= 14) | ||
1226 | allowed = 1; | ||
1227 | } | ||
1228 | break; | ||
1229 | case BCM43xx_LOCALE_ALL: | ||
1230 | allowed = 1; | ||
1231 | break; | ||
1232 | case BCM43xx_LOCALE_NONE: | ||
1233 | break; | ||
1234 | default: | ||
1235 | assert(0); | ||
1236 | } | ||
1237 | |||
1238 | return allowed; | ||
1239 | } | ||
1240 | |||
1241 | static void bcm43xx_geo_init(struct bcm43xx_private *bcm) | 1087 | static void bcm43xx_geo_init(struct bcm43xx_private *bcm) |
1242 | { | 1088 | { |
1243 | struct ieee80211_geo geo; | 1089 | struct ieee80211_geo geo; |
1244 | struct ieee80211_channel *chan; | 1090 | struct ieee80211_channel *chan; |
1245 | int have_a = 0, have_bg = 0; | 1091 | int have_a = 0, have_bg = 0; |
1246 | int i, num80211; | 1092 | int i, num80211; |
1247 | u8 channel, flags, max_power; | 1093 | u8 channel; |
1248 | struct bcm43xx_phyinfo *phy; | 1094 | struct bcm43xx_phyinfo *phy; |
1249 | const char *iso_country; | 1095 | const char *iso_country; |
1250 | 1096 | ||
@@ -1268,27 +1114,17 @@ static void bcm43xx_geo_init(struct bcm43xx_private *bcm) | |||
1268 | 1114 | ||
1269 | if (have_a) { | 1115 | if (have_a) { |
1270 | for (i = 0, channel = 0; channel < 201; channel++) { | 1116 | for (i = 0, channel = 0; channel < 201; channel++) { |
1271 | if (!bcm43xx_channel_is_allowed(bcm, channel, | ||
1272 | &max_power, &flags)) | ||
1273 | continue; | ||
1274 | chan = &geo.a[i++]; | 1117 | chan = &geo.a[i++]; |
1275 | chan->freq = bcm43xx_channel_to_freq(bcm, channel); | 1118 | chan->freq = bcm43xx_channel_to_freq(bcm, channel); |
1276 | chan->channel = channel; | 1119 | chan->channel = channel; |
1277 | chan->flags = flags; | ||
1278 | chan->max_power = max_power; | ||
1279 | } | 1120 | } |
1280 | geo.a_channels = i; | 1121 | geo.a_channels = i; |
1281 | } | 1122 | } |
1282 | if (have_bg) { | 1123 | if (have_bg) { |
1283 | for (i = 0, channel = 1; channel < 15; channel++) { | 1124 | for (i = 0, channel = 1; channel < 15; channel++) { |
1284 | if (!bcm43xx_channel_is_allowed(bcm, channel, | ||
1285 | &max_power, &flags)) | ||
1286 | continue; | ||
1287 | chan = &geo.bg[i++]; | 1125 | chan = &geo.bg[i++]; |
1288 | chan->freq = bcm43xx_channel_to_freq(bcm, channel); | 1126 | chan->freq = bcm43xx_channel_to_freq(bcm, channel); |
1289 | chan->channel = channel; | 1127 | chan->channel = channel; |
1290 | chan->flags = flags; | ||
1291 | chan->max_power = max_power; | ||
1292 | } | 1128 | } |
1293 | geo.bg_channels = i; | 1129 | geo.bg_channels = i; |
1294 | } | 1130 | } |