14af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
24af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam *
34af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam * Redistribution and use in source and binary forms, with or without
44af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam * modification, are permitted provided that the following conditions
54af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam * are met:
64af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam *  * Redistributions of source code must retain the above copyright
74af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam *    notice, this list of conditions and the following disclaimer.
84af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam *  * Redistributions in binary form must reproduce the above copyright
94af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam *    notice, this list of conditions and the following disclaimer in
104af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam *    the documentation and/or other materials provided with the
114af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam *    distribution.
124af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam *  * Neither the name of The Linux Foundation nor the names of its
134af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam *    contributors may be used to endorse or promote products derived
144af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam *    from this software without specific prior written permission.
154af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam *
164af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
174af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
184af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
194af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
204af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
214af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
224af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
234af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
244af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
254af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
264af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
274af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam */
284af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
294af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam#ifndef __WIFI_HAL_IFACEEVENTHANDLER_COMMAND_H__
304af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam#define __WIFI_HAL_IFACEEVENTHANDLER_COMMAND_H__
314af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
324af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam#include "common.h"
334af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam#include "cpp_bindings.h"
344af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam#ifdef __GNUC__
354af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam#define PRINTF_FORMAT(a,b) __attribute__ ((format (printf, (a), (b))))
364af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam#define STRUCT_PACKED __attribute__ ((packed))
374af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam#else
384af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam#define PRINTF_FORMAT(a,b)
394af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam#define STRUCT_PACKED
404af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam#endif
414af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam#include "qca-vendor.h"
424af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam#include "vendor_definitions.h"
434af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam#include "wifi_hal.h"
444af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
454af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam#ifdef __cplusplus
464af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyamextern "C"
474af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam{
484af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam#endif /* __cplusplus */
494af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
504af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
514af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyamclass wifiEventHandler: public WifiCommand
524af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam{
534af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyamprivate:
544af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    int mRequestId;
554af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
564af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyamprotected:
574af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    struct nlattr *tb[NL80211_ATTR_MAX + 1];
584af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    u32 mSubcmd;
594af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
604af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyampublic:
614af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    wifiEventHandler(wifi_handle handle, int id, u32 subcmd);
624af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    virtual ~wifiEventHandler();
634af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    virtual int get_request_id();
644af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    virtual int handleEvent(WifiEvent &event);
654af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam};
664af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
674af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyamclass IfaceEventHandlerCommand: public wifiEventHandler
684af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam{
694af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyamprivate:
704af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    char *mEventData;
714af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    u32 mDataLen;
724af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    wifi_event_handler mHandler;
734af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
744af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyampublic:
754af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    IfaceEventHandlerCommand(wifi_handle handle, int id, u32 subcmd);
764af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    virtual ~IfaceEventHandlerCommand();
774af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
784af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    virtual int handleEvent(WifiEvent &event);
794af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    virtual void setCallbackHandler(wifi_event_handler nHandler);
804af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    virtual int get_request_id();
814af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam};
824af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
834af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyamclass WifihalGeneric: public WifiVendorCommand
844af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam{
854af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyamprivate:
864af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    wifi_interface_handle mHandle;
874af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    feature_set mSet;
884af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    int mSetSizeMax;
894af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    int *mSetSizePtr;
904af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    feature_set *mConcurrencySet;
91cdbde22981846f02ce30a940b22a3f3c44ebba0dSubhani Shaik    int filterVersion;
92cdbde22981846f02ce30a940b22a3f3c44ebba0dSubhani Shaik    int filterLength;
93cdbde22981846f02ce30a940b22a3f3c44ebba0dSubhani Shaik    int firmware_bus_max_size;
944af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
954af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyampublic:
964af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    WifihalGeneric(wifi_handle handle, int id, u32 vendor_id, u32 subcmd);
974af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    virtual ~WifihalGeneric();
984af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    virtual int requestResponse();
994af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    virtual int handleResponse(WifiEvent &reply);
1004af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    virtual void getResponseparams(feature_set *pset);
1014af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    virtual void setMaxSetSize(int set_size_max);
1024af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    virtual void setSizePtr(int *set_size);
1034af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    virtual void setConcurrencySet(feature_set set[]);
104cdbde22981846f02ce30a940b22a3f3c44ebba0dSubhani Shaik    virtual int getFilterVersion();
105cdbde22981846f02ce30a940b22a3f3c44ebba0dSubhani Shaik    virtual int getFilterLength();
106cdbde22981846f02ce30a940b22a3f3c44ebba0dSubhani Shaik    virtual int getBusSize();
1074af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam};
1084af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam#ifdef __cplusplus
1094af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam}
1104af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam#endif /* __cplusplus */
1114af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam#endif
112