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 "wifi_hal.h" 43 44 #ifdef __cplusplus 45 extern "C" 46 { 47 #endif /* __cplusplus */ 48 49 50 class wifiEventHandler: public WifiCommand 51 { 52 private: 53 int mRequestId; 54 55 protected: 56 struct nlattr *tb[NL80211_ATTR_MAX + 1]; 57 u32 mSubcmd; 58 59 public: 60 wifiEventHandler(wifi_handle handle, int id, u32 subcmd); 61 virtual ~wifiEventHandler(); 62 virtual int get_request_id(); 63 virtual int handleEvent(WifiEvent &event); 64 }; 65 66 class IfaceEventHandlerCommand: public wifiEventHandler 67 { 68 private: 69 char *mEventData; 70 u32 mDataLen; 71 wifi_event_handler mHandler; 72 73 public: 74 IfaceEventHandlerCommand(wifi_handle handle, int id, u32 subcmd); 75 virtual ~IfaceEventHandlerCommand(); 76 77 virtual int handleEvent(WifiEvent &event); 78 virtual void setCallbackHandler(wifi_event_handler nHandler); 79 virtual int get_request_id(); 80 }; 81 82 class WifihalGeneric: public WifiVendorCommand 83 { 84 private: 85 feature_set mSet; 86 features_info mDriverFeatures; 87 int mSetSizeMax; 88 int *mSetSizePtr; 89 feature_set *mConcurrencySet; 90 int filterVersion; 91 int filterLength; 92 int firmware_bus_max_size; 93 wifi_capa *mCapa; 94 /* Packet Filter buffer and length */ 95 u8 *mfilter_packet_read_buffer; 96 int mfilter_packet_length; 97 virtual wifi_error wifiParseCapabilities(struct nlattr **tbVendor); 98 99 public: 100 WifihalGeneric(wifi_handle handle, int id, u32 vendor_id, u32 subcmd); 101 virtual ~WifihalGeneric(); 102 virtual wifi_error requestResponse(); 103 virtual int handleResponse(WifiEvent &reply); 104 virtual void getResponseparams(feature_set *pset); 105 virtual void getDriverFeatures(features_info *pfeatures); 106 virtual void setMaxSetSize(int set_size_max); 107 virtual void setSizePtr(int *set_size); 108 virtual void setPacketBufferParams(u8 *host_packet_buffer, int packet_length); 109 virtual void setConcurrencySet(feature_set set[]); 110 virtual int getFilterVersion(); 111 virtual int getFilterLength(); 112 virtual int getBusSize(); 113 virtual wifi_error wifiGetCapabilities(wifi_interface_handle handle); 114 }; 115 #ifdef __cplusplus 116 } 117 #endif /* __cplusplus */ 118 #endif 119