qcacld-3.0: Use object manager to fetch vdev info
Currently host driver uses wma->interfaces to fetch vdev info. This change is to use object manager instead of wma interface to check vdev info. Change-Id: I356e002ba6b43382e96c8e2da6d433df68de603b CRs-Fixed: 3525139
This commit is contained in:

zatwierdzone przez
Rahul Choudhary

rodzic
5f79c535ac
commit
ffc2dc0ba8
@@ -1474,9 +1474,11 @@ int wma_csa_offload_handler(void *handle, uint8_t *event, uint32_t len)
|
|||||||
struct csa_offload_params *csa_offload_event;
|
struct csa_offload_params *csa_offload_event;
|
||||||
struct ieee80211_extendedchannelswitch_ie *xcsa_ie;
|
struct ieee80211_extendedchannelswitch_ie *xcsa_ie;
|
||||||
struct ieee80211_ie_wide_bw_switch *wb_ie;
|
struct ieee80211_ie_wide_bw_switch *wb_ie;
|
||||||
struct wma_txrx_node *intr = wma->interfaces;
|
struct wlan_objmgr_peer *peer;
|
||||||
|
struct wlan_objmgr_vdev *vdev;
|
||||||
QDF_STATUS status;
|
QDF_STATUS status;
|
||||||
uint8_t tlv_len;
|
uint8_t tlv_len;
|
||||||
|
struct wlan_channel *chan;
|
||||||
|
|
||||||
param_buf = (WMI_CSA_HANDLING_EVENTID_param_tlvs *) event;
|
param_buf = (WMI_CSA_HANDLING_EVENTID_param_tlvs *) event;
|
||||||
|
|
||||||
@@ -1488,20 +1490,31 @@ int wma_csa_offload_handler(void *handle, uint8_t *event, uint32_t len)
|
|||||||
csa_event = param_buf->fixed_param;
|
csa_event = param_buf->fixed_param;
|
||||||
WMI_MAC_ADDR_TO_CHAR_ARRAY(&csa_event->i_addr2, &bssid[0]);
|
WMI_MAC_ADDR_TO_CHAR_ARRAY(&csa_event->i_addr2, &bssid[0]);
|
||||||
|
|
||||||
if (wma_find_vdev_id_by_bssid(wma, bssid, &vdev_id)) {
|
peer = wlan_objmgr_get_peer_by_mac(wma->psoc,
|
||||||
wma_err("Invalid bssid received");
|
bssid, WLAN_LEGACY_WMA_ID);
|
||||||
|
if (!peer) {
|
||||||
|
wma_err("Invalid peer");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
csa_offload_event = qdf_mem_malloc(sizeof(*csa_offload_event));
|
vdev_id = wlan_vdev_get_id(wlan_peer_get_vdev(peer));
|
||||||
if (!csa_offload_event)
|
wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_WMA_ID);
|
||||||
|
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(wma->psoc,
|
||||||
|
vdev_id,
|
||||||
|
WLAN_LEGACY_WMA_ID);
|
||||||
|
if (!vdev)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (intr[vdev_id].vdev &&
|
csa_offload_event = qdf_mem_malloc(sizeof(*csa_offload_event));
|
||||||
wlan_cm_is_vdev_roaming(intr[vdev_id].vdev)) {
|
if (!csa_offload_event) {
|
||||||
|
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_WMA_ID);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
if (wlan_cm_is_vdev_roaming(vdev)) {
|
||||||
wma_err("Roaming in progress for vdev %d, ignore csa event",
|
wma_err("Roaming in progress for vdev %d, ignore csa event",
|
||||||
vdev_id);
|
vdev_id);
|
||||||
qdf_mem_free(csa_offload_event);
|
qdf_mem_free(csa_offload_event);
|
||||||
|
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_WMA_ID);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1538,6 +1551,7 @@ int wma_csa_offload_handler(void *handle, uint8_t *event, uint32_t len)
|
|||||||
} else {
|
} else {
|
||||||
wma_err("CSA Event error: No CSA IE present");
|
wma_err("CSA Event error: No CSA IE present");
|
||||||
qdf_mem_free(csa_offload_event);
|
qdf_mem_free(csa_offload_event);
|
||||||
|
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_WMA_ID);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1601,7 +1615,15 @@ got_chan:
|
|||||||
csa_offload_event->new_ch_freq_seg2,
|
csa_offload_event->new_ch_freq_seg2,
|
||||||
csa_offload_event->new_op_class);
|
csa_offload_event->new_op_class);
|
||||||
|
|
||||||
cur_chan = cds_freq_to_chan(intr[vdev_id].ch_freq);
|
chan = wlan_vdev_get_active_channel(vdev);
|
||||||
|
if (!chan) {
|
||||||
|
wmi_err("failed to get active channel");
|
||||||
|
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_WMA_ID);
|
||||||
|
qdf_mem_free(csa_offload_event);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_WMA_ID);
|
||||||
|
cur_chan = cds_freq_to_chan(chan->ch_freq);
|
||||||
/*
|
/*
|
||||||
* basic sanity check: requested channel should not be 0
|
* basic sanity check: requested channel should not be 0
|
||||||
* and equal to home channel
|
* and equal to home channel
|
||||||
|
Reference in New Issue
Block a user