diff options
author | Peng Xu <pxu@codeaurora.org> | 2018-06-26 11:29:10 -0700 |
---|---|---|
committer | Etan Cohen <etancohen@google.com> | 2019-02-11 10:07:19 -0800 |
commit | ac1d00e928705fa763b570d5af08f78a2c3f5d4b (patch) | |
tree | 713cd39b74e227a5dc931ec7de322b056549dc82 /qcwcn | |
parent | 4333c0e76d0c8427e308d866ef0349753d2c984d (diff) | |
download | wlan-ac1d00e928705fa763b570d5af08f78a2c3f5d4b.tar.gz |
wifi-hal: Add support handling NDPE attribute
Add handling NDPE attribute in NAN capabilities. This allows
the framework to enable or disable using of NDP attribute
in NAN data request message.
Bug: 113149569
Test: Manual
Change-Id: If2ca515447fbd44bca3bc272ce5fd72718d7eb19
CRs-fixed: 2244053
Diffstat (limited to 'qcwcn')
-rw-r--r-- | qcwcn/wifi_hal/nan_cert.h | 21 | ||||
-rw-r--r-- | qcwcn/wifi_hal/nan_i.h | 16 | ||||
-rw-r--r-- | qcwcn/wifi_hal/nan_req.cpp | 28 | ||||
-rw-r--r-- | qcwcn/wifi_hal/nan_rsp.cpp | 2 |
4 files changed, 60 insertions, 7 deletions
diff --git a/qcwcn/wifi_hal/nan_cert.h b/qcwcn/wifi_hal/nan_cert.h index 040471a..85b7073 100644 --- a/qcwcn/wifi_hal/nan_cert.h +++ b/qcwcn/wifi_hal/nan_cert.h @@ -36,7 +36,10 @@ extern "C" { #endif /* __cplusplus */ -#define NAN_CERT_VERSION 4 +#ifndef PACKED +#define PACKED __attribute__((packed)) +#endif +#define NAN_CERT_VERSION 5 #define NAN_MAX_DEBUG_MESSAGE_DATA_LEN 100 #define NAN_MAX_ALLOWED_DW_AWAKE_INTERVAL 16 @@ -97,6 +100,18 @@ typedef enum { NAN_DEVICE_TYPE_DUT = 2 } NanDeviceType; +/* NAN NDPE absent or present */ +typedef enum { + NAN_NDPE_ATTR_PRESENT = 0, + NAN_NDPE_ATTR_ABSENT = 1 +} NanNdpeAttrType; + +/* NAN NDP absent or present */ +typedef enum { + NAN_NDP_ATTR_ABSENT = 0, + NAN_NDP_ATTR_PRESENT = 1 +} NanNdpAttrType; + /* * Definitions of debug subcommand type for the * generic debug command. @@ -115,7 +130,9 @@ typedef enum { NAN_TEST_MODE_CMD_NAN_SCHED_UPDATE_NDL_NOTIFY = 11, NAN_TEST_MODE_CMD_NAN_AVAILABILITY_MAP_ORDER = 12, NAN_TEST_MODE_CMD_CONFIG_QOS = 13, - NAN_TEST_MODE_CMD_DEVICE_TYPE = 14 + NAN_TEST_MODE_CMD_DEVICE_TYPE = 14, + NAN_TEST_MODE_CMD_DISABLE_NDPE = 15, + NAN_TEST_MODE_CMD_ENABLE_NDP = 16, } NanDebugModeCmd; /* diff --git a/qcwcn/wifi_hal/nan_i.h b/qcwcn/wifi_hal/nan_i.h index 8cfd8b1..78cdb1a 100644 --- a/qcwcn/wifi_hal/nan_i.h +++ b/qcwcn/wifi_hal/nan_i.h @@ -169,6 +169,7 @@ typedef enum NAN_TLV_TYPE_NAN20_RANGING_REQUEST_RECEIVED = 26, NAN_TLV_TYPE_NAN_PASSPHRASE = 27, NAN_TLV_TYPE_SDEA_SERVICE_SPECIFIC_INFO = 28, + NAN_TLV_TYPE_DEV_CAP_ATTR_CAPABILITY = 29, NAN_TLV_TYPE_SDF_LAST = 4095, /* Configuration types */ @@ -432,6 +433,16 @@ typedef struct PACKED u8 ptlv[]; } NanPublishRepliedIndMsg, *pNanPublishRepliedIndMsg; +/* NAN Device Capability Attribute */ +typedef struct PACKED +{ + u32 dfs_master:1; + u32 ext_key_id:1; + u32 simu_ndp_data_recept:1; + u32 ndpe_attr_supp:1; + u32 reserved:28; +} NanDevCapAttrCap, *pNanDevCapAttrCap; + /* NAN Subscribe Service Req */ typedef struct PACKED { @@ -1048,7 +1059,10 @@ typedef struct PACKED u32 max_scid_len; u32 is_ndp_security_supported:1; u32 max_sdea_service_specific_info_len:16; - u32 reserved:15; + u32 reserved1:5; + u32 reserved2:5; + u32 ndpe_attr_supported:1; + u32 reserved:4; u32 max_subscribe_address; } NanCapabilitiesRspMsg, *pNanCapabilitiesRspMsg; diff --git a/qcwcn/wifi_hal/nan_req.cpp b/qcwcn/wifi_hal/nan_req.cpp index 8ab3a51..fd8516f 100644 --- a/qcwcn/wifi_hal/nan_req.cpp +++ b/qcwcn/wifi_hal/nan_req.cpp @@ -159,6 +159,10 @@ wifi_error NanCommand::putNanEnable(transaction_id id, const NanEnableRequest *p ( pReq->config_dw_early_termination ? (SIZEOF_TLV_HDR + \ sizeof(u32)) : 0 \ + ) + \ + ( + pReq->config_ndpe_attr? (SIZEOF_TLV_HDR + \ + sizeof(NanDevCapAttrCap)) : 0 \ ); pNanEnableReqMsg pFwReq = (pNanEnableReqMsg)malloc(message_len); @@ -337,7 +341,14 @@ wifi_error NanCommand::putNanEnable(transaction_id id, const NanEnableRequest *p tlvs = addTlv(NAN_TLV_TYPE_DW_EARLY_TERMINATION, sizeof(u32), (const u8*)&pReq->enable_dw_termination, tlvs); } - + if (pReq->config_ndpe_attr) { + NanDevCapAttrCap nanDevCapAttr; + memset(&nanDevCapAttr, 0, sizeof(nanDevCapAttr)); + nanDevCapAttr.ndpe_attr_supp = pReq->use_ndpe_attr; + tlvs = addTlv(NAN_TLV_TYPE_DEV_CAP_ATTR_CAPABILITY, + sizeof(NanDevCapAttrCap), + (const u8*)&nanDevCapAttr, tlvs); + } mVendorData = (char*)pFwReq; mDataLen = message_len; @@ -475,6 +486,10 @@ wifi_error NanCommand::putNanConfig(transaction_id id, const NanConfigRequest *p ( pReq->config_dw_early_termination ? (SIZEOF_TLV_HDR + \ sizeof(u32)) : 0 \ + ) + \ + ( + pReq->config_ndpe_attr? (SIZEOF_TLV_HDR + \ + sizeof(NanDevCapAttrCap)) : 0 \ ); if (pReq->num_config_discovery_attr) { @@ -606,7 +621,6 @@ wifi_error NanCommand::putNanConfig(transaction_id id, const NanConfigRequest *p tlvs = addTlv(NAN_TLV_TYPE_CONFIG_DISCOVERY_INDICATIONS, sizeof(u32), (const u8*)&config_discovery_indications, tlvs); - if (pReq->config_nss) { tlvs = addTlv(NAN_TLV_TYPE_TX_RX_CHAINS, sizeof(u32), (const u8*)&pReq->nss, tlvs); @@ -619,6 +633,14 @@ wifi_error NanCommand::putNanConfig(transaction_id id, const NanConfigRequest *p tlvs = addTlv(NAN_TLV_TYPE_DW_EARLY_TERMINATION, sizeof(u32), (const u8*)&pReq->enable_dw_termination, tlvs); } + if (pReq->config_ndpe_attr) { + NanDevCapAttrCap nanDevCapAttr; + memset(&nanDevCapAttr, 0, sizeof(nanDevCapAttr)); + nanDevCapAttr.ndpe_attr_supp = pReq->use_ndpe_attr; + tlvs = addTlv(NAN_TLV_TYPE_DEV_CAP_ATTR_CAPABILITY, + sizeof(NanDevCapAttrCap), + (const u8*)&nanDevCapAttr, tlvs); + } mVendorData = (char*)pFwReq; mDataLen = message_len; @@ -922,7 +944,6 @@ wifi_error NanCommand::putNanSubscribe(transaction_id id, message_len += \ (pReq->num_intf_addr_present * (SIZEOF_TLV_HDR + NAN_MAC_ADDR_LEN)); - if ((pReq->key_info.key_type == NAN_SECURITY_KEY_INPUT_PMK) && (pReq->key_info.body.pmk_info.pmk_len == NAN_PMK_INFO_LEN)) message_len += SIZEOF_TLV_HDR + NAN_PMK_INFO_LEN; @@ -934,7 +955,6 @@ wifi_error NanCommand::putNanSubscribe(transaction_id id, message_len += SIZEOF_TLV_HDR + pReq->key_info.body.passphrase_info.passphrase_len; - pNanSubscribeServiceReqMsg pFwReq = (pNanSubscribeServiceReqMsg)malloc(message_len); if (pFwReq == NULL) { cleanup(); diff --git a/qcwcn/wifi_hal/nan_rsp.cpp b/qcwcn/wifi_hal/nan_rsp.cpp index 4b8bafd..721ab49 100644 --- a/qcwcn/wifi_hal/nan_rsp.cpp +++ b/qcwcn/wifi_hal/nan_rsp.cpp @@ -609,6 +609,8 @@ int NanCommand::getNanResponse(transaction_id *id, NanResponseMsg *pRsp) pFwRsp->max_sdea_service_specific_info_len; pRsp->body.nan_capabilities.max_subscribe_address = \ pFwRsp->max_subscribe_address; + pRsp->body.nan_capabilities.ndpe_attr_supported = \ + pFwRsp->ndpe_attr_supported; break; } default: |