Merge "qcacmn: CFR: Process PPDU status TLVs and extract CFR information"
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

커밋
131bc0cd37
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2016-2020 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
|
||||
@@ -723,6 +723,34 @@ cdp_get_pldev(ol_txrx_soc_handle soc,
|
||||
return soc->ops->ctrl_ops->txrx_get_pldev(pdev);
|
||||
}
|
||||
|
||||
#if defined(WLAN_CFR_ENABLE) && defined(WLAN_ENH_CFR_ENABLE)
|
||||
/**
|
||||
* cdp_cfr_filter() - Configure Host RX monitor status ring for CFR
|
||||
* @soc: SOC TXRX handle
|
||||
* @pdev_id: ID of the physical device object
|
||||
* @enable: Enable or disable CFR
|
||||
* @filter_val: Flag to select filter for monitor mode
|
||||
*/
|
||||
static inline void
|
||||
cdp_cfr_filter(ol_txrx_soc_handle soc,
|
||||
uint8_t pdev_id,
|
||||
bool enable,
|
||||
struct cdp_monitor_filter *filter_val)
|
||||
{
|
||||
if (!soc || !soc->ops) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
|
||||
"%s invalid instance", __func__);
|
||||
QDF_BUG(0);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!soc->ops->cfr_ops || !soc->ops->cfr_ops->txrx_cfr_filter)
|
||||
return;
|
||||
|
||||
soc->ops->cfr_ops->txrx_cfr_filter(soc, pdev_id, enable, filter_val);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(WLAN_TX_PKT_CAPTURE_ENH) || defined(WLAN_RX_PKT_CAPTURE_ENH)
|
||||
/**
|
||||
* cdp_update_peer_pkt_capture_params() - Sets Rx & Tx Capture params for a peer
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
@@ -1610,6 +1610,19 @@ struct cdp_rx_offld_ops {
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(WLAN_CFR_ENABLE) && defined(WLAN_ENH_CFR_ENABLE)
|
||||
/**
|
||||
* struct cdp_cfr_ops - host cfr ops
|
||||
* @txrx_cfr_filter: Handler to configure host rx monitor status ring
|
||||
*/
|
||||
struct cdp_cfr_ops {
|
||||
void (*txrx_cfr_filter)(struct cdp_soc_t *soc_hdl,
|
||||
uint8_t pdev_id,
|
||||
bool enable,
|
||||
struct cdp_monitor_filter *filter_val);
|
||||
};
|
||||
#endif
|
||||
|
||||
struct cdp_ops {
|
||||
struct cdp_cmn_ops *cmn_drv_ops;
|
||||
struct cdp_ctrl_ops *ctrl_ops;
|
||||
@@ -1645,6 +1658,9 @@ struct cdp_ops {
|
||||
#ifdef WLAN_FEATURE_PKT_CAPTURE
|
||||
struct cdp_pktcapture_ops *pktcapture_ops;
|
||||
#endif
|
||||
#if defined(WLAN_CFR_ENABLE) && defined(WLAN_ENH_CFR_ENABLE)
|
||||
struct cdp_cfr_ops *cfr_ops;
|
||||
#endif
|
||||
|
||||
};
|
||||
#endif
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2016-2020 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
|
||||
@@ -151,6 +151,12 @@ static void dp_vdev_flush_peers(struct cdp_vdev *vdev_handle,
|
||||
bool is_dp_verbose_debug_enabled;
|
||||
#endif
|
||||
|
||||
#if defined(WLAN_CFR_ENABLE) && defined(WLAN_ENH_CFR_ENABLE)
|
||||
static void dp_cfr_filter(struct cdp_soc_t *soc_hdl,
|
||||
uint8_t pdev_id,
|
||||
bool enable,
|
||||
struct cdp_monitor_filter *filter_val);
|
||||
#endif
|
||||
static uint8_t dp_soc_ring_if_nss_offloaded(struct dp_soc *soc,
|
||||
enum hal_ring_type ring_type,
|
||||
int ring_num);
|
||||
@@ -9749,6 +9755,12 @@ static struct cdp_pflow_ops dp_ops_pflow = {
|
||||
};
|
||||
#endif /* CONFIG_WIN */
|
||||
|
||||
#if defined(WLAN_CFR_ENABLE) && defined(WLAN_ENH_CFR_ENABLE)
|
||||
static struct cdp_cfr_ops dp_ops_cfr = {
|
||||
.txrx_cfr_filter = dp_cfr_filter,
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef FEATURE_RUNTIME_PM
|
||||
/**
|
||||
* dp_runtime_suspend() - ensure DP is ready to runtime suspend
|
||||
@@ -10179,6 +10191,9 @@ static struct cdp_ops dp_txrx_ops = {
|
||||
#ifdef DP_POWER_SAVE
|
||||
.bus_ops = &dp_ops_bus,
|
||||
#endif
|
||||
#if defined(WLAN_CFR_ENABLE) && defined(WLAN_ENH_CFR_ENABLE)
|
||||
.cfr_ops = &dp_ops_cfr,
|
||||
#endif
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -10506,6 +10521,76 @@ void dp_is_hw_dbs_enable(struct dp_soc *soc,
|
||||
*max_mac_rings = (dbs_enable)?(*max_mac_rings):1;
|
||||
}
|
||||
|
||||
#if defined(WLAN_CFR_ENABLE) && defined(WLAN_ENH_CFR_ENABLE)
|
||||
/*
|
||||
* dp_cfr_filter() - Configure HOST RX monitor status ring for CFR
|
||||
* @soc_hdl: Datapath soc handle
|
||||
* @pdev_id: id of data path pdev handle
|
||||
* @enable: Enable/Disable CFR
|
||||
* @filter_val: Flag to select Filter for monitor mode
|
||||
*/
|
||||
static void dp_cfr_filter(struct cdp_soc_t *soc_hdl,
|
||||
uint8_t pdev_id,
|
||||
bool enable,
|
||||
struct cdp_monitor_filter *filter_val)
|
||||
{
|
||||
struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl);
|
||||
struct dp_pdev *pdev = dp_get_pdev_from_soc_pdev_id_wifi3(soc, pdev_id);
|
||||
struct htt_rx_ring_tlv_filter htt_tlv_filter = {0};
|
||||
int max_mac_rings = wlan_cfg_get_num_mac_rings(pdev->wlan_cfg_ctx);
|
||||
uint8_t mac_id = 0;
|
||||
|
||||
if (pdev->monitor_vdev) {
|
||||
dp_info("No action is needed since monitor mode is enabled\n");
|
||||
return;
|
||||
}
|
||||
soc = pdev->soc;
|
||||
pdev->cfr_rcc_mode = false;
|
||||
dp_is_hw_dbs_enable(soc, &max_mac_rings);
|
||||
|
||||
dp_debug("Max_mac_rings %d", max_mac_rings);
|
||||
dp_info("enable : %d, mode: 0x%x", enable, filter_val->mode);
|
||||
|
||||
if (enable) {
|
||||
pdev->cfr_rcc_mode = true;
|
||||
|
||||
htt_tlv_filter.ppdu_start = 1;
|
||||
htt_tlv_filter.ppdu_end = 1;
|
||||
htt_tlv_filter.ppdu_end_user_stats = 1;
|
||||
htt_tlv_filter.ppdu_end_user_stats_ext = 1;
|
||||
htt_tlv_filter.ppdu_end_status_done = 1;
|
||||
htt_tlv_filter.mpdu_start = 1;
|
||||
htt_tlv_filter.offset_valid = false;
|
||||
|
||||
htt_tlv_filter.enable_fp =
|
||||
(filter_val->mode & MON_FILTER_PASS) ? 1 : 0;
|
||||
htt_tlv_filter.enable_md = 0;
|
||||
htt_tlv_filter.enable_mo =
|
||||
(filter_val->mode & MON_FILTER_OTHER) ? 1 : 0;
|
||||
htt_tlv_filter.fp_mgmt_filter = filter_val->fp_mgmt;
|
||||
htt_tlv_filter.fp_ctrl_filter = filter_val->fp_ctrl;
|
||||
htt_tlv_filter.fp_data_filter = filter_val->fp_data;
|
||||
htt_tlv_filter.mo_mgmt_filter = filter_val->mo_mgmt;
|
||||
htt_tlv_filter.mo_ctrl_filter = filter_val->mo_ctrl;
|
||||
htt_tlv_filter.mo_data_filter = filter_val->mo_data;
|
||||
}
|
||||
|
||||
for (mac_id = 0; mac_id < max_mac_rings; mac_id++) {
|
||||
int mac_for_pdev =
|
||||
dp_get_mac_id_for_pdev(mac_id,
|
||||
pdev->pdev_id);
|
||||
|
||||
htt_h2t_rx_ring_cfg(soc->htt_handle,
|
||||
mac_for_pdev,
|
||||
pdev->rxdma_mon_status_ring[mac_id]
|
||||
.hal_srng,
|
||||
RXDMA_MONITOR_STATUS,
|
||||
RX_BUFFER_SIZE,
|
||||
&htt_tlv_filter);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* dp_is_soc_reinit() - Check if soc reinit is true
|
||||
* @soc: DP SoC context
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2016-2020 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
|
||||
@@ -1617,6 +1617,7 @@ struct dp_pdev {
|
||||
bool tx_sniffer_enable;
|
||||
/* mirror copy mode */
|
||||
bool mcopy_mode;
|
||||
bool cfr_rcc_mode;
|
||||
bool bpr_enable;
|
||||
|
||||
/* enable time latency check for tx completion */
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2017-2020 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
|
||||
@@ -466,6 +466,83 @@ struct hal_rx_ppdu_msdu_info {
|
||||
uint32_t flow_idx;
|
||||
};
|
||||
|
||||
#if defined(WLAN_CFR_ENABLE) && defined(WLAN_ENH_CFR_ENABLE)
|
||||
/**
|
||||
* struct hal_rx_ppdu_cfr_user_info - struct for storing peer info extracted
|
||||
* from HW TLVs, this will be used for correlating CFR data with multiple peers
|
||||
* in MU PPDUs
|
||||
*
|
||||
* @peer_macaddr: macaddr of the peer
|
||||
* @ast_index: AST index of the peer
|
||||
*/
|
||||
struct hal_rx_ppdu_cfr_user_info {
|
||||
uint8_t peer_macaddr[QDF_MAC_ADDR_SIZE];
|
||||
uint32_t ast_index;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct hal_rx_ppdu_cfr_info - struct for storing ppdu info extracted from HW
|
||||
* TLVs, this will be used for CFR correlation
|
||||
*
|
||||
* @bb_captured_channel : Set by RXPCU when MACRX_FREEZE_CAPTURE_CHANNEL TLV is
|
||||
* sent to PHY, SW checks it to correlate current PPDU TLVs with uploaded
|
||||
* channel information.
|
||||
*
|
||||
* @bb_captured_timeout : Set by RxPCU to indicate channel capture condition is
|
||||
* met, but MACRX_FREEZE_CAPTURE_CHANNEL is not sent to PHY due to AST delay,
|
||||
* which means the rx_frame_falling edge to FREEZE TLV ready time exceeds
|
||||
* the threshold time defined by RXPCU register FREEZE_TLV_DELAY_CNT_THRESH.
|
||||
* Bb_captured_reason is still valid in this case.
|
||||
*
|
||||
* @rx_location_info_valid: Indicates whether CFR DMA address in the PPDU TLV
|
||||
* is valid
|
||||
* <enum 0 rx_location_info_is_not_valid>
|
||||
* <enum 1 rx_location_info_is_valid>
|
||||
* <legal all>
|
||||
*
|
||||
* @bb_captured_reason : Copy capture_reason of MACRX_FREEZE_CAPTURE_CHANNEL
|
||||
* TLV to here for FW usage. Valid when bb_captured_channel or
|
||||
* bb_captured_timeout is set.
|
||||
* <enum 0 freeze_reason_TM>
|
||||
* <enum 1 freeze_reason_FTM>
|
||||
* <enum 2 freeze_reason_ACK_resp_to_TM_FTM>
|
||||
* <enum 3 freeze_reason_TA_RA_TYPE_FILTER>
|
||||
* <enum 4 freeze_reason_NDPA_NDP>
|
||||
* <enum 5 freeze_reason_ALL_PACKET>
|
||||
* <legal 0-5>
|
||||
*
|
||||
* @rtt_che_buffer_pointer_low32 : The low 32 bits of the 40 bits pointer to
|
||||
* external RTT channel information buffer
|
||||
*
|
||||
* @rtt_che_buffer_pointer_high8 : The high 8 bits of the 40 bits pointer to
|
||||
* external RTT channel information buffer
|
||||
*
|
||||
* @chan_capture_status : capture status reported by ucode
|
||||
* a. CAPTURE_IDLE: FW has disabled "REPETITIVE_CHE_CAPTURE_CTRL"
|
||||
* b. CAPTURE_BUSY: previous PPDU’s channel capture upload DMA ongoing. (Note
|
||||
* that this upload is triggered after receiving freeze_channel_capture TLV
|
||||
* after last PPDU is rx)
|
||||
* c. CAPTURE_ACTIVE: channel capture is enabled and no previous channel
|
||||
* capture ongoing
|
||||
* d. CAPTURE_NO_BUFFER: next buffer in IPC ring not available
|
||||
*
|
||||
* @cfr_user_info: Peer mac for upto 4 MU users
|
||||
*/
|
||||
|
||||
struct hal_rx_ppdu_cfr_info {
|
||||
bool bb_captured_channel;
|
||||
bool bb_captured_timeout;
|
||||
uint8_t bb_captured_reason;
|
||||
bool rx_location_info_valid;
|
||||
uint8_t chan_capture_status;
|
||||
uint8_t rtt_che_buffer_pointer_high8;
|
||||
uint32_t rtt_che_buffer_pointer_low32;
|
||||
struct hal_rx_ppdu_cfr_user_info cfr_user_info[HAL_MAX_UL_MU_USERS];
|
||||
};
|
||||
#else
|
||||
struct hal_rx_ppdu_cfr_info {};
|
||||
#endif
|
||||
|
||||
struct hal_rx_ppdu_info {
|
||||
struct hal_rx_ppdu_common_info com_info;
|
||||
struct mon_rx_status rx_status;
|
||||
@@ -490,6 +567,11 @@ struct hal_rx_ppdu_info {
|
||||
struct hal_rx_msdu_payload_info ppdu_msdu_info[HAL_RX_MAX_MPDU];
|
||||
/* evm info */
|
||||
struct hal_rx_su_evm_info evm_info;
|
||||
/**
|
||||
* Will be used to store ppdu info extracted from HW TLVs,
|
||||
* and for CFR correlation as well
|
||||
*/
|
||||
struct hal_rx_ppdu_cfr_info cfr_info;
|
||||
};
|
||||
|
||||
static inline uint32_t
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2016-2020 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
|
||||
@@ -439,6 +439,10 @@ hal_rx_status_get_tlv_info_generic(void *rx_tlv_hdr, void *ppduinfo,
|
||||
ppdu_info->rx_state = HAL_RX_MON_PPDU_END;
|
||||
break;
|
||||
|
||||
case WIFIPHYRX_PKT_END_E:
|
||||
hal_rx_get_rtt_info(hal_soc_hdl, rx_tlv, ppdu_info);
|
||||
break;
|
||||
|
||||
case WIFIRXPCU_PPDU_END_INFO_E:
|
||||
ppdu_info->rx_status.rx_antenna =
|
||||
HAL_RX_GET(rx_tlv, RXPCU_PPDU_END_INFO_2, RX_ANTENNA);
|
||||
@@ -451,6 +455,7 @@ hal_rx_status_get_tlv_info_generic(void *rx_tlv_hdr, void *ppduinfo,
|
||||
ppdu_info->rx_status.duration =
|
||||
HAL_RX_GET(rx_tlv, UNIFIED_RXPCU_PPDU_END_INFO_8,
|
||||
RX_PPDU_DURATION);
|
||||
hal_rx_get_bb_info(hal_soc_hdl, rx_tlv, ppdu_info);
|
||||
break;
|
||||
|
||||
/*
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2016-2020 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
|
||||
@@ -459,6 +459,8 @@ struct hal_hw_txrx_ops {
|
||||
uint32_t *flow_index);
|
||||
uint16_t (*hal_rx_tlv_get_tcp_chksum)(uint8_t *buf);
|
||||
uint16_t (*hal_rx_get_rx_sequence)(uint8_t *buf);
|
||||
void (*hal_rx_get_bb_info)(void *rx_tlv, void *ppdu_info_handle);
|
||||
void (*hal_rx_get_rtt_info)(void *rx_tlv, void *ppdu_info_handle);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2016-2020 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
|
||||
@@ -3368,4 +3368,26 @@ uint16_t hal_rx_get_rx_sequence(hal_soc_handle_t hal_soc_hdl,
|
||||
|
||||
return hal_soc->ops->hal_rx_get_rx_sequence(buf);
|
||||
}
|
||||
|
||||
static inline void
|
||||
hal_rx_get_bb_info(hal_soc_handle_t hal_soc_hdl,
|
||||
void *rx_tlv,
|
||||
void *ppdu_info)
|
||||
{
|
||||
struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl;
|
||||
|
||||
if (hal_soc->ops->hal_rx_get_bb_info)
|
||||
hal_soc->ops->hal_rx_get_bb_info(rx_tlv, ppdu_info);
|
||||
}
|
||||
|
||||
static inline void
|
||||
hal_rx_get_rtt_info(hal_soc_handle_t hal_soc_hdl,
|
||||
void *rx_tlv,
|
||||
void *ppdu_info)
|
||||
{
|
||||
struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl;
|
||||
|
||||
if (hal_soc->ops->hal_rx_get_rtt_info)
|
||||
hal_soc->ops->hal_rx_get_rtt_info(rx_tlv, ppdu_info);
|
||||
}
|
||||
#endif /* _HAL_RX_H */
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2016-2020 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
|
||||
@@ -1076,6 +1076,8 @@ struct hal_hw_txrx_ops qca6290_hal_hw_txrx_ops = {
|
||||
hal_rx_msdu_get_flow_params_6290,
|
||||
hal_rx_tlv_get_tcp_chksum_6290,
|
||||
hal_rx_get_rx_sequence_6290,
|
||||
NULL,
|
||||
NULL,
|
||||
};
|
||||
|
||||
struct hal_hw_srng_config hw_srng_table_6290[] = {
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2016-2020 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
|
||||
@@ -1072,6 +1072,8 @@ struct hal_hw_txrx_ops qca6390_hal_hw_txrx_ops = {
|
||||
hal_rx_msdu_get_flow_params_6390,
|
||||
hal_rx_tlv_get_tcp_chksum_6390,
|
||||
hal_rx_get_rx_sequence_6390,
|
||||
NULL,
|
||||
NULL,
|
||||
};
|
||||
|
||||
struct hal_hw_srng_config hw_srng_table_6390[] = {
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2019-2020 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
|
||||
@@ -1391,6 +1391,8 @@ struct hal_hw_txrx_ops qca6490_hal_hw_txrx_ops = {
|
||||
NULL,
|
||||
hal_rx_tlv_get_tcp_chksum_6490,
|
||||
hal_rx_get_rx_sequence_6490,
|
||||
NULL,
|
||||
NULL,
|
||||
};
|
||||
|
||||
struct hal_hw_srng_config hw_srng_table_6490[] = {
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2016-2020 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
|
||||
@@ -1072,6 +1072,8 @@ struct hal_hw_txrx_ops qca8074_hal_hw_txrx_ops = {
|
||||
hal_rx_msdu_get_flow_params_8074v1,
|
||||
hal_rx_tlv_get_tcp_chksum_8074v1,
|
||||
hal_rx_get_rx_sequence_8074v1,
|
||||
NULL,
|
||||
NULL,
|
||||
};
|
||||
|
||||
struct hal_hw_srng_config hw_srng_table_8074[] = {
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2016-2020 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
|
||||
@@ -1071,6 +1071,14 @@ struct hal_hw_txrx_ops qca8074v2_hal_hw_txrx_ops = {
|
||||
hal_rx_msdu_get_flow_params_8074v2,
|
||||
hal_rx_tlv_get_tcp_chksum_8074v2,
|
||||
hal_rx_get_rx_sequence_8074v2,
|
||||
#if defined(QCA_WIFI_QCA6018) && defined(WLAN_CFR_ENABLE) && \
|
||||
defined(WLAN_ENH_CFR_ENABLE)
|
||||
hal_rx_get_bb_info_8074v2,
|
||||
hal_rx_get_rtt_info_8074v2,
|
||||
#else
|
||||
NULL,
|
||||
NULL,
|
||||
#endif
|
||||
};
|
||||
|
||||
struct hal_hw_srng_config hw_srng_table_8074v2[] = {
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2016-2020 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
|
||||
@@ -500,6 +500,51 @@ void hal_rx_proc_phyrx_other_receive_info_tlv_8074v2(void *rx_tlv_hdr,
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(QCA_WIFI_QCA6018) && defined(WLAN_CFR_ENABLE) && \
|
||||
defined(WLAN_ENH_CFR_ENABLE)
|
||||
static inline
|
||||
void hal_rx_get_bb_info_8074v2(void *rx_tlv,
|
||||
void *ppdu_info_hdl)
|
||||
{
|
||||
struct hal_rx_ppdu_info *ppdu_info = ppdu_info_hdl;
|
||||
|
||||
ppdu_info->cfr_info.bb_captured_channel =
|
||||
HAL_RX_GET(rx_tlv, RXPCU_PPDU_END_INFO_3, BB_CAPTURED_CHANNEL);
|
||||
|
||||
ppdu_info->cfr_info.bb_captured_timeout =
|
||||
HAL_RX_GET(rx_tlv, RXPCU_PPDU_END_INFO_3, BB_CAPTURED_TIMEOUT);
|
||||
|
||||
ppdu_info->cfr_info.bb_captured_reason =
|
||||
HAL_RX_GET(rx_tlv, RXPCU_PPDU_END_INFO_3, BB_CAPTURED_REASON);
|
||||
}
|
||||
|
||||
static inline
|
||||
void hal_rx_get_rtt_info_8074v2(void *rx_tlv,
|
||||
void *ppdu_info_hdl)
|
||||
{
|
||||
struct hal_rx_ppdu_info *ppdu_info = ppdu_info_hdl;
|
||||
|
||||
ppdu_info->cfr_info.rx_location_info_valid =
|
||||
HAL_RX_GET(rx_tlv, PHYRX_PKT_END_13_RX_PKT_END_DETAILS,
|
||||
RX_LOCATION_INFO_DETAILS_RX_LOCATION_INFO_VALID);
|
||||
|
||||
ppdu_info->cfr_info.rtt_che_buffer_pointer_low32 =
|
||||
HAL_RX_GET(rx_tlv,
|
||||
PHYRX_PKT_END_12_RX_PKT_END_DETAILS_RX_LOCATION_INFO_DETAILS,
|
||||
RTT_CHE_BUFFER_POINTER_LOW32);
|
||||
|
||||
ppdu_info->cfr_info.rtt_che_buffer_pointer_high8 =
|
||||
HAL_RX_GET(rx_tlv,
|
||||
PHYRX_PKT_END_11_RX_PKT_END_DETAILS_RX_LOCATION_INFO_DETAILS,
|
||||
RTT_CHE_BUFFER_POINTER_HIGH8);
|
||||
|
||||
ppdu_info->cfr_info.chan_capture_status =
|
||||
HAL_RX_GET(rx_tlv,
|
||||
PHYRX_PKT_END_13_RX_PKT_END_DETAILS_RX_LOCATION_INFO_DETAILS,
|
||||
RESERVED_8);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* hal_rx_dump_msdu_start_tlv_8074v2() : dump RX msdu_start TLV in structured
|
||||
* human readable format.
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2016-2020 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
|
||||
@@ -1431,6 +1431,8 @@ struct hal_hw_txrx_ops qcn9000_hal_hw_txrx_ops = {
|
||||
hal_rx_msdu_get_flow_params_9000,
|
||||
hal_rx_tlv_get_tcp_chksum_9000,
|
||||
hal_rx_get_rx_sequence_9000,
|
||||
NULL,
|
||||
NULL,
|
||||
};
|
||||
|
||||
struct hal_hw_srng_config hw_srng_table_9000[] = {
|
||||
|
Reference in New Issue
Block a user