1 /* 2 * Copyright (c) 2011, 2014-2018, 2020 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. 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 * Notifications and licenses are retained for attribution purposes only. 22 */ 23 /* 24 * Copyright (c) 2002-2006 Sam Leffler, Errno Consulting 25 * Copyright (c) 2005-2006 Atheros Communications, Inc. 26 * Copyright (c) 2010, Atheros Communications Inc. 27 * 28 * Redistribution and use in source and binary forms are permitted 29 * provided that the following conditions are met: 30 * 1. The materials contained herein are unmodified and are used 31 * unmodified. 32 * 2. Redistributions of source code must retain the above copyright 33 * notice, this list of conditions and the following NO 34 * ''WARRANTY'' disclaimer below (''Disclaimer''), without 35 * modification. 36 * 3. Redistributions in binary form must reproduce at minimum a 37 * disclaimer similar to the Disclaimer below and any redistribution 38 * must be conditioned upon including a substantially similar 39 * Disclaimer requirement for further binary redistribution. 40 * 4. Neither the names of the above-listed copyright holders nor the 41 * names of any contributors may be used to endorse or promote 42 * product derived from this software without specific prior written 43 * permission. 44 * 45 * NO WARRANTY 46 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 47 * ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 48 * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, 49 * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 50 * IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE 51 * FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 52 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 53 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 54 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 55 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 56 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 57 * SUCH DAMAGES. 58 * 59 * This module contains the regulatory domain private structure definitions . 60 * 61 */ 62 63 #ifndef __CDS_REGDOMAIN_H 64 #define __CDS_REGDOMAIN_H 65 66 #include <wlan_cmn.h> 67 #include <reg_services_public_struct.h> 68 #include "reg_db.h" 69 70 #define MIN_TX_PWR_CAP 8 71 #define MAX_TX_PWR_CAP 24 72 73 #define CTRY_DEFAULT 0 74 #define CTRY_FLAG 0x8000 75 #define WORLD_ROAMING_FLAG 0x4000 76 #define WORLD_ROAMING_MASK 0x00F0 77 #define WORLD_ROAMING_PREFIX 0x0060 78 /** 79 * struct reg_dmn_pair: regulatory domain pair 80 * @reg_dmn_pair: reg domain pair 81 * @reg_dmn_5ghz: 5G reg domain 82 * @reg_dmn_2ghz: 2G reg domain 83 * @single_cc: country with this reg domain 84 */ 85 struct reg_dmn_pair { 86 uint16_t reg_dmn_pair; 87 uint16_t reg_dmn_5ghz; 88 uint16_t reg_dmn_2ghz; 89 uint16_t single_cc; 90 }; 91 92 /** 93 * struct country_code_to_reg_dmn: country code to reg domain mapping 94 * @country_code: country code 95 * @reg_dmn_pair: regulatory domain pair 96 * @alpha2: country alpha2 97 * @name: country name 98 */ 99 struct country_code_to_reg_dmn { 100 uint16_t country_code; 101 uint16_t reg_dmn_pair; 102 const char *alpha2; 103 const char *name; 104 }; 105 106 /** 107 * struct reg_dmn: regulatory domain structure 108 * @reg_dmn: regulatory domain 109 * @conformance_test_limit: CTL limit 110 */ 111 struct reg_dmn { 112 uint16_t reg_dmn; 113 uint8_t conformance_test_limit; 114 }; 115 116 /** 117 * struct reg_dmn_tables: reg domain table 118 * @reg_dmn_pairs: list of reg domain pairs 119 * @all_countries: list of countries 120 * @reg_dmns: list of reg domains 121 * @reg_dmn_pairs_cnt: count of reg domain pairs 122 * @all_countries_cnt: count of countries 123 * @reg_dmns_cnt: count of reg domains 124 */ 125 struct reg_dmn_tables { 126 const struct reg_dmn_pair *reg_dmn_pairs; 127 const struct country_code_to_reg_dmn *all_countries; 128 const struct reg_dmn *reg_dmns; 129 uint16_t reg_dmn_pairs_cnt; 130 uint16_t all_countries_cnt; 131 uint16_t reg_dmns_cnt; 132 }; 133 134 int32_t cds_fill_some_regulatory_info(struct regulatory *reg); 135 int32_t cds_get_country_from_alpha2(uint8_t *alpha2); 136 void cds_fill_and_send_ctl_to_fw(struct regulatory *reg); 137 /** 138 * cds_is_etsi_europe_country - check ETSI Europe country or not 139 * @country: country string with two Characters 140 * 141 * Return: true if country in ETSI Europe country list 142 */ 143 bool cds_is_etsi_europe_country(uint8_t *country); 144 #endif /* __CDS_REGDOMAIN_H */ 145