1 /* 2 * Copyright (c) 2018 The Linux Foundation. All rights reserved. 3 * 4 * Permission to use, copy, modify, and/or distribute this software for 5 * any purpose with or without fee is hereby granted, provided that the 6 * above copyright notice and this permission notice appear in all 7 * copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 10 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 11 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 12 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 13 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 14 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 15 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 16 * PERFORMANCE OF THIS SOFTWARE. 17 */ 18 19 /** 20 * DOC: APIs and macros for defining configuration. 21 */ 22 23 #ifndef __CFG_DEFINE_H 24 #define __CFG_DEFINE_H 25 26 enum cfg_fallback_behavior { 27 CFG_VALUE_OR_CLAMP, 28 CFG_VALUE_OR_DEFAULT, 29 }; 30 31 #define rm_parens(...) __VA_ARGS__ 32 #define __CFG(id, is_ini, mtype, args...) \ 33 __CFG_##is_ini##_##mtype(id, mtype, args) 34 #define _CFG(id, args) __CFG(id, args) 35 #define CFG(id) _CFG(__##id, rm_parens id) 36 37 #define __CFG_INI_INT(args...) __CFG_INI(args) 38 #define __CFG_INI_UINT(args...) __CFG_INI(args) 39 #define __CFG_INI_BOOL(args...) __CFG_INI(args) 40 #define __CFG_INI_STRING(args...) __CFG_INI(args) 41 #define __CFG_INI_MAC(args...) __CFG_INI(args) 42 #define __CFG_INI_IPV4(args...) __CFG_INI(args) 43 #define __CFG_INI_IPV6(args...) __CFG_INI(args) 44 #define __CFG_INI(args...) (args) 45 46 #define __CFG_NON_INI_INT(args...) __CFG_NON_INI(args) 47 #define __CFG_NON_INI_UINT(args...) __CFG_NON_INI(args) 48 #define __CFG_NON_INI_BOOL(args...) __CFG_NON_INI(args) 49 #define __CFG_NON_INI_STRING(args...) __CFG_NON_INI(args) 50 #define __CFG_NON_INI_MAC(args...) __CFG_NON_INI(args) 51 #define __CFG_NON_INI_IPV4(args...) __CFG_NON_INI(args) 52 #define __CFG_NON_INI_IPV6(args...) __CFG_NON_INI(args) 53 #define __CFG_NON_INI(args...) 54 55 /* configuration available in ini */ 56 #define CFG_INI_INT(name, min, max, def, fallback, desc) \ 57 (INI, INT, int32_t, name, min, max, fallback, desc, def) 58 #define CFG_INI_UINT(name, min, max, def, fallback, desc) \ 59 (INI, UINT, uint32_t, name, min, max, fallback, desc, def) 60 #define CFG_INI_BOOL(name, def, desc) \ 61 (INI, BOOL, bool, name, false, true, -1, desc, def) 62 #define CFG_INI_STRING(name, min_len, max_len, def, desc) \ 63 (INI, STRING, char *, name, min_len, max_len, -1, desc, def) 64 #define CFG_INI_MAC(name, def, desc) \ 65 (INI, MAC, struct qdf_mac_addr, name, -1, -1, -1, desc, def) 66 #define CFG_INI_IPV4(name, def, desc) \ 67 (INI, IPV4, struct qdf_ipv4_addr, name, -1, -1, -1, desc, def) 68 #define CFG_INI_IPV6(name, def, desc) \ 69 (INI, IPV6, struct qdf_ipv6_addr, name, -1, -1, -1, desc, def) 70 71 /* configuration *not* available in ini */ 72 #define CFG_INT(name, min, max, def, fallback, desc) \ 73 (NON_INI, INT, int32_t, name, min, max, fallback, desc, def) 74 #define CFG_UINT(name, min, max, def, fallback, desc) \ 75 (NON_INI, UINT, uint32_t, name, min, max, fallback, desc, def) 76 #define CFG_BOOL(name, def, desc) \ 77 (NON_INI, BOOL, bool, name, false, true, false, desc, def) 78 #define CFG_STRING(name, min_len, max_len, def, desc) \ 79 (NON_INI, STRING, char *, name, min_len, max_len, -1, desc, def) 80 #define CFG_MAC(name, def, desc) \ 81 (NON_INI, MAC, struct qdf_mac_addr, name, -1, -1, -1, desc, def) 82 #define CFG_IPV4(name, def, desc) \ 83 (NON_INI, IPV4, struct qdf_ipv4_addr, name, -1, -1, -1, desc, def) 84 #define CFG_IPV6(name, def, desc) \ 85 (NON_INI, IPV6, struct qdf_ipv6_addr, name, -1, -1, -1, desc, def) 86 87 /* utility macros/functions */ 88 #ifdef CONFIG_MCL 89 #define MCL_OR_WIN_VALUE(mcl_value, win_value) mcl_value 90 #else 91 #define MCL_OR_WIN_VALUE(mcl_value, win_value) win_value 92 #endif 93 94 #endif /* __CFG_DEFINE_H */ 95 96