rndis_wlan: convert get range to cfg80211

Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
Jussi Kivilinna 2009-03-26 23:40:23 +02:00 committed by John W. Linville
parent 4bd7f03e91
commit 4d2a369ec0

View File

@ -1176,113 +1176,6 @@ static int rndis_iw_commit(struct net_device *dev,
}
static int rndis_iw_get_range(struct net_device *dev,
struct iw_request_info *info, union iwreq_data *wrqu, char *extra)
{
struct iw_range *range = (struct iw_range *)extra;
struct usbnet *usbdev = netdev_priv(dev);
struct rndis_wext_private *priv = get_rndis_wext_priv(usbdev);
int len, ret, i, j, num, has_80211g_rates;
u8 rates[8];
__le32 tx_power;
devdbg(usbdev, "SIOCGIWRANGE");
/* clear iw_range struct */
memset(range, 0, sizeof(*range));
wrqu->data.length = sizeof(*range);
range->txpower_capa = IW_TXPOW_MWATT;
range->num_txpower = 1;
if (priv->caps & CAP_SUPPORT_TXPOWER) {
len = sizeof(tx_power);
ret = rndis_query_oid(usbdev, OID_802_11_TX_POWER_LEVEL,
&tx_power, &len);
if (ret == 0 && le32_to_cpu(tx_power) != 0xFF)
range->txpower[0] = le32_to_cpu(tx_power);
else
range->txpower[0] = get_bcm4320_power(priv);
} else
range->txpower[0] = get_bcm4320_power(priv);
len = sizeof(rates);
ret = rndis_query_oid(usbdev, OID_802_11_SUPPORTED_RATES, &rates,
&len);
has_80211g_rates = 0;
if (ret == 0) {
j = 0;
for (i = 0; i < len; i++) {
if (rates[i] == 0)
break;
range->bitrate[j] = (rates[i] & 0x7f) * 500000;
/* check for non 802.11b rates */
if (range->bitrate[j] == 6000000 ||
range->bitrate[j] == 9000000 ||
(range->bitrate[j] >= 12000000 &&
range->bitrate[j] != 22000000))
has_80211g_rates = 1;
j++;
}
range->num_bitrates = j;
} else
range->num_bitrates = 0;
/* fill in 802.11g rates */
if (has_80211g_rates) {
num = range->num_bitrates;
for (i = 4; i < ARRAY_SIZE(rndis_rates); i++) {
for (j = 0; j < num; j++) {
if (range->bitrate[j] ==
rndis_rates[i].bitrate * 100000)
break;
}
if (j == num)
range->bitrate[range->num_bitrates++] =
rndis_rates[i].bitrate * 100000;
if (range->num_bitrates == IW_MAX_BITRATES)
break;
}
/* estimated max real througput in bps */
range->throughput = 54 * 1000 * 1000 / 2;
/* ~35% more with afterburner */
if (priv->param_afterburner)
range->throughput = range->throughput / 100 * 135;
} else {
/* estimated max real througput in bps */
range->throughput = 11 * 1000 * 1000 / 2;
}
range->num_channels = 14;
for (i = 0; (i < 14) && (i < IW_MAX_FREQUENCIES); i++) {
range->freq[i].i = i + 1;
range->freq[i].m = ieee80211_dsss_chan_to_freq(i + 1) * 100000;
range->freq[i].e = 1;
}
range->num_frequency = i;
range->min_rts = 0;
range->max_rts = 2347;
range->min_frag = 256;
range->max_frag = 2346;
range->max_qual.qual = 100;
range->max_qual.level = 100;
range->max_qual.updated = IW_QUAL_QUAL_UPDATED
| IW_QUAL_LEVEL_UPDATED
| IW_QUAL_NOISE_INVALID;
range->we_version_compiled = WIRELESS_EXT;
range->we_version_source = WIRELESS_EXT;
range->enc_capa = IW_ENC_CAPA_WPA | IW_ENC_CAPA_WPA2 |
IW_ENC_CAPA_CIPHER_TKIP | IW_ENC_CAPA_CIPHER_CCMP;
return 0;
}
static int rndis_iw_set_essid(struct net_device *dev,
struct iw_request_info *info, union iwreq_data *wrqu, char *essid)
{
@ -2189,7 +2082,7 @@ static const iw_handler rndis_iw_handler[] =
IW_IOCTL(SIOCGIWFREQ) = rndis_iw_get_freq,
IW_IOCTL(SIOCSIWMODE) = (iw_handler) cfg80211_wext_siwmode,
IW_IOCTL(SIOCGIWMODE) = (iw_handler) cfg80211_wext_giwmode,
IW_IOCTL(SIOCGIWRANGE) = rndis_iw_get_range,
IW_IOCTL(SIOCGIWRANGE) = (iw_handler) cfg80211_wext_giwrange,
IW_IOCTL(SIOCSIWAP) = rndis_iw_set_bssid,
IW_IOCTL(SIOCGIWAP) = rndis_iw_get_bssid,
IW_IOCTL(SIOCSIWSCAN) = rndis_iw_set_scan,
@ -2633,6 +2526,7 @@ static int rndis_wext_bind(struct usbnet *usbdev, struct usb_interface *intf)
priv->band.bitrates = priv->rates;
priv->band.n_bitrates = ARRAY_SIZE(rndis_rates);
wiphy->bands[IEEE80211_BAND_2GHZ] = &priv->band;
wiphy->signal_type = CFG80211_SIGNAL_TYPE_UNSPEC;
set_wiphy_dev(wiphy, &usbdev->udev->dev);