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, mtype, args...) __CFG_##mtype(id, mtype, args) 33 #define _CFG(id, args) __CFG(id, args) 34 #define CFG(id) _CFG(__##id, rm_parens id) 35 36 #define __CFG_INT(args...) __CFG_ANY(args) 37 #define __CFG_UINT(args...) __CFG_ANY(args) 38 #define __CFG_BOOL(args...) __CFG_ANY(args) 39 #define __CFG_STRING(args...) __CFG_ANY(args) 40 #define __CFG_MAC(args...) __CFG_ANY(args) 41 #define __CFG_IPV4(args...) __CFG_ANY(args) 42 #define __CFG_IPV6(args...) __CFG_ANY(args) 43 44 #define __CFG_ANY(args...) (args) 45 #define __CFG_NONE(args...) 46 47 /* configuration available in ini */ 48 #define CFG_INI_INT(name, min, max, def, fallback, desc) \ 49 (INT, int32_t, name, min, max, fallback, desc, def) 50 #define CFG_INI_UINT(name, min, max, def, fallback, desc) \ 51 (UINT, uint32_t, name, min, max, fallback, desc, def) 52 #define CFG_INI_BOOL(name, def, desc) \ 53 (BOOL, bool, name, -1, -1, -1, desc, def) 54 #define CFG_INI_STRING(name, min_len, max_len, def, desc) \ 55 (STRING, char *, name, min_len, max_len, -1, desc, def) 56 #define CFG_INI_MAC(name, def, desc) \ 57 (MAC, struct qdf_mac_addr, name, -1, -1, -1, desc, def) 58 #define CFG_INI_IPV4(name, def, desc) \ 59 (IPV4, struct qdf_ipv4_addr, name, -1, -1, -1, desc, def) 60 #define CFG_INI_IPV6(name, def, desc) \ 61 (IPV6, struct qdf_ipv6_addr, name, -1, -1, -1, desc, def) 62 63 /* configuration *not* available in ini */ 64 #define CFG_INT(name, min, max, def, fallback, desc) \ 65 (NONE, int32_t, name, min, max, fallback, desc, def) 66 #define CFG_UINT(name, min, max, def, fallback, desc) \ 67 (NONE, uint32_t, name, min, max, fallback, desc, def) 68 #define CFG_BOOL(name, def, desc) \ 69 (NONE, bool, name, -1, -1, -1, desc, def) 70 #define CFG_STRING(name, min_len, max_len, def, desc) \ 71 (NONE, char *, name, min_len, max_len, -1, desc, def) 72 #define CFG_MAC(name, def, desc) \ 73 (NONE, struct qdf_mac_addr, name, -1, -1, -1, desc, def) 74 #define CFG_IPV4(name, def, desc) \ 75 (NONE, struct qdf_ipv4_addr, name, -1, -1, -1, desc, def) 76 #define CFG_IPV6(name, def, desc) \ 77 (NONE, struct qdf_ipv6_addr, name, -1, -1, -1, desc, def) 78 79 /* utility macros/functions */ 80 #ifdef MCL 81 #define MCL_OR_WIN_VALUE(mcl_value, win_value) mcl_value 82 #else 83 #define MCL_OR_WIN_VALUE(mcl_value, win_value) win_value 84 #endif 85 86 #endif /* __CFG_DEFINE_H */ 87 88