qcacmn: Add new events to the interface manager

Add new events to the interfaces manager for the
following which requires inter vdev co-ordination
	1. ACS
	2. HT40 scan
These event are sent to the MBSS frameworkfor inter VDEV
co-ordination.

Add a string array ro represent interface manage events.
Add API to retrieve string from interface manager events.

Change-Id: I397621a432da70156e34f46f75fd6c0e8d0a7b53
CRs-Fixed: 2963147
This commit is contained in:
Vivek
2021-07-20 22:23:11 +05:30
committed by Madan Koyyalamudi
orang tua e831cf3415
melakukan c893f06069
5 mengubah file dengan 326 tambahan dan 11 penghapusan

Melihat File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2020-2021, 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 above
@@ -81,4 +81,175 @@ QDF_STATUS
if_mgr_ap_stop_bss_complete(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data);
#endif
#if defined WLAN_MBSS
/**
* if_mgr_ap_start_acs() - ACS start event handler
* @vdev: vdev object
* @event_data: Interface mgr event data
*
* This function handles the ACS start event for interface
* manager
*
* Context: It can run in process/tasklet context
*
* Return: QDF_STATUS
*/
QDF_STATUS if_mgr_ap_start_acs(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data);
/**
* if_mgr_ap_stop_acs() - ACS stop event handler
* @vdev: vdev object
* @event_data: Interface mgr event data
*
* This function handles the ACS stop event for interface
* manager
*
* Context: It can run in process/tasklet context
*
* Return: QDF_STATUS
*/
QDF_STATUS if_mgr_ap_stop_acs(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data);
/**
* if_mgr_ap_done_acs() - ACS done event handler
* @vdev: vdev object
* @event_data: Interface mgr event data
*
* This function handles the ACS stop event for interface
* manager
*
* Context: It can run in process/tasklet context
*
* Return: QDF_STATUS
*/
QDF_STATUS if_mgr_ap_done_acs(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data);
/**
* if_mgr_ap_cancel_acs() - ACS cancel event handler
* @vdev: vdev object
* @event_data: Interface mgr event data
*
* This function handles the ACS cancel event for interface
* manager
*
* Context: It can run in process/tasklet context
*
* Return: QDF_STATUS
*/
QDF_STATUS if_mgr_ap_cancel_acs(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data);
/**
* if_mgr_ap_start_ht40() - HT40 scan start event handler
* @vdev: vdev object
* @event_data: Interface mgr event data
*
* This function handles the HT40 scan start event for interface
* manager
*
* Context: It can run in process/tasklet context
*
* Return: QDF_STATUS
*/
QDF_STATUS if_mgr_ap_start_ht40(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data);
/**
* if_mgr_ap_stop_ht40() - HT40 scan stop event handler
* @vdev: vdev object
* @event_data: Interface mgr event data
*
* This function handles the HT40 scan stop event for interface
* manager
*
* Context: It can run in process/tasklet context
*
* Return: QDF_STATUS
*/
QDF_STATUS if_mgr_ap_stop_ht40(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data);
/**
* if_mgr_ap_done_ht40() - HT40 scan done event handler
* @vdev: vdev object
* @event_data: Interface mgr event data
*
* This function handles the HT40 scan done event for interface
* manager
*
* Context: It can run in process/tasklet context
*
* Return: QDF_STATUS
*/
QDF_STATUS if_mgr_ap_done_ht40(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data);
/**
* if_mgr_ap_cancel_ht40() - HT40 scan cancel event handler
* @vdev: vdev object
* @event_data: Interface mgr event data
*
* This function handles the HT40 scan cancel event for interface
* manager
*
* Context: It can run in process/tasklet context
*
* Return: QDF_STATUS
*/
QDF_STATUS if_mgr_ap_cancel_ht40(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data);
#else
static inline QDF_STATUS
if_mgr_ap_start_acs(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data)
{
return QDF_STATUS_SUCCESS;
}
static inline QDF_STATUS
if_mgr_ap_stop_acs(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data)
{
return QDF_STATUS_SUCCESS;
}
static inline QDF_STATUS
if_mgr_ap_cancel_acs(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data)
{
return QDF_STATUS_SUCCESS;
}
static inline QDF_STATUS
if_mgr_ap_start_ht40(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data)
{
return QDF_STATUS_SUCCESS;
}
static inline QDF_STATUS
if_mgr_ap_stop_ht40(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data)
{
return QDF_STATUS_SUCCESS;
}
static inline QDF_STATUS
if_mgr_ap_done_ht40(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data)
{
return QDF_STATUS_SUCCESS;
}
static inline QDF_STATUS
if_mgr_ap_cancel_ht40(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data)
{
return QDF_STATUS_SUCCESS;
}
#endif /* WLAN_MBSS */
#endif /* _WLAN_IF_MGR_AP_H_ */

Melihat File

