
For HTT PPDU Stats TLVs, if target has provided less data than expected, pad the data with zeros until it matches the expected length and process the TLV, instead of asserting. This enables testing of different FW and Host versions during regression analysis. CRs-Fixed: 2451611 Change-Id: I79aaad8a6fde6d49510c3a212b21425ac784ad5c
261 行
6.8 KiB
C
261 行
6.8 KiB
C
/*
|
|
* Copyright (c) 2016-2019 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 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 _DP_HTT_H_
|
|
#define _DP_HTT_H_
|
|
|
|
#include <qdf_types.h>
|
|
#include <qdf_lock.h>
|
|
#include <qdf_nbuf.h>
|
|
#include <htc_api.h>
|
|
|
|
#include "cdp_txrx_cmn_struct.h"
|
|
#include "dp_types.h"
|
|
|
|
#define HTT_TX_MUTEX_TYPE qdf_spinlock_t
|
|
|
|
#define HTT_TX_MUTEX_INIT(_mutex) \
|
|
qdf_spinlock_create(_mutex)
|
|
|
|
#define HTT_TX_MUTEX_ACQUIRE(_mutex) \
|
|
qdf_spin_lock_bh(_mutex)
|
|
|
|
#define HTT_TX_MUTEX_RELEASE(_mutex) \
|
|
qdf_spin_unlock_bh(_mutex)
|
|
|
|
#define HTT_TX_MUTEX_DESTROY(_mutex) \
|
|
qdf_spinlock_destroy(_mutex)
|
|
|
|
#define DP_HTT_MAX_SEND_QUEUE_DEPTH 64
|
|
|
|
#ifndef HTT_MAC_ADDR_LEN
|
|
#define HTT_MAC_ADDR_LEN 6
|
|
#endif
|
|
|
|
#define HTT_FRAMECTRL_TYPE_MASK 0x0C
|
|
#define HTT_GET_FRAME_CTRL_TYPE(_val) \
|
|
(((_val) & HTT_FRAMECTRL_TYPE_MASK) >> 2)
|
|
#define FRAME_CTRL_TYPE_MGMT 0x0
|
|
#define FRAME_CTRL_TYPE_CTRL 0x1
|
|
#define FRAME_CTRL_TYPE_DATA 0x2
|
|
#define FRAME_CTRL_TYPE_RESV 0x3
|
|
|
|
#define HTT_FRAMECTRL_DATATYPE 0x08
|
|
#define HTT_PPDU_DESC_MAX_DEPTH 16
|
|
#define DP_SCAN_PEER_ID 0xFFFF
|
|
|
|
#define DP_HTT_HTC_PKT_MISCLIST_SIZE 256
|
|
#define HTT_T2H_MAX_MSG_SIZE 2048
|
|
|
|
#define HTT_T2H_EXT_STATS_TLV_START_OFFSET 3
|
|
|
|
struct dp_htt_htc_pkt {
|
|
void *soc_ctxt;
|
|
qdf_dma_addr_t nbuf_paddr;
|
|
HTC_PACKET htc_pkt;
|
|
};
|
|
|
|
struct dp_htt_htc_pkt_union {
|
|
union {
|
|
struct dp_htt_htc_pkt pkt;
|
|
struct dp_htt_htc_pkt_union *next;
|
|
} u;
|
|
};
|
|
|
|
struct htt_soc {
|
|
void *ctrl_psoc;
|
|
void *dp_soc;
|
|
void *hal_soc;
|
|
HTC_HANDLE htc_soc;
|
|
qdf_device_t osdev;
|
|
HTC_ENDPOINT_ID htc_endpoint;
|
|
struct dp_htt_htc_pkt_union *htt_htc_pkt_freelist;
|
|
struct dp_htt_htc_pkt_union *htt_htc_pkt_misclist;
|
|
struct {
|
|
u_int8_t major;
|
|
u_int8_t minor;
|
|
} tgt_ver;
|
|
struct {
|
|
u_int8_t major;
|
|
u_int8_t minor;
|
|
} wifi_ip_ver;
|
|
|
|
struct {
|
|
int htc_err_cnt;
|
|
int htc_pkt_free;
|
|
} stats;
|
|
|
|
HTT_TX_MUTEX_TYPE htt_tx_mutex;
|
|
};
|
|
|
|
/**
|
|
* struct htt_rx_ring_tlv_filter - Rx ring TLV filter
|
|
* enable/disable.
|
|
* @mpdu_start: enable/disable MPDU start TLV
|
|
* @msdu_start: enable/disable MSDU start TLV
|
|
* @packet: enable/disable PACKET TLV
|
|
* @msdu_end: enable/disable MSDU end TLV
|
|
* @mpdu_end: enable/disable MPDU end TLV
|
|
* @packet_header: enable/disable PACKET header TLV
|
|
* @attention: enable/disable ATTENTION TLV
|
|
* @ppdu_start: enable/disable PPDU start TLV
|
|
* @ppdu_end: enable/disable PPDU end TLV
|
|
* @ppdu_end_user_stats: enable/disable PPDU user stats TLV
|
|
* @ppdu_end_user_stats_ext: enable/disable PPDU user stats ext TLV
|
|
* @ppdu_end_status_done: enable/disable PPDU end status done TLV
|
|
* @enable_fp: enable/disable FP packet
|
|
* @enable_md: enable/disable MD packet
|
|
* @enable_mo: enable/disable MO packet
|
|
* @enable_mgmt: enable/disable MGMT packet
|
|
* @enable_ctrl: enable/disable CTRL packet
|
|
* @enable_data: enable/disable DATA packet
|
|
* @offset_valid: Flag to indicate if below offsets are valid
|
|
* @rx_packet_offset: Offset of packet payload
|
|
* @rx_header_offset: Offset of rx_header tlv
|
|
* @rx_mpdu_end_offset: Offset of rx_mpdu_end tlv
|
|
* @rx_mpdu_start_offset: Offset of rx_mpdu_start tlv
|
|
* @rx_msdu_end_offset: Offset of rx_msdu_end tlv
|
|
* @rx_msdu_start_offset: Offset of rx_msdu_start tlv
|
|
* @rx_attn_offset: Offset of rx_attention tlv
|
|
*/
|
|
struct htt_rx_ring_tlv_filter {
|
|
u_int32_t mpdu_start:1,
|
|
msdu_start:1,
|
|
packet:1,
|
|
msdu_end:1,
|
|
mpdu_end:1,
|
|
packet_header:1,
|
|
attention:1,
|
|
ppdu_start:1,
|
|
ppdu_end:1,
|
|
ppdu_end_user_stats:1,
|
|
ppdu_end_user_stats_ext:1,
|
|
ppdu_end_status_done:1,
|
|
header_per_msdu:1,
|
|
enable_fp:1,
|
|
enable_md:1,
|
|
enable_mo:1;
|
|
u_int32_t fp_mgmt_filter:16,
|
|
mo_mgmt_filter:16;
|
|
u_int32_t fp_ctrl_filter:16,
|
|
mo_ctrl_filter:16;
|
|
u_int32_t fp_data_filter:16,
|
|
mo_data_filter:16;
|
|
u_int16_t md_data_filter;
|
|
u_int16_t md_mgmt_filter;
|
|
u_int16_t md_ctrl_filter;
|
|
bool offset_valid;
|
|
uint16_t rx_packet_offset;
|
|
uint16_t rx_header_offset;
|
|
uint16_t rx_mpdu_end_offset;
|
|
uint16_t rx_mpdu_start_offset;
|
|
uint16_t rx_msdu_end_offset;
|
|
uint16_t rx_msdu_start_offset;
|
|
uint16_t rx_attn_offset;
|
|
};
|
|
|
|
/*
|
|
* htt_soc_initialize() - SOC level HTT initialization
|
|
* @htt_soc: Opaque htt SOC handle
|
|
* @ctrl_psoc: Opaque ctrl SOC handle
|
|
* @htc_soc: SOC level HTC handle
|
|
* @hal_soc: Opaque HAL SOC handle
|
|
* @osdev: QDF device
|
|
*
|
|
* Return: HTT handle on success; NULL on failure
|
|
*/
|
|
void *
|
|
htt_soc_initialize(void *htt_soc, void *ctrl_psoc, HTC_HANDLE htc_soc,
|
|
void *hal_soc, qdf_device_t osdev);
|
|
|
|
/*
|
|
* htt_soc_htc_dealloc() - HTC memory de-alloc
|
|
* @htt_soc: SOC level HTT handle
|
|
*
|
|
* Return: None
|
|
*/
|
|
void htt_soc_htc_dealloc(struct htt_soc *htt_handle);
|
|
|
|
/*
|
|
* htt_soc_htc_prealloc() - HTC memory prealloc
|
|
* @htt_soc: SOC level HTT handle
|
|
*
|
|
* Return: QDF_STATUS_SUCCESS on success or
|
|
* QDF_STATUS_E_NO_MEM on allocation failure
|
|
*/
|
|
QDF_STATUS htt_soc_htc_prealloc(struct htt_soc *htt_soc);
|
|
|
|
void htt_soc_detach(void *soc);
|
|
|
|
int htt_srng_setup(void *htt_soc, int pdev_id, void *hal_srng,
|
|
int hal_ring_type);
|
|
|
|
int htt_soc_attach_target(void *htt_soc);
|
|
|
|
/*
|
|
* htt_h2t_rx_ring_cfg() - Send SRNG packet and TLV filter
|
|
* config message to target
|
|
* @htt_soc: HTT SOC handle
|
|
* @pdev_id: PDEV Id
|
|
* @hal_srng: Opaque HAL SRNG pointer
|
|
* @hal_ring_type: SRNG ring type
|
|
* @ring_buf_size: SRNG buffer size
|
|
* @htt_tlv_filter: Rx SRNG TLV and filter setting
|
|
*
|
|
* Return: 0 on success; error code on failure
|
|
*/
|
|
int htt_h2t_rx_ring_cfg(void *htt_soc, int pdev_id, void *hal_srng,
|
|
int hal_ring_type, int ring_buf_size,
|
|
struct htt_rx_ring_tlv_filter *htt_tlv_filter);
|
|
|
|
/*
|
|
* htt_t2h_stats_handler() - target to host stats work handler
|
|
* @context: context (dp soc context)
|
|
*
|
|
* Return: void
|
|
*/
|
|
void htt_t2h_stats_handler(void *context);
|
|
|
|
/**
|
|
* struct htt_stats_context - htt stats information
|
|
* @soc: Size of each descriptor in the pool
|
|
* @msg: T2H Ext stats message queue
|
|
* @msg_len: T2H Ext stats message length
|
|
*/
|
|
struct htt_stats_context {
|
|
struct dp_soc *soc;
|
|
qdf_nbuf_queue_t msg;
|
|
uint32_t msg_len;
|
|
};
|
|
|
|
int
|
|
dp_htt_get_ppdu_sniffer_ampdu_tlv_bitmap(uint32_t bitmap);
|
|
|
|
/**
|
|
* dp_ppdu_desc_user_stats_update(): Function to update TX user stats
|
|
* @pdev: DP pdev handle
|
|
* @ppdu_info: per PPDU TLV descriptor
|
|
*
|
|
* return: void
|
|
*/
|
|
void
|
|
dp_ppdu_desc_user_stats_update(struct dp_pdev *pdev,
|
|
struct ppdu_info *ppdu_info);
|
|
|
|
#endif /* _DP_HTT_H_ */
|