Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at c9a28fa7b9ac19b676deefa0a171ce7df8755c08 121 lines 4.0 kB view raw
1/* 2 * Copyright (c) 2004, 2005 Reyk Floeter <reyk@vantronix.net> 3 * 4 * Permission to use, copy, modify, and distribute this software for any 5 * purpose with or without fee is hereby granted, provided that the above 6 * copyright notice and this permission notice appear in all copies. 7 * 8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 */ 16 17/* 18 * Basic regulation domain extensions for the IEEE 802.11 stack 19 */ 20 21#include <linux/kernel.h> 22#include <linux/string.h> 23 24#include "regdom.h" 25 26static const struct ath5k_regdommap { 27 enum ath5k_regdom dmn; 28 enum ath5k_regdom dmn5; 29 enum ath5k_regdom dmn2; 30} r_map[] = { 31 { DMN_DEFAULT, DMN_DEBUG, DMN_DEBUG }, 32 { DMN_NULL_WORLD, DMN_NULL, DMN_WORLD }, 33 { DMN_NULL_ETSIB, DMN_NULL, DMN_ETSIB }, 34 { DMN_NULL_ETSIC, DMN_NULL, DMN_ETSIC }, 35 { DMN_FCC1_FCCA, DMN_FCC1, DMN_FCCA }, 36 { DMN_FCC1_WORLD, DMN_FCC1, DMN_WORLD }, 37 { DMN_FCC2_FCCA, DMN_FCC2, DMN_FCCA }, 38 { DMN_FCC2_WORLD, DMN_FCC2, DMN_WORLD }, 39 { DMN_FCC2_ETSIC, DMN_FCC2, DMN_ETSIC }, 40 { DMN_FRANCE_NULL, DMN_ETSI3, DMN_ETSI3 }, 41 { DMN_FCC3_FCCA, DMN_FCC3, DMN_WORLD }, 42 { DMN_ETSI1_WORLD, DMN_ETSI1, DMN_WORLD }, 43 { DMN_ETSI3_ETSIA, DMN_ETSI3, DMN_WORLD }, 44 { DMN_ETSI2_WORLD, DMN_ETSI2, DMN_WORLD }, 45 { DMN_ETSI3_WORLD, DMN_ETSI3, DMN_WORLD }, 46 { DMN_ETSI4_WORLD, DMN_ETSI4, DMN_WORLD }, 47 { DMN_ETSI4_ETSIC, DMN_ETSI4, DMN_ETSIC }, 48 { DMN_ETSI5_WORLD, DMN_ETSI5, DMN_WORLD }, 49 { DMN_ETSI6_WORLD, DMN_ETSI6, DMN_WORLD }, 50 { DMN_ETSI_NULL, DMN_ETSI1, DMN_ETSI1 }, 51 { DMN_MKK1_MKKA, DMN_MKK1, DMN_MKKA }, 52 { DMN_MKK1_MKKB, DMN_MKK1, DMN_MKKA }, 53 { DMN_APL4_WORLD, DMN_APL4, DMN_WORLD }, 54 { DMN_MKK2_MKKA, DMN_MKK2, DMN_MKKA }, 55 { DMN_APL_NULL, DMN_APL1, DMN_NULL }, 56 { DMN_APL2_WORLD, DMN_APL2, DMN_WORLD }, 57 { DMN_APL2_APLC, DMN_APL2, DMN_WORLD }, 58 { DMN_APL3_WORLD, DMN_APL3, DMN_WORLD }, 59 { DMN_MKK1_FCCA, DMN_MKK1, DMN_FCCA }, 60 { DMN_APL2_APLD, DMN_APL2, DMN_APLD }, 61 { DMN_MKK1_MKKA1, DMN_MKK1, DMN_MKKA }, 62 { DMN_MKK1_MKKA2, DMN_MKK1, DMN_MKKA }, 63 { DMN_APL1_WORLD, DMN_APL1, DMN_WORLD }, 64 { DMN_APL1_FCCA, DMN_APL1, DMN_FCCA }, 65 { DMN_APL1_APLA, DMN_APL1, DMN_WORLD }, 66 { DMN_APL1_ETSIC, DMN_APL1, DMN_ETSIC }, 67 { DMN_APL2_ETSIC, DMN_APL2, DMN_ETSIC }, 68 { DMN_APL5_WORLD, DMN_APL5, DMN_WORLD }, 69 { DMN_WOR0_WORLD, DMN_WORLD, DMN_WORLD }, 70 { DMN_WOR1_WORLD, DMN_WORLD, DMN_WORLD }, 71 { DMN_WOR2_WORLD, DMN_WORLD, DMN_WORLD }, 72 { DMN_WOR3_WORLD, DMN_WORLD, DMN_WORLD }, 73 { DMN_WOR4_WORLD, DMN_WORLD, DMN_WORLD }, 74 { DMN_WOR5_ETSIC, DMN_WORLD, DMN_WORLD }, 75 { DMN_WOR01_WORLD, DMN_WORLD, DMN_WORLD }, 76 { DMN_WOR02_WORLD, DMN_WORLD, DMN_WORLD }, 77 { DMN_EU1_WORLD, DMN_ETSI1, DMN_WORLD }, 78 { DMN_WOR9_WORLD, DMN_WORLD, DMN_WORLD }, 79 { DMN_WORA_WORLD, DMN_WORLD, DMN_WORLD }, 80}; 81 82enum ath5k_regdom ath5k_regdom2flag(enum ath5k_regdom dmn, u16 mhz) 83{ 84 unsigned int i; 85 86 for (i = 0; i < ARRAY_SIZE(r_map); i++) { 87 if (r_map[i].dmn == dmn) { 88 if (mhz >= 2000 && mhz <= 3000) 89 return r_map[i].dmn2; 90 if (mhz >= IEEE80211_CHANNELS_5GHZ_MIN && 91 mhz <= IEEE80211_CHANNELS_5GHZ_MAX) 92 return r_map[i].dmn5; 93 } 94 } 95 96 return DMN_DEBUG; 97} 98 99u16 ath5k_regdom_from_ieee(enum ath5k_regdom ieee) 100{ 101 u32 regdomain = (u32)ieee; 102 103 /* 104 * Use the default regulation domain if the value is empty 105 * or not supported by the net80211 regulation code. 106 */ 107 if (ath5k_regdom2flag(regdomain, IEEE80211_CHANNELS_5GHZ_MIN) == 108 DMN_DEBUG) 109 return (u16)AR5K_TUNE_REGDOMAIN; 110 111 /* It is supported, just return the value */ 112 return regdomain; 113} 114 115enum ath5k_regdom ath5k_regdom_to_ieee(u16 regdomain) 116{ 117 enum ath5k_regdom ieee = (enum ath5k_regdom)regdomain; 118 119 return ieee; 120} 121