@@ -38,14 +38,39 @@
QDF_STATUS if_mgr_deliver_event(struct wlan_objmgr_vdev *vdev,
enum wlan_if_mgr_evt event,
struct if_mgr_event_data *event_data);
/**
* if_mgr_get_event_str() - get event string
* @event: interface manager event
*
* Return: Interface event string
*/
const char *if_mgr_get_event_str(enum wlan_if_mgr_evt event);
/**
* if_mgr_deliver_mbss_event() - interface mgr MBSS event handler
* @vdev: vdev object
* @event: interface mangaer event
* @event_data: Interface mgr event data
*
* Return: QDF_STATUS
*/
QDF_STATUS if_mgr_deliver_mbss_event(struct wlan_objmgr_vdev *vdev,
enum wlan_if_mgr_evt event,
struct if_mgr_event_data *event_data);
#else
static inline
QDF_STATUS if_mgr_deliver_event(struct wlan_objmgr_vdev *vdev,
enum wlan_if_mgr_evt event,
struct if_mgr_event_data *event_data)
{
return QDF_STATUS_SUCCESS;
}
#endif
static inline const char *if_mgr_get_event_str(enum wlan_if_mgr_evt event)
{
return "";
}
#endif /* WLAN_FEATURE_INTERFACE_MGR */
#endif

Melihat File

