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