[funini.com] -> [kei@sodan] -> Kernel Reading

root/net/wireless/util.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. ieee80211_channel_to_frequency
  2. ieee80211_frequency_to_channel
  3. __ieee80211_get_channel
  4. set_mandatory_flags_band
  5. ieee80211_set_bitrate_flags

/*
 * Wireless utility functions
 *
 * Copyright 2007       Johannes Berg <johannes@sipsolutions.net>
 */
#include <net/wireless.h>
#include <asm/bitops.h>
#include "core.h"

int ieee80211_channel_to_frequency(int chan)
{
        if (chan < 14)
                return 2407 + chan * 5;

        if (chan == 14)
                return 2484;

        /* FIXME: 802.11j 17.3.8.3.2 */
        return (chan + 1000) * 5;
}
EXPORT_SYMBOL(ieee80211_channel_to_frequency);

int ieee80211_frequency_to_channel(int freq)
{
        if (freq == 2484)
                return 14;

        if (freq < 2484)
                return (freq - 2407) / 5;

        /* FIXME: 802.11j 17.3.8.3.2 */
        return freq/5 - 1000;
}
EXPORT_SYMBOL(ieee80211_frequency_to_channel);

struct ieee80211_channel *__ieee80211_get_channel(struct wiphy *wiphy,
                                                  int freq)
{
        enum ieee80211_band band;
        struct ieee80211_supported_band *sband;
        int i;

        for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
                sband = wiphy->bands[band];

                if (!sband)
                        continue;

                for (i = 0; i < sband->n_channels; i++) {
                        if (sband->channels[i].center_freq == freq)
                                return &sband->channels[i];
                }
        }

        return NULL;
}
EXPORT_SYMBOL(__ieee80211_get_channel);

static void set_mandatory_flags_band(struct ieee80211_supported_band *sband,
                                     enum ieee80211_band band)
{
        int i, want;

        switch (band) {
        case IEEE80211_BAND_5GHZ:
                want = 3;
                for (i = 0; i < sband->n_bitrates; i++) {
                        if (sband->bitrates[i].bitrate == 60 ||
                            sband->bitrates[i].bitrate == 120 ||
                            sband->bitrates[i].bitrate == 240) {
                                sband->bitrates[i].flags |=
                                        IEEE80211_RATE_MANDATORY_A;
                                want--;
                        }
                }
                WARN_ON(want);
                break;
        case IEEE80211_BAND_2GHZ:
                want = 7;
                for (i = 0; i < sband->n_bitrates; i++) {
                        if (sband->bitrates[i].bitrate == 10) {
                                sband->bitrates[i].flags |=
                                        IEEE80211_RATE_MANDATORY_B |
                                        IEEE80211_RATE_MANDATORY_G;
                                want--;
                        }

                        if (sband->bitrates[i].bitrate == 20 ||
                            sband->bitrates[i].bitrate == 55 ||
                            sband->bitrates[i].bitrate == 110 ||
                            sband->bitrates[i].bitrate == 60 ||
                            sband->bitrates[i].bitrate == 120 ||
                            sband->bitrates[i].bitrate == 240) {
                                sband->bitrates[i].flags |=
                                        IEEE80211_RATE_MANDATORY_G;
                                want--;
                        }

                        if (sband->bitrates[i].bitrate != 10 &&
                            sband->bitrates[i].bitrate != 20 &&
                            sband->bitrates[i].bitrate != 55 &&
                            sband->bitrates[i].bitrate != 110)
                                sband->bitrates[i].flags |=
                                        IEEE80211_RATE_ERP_G;
                }
                WARN_ON(want != 0 && want != 3 && want != 6);
                break;
        case IEEE80211_NUM_BANDS:
                WARN_ON(1);
                break;
        }
}

void ieee80211_set_bitrate_flags(struct wiphy *wiphy)
{
        enum ieee80211_band band;

        for (band = 0; band < IEEE80211_NUM_BANDS; band++)
                if (wiphy->bands[band])
                        set_mandatory_flags_band(wiphy->bands[band], band);
}

/* [<][>][^][v][top][bottom][index][help] */

[funini.com] -> [kei@sodan] -> Kernel Reading