From eb93a5121d88779e93a2b361ac0ddac1e98c02e8 Mon Sep 17 00:00:00 2001 From: Hsiu-Chang Chen Date: Fri, 22 Jul 2022 11:13:41 +0800 Subject: wlan: create wifi_hal for wcn6740 The original wifi_hal for legacy projects is so old that we met lots of issues in wcn6740. Create another wifi_hal for wcn6740 that uses latest code and keep using the old wifi_hal code for the legacy projects. Bug: 213413875 Test: Regression Test Change-Id: Ibb3c748254c3e5472b3218bda34c88f79d343dae --- wcn6740/qcwcn/wifi_hal/ifaceeventhandler.h | 143 +++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 wcn6740/qcwcn/wifi_hal/ifaceeventhandler.h (limited to 'wcn6740/qcwcn/wifi_hal/ifaceeventhandler.h') diff --git a/wcn6740/qcwcn/wifi_hal/ifaceeventhandler.h b/wcn6740/qcwcn/wifi_hal/ifaceeventhandler.h new file mode 100644 index 0000000..f0b681a --- /dev/null +++ b/wcn6740/qcwcn/wifi_hal/ifaceeventhandler.h @@ -0,0 +1,143 @@ +/* Copyright (c) 2014, The Linux Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef __WIFI_HAL_IFACEEVENTHANDLER_COMMAND_H__ +#define __WIFI_HAL_IFACEEVENTHANDLER_COMMAND_H__ + +#include "common.h" +#include "cpp_bindings.h" +#ifdef __GNUC__ +#define PRINTF_FORMAT(a,b) __attribute__ ((format (printf, (a), (b)))) +#define STRUCT_PACKED __attribute__ ((packed)) +#else +#define PRINTF_FORMAT(a,b) +#define STRUCT_PACKED +#endif +#include "vendor_definitions.h" +#include "wifi_hal.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +typedef struct{ + int num_entries; + radar_history_result *entries; +} RadarHistoryResultsParams; + +class wifiEventHandler: public WifiCommand +{ +private: + int mRequestId; + +protected: + struct nlattr *tb[NL80211_ATTR_MAX + 1]; + u32 mSubcmd; + +public: + wifiEventHandler(wifi_handle handle, int id, u32 subcmd); + virtual ~wifiEventHandler(); + virtual int get_request_id(); + virtual int handleEvent(WifiEvent &event); +}; + +class IfaceEventHandlerCommand: public wifiEventHandler +{ +private: + char *mEventData; + u32 mDataLen; + wifi_event_handler mHandler; + +public: + IfaceEventHandlerCommand(wifi_handle handle, int id, u32 subcmd); + virtual ~IfaceEventHandlerCommand(); + + virtual int handleEvent(WifiEvent &event); + virtual void setCallbackHandler(wifi_event_handler nHandler); + virtual int get_request_id(); +}; + +class WifihalGeneric: public WifiVendorCommand +{ +private: + feature_set mSet; + features_info mDriverFeatures; + int mSetSizeMax; + int *mSetSizePtr; + feature_set *mConcurrencySet; + int filterVersion; + int filterLength; + int firmware_bus_max_size; + wifi_capa *mCapa; + /* Packet Filter buffer and length */ + u8 *mfilter_packet_read_buffer; + int mfilter_packet_length; + u32 res_size; + wifi_usable_channel *channel_buff; + RadarHistoryResultsParams mRadarResultParams; + virtual wifi_error wifiParseCapabilities(struct nlattr **tbVendor); + virtual wifi_error wifiParseRadarHistory(); + +public: + WifihalGeneric(wifi_handle handle, int id, u32 vendor_id, u32 subcmd); + virtual ~WifihalGeneric(); + virtual wifi_error requestResponse(); + virtual int handleResponse(WifiEvent &reply); + virtual int handle_response_usable_channels(struct nlattr *VendorData, + u32 mDataLen); + virtual void getResponseparams(feature_set *pset); + virtual void getDriverFeatures(features_info *pfeatures); + virtual void setMaxSetSize(int set_size_max); + virtual void setSizePtr(int *set_size); + virtual void setPacketBufferParams(u8 *host_packet_buffer, int packet_length); + virtual void setConcurrencySet(feature_set set[]); + virtual int getFilterVersion(); + virtual int getFilterLength(); + virtual int getBusSize(); + virtual wifi_error wifiGetCapabilities(wifi_interface_handle handle); + virtual void set_channels_buff(wifi_usable_channel *channels); + virtual u32 get_results_size(void); + virtual wifi_error copyCachedRadarHistory(radar_history_result *resultBuf, + int resultBufSize, int *numResults); + virtual void freeCachedRadarHistory(); +}; + +/** + * nla_for_each_nested from libnl is throwing implicit conversion from void* + * error. Adding a local definition to avoid it. + */ +#define for_each_nested_attribute(pos, nla, rem) \ + for (pos = (struct nlattr *)nla_data(nla), rem = nla_len(nla); \ + nla_ok(pos, rem); \ + pos = nla_next(pos, &(rem))) + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif -- cgit v1.2.3 From 3a945babc01bd694d6d3d8f476b585715b470eda Mon Sep 17 00:00:00 2001 From: Hsiu-Chang Chen Date: Fri, 19 Aug 2022 16:33:54 +0530 Subject: Wifihal: Add SAR V2 Support. The patch checks the SAR version from firmware and adds commands/values to support SAR V2. Bug: 238570847 Test: haltuil -sar Change-Id: I531e7f7f685373cfd5566ac6fd3f7fb3540e8219 CRs-Fixed: 3278406 --- wcn6740/qcwcn/wifi_hal/ifaceeventhandler.h | 1 + 1 file changed, 1 insertion(+) (limited to 'wcn6740/qcwcn/wifi_hal/ifaceeventhandler.h') diff --git a/wcn6740/qcwcn/wifi_hal/ifaceeventhandler.h b/wcn6740/qcwcn/wifi_hal/ifaceeventhandler.h index f0b681a..eef9624 100644 --- a/wcn6740/qcwcn/wifi_hal/ifaceeventhandler.h +++ b/wcn6740/qcwcn/wifi_hal/ifaceeventhandler.h @@ -126,6 +126,7 @@ public: virtual wifi_error copyCachedRadarHistory(radar_history_result *resultBuf, int resultBufSize, int *numResults); virtual void freeCachedRadarHistory(); + virtual wifi_error getSarVersion(wifi_interface_handle handle); }; /** -- cgit v1.2.3