summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXin Li <delphij@google.com>2023-10-06 05:34:25 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2023-10-06 05:34:25 +0000
commit24412146aeba2d7a7a23bbbdda4f092f84ad4d91 (patch)
treedf52e149ad15a68972ae647b65c3a964f70a0ec2
parent53269599b3de6a1ca3b7a3c8313170fa278bb9dc (diff)
parent9fd2993a76231f59c30dbf36a6ab81ebdff00426 (diff)
downloadwlan-24412146aeba2d7a7a23bbbdda4f092f84ad4d91.tar.gz
Merge "Merge Android 14" into main
-rw-r--r--OWNERS1
-rw-r--r--legacy/qcwcn/wifi_hal/nan_req.cpp10
-rw-r--r--wcn6740/qcwcn/wifi_hal/nan_req.cpp10
-rw-r--r--wcn6740/qcwcn/wifi_hal/wifi_hal.cpp136
4 files changed, 94 insertions, 63 deletions
diff --git a/OWNERS b/OWNERS
index 646d018..4ab11f8 100644
--- a/OWNERS
+++ b/OWNERS
@@ -2,3 +2,4 @@ arabawy@google.com
etancohen@google.com
kumachang@google.com
hsuvictor@google.com
+wangroger@google.com
diff --git a/legacy/qcwcn/wifi_hal/nan_req.cpp b/legacy/qcwcn/wifi_hal/nan_req.cpp
index 265e39a..d92e118 100644
--- a/legacy/qcwcn/wifi_hal/nan_req.cpp
+++ b/legacy/qcwcn/wifi_hal/nan_req.cpp
@@ -788,7 +788,7 @@ wifi_error NanCommand::putNanPublish(transaction_id id, const NanPublishRequest
if (pReq->publish_id == 0) {
pFwReq->fwHeader.handle = 0xFFFF;
} else {
- pFwReq->fwHeader.handle = pReq->publish_id;
+ pFwReq->fwHeader.handle = (pReq->publish_id & 0xFF);
}
pFwReq->fwHeader.transactionId = id;
@@ -992,7 +992,7 @@ wifi_error NanCommand::putNanPublishCancel(transaction_id id, const NanPublishCa
pFwReq->fwHeader.msgVersion = (u16)NAN_MSG_VERSION1;
pFwReq->fwHeader.msgId = NAN_MSG_ID_PUBLISH_SERVICE_CANCEL_REQ;
pFwReq->fwHeader.msgLen = message_len;
- pFwReq->fwHeader.handle = pReq->publish_id;
+ pFwReq->fwHeader.handle = (pReq->publish_id & 0xFF);
pFwReq->fwHeader.transactionId = id;
mVendorData = (char *)pFwReq;
@@ -1085,7 +1085,7 @@ wifi_error NanCommand::putNanSubscribe(transaction_id id,
if (pReq->subscribe_id == 0) {
pFwReq->fwHeader.handle = 0xFFFF;
} else {
- pFwReq->fwHeader.handle = pReq->subscribe_id;
+ pFwReq->fwHeader.handle = (pReq->subscribe_id & 0xFF);
}
pFwReq->fwHeader.transactionId = id;
@@ -1291,7 +1291,7 @@ wifi_error NanCommand::putNanSubscribeCancel(transaction_id id,
pFwReq->fwHeader.msgVersion = (u16)NAN_MSG_VERSION1;
pFwReq->fwHeader.msgId = NAN_MSG_ID_SUBSCRIBE_SERVICE_CANCEL_REQ;
pFwReq->fwHeader.msgLen = message_len;
- pFwReq->fwHeader.handle = pReq->subscribe_id;
+ pFwReq->fwHeader.handle = (pReq->subscribe_id & 0xFF);
pFwReq->fwHeader.transactionId = id;
mVendorData = (char *)pFwReq;
@@ -1355,7 +1355,7 @@ wifi_error NanCommand::putNanTransmitFollowup(transaction_id id,
pFwReq->fwHeader.msgVersion = (u16)NAN_MSG_VERSION1;
pFwReq->fwHeader.msgId = NAN_MSG_ID_TRANSMIT_FOLLOWUP_REQ;
pFwReq->fwHeader.msgLen = message_len;
- pFwReq->fwHeader.handle = pReq->publish_subscribe_id;
+ pFwReq->fwHeader.handle = (pReq->publish_subscribe_id & 0xFF);
pFwReq->fwHeader.transactionId = id;
pFwReq->transmitFollowupReqParams.matchHandle = pReq->requestor_instance_id;
diff --git a/wcn6740/qcwcn/wifi_hal/nan_req.cpp b/wcn6740/qcwcn/wifi_hal/nan_req.cpp
index 9a70e88..9abb099 100644
--- a/wcn6740/qcwcn/wifi_hal/nan_req.cpp
+++ b/wcn6740/qcwcn/wifi_hal/nan_req.cpp
@@ -822,7 +822,7 @@ wifi_error NanCommand::putNanPublish(transaction_id id, const NanPublishRequest
if (pReq->publish_id == 0) {
pFwReq->fwHeader.handle = 0xFFFF;
} else {
- pFwReq->fwHeader.handle = pReq->publish_id;
+ pFwReq->fwHeader.handle = (pReq->publish_id & 0xFF);
}
pFwReq->fwHeader.transactionId = id;
@@ -1026,7 +1026,7 @@ wifi_error NanCommand::putNanPublishCancel(transaction_id id, const NanPublishCa
pFwReq->fwHeader.msgVersion = (u16)NAN_MSG_VERSION1;
pFwReq->fwHeader.msgId = NAN_MSG_ID_PUBLISH_SERVICE_CANCEL_REQ;
pFwReq->fwHeader.msgLen = message_len;
- pFwReq->fwHeader.handle = pReq->publish_id;
+ pFwReq->fwHeader.handle = (pReq->publish_id & 0xFF);
pFwReq->fwHeader.transactionId = id;
mVendorData = (char *)pFwReq;
@@ -1121,7 +1121,7 @@ wifi_error NanCommand::putNanSubscribe(transaction_id id,
if (pReq->subscribe_id == 0) {
pFwReq->fwHeader.handle = 0xFFFF;
} else {
- pFwReq->fwHeader.handle = pReq->subscribe_id;
+ pFwReq->fwHeader.handle = (pReq->subscribe_id & 0xFF);
}
pFwReq->fwHeader.transactionId = id;
@@ -1327,7 +1327,7 @@ wifi_error NanCommand::putNanSubscribeCancel(transaction_id id,
pFwReq->fwHeader.msgVersion = (u16)NAN_MSG_VERSION1;
pFwReq->fwHeader.msgId = NAN_MSG_ID_SUBSCRIBE_SERVICE_CANCEL_REQ;
pFwReq->fwHeader.msgLen = message_len;
- pFwReq->fwHeader.handle = pReq->subscribe_id;
+ pFwReq->fwHeader.handle = (pReq->subscribe_id & 0xFF);
pFwReq->fwHeader.transactionId = id;
mVendorData = (char *)pFwReq;
@@ -1391,7 +1391,7 @@ wifi_error NanCommand::putNanTransmitFollowup(transaction_id id,
pFwReq->fwHeader.msgVersion = (u16)NAN_MSG_VERSION1;
pFwReq->fwHeader.msgId = NAN_MSG_ID_TRANSMIT_FOLLOWUP_REQ;
pFwReq->fwHeader.msgLen = message_len;
- pFwReq->fwHeader.handle = pReq->publish_subscribe_id;
+ pFwReq->fwHeader.handle = (pReq->publish_subscribe_id & 0xFF);
pFwReq->fwHeader.transactionId = id;
pFwReq->transmitFollowupReqParams.matchHandle = pReq->requestor_instance_id;
diff --git a/wcn6740/qcwcn/wifi_hal/wifi_hal.cpp b/wcn6740/qcwcn/wifi_hal/wifi_hal.cpp
index 9275569..c78a63e 100644
--- a/wcn6740/qcwcn/wifi_hal/wifi_hal.cpp
+++ b/wcn6740/qcwcn/wifi_hal/wifi_hal.cpp
@@ -596,6 +596,15 @@ wifi_error wifi_set_coex_unsafe_channels(wifi_handle handle, u32 num_channels,
struct nlattr *nl_attr_unsafe_chan = NULL;
struct nlattr *unsafe_channels_attr = NULL;
hal_info *info = NULL;
+ int freq_cnt = 0;
+ u32 *freq = (u32 *) malloc(sizeof(u32) * num_channels);
+ u32 *power_cap_dbm = (u32 *) malloc(sizeof(u32) * num_channels);
+
+ if (!freq || !power_cap_dbm) {
+ ALOGE("%s: Failed to allocate memory", __FUNCTION__);
+ ret = WIFI_ERROR_OUT_OF_MEMORY;
+ goto cleanup;
+ }
if (!handle) {
ALOGE("%s: Error, wifi_handle NULL", __FUNCTION__);
@@ -644,6 +653,25 @@ wifi_error wifi_set_coex_unsafe_channels(wifi_handle handle, u32 num_channels,
}
ALOGD("%s: num_channels:%d, restrictions:%x", __FUNCTION__, num_channels,
restrictions);
+ for (int i = 0; i < num_channels; i++)
+ {
+ u32 frequency = get_frequency_from_channel(unsafeChannels[i].channel,
+ unsafeChannels[i].band);
+ if (frequency != 0)
+ {
+ freq[freq_cnt] = frequency;
+ power_cap_dbm[freq_cnt] = unsafeChannels[i].power_cap_dbm;
+ freq_cnt++;
+ ALOGV("%s: channel:%d, freq:%d, power_cap_dbm:%d, band:%d",
+ __FUNCTION__, unsafeChannels[i].channel, frequency,
+ unsafeChannels[i].power_cap_dbm, unsafeChannels[i].band);
+ }
+ else {
+ ALOGV("%s: Invalid channel found, channel:%d, power_cap_dbm:%d, band:%d",
+ __FUNCTION__, unsafeChannels[i].channel,
+ unsafeChannels[i].power_cap_dbm, unsafeChannels[i].band);
+ }
+ }
if (num_channels == 0) {
unsafe_channels_attr = cmd->attr_start(0);
if (!unsafe_channels_attr) {
@@ -675,61 +703,59 @@ wifi_error wifi_set_coex_unsafe_channels(wifi_handle handle, u32 num_channels,
ret = WIFI_ERROR_INVALID_ARGS;
goto cleanup;
}
- }
- for (int i = 0; i < num_channels; i++) {
- unsafe_channels_attr = cmd->attr_start(i);
- if (!unsafe_channels_attr) {
- ALOGE("%s: failed attr_start for unsafe_channels_attr of"
+
+ if(freq_cnt == 0)
+ {
+ ALOGE("%s: No valid frequency, ignore channel list", __FUNCTION__);
+ ret = WIFI_ERROR_INVALID_ARGS;
+ goto cleanup;
+ }
+ for (int i = 0; i < freq_cnt; i++) {
+ unsafe_channels_attr = cmd->attr_start(i);
+ if (!unsafe_channels_attr) {
+ ALOGE("%s: failed attr_start for unsafe_channels_attr of"
" index:%d", __FUNCTION__, i);
- ret = WIFI_ERROR_OUT_OF_MEMORY;
- goto cleanup;
- }
- u32 freq = get_frequency_from_channel(unsafeChannels[i].channel,
- unsafeChannels[i].band);
- if (!freq) {
- ALOGE("%s: Failed to get frequency of band:%d, channel:%d",
- __FUNCTION__, (int)unsafeChannels[i].band,
- unsafeChannels[i].channel);
- ret = WIFI_ERROR_INVALID_ARGS;
- goto cleanup;
- }
- ret = cmd->put_u32(
- QCA_WLAN_VENDOR_ATTR_AVOID_FREQUENCY_START, freq);
- if (ret != WIFI_SUCCESS) {
- ALOGE("%s: Failed to put frequency start, ret:%d",
- __FUNCTION__, ret);
- goto cleanup;
- }
- ret = cmd->put_u32(
- QCA_WLAN_VENDOR_ATTR_AVOID_FREQUENCY_END, freq);
- if (ret != WIFI_SUCCESS) {
- ALOGE("%s: Failed to put frequency end, ret:%d",
+ ret = WIFI_ERROR_OUT_OF_MEMORY;
+ goto cleanup;
+ }
+
+ ret = cmd->put_u32(
+ QCA_WLAN_VENDOR_ATTR_AVOID_FREQUENCY_START, freq[i]);
+ if (ret != WIFI_SUCCESS) {
+ ALOGE("%s: Failed to put frequency start, ret:%d",
+ __FUNCTION__, ret);
+ goto cleanup;
+ }
+ ret = cmd->put_u32(
+ QCA_WLAN_VENDOR_ATTR_AVOID_FREQUENCY_END, freq[i]);
+ if (ret != WIFI_SUCCESS) {
+ ALOGE("%s: Failed to put frequency end, ret:%d",
__FUNCTION__, ret);
- goto cleanup;
- }
- /**
- * WIFI_COEX_NO_POWER_CAP (0x7FFFFFF) is specific to android
- * framework, this value denotes that framework/wifihal is not
- * providing any power cap and allow driver/firmware to operate on
- * current power cap dbm. As driver is supposed to work on with
- * LA/LE etc, we are skipping to send 0x7FFFFFF down to driver,
- * hence driver will be operating as per current power cap calculated
- * based on regulatory or other constraints.
- */
- if (unsafeChannels[i].power_cap_dbm != WIFI_COEX_NO_POWER_CAP) {
- ret = cmd->put_s32(
- QCA_WLAN_VENDOR_ATTR_AVOID_FREQUENCY_POWER_CAP_DBM,
- unsafeChannels[i].power_cap_dbm);
- if (ret != WIFI_SUCCESS) {
- ALOGE("%s: Failed to put power_cap_dbm, ret:%d",
- __FUNCTION__, ret);
- goto cleanup;
- }
- }
- cmd->attr_end(unsafe_channels_attr);
- ALOGD("%s: channel:%d, freq:%d, power_cap_dbm:%d, band:%d",
- __FUNCTION__, unsafeChannels[i].channel, freq,
- unsafeChannels[i].power_cap_dbm, unsafeChannels[i].band);
+ goto cleanup;
+ }
+ /**
+ * WIFI_COEX_NO_POWER_CAP (0x7FFFFFF) is specific to android
+ * framework, this value denotes that framework/wifihal is not
+ * providing any power cap and allow driver/firmware to operate on
+ * current power cap dbm. As driver is supposed to work on with
+ * LA/LE etc, we are skipping to send 0x7FFFFFF down to driver,
+ * hence driver will be operating as per current power cap calculated
+ * based on regulatory or other constraints.
+ */
+ if (power_cap_dbm[i] != WIFI_COEX_NO_POWER_CAP) {
+ ret = cmd->put_s32(
+ QCA_WLAN_VENDOR_ATTR_AVOID_FREQUENCY_POWER_CAP_DBM,
+ power_cap_dbm[i]);
+ if (ret != WIFI_SUCCESS) {
+ ALOGE("%s: Failed to put power_cap_dbm, ret:%d",
+ __FUNCTION__, ret);
+ goto cleanup;
+ }
+ }
+ ALOGD("%s: freq:%d, power_cap_dbm:%d",
+ __FUNCTION__, freq[i], power_cap_dbm[i]);
+ cmd->attr_end(unsafe_channels_attr);
+ }
}
cmd->attr_end(nl_attr_unsafe_chan);
if (num_channels > 0) {
@@ -753,6 +779,10 @@ wifi_error wifi_set_coex_unsafe_channels(wifi_handle handle, u32 num_channels,
cleanup:
if (cmd)
delete cmd;
+ if (freq)
+ free (freq);
+ if (power_cap_dbm)
+ free (power_cap_dbm);
return ret;
}