1 /* 2 * Copyright (c) 2012-2018 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 * DOC: Declare private API which shall be used internally only 22 * in action_oui component. This file shall include prototypes of 23 * action_oui parsing and send logic. 24 * 25 * Note: This API should be never accessed out of action_oui component. 26 */ 27 28 #ifndef _WLAN_ACTION_OUI_PRIV_STRUCT_H_ 29 #define _WLAN_ACTION_OUI_PRIV_STRUCT_H_ 30 31 #include <qdf_list.h> 32 #include <qdf_types.h> 33 #include "wlan_action_oui_public_struct.h" 34 #include "wlan_action_oui_tgt_api.h" 35 #include "wlan_action_oui_objmgr.h" 36 37 /** 38 * enum action_oui_token_type - String token types expected. 39 * @ACTION_OUI_TOKEN: oui string 40 * @ACTION_OUI_DATA_LENGTH_TOKEN: data length string 41 * @ACTION_OUI_DATA_TOKEN: OUI data string 42 * @ACTION_OUI_DATA_MASK_TOKEN: data mask string 43 * @ACTION_OUI_INFO_MASK_TOKEN: info mask string 44 * @ACTION_OUI_MAC_ADDR_TOKEN: mac addr string 45 * @ACTION_OUI_MAC_MASK_TOKEN: mac mask string 46 * @ACTION_OUI_CAPABILITY_TOKEN: capability string 47 * @ACTION_OUI_END_TOKEN: end of one oui extension 48 */ 49 enum action_oui_token_type { 50 ACTION_OUI_TOKEN = 1 << 0, 51 ACTION_OUI_DATA_LENGTH_TOKEN = 1 << 1, 52 ACTION_OUI_DATA_TOKEN = 1 << 2, 53 ACTION_OUI_DATA_MASK_TOKEN = 1 << 3, 54 ACTION_OUI_INFO_MASK_TOKEN = 1 << 4, 55 ACTION_OUI_MAC_ADDR_TOKEN = 1 << 5, 56 ACTION_OUI_MAC_MASK_TOKEN = 1 << 6, 57 ACTION_OUI_CAPABILITY_TOKEN = 1 << 7, 58 ACTION_OUI_END_TOKEN = 1 << 8, 59 }; 60 61 /** 62 * struct action_oui_extension_priv - Private contents of extension. 63 * @item: list element 64 * @extension: Extension contents 65 * 66 * This structure encapsulates action_oui_extension and list item. 67 */ 68 struct action_oui_extension_priv { 69 qdf_list_node_t item; 70 struct action_oui_extension extension; 71 }; 72 73 /** 74 * struct action_oui_priv - Each action info. 75 * @id: type of action 76 * @extension_list: list of extensions 77 * @extension_lock: lock to control access to @extension_list 78 * 79 * All extensions of action specified by action_id are stored 80 * at @extension_list as linked list. 81 */ 82 struct action_oui_priv { 83 enum action_oui_id id; 84 qdf_list_t extension_list; 85 qdf_mutex_t extension_lock; 86 }; 87 88 /** 89 * struct action_oui_psoc_priv - Private object to be stored in psoc 90 * @psoc: pointer to psoc object 91 * @action_oui_enable: action oui enable 92 * @action_oui_str: oui configuration strings 93 * @total_extensions: total count of extensions from all actions 94 * @host_only_extensions: total host only only extensions from all actions 95 * @max_extensions: Max no. of extensions that can be configured to the firmware 96 * @oui_priv: array of pointers used to refer each action info 97 * @tx_ops: call-back functions to send OUIs to firmware 98 */ 99 struct action_oui_psoc_priv { 100 struct wlan_objmgr_psoc *psoc; 101 bool action_oui_enable; 102 uint8_t action_oui_str[ACTION_OUI_MAXIMUM_ID][ACTION_OUI_MAX_STR_LEN]; 103 uint32_t total_extensions; 104 uint32_t host_only_extensions; 105 uint32_t max_extensions; 106 struct action_oui_priv *oui_priv[ACTION_OUI_MAXIMUM_ID]; 107 struct action_oui_tx_ops tx_ops; 108 }; 109 110 /** 111 * action_oui_parse() - Parse action oui string 112 * @psoc_priv: pointer to action_oui psoc priv obj 113 * @oui_string: string to be parsed 114 * @action_id: type of the action to be parsed 115 * 116 * This function parses the action oui string, extracts extensions and 117 * stores them @action_oui_priv using list data structure. 118 * 119 * Return: QDF_STATUS 120 * 121 */ 122 QDF_STATUS 123 action_oui_parse(struct action_oui_psoc_priv *psoc_priv, 124 uint8_t *oui_string, enum action_oui_id action_id); 125 126 /** 127 * action_oui_parse_string() - Parse action oui string 128 * @psoc: psoc object 129 * @in_str: string to be parsed 130 * @action_id: type of the action to be parsed 131 * 132 * This function will validate the input string and call action_oui_parse 133 * to parse it. 134 * 135 * Return: QDF_STATUS 136 * 137 */ 138 QDF_STATUS 139 action_oui_parse_string(struct wlan_objmgr_psoc *psoc, 140 const uint8_t *in_str, 141 enum action_oui_id action_id); 142 143 /** 144 * action_oui_send() - Send action oui extensions to target_if. 145 * @psoc_priv: pointer to action_oui psoc priv obj 146 * @action_id: type of the action to send 147 * 148 * This function sends action oui extensions to target_if. 149 * 150 * Return: QDF_STATUS 151 * 152 */ 153 QDF_STATUS 154 action_oui_send(struct action_oui_psoc_priv *psoc_priv, 155 enum action_oui_id action_id); 156 157 /** 158 * action_oui_search() - Check if Vendor OUIs are present in IE buffer 159 * @psoc_priv: pointer to action_oui psoc priv obj 160 * @attr: pointer to structure containing type of action, beacon IE data etc., 161 * @action_id: type of action to be checked 162 * 163 * This function parses the IE buffer and finds if any of the vendor OUI 164 * and related attributes are present in it. 165 * 166 * Return: If vendor OUI is present return true else false 167 */ 168 bool 169 action_oui_search(struct action_oui_psoc_priv *psoc_priv, 170 struct action_oui_search_attr *attr, 171 enum action_oui_id action_id); 172 173 /** 174 * action_oui_is_empty() - Check action oui present or not 175 * @psoc_priv: action psoc private object 176 * @action_id: action oui id 177 * 178 * This function will check action oui present or not for specific action type. 179 * 180 * Return: True if no action oui for the action type. 181 */ 182 bool 183 action_oui_is_empty(struct action_oui_psoc_priv *psoc_priv, 184 enum action_oui_id action_id); 185 #endif /* End of _WLAN_ACTION_OUI_PRIV_STRUCT_H_ */ 186