From: Pavankumar Nandeshwar Move the following callbacks from hal_rx_ops to hal_ops for use in non-performance-critical paths: rx_desc_set_msdu_len rx_desc_get_dot11_hdr rx_desc_get_crypto_header rx_desc_copy_end_tlv rx_desc_get_msdu_src_link_id rx_desc_get_desc_size hal_rx_ops currently includes callbacks used in both critical and non-critical Rx paths. To reduce function pointer indirection in hot path, performance-critical ops will be consolidated into a single extraction API in a follow-up patch. Begin cleanup by migrating non-performance-critical callbacks from hal_rx_ops to hal_ops. Once the extraction API is in place, remove hal_rx_ops entirely to simplify the HAL interface. Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.4.1-00199-QCAHKSWPL_SILICONZ-1 Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3 Signed-off-by: Pavankumar Nandeshwar Signed-off-by: Ripan Deuri --- drivers/net/wireless/ath/ath12k/dp.c | 2 +- drivers/net/wireless/ath/ath12k/dp_rx.h | 10 +++++----- drivers/net/wireless/ath/ath12k/hal.c | 25 ++++++++++++------------- drivers/net/wireless/ath/ath12k/hal.h | 20 ++++++++++---------- 4 files changed, 28 insertions(+), 29 deletions(-) diff --git a/drivers/net/wireless/ath/ath12k/dp.c b/drivers/net/wireless/ath/ath12k/dp.c index 83d41154c115..9dd602311433 100644 --- a/drivers/net/wireless/ath/ath12k/dp.c +++ b/drivers/net/wireless/ath/ath12k/dp.c @@ -897,7 +897,7 @@ void ath12k_dp_pdev_pre_alloc(struct ath12k *ar) void ath12k_dp_hal_rx_desc_init(struct ath12k_base *ab) { - ab->hal.hal_desc_sz = ab->hal_rx_ops->rx_desc_get_desc_size(); + ab->hal.hal_desc_sz = ab->hw_params->hal_ops->rx_desc_get_desc_size(); } int ath12k_dp_pdev_alloc(struct ath12k_base *ab) diff --git a/drivers/net/wireless/ath/ath12k/dp_rx.h b/drivers/net/wireless/ath/ath12k/dp_rx.h index 6f56a56db097..150f4b1dbfbb 100644 --- a/drivers/net/wireless/ath/ath12k/dp_rx.h +++ b/drivers/net/wireless/ath/ath12k/dp_rx.h @@ -269,14 +269,14 @@ static inline void ath12k_dp_rx_desc_end_tlv_copy(struct ath12k_base *ab, struct hal_rx_desc *fdesc, struct hal_rx_desc *ldesc) { - ab->hal_rx_ops->rx_desc_copy_end_tlv(fdesc, ldesc); + ab->hw_params->hal_ops->rx_desc_copy_end_tlv(fdesc, ldesc); } static inline void ath12k_dp_rxdesc_set_msdu_len(struct ath12k_base *ab, struct hal_rx_desc *desc, u16 len) { - ab->hal_rx_ops->rx_desc_set_msdu_len(desc, len); + ab->hw_params->hal_ops->rx_desc_set_msdu_len(desc, len); } static inline u32 ath12k_dp_rxdesc_get_ppduid(struct ath12k_base *ab, @@ -318,7 +318,7 @@ static inline void ath12k_dp_rx_desc_get_dot11_hdr(struct ath12k_base *ab, struct hal_rx_desc *desc, struct ieee80211_hdr *hdr) { - ab->hal_rx_ops->rx_desc_get_dot11_hdr(desc, hdr); + ab->hw_params->hal_ops->rx_desc_get_dot11_hdr(desc, hdr); } static inline void ath12k_dp_rx_desc_get_crypto_header(struct ath12k_base *ab, @@ -326,13 +326,13 @@ static inline void ath12k_dp_rx_desc_get_crypto_header(struct ath12k_base *ab, u8 *crypto_hdr, enum hal_encrypt_type enctype) { - ab->hal_rx_ops->rx_desc_get_crypto_header(desc, crypto_hdr, enctype); + ab->hw_params->hal_ops->rx_desc_get_crypto_header(desc, crypto_hdr, enctype); } static inline u8 ath12k_dp_rx_get_msdu_src_link(struct ath12k_base *ab, struct hal_rx_desc *desc) { - return ab->hal_rx_ops->rx_desc_get_msdu_src_link_id(desc); + return ab->hw_params->hal_ops->rx_desc_get_msdu_src_link_id(desc); } static inline void ath12k_dp_clean_up_skb_list(struct sk_buff_head *skb_list) diff --git a/drivers/net/wireless/ath/ath12k/hal.c b/drivers/net/wireless/ath/ath12k/hal.c index 329c458d1fe2..60a4e5766f51 100644 --- a/drivers/net/wireless/ath/ath12k/hal.c +++ b/drivers/net/wireless/ath/ath12k/hal.c @@ -428,29 +428,28 @@ const struct hal_rx_ops hal_rx_qcn9274_compact_ops = { .rx_desc_get_msdu_nss = ath12k_hal_rx_desc_get_msdu_nss_qcn9274, .rx_desc_get_mpdu_tid = ath12k_hal_rx_desc_get_mpdu_tid_qcn9274, .rx_desc_get_mpdu_peer_id = ath12k_hal_rx_desc_get_mpdu_peer_id_qcn9274, - .rx_desc_copy_end_tlv = ath12k_hal_rx_desc_copy_end_tlv_qcn9274, .rx_desc_get_mpdu_ppdu_id = ath12k_hal_rx_desc_get_mpdu_ppdu_id_qcn9274, - .rx_desc_set_msdu_len = ath12k_hal_rx_desc_set_msdu_len_qcn9274, .rx_desc_get_msdu_payload = ath12k_hal_rx_desc_get_msdu_payload_qcn9274, .rx_desc_mac_addr2_valid = ath12k_hal_rx_desc_mac_addr2_valid_qcn9274, .rx_desc_mpdu_start_addr2 = ath12k_hal_rx_desc_mpdu_start_addr2_qcn9274, .rx_desc_is_da_mcbc = ath12k_hal_rx_desc_is_da_mcbc_qcn9274, - .rx_desc_get_dot11_hdr = ath12k_hal_rx_desc_get_dot11_hdr_qcn9274, - .rx_desc_get_crypto_header = ath12k_hal_rx_desc_get_crypto_hdr_qcn9274, .dp_rx_h_msdu_done = ath12k_hal_rx_h_msdu_done_qcn9274, .dp_rx_h_l4_cksum_fail = ath12k_hal_rx_h_l4_cksum_fail_qcn9274, .dp_rx_h_ip_cksum_fail = ath12k_hal_rx_h_ip_cksum_fail_qcn9274, .dp_rx_h_is_decrypted = ath12k_hal_rx_h_is_decrypted_qcn9274, .dp_rx_h_mpdu_err = ath12k_hal_rx_h_mpdu_err_qcn9274, - .rx_desc_get_desc_size = ath12k_hal_get_rx_desc_size_qcn9274, - .rx_desc_get_msdu_src_link_id = - ath12k_hal_rx_desc_get_msdu_src_link_qcn9274, }; EXPORT_SYMBOL(hal_rx_qcn9274_compact_ops); const struct hal_ops hal_qcn9274_ops = { .create_srng_config = ath12k_hal_srng_create_config_qcn9274, .tcl_to_wbm_rbm_map = ath12k_hal_qcn9274_tcl_to_wbm_rbm_map, + .rx_desc_set_msdu_len = ath12k_hal_rx_desc_set_msdu_len_qcn9274, + .rx_desc_get_dot11_hdr = ath12k_hal_rx_desc_get_dot11_hdr_qcn9274, + .rx_desc_get_crypto_header = ath12k_hal_rx_desc_get_crypto_hdr_qcn9274, + .rx_desc_copy_end_tlv = ath12k_hal_rx_desc_copy_end_tlv_qcn9274, + .rx_desc_get_msdu_src_link_id = ath12k_hal_rx_desc_get_msdu_src_link_qcn9274, + .rx_desc_get_desc_size = ath12k_hal_get_rx_desc_size_qcn9274, }; EXPORT_SYMBOL(hal_qcn9274_ops); @@ -598,29 +597,29 @@ const struct hal_rx_ops hal_rx_wcn7850_ops = { .rx_desc_get_msdu_nss = ath12k_hal_rx_desc_get_msdu_nss_wcn7850, .rx_desc_get_mpdu_tid = ath12k_hal_rx_desc_get_mpdu_tid_wcn7850, .rx_desc_get_mpdu_peer_id = ath12k_hal_rx_desc_get_mpdu_peer_id_wcn7850, - .rx_desc_copy_end_tlv = ath12k_hal_rx_desc_copy_end_tlv_wcn7850, .rx_desc_get_mpdu_start_tag = ath12k_hal_rx_desc_get_mpdu_start_tag_wcn7850, .rx_desc_get_mpdu_ppdu_id = ath12k_hal_rx_desc_get_mpdu_ppdu_id_wcn7850, - .rx_desc_set_msdu_len = ath12k_hal_rx_desc_set_msdu_len_wcn7850, .rx_desc_get_msdu_payload = ath12k_hal_rx_desc_get_msdu_payload_wcn7850, .rx_desc_mac_addr2_valid = ath12k_hal_rx_desc_mac_addr2_valid_wcn7850, .rx_desc_mpdu_start_addr2 = ath12k_hal_rx_desc_mpdu_start_addr2_wcn7850, .rx_desc_is_da_mcbc = ath12k_hal_rx_desc_is_da_mcbc_wcn7850, - .rx_desc_get_dot11_hdr = ath12k_hal_rx_desc_get_dot11_hdr_wcn7850, - .rx_desc_get_crypto_header = ath12k_hal_rx_desc_get_crypto_hdr_wcn7850, .dp_rx_h_msdu_done = ath12k_hal_rx_h_msdu_done_wcn7850, .dp_rx_h_l4_cksum_fail = ath12k_hal_rx_h_l4_cksum_fail_wcn7850, .dp_rx_h_ip_cksum_fail = ath12k_hal_rx_h_ip_cksum_fail_wcn7850, .dp_rx_h_is_decrypted = ath12k_hal_rx_h_is_decrypted_wcn7850, .dp_rx_h_mpdu_err = ath12k_hal_rx_h_mpdu_err_wcn7850, - .rx_desc_get_desc_size = ath12k_hal_get_rx_desc_size_wcn7850, - .rx_desc_get_msdu_src_link_id = ath12k_hal_rx_desc_get_msdu_src_link_wcn7850, }; EXPORT_SYMBOL(hal_rx_wcn7850_ops); const struct hal_ops hal_wcn7850_ops = { .create_srng_config = ath12k_hal_srng_create_config_wcn7850, .tcl_to_wbm_rbm_map = ath12k_hal_wcn7850_tcl_to_wbm_rbm_map, + .rx_desc_set_msdu_len = ath12k_hal_rx_desc_set_msdu_len_wcn7850, + .rx_desc_get_dot11_hdr = ath12k_hal_rx_desc_get_dot11_hdr_wcn7850, + .rx_desc_get_crypto_header = ath12k_hal_rx_desc_get_crypto_hdr_wcn7850, + .rx_desc_copy_end_tlv = ath12k_hal_rx_desc_copy_end_tlv_wcn7850, + .rx_desc_get_msdu_src_link_id = ath12k_hal_rx_desc_get_msdu_src_link_wcn7850, + .rx_desc_get_desc_size = ath12k_hal_get_rx_desc_size_wcn7850, }; EXPORT_SYMBOL(hal_wcn7850_ops); diff --git a/drivers/net/wireless/ath/ath12k/hal.h b/drivers/net/wireless/ath/ath12k/hal.h index ee0c22d65d2c..553d93dcc268 100644 --- a/drivers/net/wireless/ath/ath12k/hal.h +++ b/drivers/net/wireless/ath/ath12k/hal.h @@ -1569,33 +1569,33 @@ struct hal_rx_ops { u8 (*rx_desc_get_msdu_nss)(struct hal_rx_desc *desc); u8 (*rx_desc_get_mpdu_tid)(struct hal_rx_desc *desc); u16 (*rx_desc_get_mpdu_peer_id)(struct hal_rx_desc *desc); - void (*rx_desc_copy_end_tlv)(struct hal_rx_desc *fdesc, - struct hal_rx_desc *ldesc); u32 (*rx_desc_get_mpdu_start_tag)(struct hal_rx_desc *desc); u32 (*rx_desc_get_mpdu_ppdu_id)(struct hal_rx_desc *desc); - void (*rx_desc_set_msdu_len)(struct hal_rx_desc *desc, u16 len); struct rx_attention *(*rx_desc_get_attention)(struct hal_rx_desc *desc); u8 *(*rx_desc_get_msdu_payload)(struct hal_rx_desc *desc); bool (*rx_desc_mac_addr2_valid)(struct hal_rx_desc *desc); u8* (*rx_desc_mpdu_start_addr2)(struct hal_rx_desc *desc); bool (*rx_desc_is_da_mcbc)(struct hal_rx_desc *desc); - void (*rx_desc_get_dot11_hdr)(struct hal_rx_desc *desc, - struct ieee80211_hdr *hdr); - void (*rx_desc_get_crypto_header)(struct hal_rx_desc *desc, - u8 *crypto_hdr, - enum hal_encrypt_type enctype); bool (*dp_rx_h_msdu_done)(struct hal_rx_desc *desc); bool (*dp_rx_h_l4_cksum_fail)(struct hal_rx_desc *desc); bool (*dp_rx_h_ip_cksum_fail)(struct hal_rx_desc *desc); bool (*dp_rx_h_is_decrypted)(struct hal_rx_desc *desc); u32 (*dp_rx_h_mpdu_err)(struct hal_rx_desc *desc); - u32 (*rx_desc_get_desc_size)(void); - u8 (*rx_desc_get_msdu_src_link_id)(struct hal_rx_desc *desc); }; struct hal_ops { int (*create_srng_config)(struct ath12k_base *ab); const struct ath12k_hal_tcl_to_wbm_rbm_map *tcl_to_wbm_rbm_map; + void (*rx_desc_set_msdu_len)(struct hal_rx_desc *desc, u16 len); + void (*rx_desc_get_dot11_hdr)(struct hal_rx_desc *desc, + struct ieee80211_hdr *hdr); + void (*rx_desc_get_crypto_header)(struct hal_rx_desc *desc, + u8 *crypto_hdr, + enum hal_encrypt_type enctype); + void (*rx_desc_copy_end_tlv)(struct hal_rx_desc *fdesc, + struct hal_rx_desc *ldesc); + u8 (*rx_desc_get_msdu_src_link_id)(struct hal_rx_desc *desc); + u32 (*rx_desc_get_desc_size)(void); }; extern const struct hal_ops hal_qcn9274_ops; -- 2.34.1