qcacmn: Introduce new api to disable the vdev serialization queue

MCL presently sends the vdev delete to firmware via serialization,
with a new requirement vdev delete cannot be sent via serialization.
So, disable the serialization for the vdev before sending the vdev
delete to firmware.

Change-Id: Ieffccaf815eff7627d39b0191a7be121e85965fd
CRs-Fixed: 2566113
This commit is contained in:
Arun Kumar Khandavalli
2019-11-13 17:51:03 +05:30
کامیت شده توسط nshrivas
والد a95ba1312a
کامیت 5377f457a1
2فایلهای تغییر یافته به همراه54 افزوده شده و 0 حذف شده

مشاهده پرونده

@@ -701,4 +701,14 @@ void wlan_serialization_purge_all_pending_cmd_by_vdev_id(
void wlan_serialization_purge_all_scan_cmd_by_vdev_id(
struct wlan_objmgr_pdev *pdev,
uint8_t vdev_id);
/**
* wlan_ser_vdev_queue_disable -Disable vdev specific serialization queue
* @vdev: Vdev Object
*
* This function disables the serialization for the vdev queue
*
* Return: QDF_STATUS
*/
QDF_STATUS wlan_ser_vdev_queue_disable(struct wlan_objmgr_vdev *vdev);
#endif

مشاهده پرونده

@@ -910,3 +910,47 @@ void wlan_serialization_purge_all_scan_cmd_by_vdev_id(
wlan_objmgr_vdev_release_ref(vdev, WLAN_SERIALIZATION_ID);
}
QDF_STATUS wlan_ser_vdev_queue_disable(struct wlan_objmgr_vdev *vdev)
{
struct wlan_objmgr_pdev *pdev;
struct wlan_ser_vdev_obj *ser_vdev_obj;
struct wlan_serialization_vdev_queue *vdev_queue;
struct wlan_ser_pdev_obj *ser_pdev_obj;
struct wlan_serialization_pdev_queue *pdev_q;
pdev = wlan_vdev_get_pdev(vdev);
if (!pdev) {
ser_err("invalid PDEV object");
return QDF_STATUS_E_INVAL;
}
ser_pdev_obj = wlan_serialization_get_pdev_obj(pdev);
if (!ser_pdev_obj) {
ser_err("invalid ser_pdev_obj");
return QDF_STATUS_E_INVAL;
}
ser_vdev_obj = wlan_serialization_get_vdev_obj(vdev);
if (!ser_vdev_obj) {
ser_err("invalid ser_vdev_obj");
return QDF_STATUS_E_INVAL;
}
pdev_q = &ser_pdev_obj->pdev_q[SER_PDEV_QUEUE_COMP_NON_SCAN];
vdev_queue = wlan_serialization_get_vdev_queue_obj(
ser_vdev_obj, WLAN_SER_CMD_NONSCAN);
if (!vdev_queue) {
ser_err("invalid vdev_queue object");
return QDF_STATUS_E_INVAL;
}
wlan_serialization_acquire_lock(&pdev_q->pdev_queue_lock);
vdev_queue->queue_disable = true;
wlan_serialization_release_lock(&pdev_q->pdev_queue_lock);
ser_info("Disabling the serialization for vdev:%d",
wlan_vdev_get_id(vdev));
return QDF_STATUS_SUCCESS;
}