mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 05:29:04 -04:00
qcacmn: Fetch the scan cmd in active list using scan ID
Loop through the active scan commands in the serialization queue and find a match based on the scan ID provided. The API wlan_serialization_get_scan_cmd_using_scan_id already exists to achieve this. Move this API to wlan_serialization_api.c so that it can be utilized by everyone as a public API. Change-Id: If7250e1c994c728cd89f5d76db0023967027f12a CRs-Fixed: 2169467
This commit is contained in:
parent
a1975e2fa7
commit
4aec1d63a8
4 changed files with 91 additions and 90 deletions
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2017 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2017-2018 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
|
|
@ -486,4 +486,25 @@ bool wlan_serialization_is_cmd_present_in_pending_queue(
|
|||
bool wlan_serialization_is_cmd_present_in_active_queue(
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
struct wlan_serialization_command *cmd);
|
||||
|
||||
/**
|
||||
* wlan_serialization_get_scan_cmd_using_scan_id() - Return command which
|
||||
* matches vdev_id and scan_id
|
||||
* @psoc: pointer to soc
|
||||
* @vdev_id: vdev id to pull vdev object
|
||||
* @scan_id: scan id to match
|
||||
* @is_scan_cmd_from_active_queue: to indicate active or pending queue
|
||||
*
|
||||
* This API fetches vdev/pdev object based on vdev_id, loops through scan
|
||||
* command queue and find the command which matches scan id as well as vdev
|
||||
* object.
|
||||
*
|
||||
* Return: pointer to serialization command
|
||||
*/
|
||||
struct wlan_serialization_command*
|
||||
wlan_serialization_get_scan_cmd_using_scan_id(
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id, uint16_t scan_id,
|
||||
uint8_t is_scan_cmd_from_active_queue);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2017 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2017-2018 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
|
|
@ -26,26 +26,6 @@
|
|||
|
||||
#include "wlan_serialization_api.h"
|
||||
|
||||
/**
|
||||
* wlan_serialization_get_scan_cmd_using_scan_id() - Return command which
|
||||
* matches vdev_id and scan_id
|
||||
* @psoc: pointer to soc
|
||||
* @vdev_id: vdev id to pull vdev object
|
||||
* @scan_id: scan id to match
|
||||
* @is_scan_cmd_from_active_queue: to indicate active or pending queue
|
||||
*
|
||||
* This API fetches vdev/pdev object based on vdev_id, loops through scan
|
||||
* command queue and find the command which matches scan id as well as vdev
|
||||
* object.
|
||||
*
|
||||
* Return: pointer to serialization command
|
||||
*/
|
||||
struct wlan_serialization_command*
|
||||
wlan_serialization_get_scan_cmd_using_scan_id(
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id, uint16_t scan_id,
|
||||
uint8_t is_scan_cmd_from_active_queue);
|
||||
|
||||
/**
|
||||
* wlan_serialization_peek_head_pending_cmd_using_psoc() - Return command from
|
||||
* scan or non-scan pending queue based on flag
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2017 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2017-2018 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
|
|
@ -314,3 +314,69 @@ wlan_serialization_pdev_scan_status(struct wlan_objmgr_pdev *pdev)
|
|||
return wlan_serialization_is_cmd_in_active_pending(
|
||||
cmd_in_active, cmd_in_pending);
|
||||
}
|
||||
|
||||
struct wlan_serialization_command*
|
||||
wlan_serialization_get_scan_cmd_using_scan_id(
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id, uint16_t scan_id,
|
||||
uint8_t is_scan_cmd_from_active_queue)
|
||||
{
|
||||
uint32_t qlen;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct wlan_objmgr_pdev *pdev;
|
||||
struct wlan_serialization_pdev_priv_obj *ser_pdev_obj;
|
||||
struct wlan_serialization_command_list *cmd_list = NULL;
|
||||
struct wlan_serialization_command *cmd = NULL;
|
||||
qdf_list_node_t *nnode = NULL;
|
||||
qdf_list_t *queue;
|
||||
|
||||
if (!psoc) {
|
||||
serialization_err("invalid psoc");
|
||||
return cmd;
|
||||
}
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
|
||||
WLAN_SERIALIZATION_ID);
|
||||
if (!vdev) {
|
||||
serialization_err("invalid vdev");
|
||||
return cmd;
|
||||
}
|
||||
|
||||
pdev = wlan_vdev_get_pdev(vdev);
|
||||
if (!pdev) {
|
||||
serialization_err("invalid pdev");
|
||||
goto release_vdev_ref;
|
||||
}
|
||||
|
||||
ser_pdev_obj = wlan_serialization_get_pdev_priv_obj(pdev);
|
||||
if (!ser_pdev_obj) {
|
||||
serialization_err("invalid ser_pdev_obj");
|
||||
goto release_vdev_ref;
|
||||
}
|
||||
if (is_scan_cmd_from_active_queue)
|
||||
queue = &ser_pdev_obj->active_scan_list;
|
||||
else
|
||||
queue = &ser_pdev_obj->pending_scan_list;
|
||||
qlen = qdf_list_size(queue);
|
||||
if (!qlen) {
|
||||
serialization_err("Empty Queue");
|
||||
goto release_vdev_ref;
|
||||
}
|
||||
while (qlen--) {
|
||||
if (QDF_STATUS_SUCCESS != wlan_serialization_get_cmd_from_queue(
|
||||
queue, &nnode)) {
|
||||
serialization_err("unsuccessful attempt");
|
||||
break;
|
||||
}
|
||||
cmd_list = qdf_container_of(nnode,
|
||||
struct wlan_serialization_command_list, node);
|
||||
if ((cmd_list->cmd.cmd_id == scan_id) &&
|
||||
(cmd_list->cmd.vdev == vdev)) {
|
||||
serialization_debug("cmd_id[%d] matched", scan_id);
|
||||
cmd = &cmd_list->cmd;
|
||||
break;
|
||||
}
|
||||
}
|
||||
release_vdev_ref:
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_SERIALIZATION_ID);
|
||||
return cmd;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2017 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2017-2018 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
|
|
@ -308,72 +308,6 @@ wlan_serialization_get_pending_list_next_node_using_psoc(
|
|||
return wlan_serialization_get_list_next_node(queue, prev_cmd);
|
||||
}
|
||||
|
||||
struct wlan_serialization_command*
|
||||
wlan_serialization_get_scan_cmd_using_scan_id(
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id, uint16_t scan_id,
|
||||
uint8_t is_scan_cmd_from_active_queue)
|
||||
{
|
||||
uint32_t qlen;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct wlan_objmgr_pdev *pdev;
|
||||
struct wlan_serialization_pdev_priv_obj *ser_pdev_obj;
|
||||
struct wlan_serialization_command_list *cmd_list = NULL;
|
||||
struct wlan_serialization_command *cmd = NULL;
|
||||
qdf_list_node_t *nnode = NULL;
|
||||
qdf_list_t *queue;
|
||||
|
||||
if (!psoc) {
|
||||
serialization_err("invalid psoc");
|
||||
return cmd;
|
||||
}
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
|
||||
WLAN_SERIALIZATION_ID);
|
||||
if (!vdev) {
|
||||
serialization_err("invalid vdev");
|
||||
return cmd;
|
||||
}
|
||||
|
||||
pdev = wlan_vdev_get_pdev(vdev);
|
||||
if (!pdev) {
|
||||
serialization_err("invalid pdev");
|
||||
goto release_vdev_ref;
|
||||
}
|
||||
|
||||
ser_pdev_obj = wlan_serialization_get_pdev_priv_obj(pdev);
|
||||
if (!ser_pdev_obj) {
|
||||
serialization_err("invalid ser_pdev_obj");
|
||||
goto release_vdev_ref;
|
||||
}
|
||||
if (is_scan_cmd_from_active_queue)
|
||||
queue = &ser_pdev_obj->active_scan_list;
|
||||
else
|
||||
queue = &ser_pdev_obj->pending_scan_list;
|
||||
qlen = qdf_list_size(queue);
|
||||
if (!qlen) {
|
||||
serialization_err("Empty Queue");
|
||||
goto release_vdev_ref;
|
||||
}
|
||||
while (qlen--) {
|
||||
if (QDF_STATUS_SUCCESS != wlan_serialization_get_cmd_from_queue(
|
||||
queue, &nnode)) {
|
||||
serialization_err("unsuccessful attempt");
|
||||
break;
|
||||
}
|
||||
cmd_list = qdf_container_of(nnode,
|
||||
struct wlan_serialization_command_list, node);
|
||||
if ((cmd_list->cmd.cmd_id == scan_id) &&
|
||||
(cmd_list->cmd.vdev == vdev)) {
|
||||
serialization_debug("cmd_id[%d] matched", scan_id);
|
||||
cmd = &cmd_list->cmd;
|
||||
break;
|
||||
}
|
||||
}
|
||||
release_vdev_ref:
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_SERIALIZATION_ID);
|
||||
return cmd;
|
||||
}
|
||||
|
||||
void wlan_serialization_legacy_init_callback(void)
|
||||
{
|
||||
ser_legacy_cb.serialization_purge_cmd_list =
|
||||
|
|
|
|||
Loading…
Reference in a new issue