Files
android_kernel_samsung_sm86…/dp/inc/cdp_txrx_sawf.h
Gaurav Saini 1630288f30 qcacmn: Remove AST dependency for sawf
To eliminate the use of AST, using net dev to
find the peer related information, which helps
in avoiding the iterations of psoc list.
Passing the peer id as addition parameter to DP

Change-Id: I68e4ad8d5d62b2350ed0c2df66279de3fa9c0d83
CRs-Fixed: 3526799
2023-07-11 18:16:20 -07:00

455 lines
11 KiB
C

/*
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. 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 copyright notice and this permission notice appear in all
* copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
#ifndef _CDP_TXRX_SAWF_H_
#define _CDP_TXRX_SAWF_H_
#include <cdp_txrx_cmn_struct.h>
#include <cdp_txrx_cmn.h>
static inline QDF_STATUS
cdp_sawf_peer_svcid_map(ol_txrx_soc_handle soc,
uint8_t *mac, uint8_t svc_id)
{
if (!soc || !soc->ops) {
dp_cdp_debug("Invalid Instance");
QDF_BUG(0);
return QDF_STATUS_E_FAILURE;
}
if (!soc->ops->sawf_ops ||
!soc->ops->sawf_ops->sawf_def_queues_map_req) {
return QDF_STATUS_E_FAILURE;
}
return soc->ops->sawf_ops->sawf_def_queues_map_req(soc, mac, svc_id);
}
static inline QDF_STATUS
cdp_sawf_peer_unmap(ol_txrx_soc_handle soc,
uint8_t *mac, uint8_t svc_id)
{
if (!soc || !soc->ops) {
dp_cdp_debug("Invalid Instance");
QDF_BUG(0);
return QDF_STATUS_E_FAILURE;
}
if (!soc->ops->sawf_ops ||
!soc->ops->sawf_ops->sawf_def_queues_unmap_req) {
return QDF_STATUS_E_FAILURE;
}
return soc->ops->sawf_ops->sawf_def_queues_unmap_req(soc, mac, svc_id);
}
static inline QDF_STATUS
cdp_sawf_peer_get_map_conf(ol_txrx_soc_handle soc,
uint8_t *mac)
{
if (!soc || !soc->ops) {
dp_cdp_debug("Invalid Instance");
QDF_BUG(0);
return QDF_STATUS_E_FAILURE;
}
if (!soc->ops->sawf_ops ||
!soc->ops->sawf_ops->sawf_def_queues_get_map_report) {
return QDF_STATUS_E_FAILURE;
}
return soc->ops->sawf_ops->sawf_def_queues_get_map_report(soc, mac);
}
static inline QDF_STATUS
cdp_sawf_peer_get_msduq_info(ol_txrx_soc_handle soc, uint8_t *mac)
{
if (!soc || !soc->ops) {
dp_cdp_debug("Invalid Instance");
QDF_BUG(0);
return QDF_STATUS_E_FAILURE;
}
if (!soc->ops->sawf_ops ||
!soc->ops->sawf_ops->sawf_get_peer_msduq_info) {
return QDF_STATUS_E_FAILURE;
}
return soc->ops->sawf_ops->sawf_get_peer_msduq_info(soc, mac);
}
#ifdef CONFIG_SAWF
/**
* cdp_get_peer_sawf_delay_stats() - Call to get SAWF delay stats
* @soc: soc handle
* @svc_id: service class ID
* @mac: peer mac address
* @data: opaque pointer
*
* return: status Success/Failure
*/
static inline QDF_STATUS
cdp_get_peer_sawf_delay_stats(ol_txrx_soc_handle soc, uint32_t svc_id,
uint8_t *mac, void *data)
{
if (!soc || !soc->ops) {
dp_cdp_debug("Invalid Instance");
QDF_BUG(0);
return QDF_STATUS_E_FAILURE;
}
if (!soc->ops->sawf_ops ||
!soc->ops->sawf_ops->txrx_get_peer_sawf_delay_stats)
return QDF_STATUS_E_FAILURE;
return soc->ops->sawf_ops->txrx_get_peer_sawf_delay_stats(soc, svc_id,
mac, data);
}
/**
* cdp_get_peer_sawf_tx_stats() - Call to get SAWF Tx stats
* @soc: soc handle
* @svc_id: service class ID
* @mac: peer mac address
* @data: opaque pointer
*
* return: status Success/Failure
*/
static inline QDF_STATUS
cdp_get_peer_sawf_tx_stats(ol_txrx_soc_handle soc, uint32_t svc_id,
uint8_t *mac, void *data)
{
if (!soc || !soc->ops) {
dp_cdp_debug("Invalid Instance");
QDF_BUG(0);
return QDF_STATUS_E_FAILURE;
}
if (!soc->ops->sawf_ops ||
!soc->ops->sawf_ops->txrx_get_peer_sawf_tx_stats)
return QDF_STATUS_E_FAILURE;
return soc->ops->sawf_ops->txrx_get_peer_sawf_tx_stats(soc, svc_id,
mac, data);
}
/**
* cdp_sawf_mpdu_stats_req() - Call to subscribe to MPDU stats TLV
* @soc: soc handle
* @enable: 1: enable 0: disable
*
* return: status Success/Failure
*/
static inline QDF_STATUS
cdp_sawf_mpdu_stats_req(ol_txrx_soc_handle soc, uint8_t enable)
{
if (!soc || !soc->ops) {
dp_cdp_debug("Invalid Instance");
QDF_BUG(0);
return QDF_STATUS_E_FAILURE;
}
if (!soc->ops->sawf_ops ||
!soc->ops->sawf_ops->sawf_mpdu_stats_req)
return QDF_STATUS_E_FAILURE;
return soc->ops->sawf_ops->sawf_mpdu_stats_req(soc, enable);
}
/**
* cdp_sawf_mpdu_details_stats_req - Call to subscribe to MPDU details stats TLV
* @soc: soc handle
* @enable: 1: enable 0: disable
*
* return: status Success/Failure
*/
static inline QDF_STATUS
cdp_sawf_mpdu_details_stats_req(ol_txrx_soc_handle soc, uint8_t enable)
{
if (!soc || !soc->ops) {
dp_cdp_debug("Invalid Instance");
QDF_BUG(0);
return QDF_STATUS_E_FAILURE;
}
if (!soc->ops->sawf_ops ||
!soc->ops->sawf_ops->sawf_mpdu_details_stats_req)
return QDF_STATUS_E_FAILURE;
return soc->ops->sawf_ops->sawf_mpdu_details_stats_req(soc, enable);
}
/**
* cdp_sawf_set_mov_avg_params - Set moving average pararms
* @soc: SOC handle
* @num_pkt: No of packets per window to calucalte moving average
* @num_win: No of windows to calucalte moving average
*
* Return: QDF_STATUS
*/
static inline QDF_STATUS
cdp_sawf_set_mov_avg_params(ol_txrx_soc_handle soc,
uint32_t num_pkt,
uint32_t num_win)
{
if (!soc || !soc->ops) {
dp_cdp_debug("Invalid Instance");
QDF_BUG(0);
return QDF_STATUS_E_FAILURE;
}
if (!soc->ops->sawf_ops ||
!soc->ops->sawf_ops->txrx_sawf_set_mov_avg_params)
return QDF_STATUS_E_FAILURE;
return soc->ops->sawf_ops->txrx_sawf_set_mov_avg_params(num_pkt,
num_win);
}
/**
* cdp_sawf_set_sla_params - Set SLA pararms
* @soc: SOC handle
* @num_pkt: No of packets to detect SLA breach
* @time_secs: Time ins secs to detect breach
*
* Return: QDF_STATUS
*/
static inline QDF_STATUS
cdp_sawf_set_sla_params(ol_txrx_soc_handle soc,
uint32_t num_pkt,
uint32_t time_secs)
{
if (!soc || !soc->ops) {
dp_cdp_debug("Invalid Instance");
QDF_BUG(0);
return QDF_STATUS_E_FAILURE;
}
if (!soc->ops->sawf_ops ||
!soc->ops->sawf_ops->txrx_sawf_set_sla_params)
return QDF_STATUS_E_FAILURE;
return soc->ops->sawf_ops->txrx_sawf_set_sla_params(num_pkt,
time_secs);
}
/**
* cdp_sawf_init_telemtery_params() - Initialize telemetry pararms
* @soc: SOC handle
*
* Return: none
*/
static inline QDF_STATUS
cdp_sawf_init_telemtery_params(ol_txrx_soc_handle soc)
{
if (!soc || !soc->ops) {
dp_cdp_debug("Invalid Instance");
QDF_BUG(0);
return QDF_STATUS_E_FAILURE;
}
if (!soc->ops->sawf_ops ||
!soc->ops->sawf_ops->txrx_sawf_init_telemtery_params)
return QDF_STATUS_E_FAILURE;
return soc->ops->sawf_ops->txrx_sawf_init_telemtery_params();
}
static inline QDF_STATUS
cdp_get_throughput_stats(ol_txrx_soc_handle soc, void *arg,
uint64_t *in_bytes, uint64_t *in_cnt,
uint64_t *tx_bytes, uint64_t *tx_cnt,
uint8_t tid, uint8_t msduq)
{
if (!soc || !soc->ops) {
dp_cdp_debug("Invalid Instance");
QDF_BUG(0);
return QDF_STATUS_E_FAILURE;
}
if (!soc->ops->sawf_ops ||
!soc->ops->sawf_ops->telemetry_get_throughput_stats)
return QDF_STATUS_E_FAILURE;
return soc->ops->sawf_ops->telemetry_get_throughput_stats(
arg, in_bytes, in_cnt, tx_bytes,
tx_cnt, tid, msduq);
}
static inline QDF_STATUS
cdp_get_mpdu_stats(ol_txrx_soc_handle soc, void *arg,
uint64_t *svc_int_pass, uint64_t *svc_int_fail,
uint64_t *burst_pass, uint64_t *burst_fail,
uint8_t tid, uint8_t msduq)
{
if (!soc || !soc->ops) {
dp_cdp_debug("Invalid Instance");
QDF_BUG(0);
return QDF_STATUS_E_FAILURE;
}
if (!soc->ops->sawf_ops ||
!soc->ops->sawf_ops->telemetry_get_mpdu_stats)
return QDF_STATUS_E_FAILURE;
return soc->ops->sawf_ops->telemetry_get_mpdu_stats(
arg, svc_int_pass, svc_int_fail, burst_pass,
burst_fail, tid, msduq);
}
static inline QDF_STATUS
cdp_get_drop_stats(ol_txrx_soc_handle soc, void *arg,
uint64_t *pass, uint64_t *drop,
uint64_t *drop_ttl,
uint8_t tid, uint8_t msduq)
{
if (!soc || !soc->ops) {
dp_cdp_debug("Invalid Instance");
QDF_BUG(0);
return QDF_STATUS_E_FAILURE;
}
if (!soc->ops->sawf_ops ||
!soc->ops->sawf_ops->telemetry_get_drop_stats)
return QDF_STATUS_E_FAILURE;
return soc->ops->sawf_ops->telemetry_get_drop_stats(
arg, pass, drop, drop_ttl, tid, msduq);
}
/**
* cdp_sawf_peer_config_ul - Config uplink QoS parameters
* @soc: SOC handle
* @mac_addr: MAC address
* @tid: TID
* @service_interval: Service Interval
* @burst_size: Burst Size
* @min_tput: Min throughput
* @max_latency: Max latency
* @add_or_sub: Add or Sub parameters
* @peer_id: peer id
*
* Return: QDF_STATUS
*/
static inline QDF_STATUS
cdp_sawf_peer_config_ul(ol_txrx_soc_handle soc, uint8_t *mac_addr, uint8_t tid,
uint32_t service_interval, uint32_t burst_size,
uint32_t min_tput, uint32_t max_latency,
uint8_t add_or_sub, uint16_t peer_id)
{
if (!soc || !soc->ops || !soc->ops->sawf_ops ||
!soc->ops->sawf_ops->peer_config_ul) {
dp_cdp_debug("Invalid Instance");
QDF_BUG(0);
return false;
}
return soc->ops->sawf_ops->peer_config_ul(soc, mac_addr, tid,
service_interval, burst_size,
min_tput, max_latency,
add_or_sub, peer_id);
}
/**
* cdp_sawf_peer_flow_count - Peer flow count in SAWF
* @soc: SOC handle
* @mac_addr: MAC address
* @svc_id: Service Class ID
* @direction: Indication of forward or reverse service class match
* @start_or_stop: Indication of start or stop
* @peer_mac: Peer MAC address
* @peer_id: peer id
*
* Return: QDF_STATUS
*/
static inline QDF_STATUS
cdp_sawf_peer_flow_count(ol_txrx_soc_handle soc, uint8_t *mac_addr,
uint8_t svc_id, uint8_t direction,
uint8_t start_or_stop, uint8_t *peer_mac,
uint16_t peer_id)
{
if (!soc || !soc->ops || !soc->ops->sawf_ops ||
!soc->ops->sawf_ops->sawf_peer_flow_count) {
dp_cdp_debug("Invalid Instance");
QDF_BUG(0);
return false;
}
return soc->ops->sawf_ops->sawf_peer_flow_count
(soc, mac_addr, svc_id, direction, start_or_stop, peer_mac,
peer_id);
}
/**
* cdp_swaf_peer_sla_configuration() - Check if sla is configured for a peer
* @soc: SOC handle
* @mac_addr: peer mac address
* @sla_mask: pointer to SLA mask
* Return: QDF_STATUS
*/
static inline QDF_STATUS
cdp_swaf_peer_sla_configuration(ol_txrx_soc_handle soc, uint8_t *mac_addr,
uint16_t *sla_mask)
{
if (!soc || !soc->ops || !soc->ops->sawf_ops ||
!soc->ops->sawf_ops->swaf_peer_sla_configuration) {
dp_cdp_debug("Invalid Instance");
QDF_BUG(0);
return QDF_STATUS_E_INVAL;
}
return soc->ops->sawf_ops->swaf_peer_sla_configuration(soc, mac_addr,
sla_mask);
}
#else
static inline QDF_STATUS
cdp_sawf_mpdu_stats_req(ol_txrx_soc_handle soc, uint8_t enable)
{
return QDF_STATUS_E_FAILURE;
}
static inline QDF_STATUS
cdp_sawf_mpdu_details_stats_req(ol_txrx_soc_handle soc, uint8_t enable)
{
return QDF_STATUS_E_FAILURE;
}
static inline QDF_STATUS
cdp_get_peer_sawf_delay_stats(ol_txrx_soc_handle soc, uint32_t svc_id,
uint8_t *mac, void *data)
{
return QDF_STATUS_E_FAILURE;
}
static inline QDF_STATUS
cdp_get_peer_sawf_tx_stats(ol_txrx_soc_handle soc, uint32_t svc_id,
uint8_t *mac, void *data)
{
return QDF_STATUS_E_FAILURE;
}
static inline QDF_STATUS
cdp_swaf_peer_sla_configuration(ol_txrx_soc_handle soc, uint8_t *mac_addr,
uint16_t *sla_mask)
{
return QDF_STATUS_E_FAILURE;
}
#endif
#endif /* _CDP_TXRX_SAWF_H_ */