mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-10 22:40:54 -04:00
qcacld-3.0: WoW pattern id should be unique for each vdev
Current host driver is using default pattern id 0 for various WoW pattern configuration which is overwriting WoW rules in FW. WoW pattern id should be unique for each vdev. Same WoW pattern ID can be used on 2 different vdevs but on same vdev pattern id for various WoW patterns must be unique. Add fix to make sure unique pattern id is used for each vdev. Change-Id: I893044ae50bee44b5e986f3c30967fad601eb057 CRs-Fixed: 1067951
This commit is contained in:
parent
c534cf6715
commit
25a0b21ce5
1 changed files with 33 additions and 12 deletions
|
|
@ -3468,14 +3468,12 @@ static QDF_STATUS wma_send_wow_patterns_to_fw(tp_wma_handle wma,
|
|||
{
|
||||
struct wma_txrx_node *iface;
|
||||
int ret;
|
||||
uint8_t default_patterns;
|
||||
|
||||
iface = &wma->interfaces[vdev_id];
|
||||
default_patterns = iface->num_wow_default_patterns++;
|
||||
ret = wmi_unified_wow_patterns_to_fw_cmd(wma->wmi_handle,
|
||||
vdev_id, ptrn_id, ptrn,
|
||||
ptrn_len, ptrn_offset, mask,
|
||||
mask_len, user, default_patterns);
|
||||
mask_len, user, 0);
|
||||
if (ret) {
|
||||
if (!user)
|
||||
iface->num_wow_default_patterns--;
|
||||
|
|
@ -3502,10 +3500,16 @@ static QDF_STATUS wma_wow_ap(tp_wma_handle wma, uint8_t vdev_id)
|
|||
QDF_STATUS ret;
|
||||
uint8_t arp_offset = 20;
|
||||
uint8_t mac_mask[IEEE80211_ADDR_LEN];
|
||||
struct wma_txrx_node *iface = &wma->interfaces[vdev_id];
|
||||
|
||||
/* Setup unicast pkt pattern */
|
||||
/*
|
||||
* Setup unicast pkt pattern
|
||||
* WoW pattern id should be unique for each vdev
|
||||
* WoW pattern id can be same on 2 different VDEVs
|
||||
*/
|
||||
qdf_mem_set(&mac_mask, IEEE80211_ADDR_LEN, 0xFF);
|
||||
ret = wma_send_wow_patterns_to_fw(wma, vdev_id, 0,
|
||||
ret = wma_send_wow_patterns_to_fw(wma, vdev_id,
|
||||
iface->num_wow_default_patterns++,
|
||||
wma->interfaces[vdev_id].addr,
|
||||
IEEE80211_ADDR_LEN, 0, mac_mask,
|
||||
IEEE80211_ADDR_LEN, false);
|
||||
|
|
@ -3516,9 +3520,10 @@ static QDF_STATUS wma_wow_ap(tp_wma_handle wma, uint8_t vdev_id)
|
|||
|
||||
/*
|
||||
* Setup all ARP pkt pattern. This is dummy pattern hence the length
|
||||
* is zero
|
||||
* is zero. Pattern ID should be unique per vdev.
|
||||
*/
|
||||
ret = wma_send_wow_patterns_to_fw(wma, vdev_id, 0,
|
||||
ret = wma_send_wow_patterns_to_fw(wma, vdev_id,
|
||||
iface->num_wow_default_patterns++,
|
||||
arp_ptrn, 0, arp_offset, arp_mask, 0, false);
|
||||
if (ret != QDF_STATUS_SUCCESS) {
|
||||
WMA_LOGE("Failed to add WOW ARP pattern ret %d", ret);
|
||||
|
|
@ -3541,8 +3546,14 @@ static QDF_STATUS wma_configure_wow_ssdp(tp_wma_handle wma, uint8_t vdev_id)
|
|||
{
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
uint8_t discvr_offset = 30;
|
||||
struct wma_txrx_node *iface = &wma->interfaces[vdev_id];
|
||||
|
||||
status = wma_send_wow_patterns_to_fw(wma, vdev_id, 0,
|
||||
/*
|
||||
* WoW pattern ID should be unique for each vdev
|
||||
* Different WoW patterns can use same pattern ID
|
||||
*/
|
||||
status = wma_send_wow_patterns_to_fw(wma, vdev_id,
|
||||
iface->num_wow_default_patterns++,
|
||||
discvr_ptrn, sizeof(discvr_ptrn), discvr_offset,
|
||||
discvr_mask, sizeof(discvr_ptrn), false);
|
||||
|
||||
|
|
@ -3638,10 +3649,16 @@ static QDF_STATUS wma_wow_sta(tp_wma_handle wma, uint8_t vdev_id)
|
|||
uint8_t arp_offset = 12;
|
||||
uint8_t mac_mask[IEEE80211_ADDR_LEN];
|
||||
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
||||
struct wma_txrx_node *iface = &wma->interfaces[vdev_id];
|
||||
|
||||
/* Setup unicast pkt pattern */
|
||||
qdf_mem_set(&mac_mask, IEEE80211_ADDR_LEN, 0xFF);
|
||||
ret = wma_send_wow_patterns_to_fw(wma, vdev_id, 0,
|
||||
/*
|
||||
* Set up unicast wow pattern
|
||||
* WoW pattern ID should be unique for each vdev
|
||||
* Different WoW patterns can use same pattern ID
|
||||
*/
|
||||
ret = wma_send_wow_patterns_to_fw(wma, vdev_id,
|
||||
iface->num_wow_default_patterns++,
|
||||
wma->interfaces[vdev_id].addr,
|
||||
IEEE80211_ADDR_LEN, 0, mac_mask,
|
||||
IEEE80211_ADDR_LEN, false);
|
||||
|
|
@ -3660,7 +3677,9 @@ static QDF_STATUS wma_wow_sta(tp_wma_handle wma, uint8_t vdev_id)
|
|||
*/
|
||||
if (!(wma->ol_ini_info & 0x1)) {
|
||||
/* Setup all ARP pkt pattern */
|
||||
ret = wma_send_wow_patterns_to_fw(wma, vdev_id, 0,
|
||||
WMA_LOGI("ARP offload is disabled in INI enable WoW for ARP");
|
||||
ret = wma_send_wow_patterns_to_fw(wma, vdev_id,
|
||||
iface->num_wow_default_patterns++,
|
||||
arp_ptrn, sizeof(arp_ptrn), arp_offset,
|
||||
arp_mask, sizeof(arp_mask), false);
|
||||
if (ret != QDF_STATUS_SUCCESS) {
|
||||
|
|
@ -3672,7 +3691,9 @@ static QDF_STATUS wma_wow_sta(tp_wma_handle wma, uint8_t vdev_id)
|
|||
/* for NS or NDP offload packets */
|
||||
if (!(wma->ol_ini_info & 0x2)) {
|
||||
/* Setup all NS pkt pattern */
|
||||
ret = wma_send_wow_patterns_to_fw(wma, vdev_id, 0,
|
||||
WMA_LOGI("NS offload is disabled in INI enable WoW for NS");
|
||||
ret = wma_send_wow_patterns_to_fw(wma, vdev_id,
|
||||
iface->num_wow_default_patterns++,
|
||||
ns_ptrn, sizeof(arp_ptrn), arp_offset,
|
||||
arp_mask, sizeof(arp_mask), false);
|
||||
if (ret != QDF_STATUS_SUCCESS) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue