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
parent e831cf3415
commit c893f06069
5 changed files with 326 additions and 11 deletions

View 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 * Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above * 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, if_mgr_ap_stop_bss_complete(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data); 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_ */

View File

@@ -38,14 +38,39 @@
QDF_STATUS if_mgr_deliver_event(struct wlan_objmgr_vdev *vdev, QDF_STATUS if_mgr_deliver_event(struct wlan_objmgr_vdev *vdev,
enum wlan_if_mgr_evt event, enum wlan_if_mgr_evt event,
struct if_mgr_event_data *event_data); 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 #else
static inline static inline
QDF_STATUS if_mgr_deliver_event(struct wlan_objmgr_vdev *vdev, QDF_STATUS if_mgr_deliver_event(struct wlan_objmgr_vdev *vdev,
enum wlan_if_mgr_evt event, enum wlan_if_mgr_evt event,
struct if_mgr_event_data *event_data) struct if_mgr_event_data *event_data)
{ {
return QDF_STATUS_SUCCESS; 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 #endif

View File

@@ -39,6 +39,14 @@
* @WLAN_IF_MGR_EV_AP_START_BSS_COMPLETE:Event to handle start bss complete * @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:Event to handle stop bss request
* @WLAN_IF_MGR_EV_AP_STOP_BSS_COMPLETE:Event to stop bss complete * @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 { enum wlan_if_mgr_evt {
WLAN_IF_MGR_EV_CONNECT_START = 0, 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_START_BSS_COMPLETE = 6,
WLAN_IF_MGR_EV_AP_STOP_BSS = 7, WLAN_IF_MGR_EV_AP_STOP_BSS = 7,
WLAN_IF_MGR_EV_AP_STOP_BSS_COMPLETE = 8, 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, * @status: qdf status used to indicate if connect,disconnect,
* start bss,stop bss event is success/failure. * start bss,stop bss event is success/failure.
* @validate_bss_info: struct to hold the validate candidate information * @validate_bss_info: struct to hold the validate candidate information
* @data: event data
*/ */
struct if_mgr_event_data { struct if_mgr_event_data {
QDF_STATUS status; QDF_STATUS status;
struct validate_bss_data validate_bss_info; struct validate_bss_data validate_bss_info;
void *data;
}; };
#endif #endif

View 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 * Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above * 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, QDF_STATUS if_mgr_disconnect_complete(struct wlan_objmgr_vdev *vdev,
struct if_mgr_event_data *event_data); 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 #endif

View 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 * Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above * 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_sta.h"
#include "wlan_if_mgr_ap.h" #include "wlan_if_mgr_ap.h"
#include "wlan_if_mgr_main.h" #include "wlan_if_mgr_main.h"
#if !defined WLAN_MBSS
#include "wlan_if_mgr_roam.h" #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, QDF_STATUS if_mgr_deliver_event(struct wlan_objmgr_vdev *vdev,
enum wlan_if_mgr_evt event, enum wlan_if_mgr_evt event,
@@ -35,7 +122,8 @@ QDF_STATUS if_mgr_deliver_event(struct wlan_objmgr_vdev *vdev,
if (!psoc) if (!psoc)
return QDF_STATUS_E_FAILURE; 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) { switch (event) {
case WLAN_IF_MGR_EV_CONNECT_START: 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); status = if_mgr_validate_candidate(vdev, event_data);
break; break;
default: default:
status = QDF_STATUS_E_INVAL; status = if_mgr_deliver_mbss_event(vdev, event, event_data);
ifmgr_err("Invalid event");
break;
} }
return status; return status;