diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2016-08-03 05:15:12 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-08-03 05:15:12 -0700 |
commit | a146e281c3047419da15e1a9399ee18b33614b2b (patch) | |
tree | 8d290c59ee2cf77765143cc678c5a8072c4cb8da | |
parent | a842daa486ad75f3f131a6be64d578f941f08651 (diff) | |
parent | 0cc5d43944bf6b206693b74175c08326183e4f23 (diff) | |
download | android_hardware_qcom_wlan-a146e281c3047419da15e1a9399ee18b33614b2b.tar.gz android_hardware_qcom_wlan-a146e281c3047419da15e1a9399ee18b33614b2b.tar.bz2 android_hardware_qcom_wlan-a146e281c3047419da15e1a9399ee18b33614b2b.zip |
Merge "Wifihal: Fix service instance id from u16 to u32"
-rw-r--r-- | qcwcn/wifi_hal/nan.cpp | 498 | ||||
-rw-r--r-- | qcwcn/wifi_hal/nan_i.h | 12 | ||||
-rw-r--r-- | qcwcn/wifi_hal/nan_ind.cpp | 172 | ||||
-rw-r--r-- | qcwcn/wifi_hal/nan_req.cpp | 3 | ||||
-rw-r--r-- | qcwcn/wifi_hal/nan_rsp.cpp | 50 | ||||
-rw-r--r-- | qcwcn/wifi_hal/nancommand.h | 9 | ||||
-rw-r--r-- | qcwcn/wifi_hal/vendor_definitions.h | 37 |
7 files changed, 702 insertions, 79 deletions
diff --git a/qcwcn/wifi_hal/nan.cpp b/qcwcn/wifi_hal/nan.cpp index 939a3f9..8498be4 100644 --- a/qcwcn/wifi_hal/nan.cpp +++ b/qcwcn/wifi_hal/nan.cpp @@ -45,7 +45,7 @@ wifi_error nan_register_handler(wifi_interface_handle iface, nanCommand = NanCommand::instance(wifiHandle); if (nanCommand == NULL) { - ALOGE("%s: Error NanCommand NULL", __func__); + ALOGE("%s: Error NanCommand NULL", __FUNCTION__); return WIFI_ERROR_UNKNOWN; } @@ -77,7 +77,7 @@ wifi_error nan_enable_request(transaction_id id, OUI_QCA, QCA_NL80211_VENDOR_SUBCMD_NAN); if (nanCommand == NULL) { - ALOGE("%s: Error NanCommand NULL", __func__); + ALOGE("%s: Error NanCommand NULL", __FUNCTION__); return WIFI_ERROR_UNKNOWN; } @@ -92,12 +92,12 @@ wifi_error nan_enable_request(transaction_id id, ret = nanCommand->putNanEnable(id, msg); if (ret != 0) { - ALOGE("%s: putNanEnable Error:%d",__func__, ret); + ALOGE("%s: putNanEnable Error:%d", __FUNCTION__, ret); goto cleanup; } ret = nanCommand->requestEvent(); if (ret != 0) { - ALOGE("%s: requestEvent Error:%d",__func__, ret); + ALOGE("%s: requestEvent Error:%d", __FUNCTION__, ret); } cleanup: delete nanCommand; @@ -118,7 +118,7 @@ wifi_error nan_disable_request(transaction_id id, OUI_QCA, QCA_NL80211_VENDOR_SUBCMD_NAN); if (nanCommand == NULL) { - ALOGE("%s: Error NanCommand NULL", __func__); + ALOGE("%s: Error NanCommand NULL", __FUNCTION__); return WIFI_ERROR_UNKNOWN; } @@ -133,12 +133,12 @@ wifi_error nan_disable_request(transaction_id id, ret = nanCommand->putNanDisable(id); if (ret != 0) { - ALOGE("%s: putNanDisable Error:%d",__func__, ret); + ALOGE("%s: putNanDisable Error:%d",__FUNCTION__, ret); goto cleanup; } ret = nanCommand->requestEvent(); if (ret != 0) { - ALOGE("%s: requestEvent Error:%d",__func__, ret); + ALOGE("%s: requestEvent Error:%d",__FUNCTION__, ret); } cleanup: delete nanCommand; @@ -160,7 +160,7 @@ wifi_error nan_publish_request(transaction_id id, OUI_QCA, QCA_NL80211_VENDOR_SUBCMD_NAN); if (nanCommand == NULL) { - ALOGE("%s: Error NanCommand NULL", __func__); + ALOGE("%s: Error NanCommand NULL", __FUNCTION__); return WIFI_ERROR_UNKNOWN; } @@ -175,12 +175,12 @@ wifi_error nan_publish_request(transaction_id id, ret = nanCommand->putNanPublish(id, msg); if (ret != 0) { - ALOGE("%s: putNanPublish Error:%d",__func__, ret); + ALOGE("%s: putNanPublish Error:%d",__FUNCTION__, ret); goto cleanup; } ret = nanCommand->requestEvent(); if (ret != 0) { - ALOGE("%s: requestEvent Error:%d",__func__, ret); + ALOGE("%s: requestEvent Error:%d",__FUNCTION__, ret); } cleanup: delete nanCommand; @@ -202,7 +202,7 @@ wifi_error nan_publish_cancel_request(transaction_id id, OUI_QCA, QCA_NL80211_VENDOR_SUBCMD_NAN); if (nanCommand == NULL) { - ALOGE("%s: Error NanCommand NULL", __func__); + ALOGE("%s: Error NanCommand NULL", __FUNCTION__); return WIFI_ERROR_UNKNOWN; } @@ -217,12 +217,12 @@ wifi_error nan_publish_cancel_request(transaction_id id, ret = nanCommand->putNanPublishCancel(id, msg); if (ret != 0) { - ALOGE("%s: putNanPublishCancel Error:%d",__func__, ret); + ALOGE("%s: putNanPublishCancel Error:%d", __FUNCTION__, ret); goto cleanup; } ret = nanCommand->requestEvent(); if (ret != 0) { - ALOGE("%s: requestEvent Error:%d",__func__, ret); + ALOGE("%s: requestEvent Error:%d", __FUNCTION__, ret); } cleanup: delete nanCommand; @@ -244,7 +244,7 @@ wifi_error nan_subscribe_request(transaction_id id, OUI_QCA, QCA_NL80211_VENDOR_SUBCMD_NAN); if (nanCommand == NULL) { - ALOGE("%s: Error NanCommand NULL", __func__); + ALOGE("%s: Error NanCommand NULL", __FUNCTION__); return WIFI_ERROR_UNKNOWN; } @@ -259,12 +259,12 @@ wifi_error nan_subscribe_request(transaction_id id, ret = nanCommand->putNanSubscribe(id, msg); if (ret != 0) { - ALOGE("%s: putNanSubscribe Error:%d",__func__, ret); + ALOGE("%s: putNanSubscribe Error:%d", __FUNCTION__, ret); goto cleanup; } ret = nanCommand->requestEvent(); if (ret != 0) { - ALOGE("%s: requestEvent Error:%d",__func__, ret); + ALOGE("%s: requestEvent Error:%d", __FUNCTION__, ret); } cleanup: delete nanCommand; @@ -286,7 +286,7 @@ wifi_error nan_subscribe_cancel_request(transaction_id id, OUI_QCA, QCA_NL80211_VENDOR_SUBCMD_NAN); if (nanCommand == NULL) { - ALOGE("%s: Error NanCommand NULL", __func__); + ALOGE("%s: Error NanCommand NULL", __FUNCTION__); return WIFI_ERROR_UNKNOWN; } @@ -301,12 +301,12 @@ wifi_error nan_subscribe_cancel_request(transaction_id id, ret = nanCommand->putNanSubscribeCancel(id, msg); if (ret != 0) { - ALOGE("%s: putNanSubscribeCancel Error:%d",__func__, ret); + ALOGE("%s: putNanSubscribeCancel Error:%d", __FUNCTION__, ret); goto cleanup; } ret = nanCommand->requestEvent(); if (ret != 0) { - ALOGE("%s: requestEvent Error:%d",__func__, ret); + ALOGE("%s: requestEvent Error:%d", __FUNCTION__, ret); } cleanup: delete nanCommand; @@ -328,7 +328,7 @@ wifi_error nan_transmit_followup_request(transaction_id id, OUI_QCA, QCA_NL80211_VENDOR_SUBCMD_NAN); if (nanCommand == NULL) { - ALOGE("%s: Error NanCommand NULL", __func__); + ALOGE("%s: Error NanCommand NULL", __FUNCTION__); return WIFI_ERROR_UNKNOWN; } @@ -343,12 +343,12 @@ wifi_error nan_transmit_followup_request(transaction_id id, ret = nanCommand->putNanTransmitFollowup(id, msg); if (ret != 0) { - ALOGE("%s: putNanTransmitFollowup Error:%d",__func__, ret); + ALOGE("%s: putNanTransmitFollowup Error:%d", __FUNCTION__, ret); goto cleanup; } ret = nanCommand->requestEvent(); if (ret != 0) { - ALOGE("%s: requestEvent Error:%d",__func__, ret); + ALOGE("%s: requestEvent Error:%d", __FUNCTION__, ret); } cleanup: delete nanCommand; @@ -370,7 +370,7 @@ wifi_error nan_stats_request(transaction_id id, OUI_QCA, QCA_NL80211_VENDOR_SUBCMD_NAN); if (nanCommand == NULL) { - ALOGE("%s: Error NanCommand NULL", __func__); + ALOGE("%s: Error NanCommand NULL", __FUNCTION__); return WIFI_ERROR_UNKNOWN; } @@ -385,12 +385,12 @@ wifi_error nan_stats_request(transaction_id id, ret = nanCommand->putNanStats(id, msg); if (ret != 0) { - ALOGE("%s: putNanStats Error:%d",__func__, ret); + ALOGE("%s: putNanStats Error:%d", __FUNCTION__, ret); goto cleanup; } ret = nanCommand->requestEvent(); if (ret != 0) { - ALOGE("%s: requestEvent Error:%d",__func__, ret); + ALOGE("%s: requestEvent Error:%d", __FUNCTION__, ret); } cleanup: delete nanCommand; @@ -412,7 +412,7 @@ wifi_error nan_config_request(transaction_id id, OUI_QCA, QCA_NL80211_VENDOR_SUBCMD_NAN); if (nanCommand == NULL) { - ALOGE("%s: Error NanCommand NULL", __func__); + ALOGE("%s: Error NanCommand NULL", __FUNCTION__); return WIFI_ERROR_UNKNOWN; } @@ -427,12 +427,12 @@ wifi_error nan_config_request(transaction_id id, ret = nanCommand->putNanConfig(id, msg); if (ret != 0) { - ALOGE("%s: putNanConfig Error:%d",__func__, ret); + ALOGE("%s: putNanConfig Error:%d",__FUNCTION__, ret); goto cleanup; } ret = nanCommand->requestEvent(); if (ret != 0) { - ALOGE("%s: requestEvent Error:%d",__func__, ret); + ALOGE("%s: requestEvent Error:%d",__FUNCTION__, ret); } cleanup: delete nanCommand; @@ -454,7 +454,7 @@ wifi_error nan_tca_request(transaction_id id, OUI_QCA, QCA_NL80211_VENDOR_SUBCMD_NAN); if (nanCommand == NULL) { - ALOGE("%s: Error NanCommand NULL", __func__); + ALOGE("%s: Error NanCommand NULL", __FUNCTION__); return WIFI_ERROR_UNKNOWN; } @@ -469,12 +469,12 @@ wifi_error nan_tca_request(transaction_id id, ret = nanCommand->putNanTCA(id, msg); if (ret != 0) { - ALOGE("%s: putNanTCA Error:%d",__func__, ret); + ALOGE("%s: putNanTCA Error:%d",__FUNCTION__, ret); goto cleanup; } ret = nanCommand->requestEvent(); if (ret != 0) { - ALOGE("%s: requestEvent Error:%d",__func__, ret); + ALOGE("%s: requestEvent Error:%d",__FUNCTION__, ret); } cleanup: delete nanCommand; @@ -499,7 +499,7 @@ wifi_error nan_beacon_sdf_payload_request(transaction_id id, OUI_QCA, QCA_NL80211_VENDOR_SUBCMD_NAN); if (nanCommand == NULL) { - ALOGE("%s: Error NanCommand NULL", __func__); + ALOGE("%s: Error NanCommand NULL", __FUNCTION__); return WIFI_ERROR_UNKNOWN; } @@ -514,12 +514,12 @@ wifi_error nan_beacon_sdf_payload_request(transaction_id id, ret = nanCommand->putNanBeaconSdfPayload(id, msg); if (ret != 0) { - ALOGE("%s: putNanBeaconSdfPayload Error:%d",__func__, ret); + ALOGE("%s: putNanBeaconSdfPayload Error:%d", __FUNCTION__, ret); goto cleanup; } ret = nanCommand->requestEvent(); if (ret != 0) { - ALOGE("%s: requestEvent Error:%d",__func__, ret); + ALOGE("%s: requestEvent Error:%d", __FUNCTION__, ret); } cleanup: @@ -537,13 +537,13 @@ wifi_error nan_get_sta_parameter(transaction_id id, nanCommand = NanCommand::instance(wifiHandle); if (nanCommand == NULL) { - ALOGE("%s: Error NanCommand NULL", __func__); + ALOGE("%s: Error NanCommand NULL", __FUNCTION__); return WIFI_ERROR_UNKNOWN; } ret = nanCommand->getNanStaParameter(iface, msg); if (ret != 0) { - ALOGE("%s: getNanStaParameter Error:%d",__func__, ret); + ALOGE("%s: getNanStaParameter Error:%d", __FUNCTION__, ret); goto cleanup; } @@ -565,7 +565,7 @@ wifi_error nan_get_capabilities(transaction_id id, OUI_QCA, QCA_NL80211_VENDOR_SUBCMD_NAN); if (nanCommand == NULL) { - ALOGE("%s: Error NanCommand NULL", __func__); + ALOGE("%s: Error NanCommand NULL", __FUNCTION__); return WIFI_ERROR_UNKNOWN; } @@ -580,12 +580,361 @@ wifi_error nan_get_capabilities(transaction_id id, ret = nanCommand->putNanCapabilities(id); if (ret != 0) { - ALOGE("%s: putNanCapabilities Error:%d",__func__, ret); + ALOGE("%s: putNanCapabilities Error:%d",__FUNCTION__, ret); goto cleanup; } ret = nanCommand->requestEvent(); if (ret != 0) { - ALOGE("%s: requestEvent Error:%d",__func__, ret); + ALOGE("%s: requestEvent Error:%d",__FUNCTION__, ret); + } +cleanup: + delete nanCommand; + return (wifi_error)ret; +} + +wifi_error nan_initialize_vendor_cmd(wifi_interface_handle iface, + NanCommand **nanCommand) +{ + int ret = 0; + interface_info *ifaceInfo = getIfaceInfo(iface); + wifi_handle wifiHandle = getWifiHandle(iface); + + if (nanCommand == NULL) { + ALOGE("%s: Error nanCommand NULL", __FUNCTION__); + return WIFI_ERROR_INVALID_ARGS; + } + + *nanCommand = new NanCommand(wifiHandle, + 0, + OUI_QCA, + QCA_NL80211_VENDOR_SUBCMD_NDP); + if (*nanCommand == NULL) { + ALOGE("%s: Object creation failed", __FUNCTION__); + return WIFI_ERROR_OUT_OF_MEMORY; + } + + /* Create the message */ + ret = (*nanCommand)->create(); + if (ret < 0) + goto cleanup; + + ret = (*nanCommand)->set_iface_id(ifaceInfo->name); + if (ret < 0) + goto cleanup; + + return WIFI_SUCCESS; +cleanup: + delete *nanCommand; + return (wifi_error)ret; +} + +wifi_error nan_data_interface_create(transaction_id id, + wifi_interface_handle iface, + char* iface_name) +{ + int ret = WIFI_SUCCESS; + struct nlattr *nlData; + NanCommand *nanCommand = NULL; + + if (iface_name == NULL) { + ALOGE("%s: Invalid Nan Data Interface Name. \n", __FUNCTION__); + return WIFI_ERROR_INVALID_ARGS; + } + + ret = nan_initialize_vendor_cmd(iface, + &nanCommand); + if (ret != WIFI_SUCCESS) { + ALOGE("%s: Initialization failed", __FUNCTION__); + return (wifi_error)ret; + } + + /* Add the vendor specific attributes for the NL command. */ + nlData = nanCommand->attr_start(NL80211_ATTR_VENDOR_DATA); + if (!nlData) + goto cleanup; + + if (nanCommand->put_u32( + QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD, + QCA_WLAN_VENDOR_ATTR_NDP_INTERFACE_CREATE) || + nanCommand->put_u16( + QCA_WLAN_VENDOR_ATTR_NDP_TRANSACTION_ID, + id) || + nanCommand->put_string( + QCA_WLAN_VENDOR_ATTR_NDP_IFACE_STR, + iface_name)) { + goto cleanup; + } + + nanCommand->attr_end(nlData); + ret = nanCommand->requestEvent(); + if (ret != 0) { + ALOGE("%s: requestEvent Error:%d", __FUNCTION__, ret); + } +cleanup: + delete nanCommand; + return (wifi_error)ret; +} + +wifi_error nan_data_interface_delete(transaction_id id, + wifi_interface_handle iface, + char* iface_name) +{ + int ret = WIFI_SUCCESS; + struct nlattr *nlData; + NanCommand *nanCommand = NULL; + + if (iface_name == NULL) { + ALOGE("%s: Invalid Nan Data Interface Name. \n", __FUNCTION__); + return WIFI_ERROR_INVALID_ARGS; + } + ret = nan_initialize_vendor_cmd(iface, + &nanCommand); + if (ret != WIFI_SUCCESS) { + ALOGE("%s: Initialization failed", __FUNCTION__); + return (wifi_error)ret; + } + + /* Add the vendor specific attributes for the NL command. */ + nlData = nanCommand->attr_start(NL80211_ATTR_VENDOR_DATA); + if (!nlData) + goto cleanup; + + if (nanCommand->put_u32( + QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD, + QCA_WLAN_VENDOR_ATTR_NDP_INTERFACE_DELETE) || + nanCommand->put_u16( + QCA_WLAN_VENDOR_ATTR_NDP_TRANSACTION_ID, + id) || + nanCommand->put_string( + QCA_WLAN_VENDOR_ATTR_NDP_IFACE_STR, + iface_name)) { + goto cleanup; + } + + nanCommand->attr_end(nlData); + + ret = nanCommand->requestEvent(); + if (ret != 0) { + ALOGE("%s: requestEvent Error:%d", __FUNCTION__, ret); + } +cleanup: + delete nanCommand; + return (wifi_error)ret; +} + +wifi_error nan_data_request_initiator(transaction_id id, + wifi_interface_handle iface, + NanDataPathInitiatorRequest* msg) +{ + int ret = WIFI_SUCCESS; + struct nlattr *nlData, *nlCfgSecurity, *nlCfgQos; + NanCommand *nanCommand = NULL; + + if (msg == NULL) + return WIFI_ERROR_INVALID_ARGS; + + ret = nan_initialize_vendor_cmd(iface, + &nanCommand); + if (ret != WIFI_SUCCESS) { + ALOGE("%s: Initialization failed", __FUNCTION__); + return (wifi_error)ret; + } + + /* Add the vendor specific attributes for the NL command. */ + nlData = nanCommand->attr_start(NL80211_ATTR_VENDOR_DATA); + if (!nlData) + goto cleanup; + + if (nanCommand->put_u32( + QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD, + QCA_WLAN_VENDOR_ATTR_NDP_INITIATOR_REQUEST) || + nanCommand->put_u16( + QCA_WLAN_VENDOR_ATTR_NDP_TRANSACTION_ID, + id) || + nanCommand->put_u32( + QCA_WLAN_VENDOR_ATTR_NDP_SERVICE_INSTANCE_ID, + msg->service_instance_id) || + nanCommand->put_bytes( + QCA_WLAN_VENDOR_ATTR_NDP_PEER_DISCOVERY_MAC_ADDR, + (char *)msg->peer_disc_mac_addr, + NAN_MAC_ADDR_LEN) || + nanCommand->put_string( + QCA_WLAN_VENDOR_ATTR_NDP_IFACE_STR, + msg->ndp_iface)) { + goto cleanup; + } + + if (msg->channel_request_type != NAN_DP_CHANNEL_NOT_REQUESTED) { + if (nanCommand->put_u32 ( + QCA_WLAN_VENDOR_ATTR_NDP_CHANNEL_CONFIG, + msg->channel_request_type) || + nanCommand->put_u32( + QCA_WLAN_VENDOR_ATTR_NDP_CHANNEL, + msg->channel)) + goto cleanup; + } + + if (msg->app_info.ndp_app_info_len != 0) { + if (nanCommand->put_bytes( + QCA_WLAN_VENDOR_ATTR_NDP_APP_INFO, + (char *)msg->app_info.ndp_app_info, + msg->app_info.ndp_app_info_len)) { + goto cleanup; + } + } + if (msg->ndp_cfg.security_cfg == NAN_DP_CONFIG_SECURITY) { + nlCfgSecurity = + nanCommand->attr_start(QCA_WLAN_VENDOR_ATTR_NDP_CONFIG_SECURITY); + if (!nlCfgSecurity) + goto cleanup; + + if (nanCommand->put_u32( + QCA_WLAN_VENDOR_ATTR_NDP_SECURITY_TYPE, + 0)) { + goto cleanup; + } + nanCommand->attr_end(nlCfgSecurity); + } + if (msg->ndp_cfg.qos_cfg == NAN_DP_CONFIG_QOS) { + nlCfgQos = + nanCommand->attr_start(QCA_WLAN_VENDOR_ATTR_NDP_CONFIG_QOS); + if (!nlCfgQos) + goto cleanup; + /* TBD Qos Info */ + nanCommand->attr_end(nlCfgQos); + } + nanCommand->attr_end(nlData); + + ret = nanCommand->requestEvent(); + if (ret != 0) { + ALOGE("%s: requestEvent Error:%d", __FUNCTION__, ret); + } +cleanup: + delete nanCommand; + return (wifi_error)ret; +} + +wifi_error nan_data_indication_response(transaction_id id, + wifi_interface_handle iface, + NanDataPathIndicationResponse* msg) +{ + int ret = WIFI_SUCCESS; + struct nlattr *nlData, *nlCfgSecurity, *nlCfgQos; + NanCommand *nanCommand = NULL; + + if (msg == NULL) + return WIFI_ERROR_INVALID_ARGS; + + ret = nan_initialize_vendor_cmd(iface, + &nanCommand); + if (ret != WIFI_SUCCESS) { + ALOGE("%s: Initialization failed", __FUNCTION__); + return (wifi_error)ret; + } + + /* Add the vendor specific attributes for the NL command. */ + nlData = nanCommand->attr_start(NL80211_ATTR_VENDOR_DATA); + if (!nlData) + goto cleanup; + + if (nanCommand->put_u32( + QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD, + QCA_WLAN_VENDOR_ATTR_NDP_RESPONDER_REQUEST) || + nanCommand->put_u16( + QCA_WLAN_VENDOR_ATTR_NDP_TRANSACTION_ID, + id) || + nanCommand->put_u32( + QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID, + msg->ndp_instance_id) || + nanCommand->put_string( + QCA_WLAN_VENDOR_ATTR_NDP_IFACE_STR, + msg->ndp_iface) || + nanCommand->put_u32( + QCA_WLAN_VENDOR_ATTR_NDP_RESPONSE_CODE, + msg->rsp_code)) { + goto cleanup; + } + if (msg->app_info.ndp_app_info_len != 0) { + if (nanCommand->put_bytes( + QCA_WLAN_VENDOR_ATTR_NDP_APP_INFO, + (char *)msg->app_info.ndp_app_info, + msg->app_info.ndp_app_info_len)) { + goto cleanup; + } + } + if (msg->ndp_cfg.security_cfg == NAN_DP_CONFIG_SECURITY) { + nlCfgSecurity = + nanCommand->attr_start(QCA_WLAN_VENDOR_ATTR_NDP_CONFIG_SECURITY); + if (!nlCfgSecurity) + goto cleanup; + /* Setting value to 0 for now */ + if (nanCommand->put_u32( + QCA_WLAN_VENDOR_ATTR_NDP_SECURITY_TYPE, + 0)) { + goto cleanup; + } + nanCommand->attr_end(nlCfgSecurity); + } + if (msg->ndp_cfg.qos_cfg == NAN_DP_CONFIG_QOS) { + nlCfgQos = + nanCommand->attr_start(QCA_WLAN_VENDOR_ATTR_NDP_CONFIG_QOS); + if (!nlCfgQos) + goto cleanup; + + /* TBD Qos Info */ + nanCommand->attr_end(nlCfgQos); + } + nanCommand->attr_end(nlData); + + ret = nanCommand->requestEvent(); + if (ret != 0) { + ALOGE("%s: requestEvent Error:%d", __FUNCTION__, ret); + } +cleanup: + delete nanCommand; + return (wifi_error)ret; +} + +wifi_error nan_data_end(transaction_id id, + wifi_interface_handle iface, + NanDataPathEndRequest* msg) +{ + int ret = WIFI_SUCCESS; + struct nlattr *nlData; + NanCommand *nanCommand = NULL; + + if (msg == NULL) + return WIFI_ERROR_INVALID_ARGS; + + ret = nan_initialize_vendor_cmd(iface, + &nanCommand); + if (ret != WIFI_SUCCESS) { + ALOGE("%s: Initialization failed", __FUNCTION__); + return (wifi_error)ret; + } + + /* Add the vendor specific attributes for the NL command. */ + nlData = nanCommand->attr_start(NL80211_ATTR_VENDOR_DATA); + if (!nlData) + goto cleanup; + + if (nanCommand->put_u32( + QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD, + QCA_WLAN_VENDOR_ATTR_NDP_END_REQUEST) || + nanCommand->put_u16( + QCA_WLAN_VENDOR_ATTR_NDP_TRANSACTION_ID, + id) || + nanCommand->put_bytes( + QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID_ARRAY, + (char *)msg->ndp_instance_id, + msg->num_ndp_instances * sizeof(u32))) { + goto cleanup; + } + nanCommand->attr_end(nlData); + + ret = nanCommand->requestEvent(); + if (ret != 0) { + ALOGE("%s: requestEvent Error:%d", __FUNCTION__, ret); } cleanup: delete nanCommand; @@ -616,9 +965,7 @@ NanCommand* NanCommand::instance(wifi_handle handle) QCA_NL80211_VENDOR_SUBCMD_NAN); ALOGV("NanCommand %p created", mNanCommandInstance); return mNanCommandInstance; - } - else - { + } else { if (handle != getWifiHandle(mNanCommandInstance->mInfo)) { /* upper layer must have cleaned up the handle and reinitialized, so we need to update the same */ @@ -652,13 +999,22 @@ int NanCommand::handleResponse(WifiEvent &reply){ int NanCommand::setCallbackHandler(NanCallbackHandler nHandler) { - int res = 0; + int res = WIFI_SUCCESS; mHandler = nHandler; res = registerVendorHandler(mVendor_id, mSubcmd); if (res != 0) { //error case should not happen print log ALOGE("%s: Unable to register Vendor Handler Vendor Id=0x%x subcmd=%u", - __func__, mVendor_id, mSubcmd); + __FUNCTION__, mVendor_id, mSubcmd); + return res; + } + + res = registerVendorHandler(mVendor_id, QCA_NL80211_VENDOR_SUBCMD_NDP); + if (res != 0) { + //error case should not happen print log + ALOGE("%s: Unable to register Vendor Handler Vendor Id=0x%x subcmd=QCA_NL80211_VENDOR_SUBCMD_NDP", + __FUNCTION__, mVendor_id); + return res; } return res; } @@ -710,17 +1066,54 @@ int NanCommand::handleEvent(WifiEvent &event) //the response callback handler with the populated //NanResponseMsg handleNanResponse(); - } - else { + } else { //handleNanIndication will parse the data and call //the corresponding Indication callback handler //with the corresponding populated Indication event handleNanIndication(); } - } - else { + } else if (mSubcmd == QCA_NL80211_VENDOR_SUBCMD_NDP) { + // Parse the vendordata and get the NAN attribute + u32 ndpCmdType; + struct nlattr *tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_AFTER_LAST + 1]; + nla_parse(tb_vendor, QCA_WLAN_VENDOR_ATTR_NDP_MAX, + (struct nlattr *)mVendorData, + mDataLen, NULL); + + if (tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD]) { + ndpCmdType = + nla_get_u32(tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_SUBCMD]); + ALOGD("%s: NDP Cmd Type : val 0x%x", + __FUNCTION__, ndpCmdType); + switch (ndpCmdType) { + case QCA_WLAN_VENDOR_ATTR_NDP_INTERFACE_CREATE: + handleNdpResponse(NAN_DP_INTERFACE_CREATE, tb_vendor); + break; + case QCA_WLAN_VENDOR_ATTR_NDP_INTERFACE_DELETE: + handleNdpResponse(NAN_DP_INTERFACE_DELETE, tb_vendor); + break; + case QCA_WLAN_VENDOR_ATTR_NDP_INITIATOR_RESPONSE: + handleNdpResponse(NAN_DP_INITIATOR_RESPONSE, tb_vendor); + break; + case QCA_WLAN_VENDOR_ATTR_NDP_RESPONDER_RESPONSE: + handleNdpResponse(NAN_DP_RESPONDER_RESPONSE, tb_vendor); + break; + case QCA_WLAN_VENDOR_ATTR_NDP_END_RESPONSE: + handleNdpResponse(NAN_DP_END, tb_vendor); + break; + case QCA_WLAN_VENDOR_ATTR_NDP_DATA_REQUEST_IND: + case QCA_WLAN_VENDOR_ATTR_NDP_CONFIRM_IND: + case QCA_WLAN_VENDOR_ATTR_NDP_END_IND: + handleNdpIndication(ndpCmdType, tb_vendor); + break; + default: + ALOGE("%s: Invalid NDP subcmd response received %d", + __FUNCTION__, ndpCmdType); + } + } + } else { //error case should not happen print log - ALOGE("%s: Wrong NAN subcmd received %d", __func__, mSubcmd); + ALOGE("%s: Wrong NAN subcmd received %d", __FUNCTION__, mSubcmd); } return NL_SKIP; } @@ -793,13 +1186,10 @@ u16 NANTLV_ReadTlv(u8 *pInTlv, pNanTlv pOutTlv) ALOGV("READ TLV length %u, readLen %u", pOutTlv->length, readLen); - if (pOutTlv->length) - { + if (pOutTlv->length) { pOutTlv->value = pInTlv; readLen += pOutTlv->length; - } - else - { + } else { pOutTlv->value = NULL; } diff --git a/qcwcn/wifi_hal/nan_i.h b/qcwcn/wifi_hal/nan_i.h index bbff5cb..64089cb 100644 --- a/qcwcn/wifi_hal/nan_i.h +++ b/qcwcn/wifi_hal/nan_i.h @@ -103,7 +103,8 @@ typedef enum NAN_MSG_ID_BEACON_SDF_RSP = 31, NAN_MSG_ID_BEACON_SDF_IND = 32, NAN_MSG_ID_CAPABILITIES_REQ = 33, - NAN_MSG_ID_CAPABILITIES_RSP = 34 + NAN_MSG_ID_CAPABILITIES_RSP = 34, + NAN_MSG_ID_SELF_TRANSMIT_FOLLOWUP_IND = 35 } NanMsgId; /* @@ -924,6 +925,7 @@ typedef enum { NAN_INDICATION_DISABLED =7, NAN_INDICATION_TCA =8, NAN_INDICATION_BEACON_SDF_PAYLOAD =9, + NAN_INDICATION_SELF_TRANSMIT_FOLLOWUP =10, NAN_INDICATION_UNKNOWN =0xFFFF } NanIndicationType; @@ -964,8 +966,16 @@ typedef struct PACKED u32 max_ndi_interfaces; u32 max_ndp_sessions; u32 max_app_info_len; + u32 max_queued_transmit_followup_msgs; } NanCapabilitiesRspMsg, *pNanCapabilitiesRspMsg; +/* NAN Self Transmit Followup */ +typedef struct PACKED +{ + NanMsgHeader fwHeader; + u32 reason; +} NanSelfTransmitFollowupIndMsg, *pNanSelfTransmitFollowupIndMsg; + /* Function to get the sta_parameter expected by Sigma as per CAPI spec. diff --git a/qcwcn/wifi_hal/nan_ind.cpp b/qcwcn/wifi_hal/nan_ind.cpp index 61608e7..c9bb00b 100644 --- a/qcwcn/wifi_hal/nan_ind.cpp +++ b/qcwcn/wifi_hal/nan_ind.cpp @@ -116,6 +116,15 @@ int NanCommand::handleNanIndication() } break; + case NAN_INDICATION_SELF_TRANSMIT_FOLLOWUP: + NanTransmitFollowupInd transmitFollowupInd; + memset(&transmitFollowupInd, 0, sizeof(NanTransmitFollowupInd)); + res = getNanTransmitFollowupInd(&transmitFollowupInd); + if (!res && mHandler.EventTransmitFollowup) { + (*mHandler.EventTransmitFollowup)(&transmitFollowupInd); + } + break; + default: ALOGE("handleNanIndication error invalid msg_id:%u", msg_id); res = (int)WIFI_ERROR_INVALID_REQUEST_ID; @@ -157,6 +166,8 @@ NanIndicationType NanCommand::getIndicationType() return NAN_INDICATION_TCA; case NAN_MSG_ID_BEACON_SDF_IND: return NAN_INDICATION_BEACON_SDF_PAYLOAD; + case NAN_MSG_ID_SELF_TRANSMIT_FOLLOWUP_IND: + return NAN_INDICATION_SELF_TRANSMIT_FOLLOWUP; default: return NAN_INDICATION_UNKNOWN; } @@ -259,8 +270,7 @@ int NanCommand::getNanMatch(NanMatchInd *event) &event->discovery_attr[idx]); if (ret == 0) { event->num_rx_discovery_attr++; - } - else { + } else { ALOGE("NAN_TLV_TYPE_POST_NAN_DISCOVERY_ATTRIBUTE_RECEIVE" "Incorrect"); } @@ -793,3 +803,161 @@ cleanup: mStaParam = NULL; return (int)ret; } + +int NanCommand::getNanTransmitFollowupInd(NanTransmitFollowupInd *event) +{ + if (event == NULL || mNanVendorEvent == NULL) { + ALOGE("%s: Invalid input argument event:%p mNanVendorEvent:%p", + __func__, event, mNanVendorEvent); + return WIFI_ERROR_INVALID_ARGS; + } + + pNanSelfTransmitFollowupIndMsg pRsp = (pNanSelfTransmitFollowupIndMsg)mNanVendorEvent; + event->id = pRsp->fwHeader.transactionId; + event->reason = (NanStatusType)pRsp->reason; + return WIFI_SUCCESS; +} + +//Function which calls the necessaryIndication callback +//based on the indication type +int NanCommand::handleNdpIndication(u32 ndpCmdType, struct nlattr **tb_vendor) +{ + //Based on the message_id in the header determine the Indication type + //and call the necessary callback handler + int res = 0; + + ALOGI("handleNdpIndication msg_id:%u", ndpCmdType); + switch (ndpCmdType) { + case QCA_WLAN_VENDOR_ATTR_NDP_DATA_REQUEST_IND: + NanDataPathRequestInd ndpRequestInd; + memset(&ndpRequestInd, 0, sizeof(ndpRequestInd)); + + res = getNdpRequest(tb_vendor, &ndpRequestInd); + if (!res && mHandler.EventDataRequest) { + (*mHandler.EventDataRequest)(&ndpRequestInd); + } + break; + + case QCA_WLAN_VENDOR_ATTR_NDP_CONFIRM_IND: + NanDataPathConfirmInd ndpConfirmInd; + memset(&ndpConfirmInd, 0, sizeof(ndpConfirmInd)); + + res = getNdpConfirm(tb_vendor, &ndpConfirmInd); + if (!res && mHandler.EventDataConfirm) { + (*mHandler.EventDataConfirm)(&ndpConfirmInd); + } + break; + + case QCA_WLAN_VENDOR_ATTR_NDP_END_IND: + { + NanDataPathEndInd *ndpEndInd = NULL; + u8 num_ndp_ids = 0; + + if (!tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID_ARRAY]) { + ALOGE("%s: QCA_WLAN_VENDOR_ATTR_NDP not found", __FUNCTION__); + return WIFI_ERROR_INVALID_ARGS; + } + + num_ndp_ids = (u8)(nla_len(tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID_ARRAY])/sizeof(u32)); + ALOGD("%s: NDP Num Instance Ids : val %d", __FUNCTION__, num_ndp_ids); + + if (num_ndp_ids) { + ndpEndInd = + (NanDataPathEndInd *)malloc(sizeof(NanDataPathEndInd)+ (sizeof(u32) * num_ndp_ids)); + if (!ndpEndInd) { + ALOGE("%s: ndp_instance_id malloc Failed", __FUNCTION__); + return WIFI_ERROR_OUT_OF_MEMORY; + } + ndpEndInd->num_ndp_instances = num_ndp_ids; + nla_memcpy(ndpEndInd->ndp_instance_id, + tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID_ARRAY], + sizeof(u32) * ndpEndInd->num_ndp_instances); + } + if (mHandler.EventDataEnd) { + (*mHandler.EventDataEnd)(ndpEndInd); + } + free(ndpEndInd); + break; + } + default: + ALOGE("handleNdpIndication error invalid ndpCmdType:%u", ndpCmdType); + res = (int)WIFI_ERROR_INVALID_REQUEST_ID; + break; + } + return res; +} + +int NanCommand::getNdpRequest(struct nlattr **tb_vendor, + NanDataPathRequestInd *event) +{ + u32 len = 0; + + if (event == NULL || tb_vendor == NULL) { + ALOGE("%s: Invalid input argument event:%p tb_vendor:%p", + __FUNCTION__, event, tb_vendor); + return WIFI_ERROR_INVALID_ARGS; + } + if ((!tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_SERVICE_INSTANCE_ID]) || + (!tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_PEER_DISCOVERY_MAC_ADDR]) || + (!tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID])) { + ALOGE("%s: QCA_WLAN_VENDOR_ATTR_NDP not found", __FUNCTION__); + return WIFI_ERROR_INVALID_ARGS; + } + + event->service_instance_id = nla_get_u16(tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_SERVICE_INSTANCE_ID]); + ALOGD("%s: Service Instance id : val %d", __FUNCTION__, event->service_instance_id); + + len = nla_len(tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_PEER_DISCOVERY_MAC_ADDR]); + len = ((sizeof(event->peer_disc_mac_addr) <= len) ? sizeof(event->peer_disc_mac_addr) : len); + memcpy(&event->peer_disc_mac_addr[0], nla_data(tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_PEER_DISCOVERY_MAC_ADDR]), len); + + event->ndp_instance_id = nla_get_u32(tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID]); + ALOGD("%s: Ndp Instance id: %d", __FUNCTION__, event->ndp_instance_id); + if (tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_APP_INFO]) { + len = nla_len(tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_APP_INFO]); + len = ((sizeof(event->app_info.ndp_app_info) <= len) ? sizeof(event->app_info.ndp_app_info) : len); + memcpy(&event->app_info.ndp_app_info[0], nla_data(tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_APP_INFO]), len); + event->app_info.ndp_app_info_len = len; + } else { + ALOGD("%s: NDP App Info not present", __FUNCTION__); + } + return WIFI_SUCCESS; +} + +int NanCommand::getNdpConfirm(struct nlattr **tb_vendor, + NanDataPathConfirmInd *event) +{ + u32 len = 0; + + if (event == NULL || tb_vendor == NULL) { + ALOGE("%s: Invalid input argument event:%p tb_vendor:%p", + __FUNCTION__, event, tb_vendor); + return WIFI_ERROR_INVALID_ARGS; + } + if ((!tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID]) || + (!tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_NDI_MAC_ADDR]) || + (!tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_RESPONSE_CODE])) { + ALOGE("%s: QCA_WLAN_VENDOR_ATTR_NDP not found", __FUNCTION__); + return WIFI_ERROR_INVALID_ARGS; + } + + event->ndp_instance_id = nla_get_u16(tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID]); + ALOGD("%s: Service Instance id : val %d", __FUNCTION__, event->ndp_instance_id); + + len = nla_len(tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_NDI_MAC_ADDR]); + len = ((sizeof(event->peer_ndi_mac_addr) <= len) ? sizeof(event->peer_ndi_mac_addr) : len); + memcpy(&event->peer_ndi_mac_addr[0], nla_data(tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_NDI_MAC_ADDR]), len); + + event->rsp_code = (NanDataPathResponseCode)nla_get_u32(tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_RESPONSE_CODE]); + ALOGD("%s: Response code %d", __FUNCTION__, event->rsp_code); + + if (tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_APP_INFO]) { + len = nla_len(tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_APP_INFO]); + len = ((sizeof(event->app_info.ndp_app_info) <= len) ? sizeof(event->app_info.ndp_app_info) : len); + memcpy(&event->app_info.ndp_app_info[0], nla_data(tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_APP_INFO]), len); + event->app_info.ndp_app_info_len = len; + } else { + ALOGD("%s: NDP App Info not present", __FUNCTION__); + } + return WIFI_SUCCESS; +} diff --git a/qcwcn/wifi_hal/nan_req.cpp b/qcwcn/wifi_hal/nan_req.cpp index 854e905..6c46733 100644 --- a/qcwcn/wifi_hal/nan_req.cpp +++ b/qcwcn/wifi_hal/nan_req.cpp @@ -858,8 +858,7 @@ int NanCommand::putNanTCA(transaction_id id, const NanTCARequest *pReq) if (pReq->tca_type == NAN_TCA_ID_CLUSTER_SIZE) { tlvs = addTlv(NAN_TLV_TYPE_CLUSTER_SIZE_REQ, sizeof(tcaReqParams), (const u8*)&tcaReqParams[0], tlvs); - } - else { + } else { ALOGE("%s: Unrecognized tca_type:%u", __FUNCTION__, pReq->tca_type); cleanup(); return WIFI_ERROR_INVALID_ARGS; diff --git a/qcwcn/wifi_hal/nan_rsp.cpp b/qcwcn/wifi_hal/nan_rsp.cpp index 9183baa..33a1a7f 100644 --- a/qcwcn/wifi_hal/nan_rsp.cpp +++ b/qcwcn/wifi_hal/nan_rsp.cpp @@ -168,8 +168,7 @@ int NanCommand::getNanResponse(transaction_id *id, NanResponseMsg *pRsp) (char *)outputTlv.value, &pRsp->body.stats_response); } - } - else + } else ALOGV("%s: No TLV's present",__func__); break; } @@ -245,6 +244,8 @@ int NanCommand::getNanResponse(transaction_id *id, NanResponseMsg *pRsp) pFwRsp->max_ndp_sessions; pRsp->body.nan_capabilities.max_app_info_len = \ pFwRsp->max_app_info_len; + pRsp->body.nan_capabilities.max_queued_transmit_followup_msgs = \ + pFwRsp->max_queued_transmit_followup_msgs; break; } default: @@ -513,3 +514,48 @@ void NanCommand::handleNanStatsResponse(NanStatsType stats_type, ALOGE("Unknown stats_type:%d\n", stats_type); } } + +int NanCommand::handleNdpResponse(NanResponseType ndpCmdType, + struct nlattr **tb_vendor) +{ + //parse the data and call + //the response callback handler with the populated + //NanResponseMsg + NanResponseMsg rsp_data; + transaction_id id; + + memset(&rsp_data, 0, sizeof(rsp_data)); + + if ((!tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_TRANSACTION_ID]) || + (!tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_DRV_RESPONSE_STATUS_TYPE]) || + (!tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE])) + { + ALOGE("%s: QCA_WLAN_VENDOR_ATTR_NDP not found", __FUNCTION__); + return WIFI_ERROR_INVALID_ARGS; + } + + id = nla_get_u16(tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_TRANSACTION_ID]); + ALOGD("%s: Transaction id : val %d", __FUNCTION__, id); + rsp_data.status = + (NanStatusType)nla_get_u32(tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_DRV_RESPONSE_STATUS_TYPE]); + ALOGD("%s: Status : %d", __FUNCTION__, rsp_data.status); + rsp_data.value = + nla_get_u32(tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE]); + ALOGD("%s: Value : %d", __FUNCTION__, rsp_data.value); + rsp_data.response_type = ndpCmdType; + if (ndpCmdType == NAN_DP_INITIATOR_RESPONSE) + { + if (!tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID]) + { + ALOGE("%s: QCA_WLAN_VENDOR_ATTR_NDP not found", __FUNCTION__); + return WIFI_ERROR_INVALID_ARGS; + } + rsp_data.body.data_request_response.ndp_instance_id = + nla_get_u32(tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID]); + } + //Call the NotifyResponse Handler + if (mHandler.NotifyResponse) { + (*mHandler.NotifyResponse)(id, &rsp_data); + } + return WIFI_SUCCESS; +} diff --git a/qcwcn/wifi_hal/nancommand.h b/qcwcn/wifi_hal/nancommand.h index f6311c8..b546dca 100644 --- a/qcwcn/wifi_hal/nancommand.h +++ b/qcwcn/wifi_hal/nancommand.h @@ -20,6 +20,8 @@ #include "common.h" #include "cpp_bindings.h" #include "wifi_hal.h" +#include "qca-vendor.h" +#include "vendor_definitions.h" class NanCommand : public WifiVendorCommand { @@ -89,6 +91,13 @@ private: char* rspBuf, NanStatsResponse *pRsp); + //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); public: NanCommand(wifi_handle handle, int id, u32 vendor_id, u32 subcmd); static NanCommand* instance(wifi_handle handle); diff --git a/qcwcn/wifi_hal/vendor_definitions.h b/qcwcn/wifi_hal/vendor_definitions.h index 46a1b83..82635b5 100644 --- a/qcwcn/wifi_hal/vendor_definitions.h +++ b/qcwcn/wifi_hal/vendor_definitions.h @@ -1220,10 +1220,10 @@ enum qca_wlan_vendor_attr_ndp_params /* Unsigned 16-bit value */ QCA_WLAN_VENDOR_ATTR_NDP_TRANSACTION_ID, /* NL attributes for data used NDP SUB cmds */ - /* Unsigned 16-bit value indicating a service info */ + /* Unsigned 32-bit value indicating a service info */ QCA_WLAN_VENDOR_ATTR_NDP_SERVICE_INSTANCE_ID, /* Unsigned 32-bit value; channel frequency */ - QCA_WLAN_VENDOR_ATTR_NDP_CHANNEL_SPEC_CHANNEL, + QCA_WLAN_VENDOR_ATTR_NDP_CHANNEL, /* Interface Discovery MAC address. An array of 6 Unsigned int8 */ QCA_WLAN_VENDOR_ATTR_NDP_PEER_DISCOVERY_MAC_ADDR, /* Interface name on which NDP is being created */ @@ -1232,22 +1232,26 @@ enum qca_wlan_vendor_attr_ndp_params QCA_WLAN_VENDOR_ATTR_NDP_CONFIG_SECURITY, /* Unsigned 32-bit value for Qos */ QCA_WLAN_VENDOR_ATTR_NDP_CONFIG_QOS, - /* Unsigned 16-bit value for app info length */ - QCA_WLAN_VENDOR_ATTR_NDP_APP_INFO_LEN, /* Array of u8: len = QCA_WLAN_VENDOR_ATTR_NAN_DP_APP_INFO_LEN */ QCA_WLAN_VENDOR_ATTR_NDP_APP_INFO, /* Unsigned 32-bit value for NDP instance Id */ QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID, - /* Unsigned 32-bit value for schedule update response code accept/reject */ - QCA_WLAN_VENDOR_ATTR_NDP_SCHEDULE_RESPONSE_CODE, - /* Unsigned 32-bit value for schedule status success/fail */ - QCA_WLAN_VENDOR_ATTR_NDP_SCHEDULE_STATUS_CODE, + /* Array of instance Ids */ + QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID_ARRAY, + /* Unsigned 32-bit value for initiator/responder ndp response code accept/reject */ + QCA_WLAN_VENDOR_ATTR_NDP_RESPONSE_CODE, /* NDI MAC address. An array of 6 Unsigned int8 */ QCA_WLAN_VENDOR_ATTR_NDP_NDI_MAC_ADDR, - - /* KEEP LAST */ - QCA_WLAN_VENDOR_ATTR_NDP_AFTER_LAST, - QCA_WLAN_VENDOR_ATTR_NDP_MAX = + /* Unsigned 32-bit value errors types returned by driver */ + QCA_WLAN_VENDOR_ATTR_NDP_DRV_RESPONSE_STATUS_TYPE, + /* Unsigned 32-bit value error values returned by driver */ + QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE, + /* Unsigned 32-bit value for Channel setup configuration */ + QCA_WLAN_VENDOR_ATTR_NDP_CHANNEL_CONFIG, + + /* KEEP LAST */ + QCA_WLAN_VENDOR_ATTR_NDP_AFTER_LAST, + QCA_WLAN_VENDOR_ATTR_NDP_MAX = QCA_WLAN_VENDOR_ATTR_NDP_AFTER_LAST - 1, }; @@ -1278,12 +1282,9 @@ enum qca_wlan_vendor_attr_ndp_sub_cmd_value QCA_WLAN_VENDOR_ATTR_NDP_RESPONDER_RESPONSE = 6, QCA_WLAN_VENDOR_ATTR_NDP_END_REQUEST = 7, QCA_WLAN_VENDOR_ATTR_NDP_END_RESPONSE = 8, - QCA_WLAN_VENDOR_ATTR_NDP_SCHEDULE_UPDATE_REQUEST = 9, - QCA_WLAN_VENDOR_ATTR_NDP_SCHEDULE_UPDATE_RESPONSE = 10, - QCA_WLAN_VENDOR_ATTR_NDP_DATA_REQUEST_IND = 11, - QCA_WLAN_VENDOR_ATTR_NDP_CONFIRM_IND = 12, - QCA_WLAN_VENDOR_ATTR_NDP_SCHEDULE_UPDATE_IND = 13, - QCA_WLAN_VENDOR_ATTR_NDP_END_IND = 14 + QCA_WLAN_VENDOR_ATTR_NDP_DATA_REQUEST_IND = 9, + QCA_WLAN_VENDOR_ATTR_NDP_CONFIRM_IND = 10, + QCA_WLAN_VENDOR_ATTR_NDP_END_IND = 11 }; #define PACKET_FILTER_ID 0 |