@@ -39,6 +39,14 @@
* @WLAN_IF_MGR_EV_AP_START_BSS_COMPLETE:Event to handle start bss complete
* @WLAN_IF_MGR_EV_AP_STOP_BSS:Event to handle stop bss request
* @WLAN_IF_MGR_EV_AP_STOP_BSS_COMPLETE:Event to stop bss complete
* WLAN_IF_MGR_EV_AP_START_ACS: Event to handle ACS start
* WLAN_IF_MGR_EV_AP_STOP_ACS: Event to handle ACS stop
* WLAN_IF_MGR_EV_AP_DONE_ACS: Event to handle ACS completion
* WLAN_IF_MGR_EV_AP_CANCEL_ACS: Event to handle ACS cancel
* WLAN_IF_MGR_EV_AP_START_HT40: Event to handle HT40 scan start
* WLAN_IF_MGR_EV_AP_STOP_HT40: Event to handle HT40 scan stop
* WLAN_IF_MGR_EV_AP_DONE_HT40: Event to handle HT40 scan completion
* WLAN_IF_MGR_EV_AP_CANCEL_HT40: Event to handle HT40 scan cancel
*/
enum wlan_if_mgr_evt {
WLAN_IF_MGR_EV_CONNECT_START = 0,
@@ -50,7 +58,15 @@ enum wlan_if_mgr_evt {
WLAN_IF_MGR_EV_AP_START_BSS_COMPLETE = 6,
WLAN_IF_MGR_EV_AP_STOP_BSS = 7,
WLAN_IF_MGR_EV_AP_STOP_BSS_COMPLETE = 8,
WLAN_IF_MGR_EV_MAX = 9,
WLAN_IF_MGR_EV_AP_START_ACS = 9,
WLAN_IF_MGR_EV_AP_STOP_ACS = 10,
WLAN_IF_MGR_EV_AP_DONE_ACS = 11,
WLAN_IF_MGR_EV_AP_CANCEL_ACS = 12,
WLAN_IF_MGR_EV_AP_START_HT40 = 13,
WLAN_IF_MGR_EV_AP_STOP_HT40 = 14,
WLAN_IF_MGR_EV_AP_DONE_HT40 = 15,
WLAN_IF_MGR_EV_AP_CANCEL_HT40 = 16,
WLAN_IF_MGR_EV_MAX = 17,
};
/**
@@ -70,10 +86,12 @@ struct validate_bss_data {
* @status: qdf status used to indicate if connect,disconnect,
* start bss,stop bss event is success/failure.
* @validate_bss_info: struct to hold the validate candidate information
* @data: event data
*/
struct if_mgr_event_data {
QDF_STATUS status;
struct validate_bss_data validate_bss_info;
void *data;
};
#endif

Melihat File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2020-2021, 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 above
@@ -78,4 +78,19 @@ QDF_STATUS if_mgr_disconnect_start(struct wlan_objmgr_vdev *vdev,
QDF_STATUS if_mgr_disconnect_complete(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data);
/**
* if_mgr_validate_candidate() - Validate the selected candidate
* @vdev: vdev object
* @event_data: Interface mgr event data
*
* This function handles candidate validation as part of connection
* manager
*
* Context: It should run in thread context
*
* Return: QDF_STATUS
*/
QDF_STATUS if_mgr_validate_candidate(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data);
#endif

Melihat File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2020-2021, 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 above
@@ -22,7 +22,94 @@
#include "wlan_if_mgr_sta.h"
#include "wlan_if_mgr_ap.h"
#include "wlan_if_mgr_main.h"
#if !defined WLAN_MBSS
#include "wlan_if_mgr_roam.h"
#endif
const char *if_mgr_get_event_str(enum wlan_if_mgr_evt event)
{
if (event > WLAN_IF_MGR_EV_MAX)
return "";
switch (event) {
CASE_RETURN_STRING(WLAN_IF_MGR_EV_CONNECT_START);
CASE_RETURN_STRING(WLAN_IF_MGR_EV_CONNECT_COMPLETE);
CASE_RETURN_STRING(WLAN_IF_MGR_EV_DISCONNECT_START);
CASE_RETURN_STRING(WLAN_IF_MGR_EV_DISCONNECT_COMPLETE);
CASE_RETURN_STRING(WLAN_IF_MGR_EV_VALIDATE_CANDIDATE);
CASE_RETURN_STRING(WLAN_IF_MGR_EV_AP_START_BSS);
CASE_RETURN_STRING(WLAN_IF_MGR_EV_AP_START_BSS_COMPLETE);
CASE_RETURN_STRING(WLAN_IF_MGR_EV_AP_STOP_BSS);
CASE_RETURN_STRING(WLAN_IF_MGR_EV_AP_STOP_BSS_COMPLETE);
CASE_RETURN_STRING(WLAN_IF_MGR_EV_AP_START_ACS);
CASE_RETURN_STRING(WLAN_IF_MGR_EV_AP_STOP_ACS);
CASE_RETURN_STRING(WLAN_IF_MGR_EV_AP_DONE_ACS);
CASE_RETURN_STRING(WLAN_IF_MGR_EV_AP_CANCEL_ACS);
CASE_RETURN_STRING(WLAN_IF_MGR_EV_AP_START_HT40);
CASE_RETURN_STRING(WLAN_IF_MGR_EV_AP_STOP_HT40);
CASE_RETURN_STRING(WLAN_IF_MGR_EV_AP_DONE_HT40);
CASE_RETURN_STRING(WLAN_IF_MGR_EV_AP_CANCEL_HT40);
default:
return "Unknown";
}
}
#if defined WLAN_MBSS
QDF_STATUS if_mgr_deliver_mbss_event(struct wlan_objmgr_vdev *vdev,
enum wlan_if_mgr_evt event,
struct if_mgr_event_data *event_data)
{
QDF_STATUS status;
switch (event) {
case WLAN_IF_MGR_EV_AP_START_ACS:
status = if_mgr_ap_start_acs(vdev, event_data);
break;
case WLAN_IF_MGR_EV_AP_STOP_ACS:
status = if_mgr_ap_stop_acs(vdev, event_data);
break;
case WLAN_IF_MGR_EV_AP_CANCEL_ACS:
status = if_mgr_ap_cancel_acs(vdev, event_data);
break;
case WLAN_IF_MGR_EV_AP_DONE_ACS:
status = if_mgr_ap_done_acs(vdev, event_data);
break;
case WLAN_IF_MGR_EV_AP_START_HT40:
status = if_mgr_ap_start_ht40(vdev, event_data);
break;
case WLAN_IF_MGR_EV_AP_STOP_HT40:
status = if_mgr_ap_stop_ht40(vdev, event_data);
break;
case WLAN_IF_MGR_EV_AP_DONE_HT40:
status = if_mgr_ap_done_ht40(vdev, event_data);
break;
case WLAN_IF_MGR_EV_AP_CANCEL_HT40:
status = if_mgr_ap_cancel_ht40(vdev, event_data);
break;
default:
status = QDF_STATUS_E_INVAL;
ifmgr_err("Invalid event");
break;
}
return status;
}
#else
QDF_STATUS if_mgr_deliver_mbss_event(struct wlan_objmgr_vdev *vdev,
enum wlan_if_mgr_evt event,
struct if_mgr_event_data *event_data)
{
QDF_STATUS status;
switch (event) {
default:
status = QDF_STATUS_E_INVAL;
ifmgr_err("Invalid event");
break;
}
return status;
}
#endif
QDF_STATUS if_mgr_deliver_event(struct wlan_objmgr_vdev *vdev,
enum wlan_if_mgr_evt event,
@@ -35,7 +122,8 @@ QDF_STATUS if_mgr_deliver_event(struct wlan_objmgr_vdev *vdev,
if (!psoc)
return QDF_STATUS_E_FAILURE;
ifmgr_debug("IF MGR event received: %d", event);
ifmgr_debug("IF MGR event received: %s(%d)",
if_mgr_get_event_str(event), event);
switch (event) {
case WLAN_IF_MGR_EV_CONNECT_START:
@@ -66,9 +154,7 @@ QDF_STATUS if_mgr_deliver_event(struct wlan_objmgr_vdev *vdev,
status = if_mgr_validate_candidate(vdev, event_data);
break;
default:
status = QDF_STATUS_E_INVAL;
ifmgr_err("Invalid event");
break;
status = if_mgr_deliver_mbss_event(vdev, event, event_data);
}
return status;