1 /* 2 * Copyright (c) 2017-2020 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 /* Alpha2 code for world reg domain */ 29 #define REG_WORLD_ALPHA2 "00" 30 31 /** 32 * struct regulatory_rule 33 * @start_freq: start frequency 34 * @end_freq: end frequency 35 * @max_bw: maximum bandwidth 36 * @reg_power: regulatory power 37 * @flags: regulatory flags 38 */ 39 struct regulatory_rule { 40 uint16_t start_freq; 41 uint16_t end_freq; 42 uint16_t max_bw; 43 uint8_t reg_power; 44 uint16_t flags; 45 }; 46 47 /** 48 * struct regdomain 49 * @ctl_val: CTL value 50 * @dfs_region: dfs region 51 * @min_bw: minimum bandwidth 52 * @max_bw: maximum bandwidth 53 * @num_reg_rules: number of regulatory rules 54 * @reg_rules_id: regulatory rule index 55 */ 56 struct regdomain { 57 uint8_t ctl_val; 58 enum dfs_reg dfs_region; 59 uint16_t min_bw; 60 uint16_t max_bw; 61 uint8_t ant_gain; 62 uint8_t num_reg_rules; 63 uint8_t reg_rule_id[MAX_REG_RULES]; 64 }; 65 66 /** 67 * struct country_code_to_reg_domain 68 * @country_code: country code 69 * @reg_dmn_pair_id: reg domainpair id 70 * @alpha2: iso-3166 alpha2 71 * @max_bw_2g: maximum 2g bandwidth 72 * @max_bw_5g: maximum 5g bandwidth 73 * @phymode_bitmap: phymodes not supported 74 */ 75 struct country_code_to_reg_domain { 76 uint16_t country_code; 77 uint16_t reg_dmn_pair_id; 78 uint8_t alpha2[REG_ALPHA2_LEN + 1]; 79 uint16_t max_bw_2g; 80 uint16_t max_bw_5g; 81 uint16_t phymode_bitmap; 82 }; 83 84 /** 85 * struct reg_domain_pair 86 * @reg_dmn_pair_id: reg domainpiar value 87 * @dmn_id_5g: 5g reg domain value 88 * @dmn_id_2g: 2g regdomain value 89 */ 90 struct reg_domain_pair { 91 uint16_t reg_dmn_pair_id; 92 uint8_t dmn_id_5g; 93 uint8_t dmn_id_2g; 94 }; 95 96 QDF_STATUS reg_get_num_countries(int *num_countries); 97 98 QDF_STATUS reg_get_num_reg_dmn_pairs(int *num_reg_dmn); 99 100 QDF_STATUS reg_get_default_country(uint16_t *default_country); 101 102 /** 103 * reg_etsi13_regdmn () - Checks if the reg domain is ETSI13 or not 104 * @reg_dmn: reg domain 105 * 106 * Return: true or false 107 */ 108 bool reg_etsi13_regdmn(uint8_t reg_dmn); 109 110 /** 111 * reg_en302_502_regdmn() - Check if the reg domain is en302_502 applicable. 112 * @reg_dmn: Regulatory domain pair ID. 113 * 114 * Return: True if EN302_502 applicable, else false. 115 */ 116 bool reg_en302_502_regdmn(uint16_t reg_dmn); 117 #endif 118