diff options
author | Hsiu-Chang Chen <hsiuchangchen@google.com> | 2022-07-22 11:13:41 +0800 |
---|---|---|
committer | Hsiu-Chang Chen <hsiuchangchen@google.com> | 2022-07-22 11:13:41 +0800 |
commit | eb93a5121d88779e93a2b361ac0ddac1e98c02e8 (patch) | |
tree | 336c9598dab15a5e7e6e750e86cfaf0c60a6a766 /wcn6740/qcwcn/wifi_hal/nancommand.h | |
parent | 79861d3fe23093fe704c1d341642b434fb323aa6 (diff) | |
download | wlan-eb93a5121d88779e93a2b361ac0ddac1e98c02e8.tar.gz |
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
Diffstat (limited to 'wcn6740/qcwcn/wifi_hal/nancommand.h')
-rw-r--r-- | wcn6740/qcwcn/wifi_hal/nancommand.h | 237 |
1 files changed, 237 insertions, 0 deletions
diff --git a/wcn6740/qcwcn/wifi_hal/nancommand.h b/wcn6740/qcwcn/wifi_hal/nancommand.h new file mode 100644 index 0000000..ac2a64b --- /dev/null +++ b/wcn6740/qcwcn/wifi_hal/nancommand.h @@ -0,0 +1,237 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Changes from Qualcomm Innovation Center are provided under the following license: + * + * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted (subject to the limitations in the + * disclaimer below) 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 Qualcomm Innovation Center, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE + * GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT + * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER 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_NAN_COMMAND_H__ +#define __WIFI_HAL_NAN_COMMAND_H__ + +#include "common.h" +#include "cpp_bindings.h" +#include "wifi_hal.h" +#include "nan_cert.h" + +/* + * NAN Salt is a concatenation of salt_version, CSID, Service ID, PeerMac + * resulting in a total length of 14 bytes + */ +#define NAN_SECURITY_SALT_SIZE 14 +/* In Service ID calculation SHA-256 hash size is of max. 64 bytes */ +#define NAN_SVC_HASH_SIZE 64 +/* Service ID is the first 48 bits of the SHA-256 hash of the Service Name */ +#define NAN_SVC_ID_SIZE 6 +/* Default Service name length is 21 bytes */ +#define NAN_DEF_SVC_NAME_LEN 21 +/* As per NAN spec, 4096 iterations to be used for PMK calculation */ +#define NAN_PMK_ITERATIONS 4096 +/* Keep NCS-SK-128 Cipher Suite as default i.e. HMAC-SHA-256 algorithm */ +#define NAN_DEFAULT_NCS_SK NAN_CIPHER_SUITE_SHARED_KEY_128_MASK +/* Currently by default max 6 Publishes/Subscribes are allowed */ +#define NAN_DEF_PUB_SUB 6 +/* + * First bit of discovery_indication_cfg in NanEnableRequest indicates + * disableDiscoveryAddressChangeIndication + */ +#define NAN_DISC_ADDR_IND_DISABLED 0x01 + +typedef struct PACKED +{ + u32 instance_id; + u16 subscriber_publisher_id; + u8 service_id[NAN_SVC_ID_SIZE]; +} NanStoreSvcParams; + +typedef enum +{ + NAN_ROLE_NONE, + NAN_ROLE_PUBLISHER, + NAN_ROLE_SUBSCRIBER +} NanRole; + +class NanCommand : public WifiVendorCommand +{ +private: + NanCallbackHandler mHandler; + char *mNanVendorEvent; + u32 mNanDataLen; + NanStaParameter *mStaParam; + u8 mNmiMac[NAN_MAC_ADDR_LEN]; + u32 mNanMaxPublishes; + u32 mNanMaxSubscribes; + NanStoreSvcParams *mStorePubParams; + NanStoreSvcParams *mStoreSubParams; + bool mNanDiscAddrIndDisabled; + + //Function to check the initial few bytes of data to + //determine whether NanResponse or NanEvent + int isNanResponse(); + //Function which unparses the data and calls the NotifyResponse + int handleNanResponse(); + //Function which will parse the mVendorData and gets + // the rsp_data appropriately. + int getNanResponse(transaction_id *id, NanResponseMsg *pRsp); + //Function which will return the Nan Indication type based on + //the initial few bytes of mVendorData + NanIndicationType getIndicationType(); + //Function which calls the necessaryIndication callback + //based on the indication type + int handleNanIndication(); + //Various Functions to get the appropriate indications + int getNanPublishReplied(NanPublishRepliedInd *event); + int getNanPublishTerminated(NanPublishTerminatedInd *event); + int getNanMatch(NanMatchInd *event); + int getNanMatchExpired(NanMatchExpiredInd *event); + int getNanSubscribeTerminated(NanSubscribeTerminatedInd *event); + int getNanFollowup(NanFollowupInd *event); + int getNanDiscEngEvent(NanDiscEngEventInd *event); + int getNanDisabled(NanDisabledInd *event); + int getNanTca(NanTCAInd *event); + int getNanBeaconSdfPayload(NanBeaconSdfPayloadInd *event); + //Internal cleanup function + void cleanup(); + + static NanCommand *mNanCommandInstance; + + // Other private helper functions + int calcNanTransmitPostDiscoverySize( + const NanTransmitPostDiscovery *pPostDiscovery); + void fillNanSocialChannelParamVal( + const NanSocialChannelScanParams *pScanParams, + u32* pChannelParamArr); + u32 getNanTransmitPostConnectivityCapabilityVal( + const NanTransmitPostConnectivityCapability *pCapab); + void fillNanTransmitPostDiscoveryVal( + const NanTransmitPostDiscovery *pTxDisc, + u8 *pOutValue); + int calcNanFurtherAvailabilityMapSize( + const NanFurtherAvailabilityMap *pFam); + void fillNanFurtherAvailabilityMapVal( + const NanFurtherAvailabilityMap *pFam, + u8 *pOutValue); + + void getNanReceivePostConnectivityCapabilityVal( + const u8* pInValue, + NanReceivePostConnectivityCapability *pRxCapab); + void getNanReceiveSdeaCtrlParams(const u8* pInValue, + NanSdeaCtrlParams *pPeerSdeaParams); + int getNanReceivePostDiscoveryVal(const u8 *pInValue, + u32 length, + NanReceivePostDiscovery *pRxDisc); + int getNanFurtherAvailabilityMap(const u8 *pInValue, + u32 length, + u8* num_chans, + NanFurtherAvailabilityChannel *pFac); + void handleNanStatsResponse(NanStatsType stats_type, + char* rspBuf, + NanStatsResponse *pRsp, + u32 message_len); + + //Function which unparses the data and calls the NotifyResponse + int handleNdpResponse(NanResponseType ndpCmdtyp, struct nlattr **tb_vendor); + int handleNdpIndication(u32 ndpCmdType, struct nlattr **tb_vendor); + int getNdpRequest(struct nlattr **tb_vendor, NanDataPathRequestInd *event); + int getNdpConfirm(struct nlattr **tb_vendor, NanDataPathConfirmInd *event); + int getNdpEnd(struct nlattr **tb_vendor, NanDataPathEndInd *event); + int getNanTransmitFollowupInd(NanTransmitFollowupInd *event); + int getNanRangeRequestReceivedInd(NanRangeRequestInd *event); + int getNanRangeReportInd(NanRangeReportInd *event); + int getNdpScheduleUpdate(struct nlattr **tb_vendor, NanDataPathScheduleUpdateInd *event); +public: + NanCommand(wifi_handle handle, int id, u32 vendor_id, u32 subcmd); + static NanCommand* instance(wifi_handle handle); + virtual ~NanCommand(); + + // This function implements creation of NAN specific Request + // based on the request type + virtual wifi_error create(); + virtual wifi_error requestEvent(); + virtual int handleResponse(WifiEvent &reply); + virtual int handleEvent(WifiEvent &event); + wifi_error setCallbackHandler(NanCallbackHandler nHandler); + + + //Functions to fill the vendor data appropriately + wifi_error putNanEnable(transaction_id id, const NanEnableRequest *pReq); + wifi_error putNanDisable(transaction_id id); + wifi_error putNanPublish(transaction_id id, const NanPublishRequest *pReq); + wifi_error putNanPublishCancel(transaction_id id, const NanPublishCancelRequest *pReq); + wifi_error putNanSubscribe(transaction_id id, const NanSubscribeRequest *pReq); + wifi_error putNanSubscribeCancel(transaction_id id, const NanSubscribeCancelRequest *pReq); + wifi_error putNanTransmitFollowup(transaction_id id, const NanTransmitFollowupRequest *pReq); + wifi_error putNanStats(transaction_id id, const NanStatsRequest *pReq); + wifi_error putNanConfig(transaction_id id, const NanConfigRequest *pReq); + wifi_error putNanTCA(transaction_id id, const NanTCARequest *pReq); + wifi_error putNanBeaconSdfPayload(transaction_id id, const NanBeaconSdfPayloadRequest *pReq); + wifi_error getNanStaParameter(wifi_interface_handle iface, NanStaParameter *pRsp); + wifi_error putNanCapabilities(transaction_id id); + wifi_error putNanDebugCommand(NanDebugParams debug, int debug_msg_length); + + /* Functions for NAN error translation + For NanResponse, NanPublishTerminatedInd, NanSubscribeTerminatedInd, + NanDisabledInd, NanTransmitFollowupInd: + function to translate firmware specific errors + to generic freamework error along with the error string + */ + void NanErrorTranslation(NanInternalStatusType firmwareErrorRecvd, + u32 valueRcvd, + void *pRsp, + bool is_ndp_rsp); + + /* Functions for NAN passphrase to PMK calculation */ + void saveNmi(u8 *mac); + u8 *getNmi(); + void saveServiceId(u8 *service_id, u16 sub_pub_handle, + u32 instance_id, NanRole Pool); + u8 *getServiceId(u32 instance_id, NanRole Pool); + void deleteServiceId(u16 sub_handle, u32 instance_id, NanRole pool); + void allocSvcParams(); + void reallocSvcParams(NanRole pool); + void deallocSvcParams(); +}; +#endif /* __WIFI_HAL_NAN_COMMAND_H__ */ + |