1 /* 2 * Copyright (c) 2017 The Linux Foundation. All rights reserved. 3 * 4 * 5 * Permission to use, copy, modify, and/or distribute this software for 6 * any purpose with or without fee is hereby granted, provided that the 7 * above copyright notice and this permission notice appear in all 8 * copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 11 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 12 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 13 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 14 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 15 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 16 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17 * PERFORMANCE OF THIS SOFTWARE. 18 */ 19 20 /** 21 * DOC: reg_db.h 22 * This file contains regulatory component data structures 23 */ 24 25 #ifndef __REG_DB_H 26 #define __REG_DB_H 27 28 #define REGULATORY_CHAN_DISABLED (1<<0) 29 #define REGULATORY_CHAN_NO_IR (1<<1) 30 #define REGULATORY_CHAN_RADAR (1<<3) 31 #define REGULATORY_CHAN_NO_OFDM (1<<6) 32 #define REGULATORY_CHAN_INDOOR_ONLY (1<<9) 33 34 #define REGULATORY_CHAN_NO_HT40 (1<<4) 35 #define REGULATORY_CHAN_NO_80MHZ (1<<7) 36 #define REGULATORY_CHAN_NO_160MHZ (1<<8) 37 #define REGULATORY_CHAN_NO_20MHZ (1<<11) 38 #define REGULATORY_CHAN_NO_10MHZ (1<<12) 39 40 #define REGULATORY_PHYMODE_NO11A (1<<0) 41 #define REGULATORY_PHYMODE_NO11B (1<<1) 42 #define REGULATORY_PHYMODE_NO11G (1<<2) 43 #define REGULATORY_CHAN_NO11N (1<<3) 44 #define REGULATORY_PHYMODE_NO11AC (1<<4) 45 #define REGULATORY_PHYMODE_NO11AX (1<<5) 46 47 #define MAX_REG_RULES 10 48 #define REG_ALPHA2_LEN 2 49 50 /** 51 * enum dfs_reg - DFS region 52 * @DFS_UNINIT_REG: un-initialized region 53 * @DFS_FCC_REG: FCC region 54 * @DFS_ETSI_REG: ETSI region 55 * @DFS_MKK_REG: MKK region 56 * @DFS_CN_REG: China region 57 * @DFS_KR_REG: Korea region 58 * @DFS_UNDEF_REG: Undefined region 59 */ 60 enum dfs_reg { 61 DFS_UNINIT_REG = 0, 62 DFS_FCC_REG = 1, 63 DFS_ETSI_REG = 2, 64 DFS_MKK_REG = 3, 65 DFS_CN_REG = 4, 66 DFS_KR_REG = 5, 67 DFS_UNDEF_REG 68 }; 69 70 /** 71 * struct regulatory_rule 72 * @start_freq: start frequency 73 * @end_freq: end frequency 74 * @max_bw: maximum bandwidth 75 * @reg_power: regulatory power 76 * @flags: regulatory flags 77 */ 78 struct regulatory_rule { 79 uint16_t start_freq; 80 uint16_t end_freq; 81 uint16_t max_bw; 82 uint8_t reg_power; 83 uint16_t flags; 84 }; 85 86 /** 87 * struct regdomain 88 * @ctl_val: CTL value 89 * @dfs_region: dfs region 90 * @min_bw: minimum bandwidth 91 * @num_reg_rules: number of regulatory rules 92 * @reg_rules_id: regulatory rule index 93 */ 94 struct regdomain { 95 uint8_t ctl_val; 96 enum dfs_reg dfs_region; 97 uint16_t min_bw; 98 uint8_t ant_gain; 99 uint8_t num_reg_rules; 100 uint8_t reg_rule_id[MAX_REG_RULES]; 101 }; 102 103 /** 104 * struct country_code_to_reg_domain 105 * @country_code: country code 106 * @reg_dmn_pair_id: reg domainpair id 107 * @alpha2: internal alpha2(unique) 108 * @alpha2_11d: iso-3166 alpha2 109 * @max_bw_2g: maximum 2g bandwidth 110 * @max_bw_5g: maximum 5g bandwidth 111 * @phymode_bitmap: phymodes not supported 112 */ 113 struct country_code_to_reg_domain { 114 uint16_t country_code; 115 uint16_t reg_dmn_pair_id; 116 uint8_t alpha2[REG_ALPHA2_LEN + 1]; 117 uint8_t alpha2_11d[REG_ALPHA2_LEN + 1]; 118 uint16_t max_bw_2g; 119 uint16_t max_bw_5g; 120 uint16_t phymode_bitmap; 121 }; 122 123 /** 124 * struct reg_domain_pair 125 * @reg_dmn_pair_id: reg domainpiar value 126 * @dmn_id_5g: 5g reg domain value 127 * @dmn_id_2g: 2g regdomain value 128 */ 129 struct reg_domain_pair { 130 uint16_t reg_dmn_pair_id; 131 uint8_t dmn_id_5g; 132 uint8_t dmn_id_2g; 133 }; 134 135 /** 136 * enum ctl_value - CTL value 137 * @CTL_FCC: CTL FCC 138 * @CTL_MKK: CTL MKK 139 * @CTL_ETSI: CTL ETSI 140 * @CTL_KOR: CTL KOR 141 * @CTL_CHN: CTL CHINA 142 * @CTL_USER_DEF: CTL USER_DEF 143 * @CTL_NONE: CTL NONE 144 */ 145 enum ctl_value { 146 CTL_FCC = 0x10, 147 CTL_ETSI = 0x30, 148 CTL_MKK = 0x40, 149 CTL_KOR = 0x50, 150 CTL_CHN = 0x60, 151 CTL_USER_DEF = 0x70, 152 CTL_NONE = 0xff 153 }; 154 155 QDF_STATUS reg_get_num_countries(int *num_countries); 156 157 QDF_STATUS reg_get_num_reg_dmn_pairs(int *num_reg_dmn); 158 159 QDF_STATUS reg_get_default_country(uint16_t *default_country); 160 161 #endif 162