qcacmn: Add MCC Quota event handler
Handle WMI event WMI_RESMGR_CHAN_TIME_QUOTA_CHANGED_EVENTID and indicate to protocol layer. Change-Id: Ie842998ed50a52351dd24857c0565c535a2edca1 CRs-Fixed: 3101765
This commit is contained in:

committed by
Madan Koyyalamudi

parent
8d0d85c7e4
commit
29ffc29223
@@ -551,6 +551,7 @@ struct p2p_set_mac_filter;
|
|||||||
* @reg_mac_addr_rx_filter_handler: function pointer to register/unregister
|
* @reg_mac_addr_rx_filter_handler: function pointer to register/unregister
|
||||||
* set mac addr status event callback.
|
* set mac addr status event callback.
|
||||||
* @set_mac_addr_rx_filter_cmd: function pointer to set mac addr rx filter
|
* @set_mac_addr_rx_filter_cmd: function pointer to set mac addr rx filter
|
||||||
|
* @reg_mcc_quota_ev_handler: function to register mcc_quota event handler
|
||||||
*/
|
*/
|
||||||
struct wlan_lmac_if_p2p_tx_ops {
|
struct wlan_lmac_if_p2p_tx_ops {
|
||||||
QDF_STATUS (*set_ps)(struct wlan_objmgr_psoc *psoc,
|
QDF_STATUS (*set_ps)(struct wlan_objmgr_psoc *psoc,
|
||||||
@@ -576,6 +577,10 @@ struct wlan_lmac_if_p2p_tx_ops {
|
|||||||
QDF_STATUS (*set_mac_addr_rx_filter_cmd)(
|
QDF_STATUS (*set_mac_addr_rx_filter_cmd)(
|
||||||
struct wlan_objmgr_psoc *psoc,
|
struct wlan_objmgr_psoc *psoc,
|
||||||
struct p2p_set_mac_filter *param);
|
struct p2p_set_mac_filter *param);
|
||||||
|
#ifdef WLAN_FEATURE_MCC_QUOTA
|
||||||
|
QDF_STATUS (*reg_mcc_quota_ev_handler)(struct wlan_objmgr_psoc *psoc,
|
||||||
|
bool reg);
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -1598,6 +1603,7 @@ struct wlan_lmac_if_reg_rx_ops {
|
|||||||
struct p2p_noa_info;
|
struct p2p_noa_info;
|
||||||
struct p2p_lo_event;
|
struct p2p_lo_event;
|
||||||
struct p2p_set_mac_filter_evt;
|
struct p2p_set_mac_filter_evt;
|
||||||
|
struct mcc_quota_info;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct wlan_lmac_if_p2p_rx_ops - structure of rx function pointers
|
* struct wlan_lmac_if_p2p_rx_ops - structure of rx function pointers
|
||||||
@@ -1606,6 +1612,7 @@ struct p2p_set_mac_filter_evt;
|
|||||||
* @noa_ev_handler: function pointer to give noa event
|
* @noa_ev_handler: function pointer to give noa event
|
||||||
* @add_mac_addr_filter_evt_handler: function pointer to process add mac addr
|
* @add_mac_addr_filter_evt_handler: function pointer to process add mac addr
|
||||||
* rx filter event
|
* rx filter event
|
||||||
|
* @mcc_quota_ev_handler: function pointer to receive mcc quota event
|
||||||
*/
|
*/
|
||||||
struct wlan_lmac_if_p2p_rx_ops {
|
struct wlan_lmac_if_p2p_rx_ops {
|
||||||
#ifdef FEATURE_P2P_LISTEN_OFFLOAD
|
#ifdef FEATURE_P2P_LISTEN_OFFLOAD
|
||||||
@@ -1617,7 +1624,10 @@ struct wlan_lmac_if_p2p_rx_ops {
|
|||||||
QDF_STATUS (*add_mac_addr_filter_evt_handler)(
|
QDF_STATUS (*add_mac_addr_filter_evt_handler)(
|
||||||
struct wlan_objmgr_psoc *psoc,
|
struct wlan_objmgr_psoc *psoc,
|
||||||
struct p2p_set_mac_filter_evt *event_info);
|
struct p2p_set_mac_filter_evt *event_info);
|
||||||
|
#ifdef WLAN_FEATURE_MCC_QUOTA
|
||||||
|
QDF_STATUS (*mcc_quota_ev_handler)(struct wlan_objmgr_psoc *psoc,
|
||||||
|
struct mcc_quota_info *event_info);
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -459,24 +459,41 @@ static void wlan_lmac_if_umac_reg_rx_ops_register(
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONVERGED_P2P_ENABLE
|
#ifdef CONVERGED_P2P_ENABLE
|
||||||
#ifdef FEATURE_P2P_LISTEN_OFFLOAD
|
#ifdef WLAN_FEATURE_MCC_QUOTA
|
||||||
static void wlan_lmac_if_umac_rx_ops_register_p2p(
|
static inline void
|
||||||
struct wlan_lmac_if_rx_ops *rx_ops)
|
wlan_lmac_if_umac_rx_ops_register_p2p_mcc_quota(struct wlan_lmac_if_rx_ops *rx_ops)
|
||||||
{
|
{
|
||||||
rx_ops->p2p.lo_ev_handler = tgt_p2p_lo_event_cb;
|
rx_ops->p2p.mcc_quota_ev_handler = tgt_p2p_mcc_quota_event_cb;
|
||||||
rx_ops->p2p.noa_ev_handler = tgt_p2p_noa_event_cb;
|
|
||||||
rx_ops->p2p.add_mac_addr_filter_evt_handler =
|
|
||||||
tgt_p2p_add_mac_addr_status_event_cb;
|
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
static inline void wlan_lmac_if_umac_rx_ops_register_p2p_mcc_quota(
|
||||||
|
struct wlan_lmac_if_rx_ops *rx_ops)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef FEATURE_P2P_LISTEN_OFFLOAD
|
||||||
|
static inline void
|
||||||
|
wlan_lmac_if_umac_rx_ops_register_p2p_listen_offload(struct wlan_lmac_if_rx_ops *rx_ops)
|
||||||
|
{
|
||||||
|
rx_ops->p2p.lo_ev_handler = tgt_p2p_lo_event_cb;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline void
|
||||||
|
wlan_lmac_if_umac_rx_ops_register_p2p_listen_offload(struct wlan_lmac_if_rx_ops *rx_ops)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void wlan_lmac_if_umac_rx_ops_register_p2p(
|
static void wlan_lmac_if_umac_rx_ops_register_p2p(
|
||||||
struct wlan_lmac_if_rx_ops *rx_ops)
|
struct wlan_lmac_if_rx_ops *rx_ops)
|
||||||
{
|
{
|
||||||
|
wlan_lmac_if_umac_rx_ops_register_p2p_listen_offload(rx_ops);
|
||||||
rx_ops->p2p.noa_ev_handler = tgt_p2p_noa_event_cb;
|
rx_ops->p2p.noa_ev_handler = tgt_p2p_noa_event_cb;
|
||||||
rx_ops->p2p.add_mac_addr_filter_evt_handler =
|
rx_ops->p2p.add_mac_addr_filter_evt_handler =
|
||||||
tgt_p2p_add_mac_addr_status_event_cb;
|
tgt_p2p_add_mac_addr_status_event_cb;
|
||||||
|
wlan_lmac_if_umac_rx_ops_register_p2p_mcc_quota(rx_ops);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
#else
|
#else
|
||||||
static void wlan_lmac_if_umac_rx_ops_register_p2p(
|
static void wlan_lmac_if_umac_rx_ops_register_p2p(
|
||||||
struct wlan_lmac_if_rx_ops *rx_ops)
|
struct wlan_lmac_if_rx_ops *rx_ops)
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2013-2019 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2013-2019 The Linux Foundation. All rights reserved.
|
||||||
|
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -36,6 +37,20 @@ QDF_STATUS wmi_unified_set_mcc_channel_time_quota_cmd(
|
|||||||
uint32_t adapter_1_chan_freq,
|
uint32_t adapter_1_chan_freq,
|
||||||
uint32_t adapter_1_quota, uint32_t adapter_2_chan_freq);
|
uint32_t adapter_1_quota, uint32_t adapter_2_chan_freq);
|
||||||
|
|
||||||
|
#ifdef WLAN_FEATURE_MCC_QUOTA
|
||||||
|
/**
|
||||||
|
* wmi_extract_mcc_quota_ev_param() - extract mcc_quota param from wmi event
|
||||||
|
* @wmi_handle: wmi handle
|
||||||
|
* @evt_buf: pointer to event buffer
|
||||||
|
* @param: Pointer to hold mcc_quota param
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS_SUCCESS on success or error code
|
||||||
|
*/
|
||||||
|
QDF_STATUS wmi_extract_mcc_quota_ev_param(wmi_unified_t wmi_handle,
|
||||||
|
void *evt_buf,
|
||||||
|
struct mcc_quota_info *param);
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* wmi_unified_set_mcc_channel_time_latency_cmd() - set MCC channel time latency
|
* wmi_unified_set_mcc_channel_time_latency_cmd() - set MCC channel time latency
|
||||||
* @wmi_handle: wmi handle
|
* @wmi_handle: wmi handle
|
||||||
|
@@ -4894,6 +4894,9 @@ typedef enum {
|
|||||||
#endif
|
#endif
|
||||||
#ifdef WLAN_FEATURE_11BE_MLO
|
#ifdef WLAN_FEATURE_11BE_MLO
|
||||||
wmi_vdev_quiet_offload_eventid,
|
wmi_vdev_quiet_offload_eventid,
|
||||||
|
#endif
|
||||||
|
#ifdef WLAN_FEATURE_MCC_QUOTA
|
||||||
|
wmi_resmgr_chan_time_quota_changed_eventid,
|
||||||
#endif
|
#endif
|
||||||
wmi_events_max,
|
wmi_events_max,
|
||||||
} wmi_conv_event_id;
|
} wmi_conv_event_id;
|
||||||
|
@@ -720,6 +720,12 @@ QDF_STATUS (*send_set_mcc_channel_time_latency_cmd)
|
|||||||
QDF_STATUS (*send_set_enable_disable_mcc_adaptive_scheduler_cmd)(
|
QDF_STATUS (*send_set_enable_disable_mcc_adaptive_scheduler_cmd)(
|
||||||
wmi_unified_t wmi_handle, uint32_t mcc_adaptive_scheduler,
|
wmi_unified_t wmi_handle, uint32_t mcc_adaptive_scheduler,
|
||||||
uint32_t pdev_id);
|
uint32_t pdev_id);
|
||||||
|
|
||||||
|
#ifdef WLAN_FEATURE_MCC_QUOTA
|
||||||
|
QDF_STATUS (*extract_mcc_quota_ev_param)(wmi_unified_t wmi_handle,
|
||||||
|
void *evt_buf,
|
||||||
|
struct mcc_quota_info *param);
|
||||||
|
#endif
|
||||||
#endif /* WMI_CONCURRENCY_SUPPORT */
|
#endif /* WMI_CONCURRENCY_SUPPORT */
|
||||||
|
|
||||||
QDF_STATUS (*send_p2p_go_set_beacon_ie_cmd)(wmi_unified_t wmi_handle,
|
QDF_STATUS (*send_p2p_go_set_beacon_ie_cmd)(wmi_unified_t wmi_handle,
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2013-2019 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2013-2019 The Linux Foundation. All rights reserved.
|
||||||
|
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -59,3 +60,20 @@ QDF_STATUS wmi_unified_set_mcc_channel_time_quota_cmd(
|
|||||||
return QDF_STATUS_E_FAILURE;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WLAN_FEATURE_MCC_QUOTA
|
||||||
|
QDF_STATUS wmi_extract_mcc_quota_ev_param(wmi_unified_t wmi_handle,
|
||||||
|
void *evt_buf,
|
||||||
|
struct mcc_quota_info *param)
|
||||||
|
{
|
||||||
|
if (!wmi_handle) {
|
||||||
|
wmi_err("wmi handle is null");
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wmi_handle->ops->extract_mcc_quota_ev_param)
|
||||||
|
return wmi_handle->ops->extract_mcc_quota_ev_param(
|
||||||
|
wmi_handle, evt_buf, param);
|
||||||
|
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2013-2020 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2013-2020 The Linux Foundation. All rights reserved.
|
||||||
|
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -228,6 +229,101 @@ static QDF_STATUS send_set_mcc_channel_time_quota_cmd_tlv(
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WLAN_FEATURE_MCC_QUOTA
|
||||||
|
/**
|
||||||
|
* convert_to_host_quota_type() - convert wmi quota type to host quota type
|
||||||
|
* @quota_type: wmi target quota type
|
||||||
|
*
|
||||||
|
* Return: enum mcc_quota_type
|
||||||
|
*/
|
||||||
|
static enum mcc_quota_type convert_to_host_quota_type(uint32_t quota_type)
|
||||||
|
{
|
||||||
|
switch (quota_type) {
|
||||||
|
case WMI_RESMGR_QUOTA_TYPE_CLEAR:
|
||||||
|
return QUOTA_TYPE_CLEAR;
|
||||||
|
case WMI_RESMGR_QUOTA_TYPE_FIXED:
|
||||||
|
return QUOTA_TYPE_FIXED;
|
||||||
|
case WMI_RESMGR_QUOTA_TYPE_DYNAMIC:
|
||||||
|
return QUOTA_TYPE_DYNAMIC;
|
||||||
|
default:
|
||||||
|
wmi_err("mcc quota unknown quota type %d", quota_type);
|
||||||
|
return QUOTA_TYPE_UNKNOWN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* extract_mcc_quota_ev_param_tlv() - extract mcc quota information from wmi
|
||||||
|
* event
|
||||||
|
* @wmi_handle: wmi handle
|
||||||
|
* @param evt_buf: pointer to event buffer
|
||||||
|
* @param param: Pointer to hold mcc quota info
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS_SUCCESS for success or error code
|
||||||
|
*/
|
||||||
|
static QDF_STATUS
|
||||||
|
extract_mcc_quota_ev_param_tlv(wmi_unified_t wmi_handle,
|
||||||
|
void *evt_buf, struct mcc_quota_info *param)
|
||||||
|
{
|
||||||
|
WMI_RESMGR_CHAN_TIME_QUOTA_CHANGED_EVENTID_param_tlvs *param_tlvs;
|
||||||
|
wmi_resmgr_chan_time_quota_changed_event_fixed_param *fixed_param;
|
||||||
|
uint8_t i;
|
||||||
|
wmi_resmgr_chan_time_quota_tlv *wmi_mcc_quota_info;
|
||||||
|
|
||||||
|
if (!param) {
|
||||||
|
wmi_err("mcc quota information param is null");
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
param_tlvs = evt_buf;
|
||||||
|
if (!param_tlvs || !param_tlvs->fixed_param) {
|
||||||
|
wmi_err("Invalid mcc quota event buffer");
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
fixed_param = param_tlvs->fixed_param;
|
||||||
|
|
||||||
|
wmi_debug("mcc quota type %d, num %d",
|
||||||
|
fixed_param->quota_type, param_tlvs->num_chan_quota);
|
||||||
|
|
||||||
|
param->type = convert_to_host_quota_type(fixed_param->quota_type);
|
||||||
|
if (param->type == QUOTA_TYPE_UNKNOWN)
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
|
||||||
|
if (!param_tlvs->chan_quota) {
|
||||||
|
param->num_chan_quota = 0;
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (param_tlvs->num_chan_quota > MAX_MCC_QUOTA_CH_NUM)
|
||||||
|
wmi_warn("mcc quota num %d unexpected",
|
||||||
|
param_tlvs->num_chan_quota);
|
||||||
|
param->num_chan_quota = qdf_min(param_tlvs->num_chan_quota,
|
||||||
|
(uint32_t)MAX_MCC_QUOTA_CH_NUM);
|
||||||
|
wmi_mcc_quota_info = param_tlvs->chan_quota;
|
||||||
|
for (i = 0; i < param->num_chan_quota; i++) {
|
||||||
|
param->chan_quota[i].chan_mhz =
|
||||||
|
wmi_mcc_quota_info[i].chan_time_quota.chan_mhz;
|
||||||
|
param->chan_quota[i].channel_time_quota =
|
||||||
|
wmi_mcc_quota_info[i].chan_time_quota.channel_time_quota;
|
||||||
|
wmi_debug("mcc quota [%d] chan %d, quota %d",
|
||||||
|
i, param->chan_quota[i].chan_mhz,
|
||||||
|
param->chan_quota[i].channel_time_quota);
|
||||||
|
}
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void wmi_mcc_quota_evt_attach_tlv(wmi_unified_t wmi_handle)
|
||||||
|
{
|
||||||
|
struct wmi_ops *ops = wmi_handle->ops;
|
||||||
|
|
||||||
|
ops->extract_mcc_quota_ev_param = extract_mcc_quota_ev_param_tlv;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline void wmi_mcc_quota_evt_attach_tlv(wmi_unified_t wmi_handle)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void wmi_concurrency_attach_tlv(wmi_unified_t wmi_handle)
|
void wmi_concurrency_attach_tlv(wmi_unified_t wmi_handle)
|
||||||
{
|
{
|
||||||
struct wmi_ops *ops = wmi_handle->ops;
|
struct wmi_ops *ops = wmi_handle->ops;
|
||||||
@@ -238,4 +334,5 @@ void wmi_concurrency_attach_tlv(wmi_unified_t wmi_handle)
|
|||||||
send_set_mcc_channel_time_latency_cmd_tlv;
|
send_set_mcc_channel_time_latency_cmd_tlv;
|
||||||
ops->send_set_mcc_channel_time_quota_cmd =
|
ops->send_set_mcc_channel_time_quota_cmd =
|
||||||
send_set_mcc_channel_time_quota_cmd_tlv;
|
send_set_mcc_channel_time_quota_cmd_tlv;
|
||||||
|
wmi_mcc_quota_evt_attach_tlv(wmi_handle);
|
||||||
}
|
}
|
||||||
|
@@ -17998,6 +17998,10 @@ event_ids[wmi_roam_scan_chan_list_id] =
|
|||||||
event_ids[wmi_vdev_quiet_offload_eventid] =
|
event_ids[wmi_vdev_quiet_offload_eventid] =
|
||||||
WMI_QUIET_HANDLING_EVENTID;
|
WMI_QUIET_HANDLING_EVENTID;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef WLAN_FEATURE_MCC_QUOTA
|
||||||
|
event_ids[wmi_resmgr_chan_time_quota_changed_eventid] =
|
||||||
|
WMI_RESMGR_CHAN_TIME_QUOTA_CHANGED_EVENTID;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
|
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
|
||||||
|
Reference in New Issue
Block a user