Commit 4f36f808 authored by James Ketrenos's avatar James Ketrenos

Added more useful geography encoding so people's experience with

iwconfig matches what their hardware can actually do in regard to
supported channel maps, etc.
Signed-off-by: default avatarJames Ketrenos <jketreno@linux.intel.com>
parent 2b184d5b
......@@ -10374,9 +10374,30 @@ static int ipw_config(struct ipw_priv *priv)
return -EIO;
}
static const struct ieee80211_geo ipw_geo = {
/*
* NOTE:
*
* These tables have been tested in conjunction with the
* Intel PRO/Wireless 2200BG and 2915ABG Network Connection Adapters.
*
* Altering this values, using it on other hardware, or in geographies
* not intended for resale of the above mentioned Intel adapters has
* not been tested.
*
*/
static const struct ieee80211_geo ipw_geos[] = {
{ /* Restricted */
"---",
.bg_channels = 11,
.bg = {{2412, 1}, {2417, 2}, {2422, 3},
{2427, 4}, {2432, 5}, {2437, 6},
{2442, 7}, {2447, 8}, {2452, 9},
{2457, 10}, {2462, 11}},
},
{ /* Custom US/Canada */
"ZZF",
.bg_channels = 11,
.bg = {{2412, 1}, {2417, 2}, {2422, 3},
{2427, 4}, {2432, 5}, {2437, 6},
{2442, 7}, {2447, 8}, {2452, 9},
......@@ -10390,12 +10411,219 @@ static const struct ieee80211_geo ipw_geo = {
{5280, 56, IEEE80211_CH_PASSIVE_ONLY},
{5300, 60, IEEE80211_CH_PASSIVE_ONLY},
{5320, 64, IEEE80211_CH_PASSIVE_ONLY}},
},
{ /* Rest of World */
"ZZD",
.bg_channels = 13,
.bg = {{2412, 1}, {2417, 2}, {2422, 3},
{2427, 4}, {2432, 5}, {2437, 6},
{2442, 7}, {2447, 8}, {2452, 9},
{2457, 10}, {2462, 11}, {2467, 12},
{2472, 13}},
},
{ /* Custom USA & Europe & High */
"ZZA",
.bg_channels = 11,
.bg = {{2412, 1}, {2417, 2}, {2422, 3},
{2427, 4}, {2432, 5}, {2437, 6},
{2442, 7}, {2447, 8}, {2452, 9},
{2457, 10}, {2462, 11}},
.a_channels = 13,
.a = {{5180, 36},
{5200, 40},
{5220, 44},
{5240, 48},
{5260, 52, IEEE80211_CH_PASSIVE_ONLY},
{5280, 56, IEEE80211_CH_PASSIVE_ONLY},
{5300, 60, IEEE80211_CH_PASSIVE_ONLY},
{5320, 64, IEEE80211_CH_PASSIVE_ONLY},
{5745, 149},
{5765, 153},
{5785, 157},
{5805, 161},
{5825, 165}},
},
{ /* Custom NA & Europe */
"ZZB",
.bg_channels = 11,
.bg = {{2412, 1}, {2417, 2}, {2422, 3},
{2427, 4}, {2432, 5}, {2437, 6},
{2442, 7}, {2447, 8}, {2452, 9},
{2457, 10}, {2462, 11}},
.a_channels = 13,
.a = {{5180, 36},
{5200, 40},
{5220, 44},
{5240, 48},
{5260, 52, IEEE80211_CH_PASSIVE_ONLY},
{5280, 56, IEEE80211_CH_PASSIVE_ONLY},
{5300, 60, IEEE80211_CH_PASSIVE_ONLY},
{5320, 64, IEEE80211_CH_PASSIVE_ONLY},
{5745, 149, IEEE80211_CH_PASSIVE_ONLY},
{5765, 153, IEEE80211_CH_PASSIVE_ONLY},
{5785, 157, IEEE80211_CH_PASSIVE_ONLY},
{5805, 161, IEEE80211_CH_PASSIVE_ONLY},
{5825, 165, IEEE80211_CH_PASSIVE_ONLY}},
},
{ /* Custom Japan */
"ZZC",
.bg_channels = 11,
.bg = {{2412, 1}, {2417, 2}, {2422, 3},
{2427, 4}, {2432, 5}, {2437, 6},
{2442, 7}, {2447, 8}, {2452, 9},
{2457, 10}, {2462, 11}},
.a_channels = 4,
.a = {{5170, 34}, {5190, 38},
{5210, 42}, {5230, 46}},
},
{ /* Custom */
"ZZM",
.bg_channels = 11,
.bg = {{2412, 1}, {2417, 2}, {2422, 3},
{2427, 4}, {2432, 5}, {2437, 6},
{2442, 7}, {2447, 8}, {2452, 9},
{2457, 10}, {2462, 11}},
},
{ /* Europe */
"ZZE",
.bg_channels = 13,
.bg = {{2412, 1}, {2417, 2}, {2422, 3},
{2427, 4}, {2432, 5}, {2437, 6},
{2442, 7}, {2447, 8}, {2452, 9},
{2457, 10}, {2462, 11}, {2467, 12},
{2472, 13}},
.a_channels = 19,
.a = {{5180, 36},
{5200, 40},
{5220, 44},
{5240, 48},
{5260, 52, IEEE80211_CH_PASSIVE_ONLY},
{5280, 56, IEEE80211_CH_PASSIVE_ONLY},
{5300, 60, IEEE80211_CH_PASSIVE_ONLY},
{5320, 64, IEEE80211_CH_PASSIVE_ONLY},
{5500, 100, IEEE80211_CH_PASSIVE_ONLY},
{5520, 104, IEEE80211_CH_PASSIVE_ONLY},
{5540, 108, IEEE80211_CH_PASSIVE_ONLY},
{5560, 112, IEEE80211_CH_PASSIVE_ONLY},
{5580, 116, IEEE80211_CH_PASSIVE_ONLY},
{5600, 120, IEEE80211_CH_PASSIVE_ONLY},
{5620, 124, IEEE80211_CH_PASSIVE_ONLY},
{5640, 128, IEEE80211_CH_PASSIVE_ONLY},
{5660, 132, IEEE80211_CH_PASSIVE_ONLY},
{5680, 136, IEEE80211_CH_PASSIVE_ONLY},
{5700, 140, IEEE80211_CH_PASSIVE_ONLY}},
},
{ /* Custom Japan */
"ZZJ",
.bg_channels = 14,
.bg = {{2412, 1}, {2417, 2}, {2422, 3},
{2427, 4}, {2432, 5}, {2437, 6},
{2442, 7}, {2447, 8}, {2452, 9},
{2457, 10}, {2462, 11}, {2467, 12},
{2472, 13}, {2484, 14, IEEE80211_CH_B_ONLY}},
.a_channels = 4,
.a = {{5170, 34}, {5190, 38},
{5210, 42}, {5230, 46}},
},
{ /* High Band */
"ZZH",
.bg_channels = 13,
.bg = {{2412, 1}, {2417, 2}, {2422, 3},
{2427, 4}, {2432, 5}, {2437, 6},
{2442, 7}, {2447, 8}, {2452, 9},
{2457, 10}, {2462, 11},
{2467, 12, IEEE80211_CH_PASSIVE_ONLY},
{2472, 13, IEEE80211_CH_PASSIVE_ONLY}},
.a_channels = 4,
.a = {{5745, 149}, {5765, 153},
{5785, 157}, {5805, 161}},
},
{ /* Custom Europe */
"ZZG",
.bg_channels = 13,
.bg = {{2412, 1}, {2417, 2}, {2422, 3},
{2427, 4}, {2432, 5}, {2437, 6},
{2442, 7}, {2447, 8}, {2452, 9},
{2457, 10}, {2462, 11},
{2467, 12}, {2472, 13}},
.a_channels = 4,
.a = {{5180, 36}, {5200, 40},
{5220, 44}, {5240, 48}},
},
{ /* Europe */
"ZZK",
.bg_channels = 13,
.bg = {{2412, 1}, {2417, 2}, {2422, 3},
{2427, 4}, {2432, 5}, {2437, 6},
{2442, 7}, {2447, 8}, {2452, 9},
{2457, 10}, {2462, 11},
{2467, 12, IEEE80211_CH_PASSIVE_ONLY},
{2472, 13, IEEE80211_CH_PASSIVE_ONLY}},
.a_channels = 24,
.a = {{5180, 36, IEEE80211_CH_PASSIVE_ONLY},
{5200, 40, IEEE80211_CH_PASSIVE_ONLY},
{5220, 44, IEEE80211_CH_PASSIVE_ONLY},
{5240, 48, IEEE80211_CH_PASSIVE_ONLY},
{5260, 52, IEEE80211_CH_PASSIVE_ONLY},
{5280, 56, IEEE80211_CH_PASSIVE_ONLY},
{5300, 60, IEEE80211_CH_PASSIVE_ONLY},
{5320, 64, IEEE80211_CH_PASSIVE_ONLY},
{5500, 100, IEEE80211_CH_PASSIVE_ONLY},
{5520, 104, IEEE80211_CH_PASSIVE_ONLY},
{5540, 108, IEEE80211_CH_PASSIVE_ONLY},
{5560, 112, IEEE80211_CH_PASSIVE_ONLY},
{5580, 116, IEEE80211_CH_PASSIVE_ONLY},
{5600, 120, IEEE80211_CH_PASSIVE_ONLY},
{5620, 124, IEEE80211_CH_PASSIVE_ONLY},
{5640, 128, IEEE80211_CH_PASSIVE_ONLY},
{5660, 132, IEEE80211_CH_PASSIVE_ONLY},
{5680, 136, IEEE80211_CH_PASSIVE_ONLY},
{5700, 140, IEEE80211_CH_PASSIVE_ONLY},
{5745, 149, IEEE80211_CH_PASSIVE_ONLY},
{5765, 153, IEEE80211_CH_PASSIVE_ONLY},
{5785, 157, IEEE80211_CH_PASSIVE_ONLY},
{5805, 161, IEEE80211_CH_PASSIVE_ONLY},
{5825, 165, IEEE80211_CH_PASSIVE_ONLY}},
},
{ /* Europe */
"ZZL",
.bg_channels = 11,
.bg = {{2412, 1}, {2417, 2}, {2422, 3},
{2427, 4}, {2432, 5}, {2437, 6},
{2442, 7}, {2447, 8}, {2452, 9},
{2457, 10}, {2462, 11}},
.a_channels = 13,
.a = {{5180, 36, IEEE80211_CH_PASSIVE_ONLY},
{5200, 40, IEEE80211_CH_PASSIVE_ONLY},
{5220, 44, IEEE80211_CH_PASSIVE_ONLY},
{5240, 48, IEEE80211_CH_PASSIVE_ONLY},
{5260, 52, IEEE80211_CH_PASSIVE_ONLY},
{5280, 56, IEEE80211_CH_PASSIVE_ONLY},
{5300, 60, IEEE80211_CH_PASSIVE_ONLY},
{5320, 64, IEEE80211_CH_PASSIVE_ONLY},
{5745, 149, IEEE80211_CH_PASSIVE_ONLY},
{5765, 153, IEEE80211_CH_PASSIVE_ONLY},
{5785, 157, IEEE80211_CH_PASSIVE_ONLY},
{5805, 161, IEEE80211_CH_PASSIVE_ONLY},
{5825, 165, IEEE80211_CH_PASSIVE_ONLY}},
}
};
#define MAX_HW_RESTARTS 5
static int ipw_up(struct ipw_priv *priv)
{
int rc, i;
int rc, i, j;
if (priv->status & STATUS_EXIT_PENDING)
return -EIO;
......@@ -10414,9 +10642,20 @@ static int ipw_up(struct ipw_priv *priv)
eeprom_parse_mac(priv, priv->mac_addr);
memcpy(priv->net_dev->dev_addr, priv->mac_addr, ETH_ALEN);
memcpy(priv->country, &priv->eeprom[EEPROM_COUNTRY_CODE], 3);
priv->country[3] = '\0';
ieee80211_set_geo(priv->ieee, &ipw_geo);
for (j = 0; j < ARRAY_SIZE(ipw_geos); j++) {
if (!memcmp(&priv->eeprom[EEPROM_COUNTRY_CODE],
ipw_geos[j].name, 3))
break;
}
if (j == ARRAY_SIZE(ipw_geos))
j = 0;
if (ieee80211_set_geo(priv->ieee, &ipw_geos[j])) {
IPW_WARNING("Could not set geography.");
return 0;
}
IPW_DEBUG_INFO("Geography %03d [%s] detected.\n",
j, priv->ieee->geo.name);
if (priv->status & STATUS_RF_KILL_SW) {
IPW_WARNING("Radio disabled by module parameter.\n");
......
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