int zd_mac_get_range(struct zd_mac *mac, struct iw_range *range) { int i; const struct channel_range *channel_range; u8 regdomain; memset(range, 0, sizeof(*range)); /* FIXME: Not so important and depends on the mode. For 802.11g * usually this value is used. It seems to be that Bit/s number is * given here. */ range->throughput = 27 * 1000 * 1000; range->max_qual.qual = 100; range->max_qual.level = 100; /* FIXME: Needs still to be tuned. */ range->avg_qual.qual = 71; range->avg_qual.level = 80; /* FIXME: depends on standard? */ range->min_rts = 256; range->max_rts = 2346; range->min_frag = MIN_FRAG_THRESHOLD; range->max_frag = MAX_FRAG_THRESHOLD; range->max_encoding_tokens = WEP_KEYS; range->num_encoding_sizes = 2; range->encoding_size[0] = 5; range->encoding_size[1] = WEP_KEY_LEN; range->we_version_compiled = WIRELESS_EXT; range->we_version_source = 20; range->enc_capa = IW_ENC_CAPA_WPA | IW_ENC_CAPA_WPA2 | IW_ENC_CAPA_CIPHER_TKIP | IW_ENC_CAPA_CIPHER_CCMP; ZD_ASSERT(!irqs_disabled()); spin_lock_irq(&mac->lock); regdomain = mac->regdomain; spin_unlock_irq(&mac->lock); channel_range = zd_channel_range(regdomain); range->num_channels = channel_range->end - channel_range->start; range->old_num_channels = range->num_channels; range->num_frequency = range->num_channels; range->old_num_frequency = range->num_frequency; for (i = 0; i < range->num_frequency; i++) { struct iw_freq *freq = &range->freq[i]; freq->i = channel_range->start + i; zd_channel_to_freq(freq, freq->i); } return 0; }
static int iw_get_freq(struct net_device *netdev, struct iw_request_info *info, union iwreq_data *req, char *extra) { int r; struct zd_mac *mac = zd_netdev_mac(netdev); struct iw_freq *freq = &req->freq; u8 channel; u8 flags; r = zd_mac_get_channel(mac, &channel, &flags); if (r) return r; freq->flags = (flags & MAC_FIXED_CHANNEL) ? IW_FREQ_FIXED : IW_FREQ_AUTO; dev_dbg_f(zd_mac_dev(mac), "channel %s\n", (flags & MAC_FIXED_CHANNEL) ? "fixed" : "auto"); return zd_channel_to_freq(freq, channel); }