qcacmn: Add an API to get peer using mac from vdev

Add an API that iterates through the peer_list of a vdev
and gets peer using peer mac address.

Change-Id: I9b7edd3816a51ee89d68be4cc876155fa1a79049
This commit is contained in:
Pavankumar Nandeshwar
2019-10-07 18:51:16 +05:30
committed by nshrivas
父節點 796d538394
當前提交 0336eb937e
共有 2 個文件被更改,包括 71 次插入2 次删除

查看文件

@@ -1155,6 +1155,22 @@ static inline struct wlan_objmgr_peer *wlan_vdev_get_bsspeer(
return vdev->vdev_objmgr.bss_peer;
}
/**
* wlan_objmgr_vdev_find_peer_by_mac() - get a peer with given mac from vdev
* @vdev: VDEV object
* @peer_mac: mac address of the peer to be found
* @dbg_id: dbg_id of the module
*
* API to get and increment ref count of BSS peer of VDEV
*
* Return:
* @peer: peer pointer to the peer of the mac address
*/
struct wlan_objmgr_peer *
wlan_objmgr_vdev_find_peer_by_mac(struct wlan_objmgr_vdev *vdev,
uint8_t *peer_mac,
wlan_objmgr_ref_dbgid dbg_id);
/**
* wlan_objmgr_vdev_try_get_bsspeer() - get and increment ref count of BSS peer
* of VDEV

查看文件

@@ -504,8 +504,8 @@ QDF_STATUS wlan_objmgr_iterate_peerobj_list(
if (vdev->obj_state != WLAN_OBJ_STATE_CREATED) {
wlan_vdev_obj_unlock(vdev);
obj_mgr_err("VDEV is not in create state(:%d): vdev-id:%d",
vdev_id, vdev->obj_state);
obj_mgr_err("VDEV is not in create state:%d: vdev-id:%d",
vdev->obj_state, vdev_id);
return QDF_STATUS_E_FAILURE;
}
wlan_objmgr_vdev_get_ref(vdev, dbg_id);
@@ -530,6 +530,59 @@ QDF_STATUS wlan_objmgr_iterate_peerobj_list(
return QDF_STATUS_SUCCESS;
}
/**
** APIs to get a peer with given mac in a vdev
*/
struct wlan_objmgr_peer *
wlan_objmgr_vdev_find_peer_by_mac(struct wlan_objmgr_vdev *vdev,
uint8_t *peer_mac,
wlan_objmgr_ref_dbgid dbg_id)
{
qdf_list_t *peer_list;
struct wlan_objmgr_peer *peer = NULL;
struct wlan_objmgr_peer *peer_next = NULL;
uint8_t vdev_id;
if (!vdev) {
obj_mgr_err("VDEV is NULL");
return NULL;
}
wlan_vdev_obj_lock(vdev);
vdev_id = wlan_vdev_get_id(vdev);
if (vdev->obj_state != WLAN_OBJ_STATE_CREATED) {
wlan_vdev_obj_unlock(vdev);
obj_mgr_err("VDEV is not in create state:%d: vdev-id:%d",
vdev->obj_state, vdev_id);
return NULL;
}
wlan_objmgr_vdev_get_ref(vdev, dbg_id);
peer_list = &vdev->vdev_objmgr.wlan_peer_list;
/* Iterate through VDEV's peer list */
peer = wlan_vdev_peer_list_peek_head(peer_list);
while (peer) {
peer_next = wlan_peer_get_next_peer_of_vdev(peer_list,
peer);
if (wlan_objmgr_peer_try_get_ref(peer, dbg_id) ==
QDF_STATUS_SUCCESS) {
if (!WLAN_ADDR_EQ(peer_mac,
wlan_peer_get_macaddr(peer))) {
wlan_objmgr_vdev_release_ref(vdev,
dbg_id);
wlan_vdev_obj_unlock(vdev);
return peer;
}
wlan_objmgr_peer_release_ref(peer, dbg_id);
}
peer = peer_next;
}
wlan_objmgr_vdev_release_ref(vdev, dbg_id);
wlan_vdev_obj_unlock(vdev);
return NULL;
}
qdf_export_symbol(wlan_objmgr_vdev_find_peer_by_mac);
/**
* wlan_obj_vdev_populate_logically_del_peerlist() - get peer
* from vdev peer list