1 /* Copyright (c) 2014, The Linux Foundation. All rights reserved. 2 * 3 * Redistribution and use in source and binary forms, with or without 4 * modification, are permitted provided that the following conditions 5 * are met: 6 * * Redistributions of source code must retain the above copyright 7 * notice, this list of conditions and the following disclaimer. 8 * * Redistributions in binary form must reproduce the above copyright 9 * notice, this list of conditions and the following disclaimer in 10 * the documentation and/or other materials provided with the 11 * distribution. 12 * * Neither the name of The Linux Foundation nor the names of its 13 * contributors may be used to endorse or promote products derived 14 * from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #ifndef __WIFI_HAL_IFACEEVENTHANDLER_COMMAND_H__ 30 #define __WIFI_HAL_IFACEEVENTHANDLER_COMMAND_H__ 31 32 #include "common.h" 33 #include "cpp_bindings.h" 34 #ifdef __GNUC__ 35 #define PRINTF_FORMAT(a,b) __attribute__ ((format (printf, (a), (b)))) 36 #define STRUCT_PACKED __attribute__ ((packed)) 37 #else 38 #define PRINTF_FORMAT(a,b) 39 #define STRUCT_PACKED 40 #endif 41 #include "vendor_definitions.h" 42 #include <hardware_legacy/wifi_hal.h> 43 44 #ifdef __cplusplus 45 extern "C" 46 { 47 #endif /* __cplusplus */ 48 49 typedef struct{ 50 int num_entries; 51 radar_history_result *entries; 52 } RadarHistoryResultsParams; 53 54 class wifiEventHandler: public WifiCommand 55 { 56 private: 57 int mRequestId; 58 59 protected: 60 struct nlattr *tb[NL80211_ATTR_MAX + 1]; 61 u32 mSubcmd; 62 63 public: 64 wifiEventHandler(wifi_handle handle, int id, u32 subcmd); 65 virtual ~wifiEventHandler(); 66 virtual int get_request_id(); 67 virtual int handleEvent(WifiEvent &event); 68 }; 69 70 class IfaceEventHandlerCommand: public wifiEventHandler 71 { 72 private: 73 char *mEventData; 74 u32 mDataLen; 75 wifi_event_handler mHandler; 76 77 public: 78 IfaceEventHandlerCommand(wifi_handle handle, int id, u32 subcmd); 79 virtual ~IfaceEventHandlerCommand(); 80 81 virtual int handleEvent(WifiEvent &event); 82 virtual void setCallbackHandler(wifi_event_handler nHandler); 83 virtual int get_request_id(); 84 }; 85 86 class WifihalGeneric: public WifiVendorCommand 87 { 88 private: 89 feature_set mSet; 90 features_info mDriverFeatures; 91 int mSetSizeMax; 92 int *mSetSizePtr; 93 feature_set *mConcurrencySet; 94 int filterVersion; 95 int filterLength; 96 int firmware_bus_max_size; 97 wifi_capa *mCapa; 98 /* Packet Filter buffer and length */ 99 u8 *mfilter_packet_read_buffer; 100 int mfilter_packet_length; 101 u32 res_size; 102 wifi_usable_channel *channel_buff; 103 RadarHistoryResultsParams mRadarResultParams; 104 virtual wifi_error wifiParseCapabilities(struct nlattr **tbVendor); 105 virtual wifi_error wifiParseRadarHistory(); 106 107 public: 108 WifihalGeneric(wifi_handle handle, int id, u32 vendor_id, u32 subcmd); 109 virtual ~WifihalGeneric(); 110 virtual wifi_error requestResponse(); 111 virtual int handleResponse(WifiEvent &reply); 112 virtual int handle_response_usable_channels(struct nlattr *VendorData, 113 u32 mDataLen); 114 virtual void getResponseparams(feature_set *pset); 115 virtual void getDriverFeatures(features_info *pfeatures); 116 virtual void setMaxSetSize(int set_size_max); 117 virtual void setSizePtr(int *set_size); 118 virtual void setPacketBufferParams(u8 *host_packet_buffer, int packet_length); 119 virtual void setConcurrencySet(feature_set set[]); 120 virtual int getFilterVersion(); 121 virtual int getFilterLength(); 122 virtual int getBusSize(); 123 virtual wifi_error wifiGetCapabilities(wifi_interface_handle handle); 124 virtual void set_channels_buff(wifi_usable_channel *channels); 125 virtual u32 get_results_size(void); 126 virtual wifi_error copyCachedRadarHistory(radar_history_result *resultBuf, 127 int resultBufSize, int *numResults); 128 virtual void freeCachedRadarHistory(); 129 virtual wifi_error getSarVersion(wifi_interface_handle handle); 130 }; 131 132 /** 133 * nla_for_each_nested from libnl is throwing implicit conversion from void* 134 * error. Adding a local definition to avoid it. 135 */ 136 #define for_each_nested_attribute(pos, nla, rem) \ 137 for (pos = (struct nlattr *)nla_data(nla), rem = nla_len(nla); \ 138 nla_ok(pos, rem); \ 139 pos = nla_next(pos, &(rem))) 140 141 #ifdef __cplusplus 142 } 143 #endif /* __cplusplus */ 144 #endif 145