From 12c8b0d0bee551cfd81969c40a978bbb2a40ea7b Mon Sep 17 00:00:00 2001 From: Sai Rupesh Chevuru Date: Fri, 5 Aug 2022 01:46:28 +0530 Subject: [PATCH] qcacmn: compact tlv support for QCN9224 Adding compact tlv support for QCN9224, As part of this change Rx tlv size will reduce from 384 bytes to 128 bytes. Change-Id: I3f42a781e42b2e696a5b25d9c5f333c8cc83b7fe CRs-Fixed: 3274152 --- dp/wifi3.0/be/dp_be.c | 1 + dp/wifi3.0/be/dp_be_rx.c | 69 ++ dp/wifi3.0/be/dp_be_rx.h | 14 + dp/wifi3.0/dp_rx.h | 12 + dp/wifi3.0/dp_rx_err.c | 104 +-- dp/wifi3.0/dp_types.h | 2 + dp/wifi3.0/li/dp_li.c | 1 + dp/wifi3.0/li/dp_li_rx.c | 76 ++ dp/wifi3.0/li/dp_li_rx.h | 14 + hal/wifi3.0/be/hal_be_generic_api.c | 2 + hal/wifi3.0/be/hal_be_rx_tlv.h | 1016 +++++++++++++++++++-------- hal/wifi3.0/qcn9224/hal_9224.h | 607 +--------------- 12 files changed, 940 insertions(+), 978 deletions(-) diff --git a/dp/wifi3.0/be/dp_be.c b/dp/wifi3.0/be/dp_be.c index 16472b02b1..4bfa8362ae 100644 --- a/dp/wifi3.0/be/dp_be.c +++ b/dp/wifi3.0/be/dp_be.c @@ -2130,6 +2130,7 @@ void dp_initialize_arch_ops_be(struct dp_arch_ops *arch_ops) arch_ops->dp_rxdma_ring_sel_cfg = dp_rxdma_ring_sel_cfg_be; arch_ops->dp_rx_peer_metadata_peer_id_get = dp_rx_peer_metadata_peer_id_get_be; + arch_ops->dp_rx_chain_msdus = dp_rx_chain_msdus_be; arch_ops->soc_cfg_attach = dp_soc_cfg_attach_be; arch_ops->tx_implicit_rbm_set = dp_tx_implicit_rbm_set_be; arch_ops->txrx_set_vdev_param = dp_txrx_set_vdev_param_be; diff --git a/dp/wifi3.0/be/dp_be_rx.c b/dp/wifi3.0/be/dp_be_rx.c index a52258229c..d664e5bc85 100644 --- a/dp/wifi3.0/be/dp_be_rx.c +++ b/dp/wifi3.0/be/dp_be_rx.c @@ -1672,3 +1672,72 @@ bool dp_rx_intrabss_fwd_be(struct dp_soc *soc, struct dp_txrx_peer *ta_peer, return ret; } #endif + +bool dp_rx_chain_msdus_be(struct dp_soc *soc, qdf_nbuf_t nbuf, + uint8_t *rx_tlv_hdr, uint8_t mac_id) +{ + bool mpdu_done = false; + qdf_nbuf_t curr_nbuf = NULL; + qdf_nbuf_t tmp_nbuf = NULL; + + struct dp_pdev *dp_pdev = dp_get_pdev_for_lmac_id(soc, mac_id); + + if (!dp_pdev) { + dp_rx_debug("%pK: pdev is null for mac_id = %d", soc, mac_id); + return mpdu_done; + } + /* if invalid peer SG list has max values free the buffers in list + * and treat current buffer as start of list + * + * current logic to detect the last buffer from attn_tlv is not reliable + * in OFDMA UL scenario hence add max buffers check to avoid list pile + * up + */ + if (!dp_pdev->first_nbuf || + (dp_pdev->invalid_peer_head_msdu && + QDF_NBUF_CB_RX_NUM_ELEMENTS_IN_LIST + (dp_pdev->invalid_peer_head_msdu) >= DP_MAX_INVALID_BUFFERS)) { + qdf_nbuf_set_rx_chfrag_start(nbuf, 1); + dp_pdev->first_nbuf = true; + + /* If the new nbuf received is the first msdu of the + * amsdu and there are msdus in the invalid peer msdu + * list, then let us free all the msdus of the invalid + * peer msdu list. + * This scenario can happen when we start receiving + * new a-msdu even before the previous a-msdu is completely + * received. + */ + curr_nbuf = dp_pdev->invalid_peer_head_msdu; + while (curr_nbuf) { + tmp_nbuf = curr_nbuf->next; + dp_rx_nbuf_free(curr_nbuf); + curr_nbuf = tmp_nbuf; + } + + dp_pdev->invalid_peer_head_msdu = NULL; + dp_pdev->invalid_peer_tail_msdu = NULL; + + dp_monitor_get_mpdu_status(dp_pdev, soc, rx_tlv_hdr); + } + + if (qdf_nbuf_is_rx_chfrag_end(nbuf) && + hal_rx_attn_msdu_done_get(soc->hal_soc, rx_tlv_hdr)) { + qdf_assert_always(dp_pdev->first_nbuf); + dp_pdev->first_nbuf = false; + mpdu_done = true; + } + + /* + * For MCL, invalid_peer_head_msdu and invalid_peer_tail_msdu + * should be NULL here, add the checking for debugging purpose + * in case some corner case. + */ + DP_PDEV_INVALID_PEER_MSDU_CHECK(dp_pdev->invalid_peer_head_msdu, + dp_pdev->invalid_peer_tail_msdu); + DP_RX_LIST_APPEND(dp_pdev->invalid_peer_head_msdu, + dp_pdev->invalid_peer_tail_msdu, + nbuf); + + return mpdu_done; +} diff --git a/dp/wifi3.0/be/dp_be_rx.h b/dp/wifi3.0/be/dp_be_rx.h index 7448ece3f6..e532a2e2b0 100644 --- a/dp/wifi3.0/be/dp_be_rx.h +++ b/dp/wifi3.0/be/dp_be_rx.h @@ -80,6 +80,20 @@ uint32_t dp_rx_process_be(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, uint8_t reo_ring_num, uint32_t quota); +/** + * dp_rx_chain_msdus_be() - Function to chain all msdus of a mpdu + * to pdev invalid peer list + * + * @soc: core DP main context + * @nbuf: Buffer pointer + * @rx_tlv_hdr: start of rx tlv header + * @mac_id: mac id + * + * Return: bool: true for last msdu of mpdu + */ +bool dp_rx_chain_msdus_be(struct dp_soc *soc, qdf_nbuf_t nbuf, + uint8_t *rx_tlv_hdr, uint8_t mac_id); + /** * dp_rx_desc_pool_init_be() - Initialize Rx Descriptor pool(s) * @soc: Handle to DP Soc structure diff --git a/dp/wifi3.0/dp_rx.h b/dp/wifi3.0/dp_rx.h index 0dc0d953f6..72f8d7bfcd 100644 --- a/dp/wifi3.0/dp_rx.h +++ b/dp/wifi3.0/dp_rx.h @@ -44,6 +44,18 @@ #define DP_DEFRAG_RBM(sw0_bm_id) HAL_RX_BUF_RBM_SW3_BM(sw0_bm_id) #endif +/* Max buffer in invalid peer SG list*/ +#define DP_MAX_INVALID_BUFFERS 10 +#ifdef DP_INVALID_PEER_ASSERT +#define DP_PDEV_INVALID_PEER_MSDU_CHECK(head, tail) \ + do { \ + qdf_assert_always(!(head)); \ + qdf_assert_always(!(tail)); \ + } while (0) +#else +#define DP_PDEV_INVALID_PEER_MSDU_CHECK(head, tail) /* no op */ +#endif + #define RX_BUFFER_RESERVATION 0 #ifdef BE_PKTLOG_SUPPORT #define BUFFER_RESIDUE 1 diff --git a/dp/wifi3.0/dp_rx_err.c b/dp/wifi3.0/dp_rx_err.c index 955f6daa1e..020273dd0f 100644 --- a/dp/wifi3.0/dp_rx_err.c +++ b/dp/wifi3.0/dp_rx_err.c @@ -50,8 +50,6 @@ #ifndef QCA_HOST_MODE_WIFI_DISABLED -/* Max buffer in invalid peer SG list*/ -#define DP_MAX_INVALID_BUFFERS 10 /* Max regular Rx packet routing error */ #define DP_MAX_REG_RX_ROUTING_ERRS_THRESHOLD 20 @@ -723,104 +721,6 @@ _dp_rx_bar_frame_handle(struct dp_soc *soc, qdf_nbuf_t nbuf, dp_peer_unref_delete(peer, DP_MOD_ID_RX_ERR); } -#ifdef DP_INVALID_PEER_ASSERT -#define DP_PDEV_INVALID_PEER_MSDU_CHECK(head, tail) \ - do { \ - qdf_assert_always(!(head)); \ - qdf_assert_always(!(tail)); \ - } while (0) -#else -#define DP_PDEV_INVALID_PEER_MSDU_CHECK(head, tail) /* no op */ -#endif - -/** - * dp_rx_chain_msdus() - Function to chain all msdus of a mpdu - * to pdev invalid peer list - * - * @soc: core DP main context - * @nbuf: Buffer pointer - * @rx_tlv_hdr: start of rx tlv header - * @mac_id: mac id - * - * Return: bool: true for last msdu of mpdu - */ -static bool -dp_rx_chain_msdus(struct dp_soc *soc, qdf_nbuf_t nbuf, - uint8_t *rx_tlv_hdr, uint8_t mac_id) -{ - bool mpdu_done = false; - qdf_nbuf_t curr_nbuf = NULL; - qdf_nbuf_t tmp_nbuf = NULL; - - /* TODO: Currently only single radio is supported, hence - * pdev hard coded to '0' index - */ - struct dp_pdev *dp_pdev = dp_get_pdev_for_lmac_id(soc, mac_id); - - if (!dp_pdev) { - dp_rx_err_debug("%pK: pdev is null for mac_id = %d", soc, mac_id); - return mpdu_done; - } - /* if invalid peer SG list has max values free the buffers in list - * and treat current buffer as start of list - * - * current logic to detect the last buffer from attn_tlv is not reliable - * in OFDMA UL scenario hence add max buffers check to avoid list pile - * up - */ - if (!dp_pdev->first_nbuf || - (dp_pdev->invalid_peer_head_msdu && - QDF_NBUF_CB_RX_NUM_ELEMENTS_IN_LIST - (dp_pdev->invalid_peer_head_msdu) >= DP_MAX_INVALID_BUFFERS)) { - qdf_nbuf_set_rx_chfrag_start(nbuf, 1); - dp_pdev->ppdu_id = hal_rx_get_ppdu_id(soc->hal_soc, - rx_tlv_hdr); - dp_pdev->first_nbuf = true; - - /* If the new nbuf received is the first msdu of the - * amsdu and there are msdus in the invalid peer msdu - * list, then let us free all the msdus of the invalid - * peer msdu list. - * This scenario can happen when we start receiving - * new a-msdu even before the previous a-msdu is completely - * received. - */ - curr_nbuf = dp_pdev->invalid_peer_head_msdu; - while (curr_nbuf) { - tmp_nbuf = curr_nbuf->next; - dp_rx_nbuf_free(curr_nbuf); - curr_nbuf = tmp_nbuf; - } - - dp_pdev->invalid_peer_head_msdu = NULL; - dp_pdev->invalid_peer_tail_msdu = NULL; - - dp_monitor_get_mpdu_status(dp_pdev, soc, rx_tlv_hdr); - } - - if (dp_pdev->ppdu_id == hal_rx_attn_phy_ppdu_id_get(soc->hal_soc, - rx_tlv_hdr) && - hal_rx_attn_msdu_done_get(soc->hal_soc, rx_tlv_hdr)) { - qdf_nbuf_set_rx_chfrag_end(nbuf, 1); - qdf_assert_always(dp_pdev->first_nbuf == true); - dp_pdev->first_nbuf = false; - mpdu_done = true; - } - - /* - * For MCL, invalid_peer_head_msdu and invalid_peer_tail_msdu - * should be NULL here, add the checking for debugging purpose - * in case some corner case. - */ - DP_PDEV_INVALID_PEER_MSDU_CHECK(dp_pdev->invalid_peer_head_msdu, - dp_pdev->invalid_peer_tail_msdu); - DP_RX_LIST_APPEND(dp_pdev->invalid_peer_head_msdu, - dp_pdev->invalid_peer_tail_msdu, - nbuf); - - return mpdu_done; -} - /** * dp_rx_bar_frame_handle() - Function to handle err BAR frames * @soc: core DP main context @@ -1262,7 +1162,9 @@ dp_rx_null_q_desc_handle(struct dp_soc *soc, qdf_nbuf_t nbuf, dp_rx_process_invalid_peer_wrapper(soc, nbuf, mpdu_done, pool_id); } else { - mpdu_done = dp_rx_chain_msdus(soc, nbuf, rx_tlv_hdr, pool_id); + mpdu_done = soc->arch_ops.dp_rx_chain_msdus(soc, nbuf, + rx_tlv_hdr, + pool_id); /* Trigger invalid peer handler wrapper */ dp_rx_process_invalid_peer_wrapper(soc, pdev->invalid_peer_head_msdu, diff --git a/dp/wifi3.0/dp_types.h b/dp/wifi3.0/dp_types.h index 2154c04ae6..52193fc2b0 100644 --- a/dp/wifi3.0/dp_types.h +++ b/dp/wifi3.0/dp_types.h @@ -1925,6 +1925,8 @@ struct dp_arch_ops { uint8_t bm_id); uint16_t (*dp_rx_peer_metadata_peer_id_get)(struct dp_soc *soc, uint32_t peer_metadata); + bool (*dp_rx_chain_msdus)(struct dp_soc *soc, qdf_nbuf_t nbuf, + uint8_t *rx_tlv_hdr, uint8_t mac_id); /* Control Arch Ops */ QDF_STATUS (*txrx_set_vdev_param)(struct dp_soc *soc, struct dp_vdev *vdev, diff --git a/dp/wifi3.0/li/dp_li.c b/dp/wifi3.0/li/dp_li.c index 193a74fd75..ec9350d43d 100644 --- a/dp/wifi3.0/li/dp_li.c +++ b/dp/wifi3.0/li/dp_li.c @@ -619,6 +619,7 @@ void dp_initialize_arch_ops_li(struct dp_arch_ops *arch_ops) arch_ops->dp_rxdma_ring_sel_cfg = dp_rxdma_ring_sel_cfg_li; arch_ops->dp_rx_peer_metadata_peer_id_get = dp_rx_peer_metadata_peer_id_get_li; + arch_ops->dp_rx_chain_msdus = dp_rx_chain_msdus_li; arch_ops->soc_cfg_attach = dp_soc_cfg_attach_li; arch_ops->tx_implicit_rbm_set = dp_tx_implicit_rbm_set_li; arch_ops->txrx_set_vdev_param = dp_txrx_set_vdev_param_li; diff --git a/dp/wifi3.0/li/dp_li_rx.c b/dp/wifi3.0/li/dp_li_rx.c index d1cc803415..adac3eaf3f 100644 --- a/dp/wifi3.0/li/dp_li_rx.c +++ b/dp/wifi3.0/li/dp_li_rx.c @@ -1013,3 +1013,79 @@ QDF_STATUS dp_wbm_get_rx_desc_from_hal_desc_li( return QDF_STATUS_SUCCESS; } + +bool dp_rx_chain_msdus_li(struct dp_soc *soc, qdf_nbuf_t nbuf, + uint8_t *rx_tlv_hdr, uint8_t mac_id) +{ + bool mpdu_done = false; + qdf_nbuf_t curr_nbuf = NULL; + qdf_nbuf_t tmp_nbuf = NULL; + + /* TODO: Currently only single radio is supported, hence + * pdev hard coded to '0' index + */ + struct dp_pdev *dp_pdev = dp_get_pdev_for_lmac_id(soc, mac_id); + + if (!dp_pdev) { + dp_rx_debug("%pK: pdev is null for mac_id = %d", soc, mac_id); + return mpdu_done; + } + /* if invalid peer SG list has max values free the buffers in list + * and treat current buffer as start of list + * + * current logic to detect the last buffer from attn_tlv is not reliable + * in OFDMA UL scenario hence add max buffers check to avoid list pile + * up + */ + if (!dp_pdev->first_nbuf || + (dp_pdev->invalid_peer_head_msdu && + QDF_NBUF_CB_RX_NUM_ELEMENTS_IN_LIST + (dp_pdev->invalid_peer_head_msdu) >= DP_MAX_INVALID_BUFFERS)) { + qdf_nbuf_set_rx_chfrag_start(nbuf, 1); + dp_pdev->ppdu_id = hal_rx_get_ppdu_id(soc->hal_soc, + rx_tlv_hdr); + dp_pdev->first_nbuf = true; + + /* If the new nbuf received is the first msdu of the + * amsdu and there are msdus in the invalid peer msdu + * list, then let us free all the msdus of the invalid + * peer msdu list. + * This scenario can happen when we start receiving + * new a-msdu even before the previous a-msdu is completely + * received. + */ + curr_nbuf = dp_pdev->invalid_peer_head_msdu; + while (curr_nbuf) { + tmp_nbuf = curr_nbuf->next; + dp_rx_nbuf_free(curr_nbuf); + curr_nbuf = tmp_nbuf; + } + + dp_pdev->invalid_peer_head_msdu = NULL; + dp_pdev->invalid_peer_tail_msdu = NULL; + + dp_monitor_get_mpdu_status(dp_pdev, soc, rx_tlv_hdr); + } + + if (dp_pdev->ppdu_id == hal_rx_attn_phy_ppdu_id_get(soc->hal_soc, + rx_tlv_hdr) && + hal_rx_attn_msdu_done_get(soc->hal_soc, rx_tlv_hdr)) { + qdf_nbuf_set_rx_chfrag_end(nbuf, 1); + qdf_assert_always(dp_pdev->first_nbuf); + dp_pdev->first_nbuf = false; + mpdu_done = true; + } + + /* + * For MCL, invalid_peer_head_msdu and invalid_peer_tail_msdu + * should be NULL here, add the checking for debugging purpose + * in case some corner case. + */ + DP_PDEV_INVALID_PEER_MSDU_CHECK(dp_pdev->invalid_peer_head_msdu, + dp_pdev->invalid_peer_tail_msdu); + DP_RX_LIST_APPEND(dp_pdev->invalid_peer_head_msdu, + dp_pdev->invalid_peer_tail_msdu, + nbuf); + + return mpdu_done; +} diff --git a/dp/wifi3.0/li/dp_li_rx.h b/dp/wifi3.0/li/dp_li_rx.h index d309f923b0..698d36594f 100644 --- a/dp/wifi3.0/li/dp_li_rx.h +++ b/dp/wifi3.0/li/dp_li_rx.h @@ -28,6 +28,20 @@ uint32_t dp_rx_process_li(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl, uint8_t reo_ring_num, uint32_t quota); +/** + * dp_rx_chain_msdus_li() - Function to chain all msdus of a mpdu + * to pdev invalid peer list + * + * @soc: core DP main context + * @nbuf: Buffer pointer + * @rx_tlv_hdr: start of rx tlv header + * @mac_id: mac id + * + * Return: bool: true for last msdu of mpdu + */ +bool dp_rx_chain_msdus_li(struct dp_soc *soc, qdf_nbuf_t nbuf, + uint8_t *rx_tlv_hdr, uint8_t mac_id); + /** * dp_rx_desc_pool_init_li() - Initialize Rx Descriptor pool(s) * @soc: Handle to DP Soc structure diff --git a/hal/wifi3.0/be/hal_be_generic_api.c b/hal/wifi3.0/be/hal_be_generic_api.c index aef390475c..a52cf2a01f 100644 --- a/hal/wifi3.0/be/hal_be_generic_api.c +++ b/hal/wifi3.0/be/hal_be_generic_api.c @@ -970,7 +970,9 @@ void hal_hw_txrx_default_ops_attach_be(struct hal_soc *hal_soc) hal_soc->ops->hal_reset_rx_reo_tid_q = hal_reset_rx_reo_tid_q_be; #endif hal_soc->ops->hal_rx_tlv_get_pn_num = hal_rx_tlv_get_pn_num_be; +#ifndef CONFIG_WORD_BASED_TLV hal_soc->ops->hal_rx_get_qdesc_addr = hal_rx_get_qdesc_addr_be; +#endif hal_soc->ops->hal_set_reo_ent_desc_reo_dest_ind = hal_set_reo_ent_desc_reo_dest_ind_be; hal_soc->ops->hal_get_reo_ent_desc_qdesc_addr = diff --git a/hal/wifi3.0/be/hal_be_rx_tlv.h b/hal/wifi3.0/be/hal_be_rx_tlv.h index 7e8e17f3ec..96a25769be 100644 --- a/hal/wifi3.0/be/hal_be_rx_tlv.h +++ b/hal/wifi3.0/be/hal_be_rx_tlv.h @@ -29,22 +29,382 @@ #define HAL_RX_BE_PKT_HDR_TLV_LEN 112 -#ifndef CONFIG_WORD_BASED_TLV -typedef struct rx_mpdu_start hal_rx_mpdu_start_t; -typedef struct rx_msdu_end hal_rx_msdu_end_t; -#endif - -#define RX_BE_PADDING0_BYTES 8 -/* - * Each RX descriptor TLV is preceded by 1 QWORD "tag" - */ - struct rx_pkt_hdr_tlv { uint64_t tag; /* 8 B */ uint64_t phy_ppdu_id; /* 8 B */ char rx_pkt_hdr[HAL_RX_BE_PKT_HDR_TLV_LEN]; /* 112 B */ }; +#ifdef CONFIG_WORD_BASED_TLV +#ifndef BIG_ENDIAN_HOST +struct rx_msdu_end_compact { + uint32_t sa_sw_peer_id : 16, + sa_idx_timeout : 1, + da_idx_timeout : 1, + to_ds : 1, + tid : 4, + sa_is_valid : 1, + da_is_valid : 1, + da_is_mcbc : 1, + l3_header_padding : 2, + first_msdu : 1, + last_msdu : 1, + fr_ds : 1, + ip_chksum_fail_copy : 1; + uint32_t sa_idx : 16, + da_idx_or_sw_peer_id : 16; + uint32_t msdu_drop : 1, + reo_destination_indication : 5, + flow_idx : 20, + use_ppe : 1, + mesh_sta : 2, + vlan_ctag_stripped : 1, + vlan_stag_stripped : 1, + fragment_flag : 1; + uint32_t fse_metadata : 32; + uint32_t cce_metadata : 16, + tcp_udp_chksum : 16; + uint32_t aggregation_count : 8, + flow_aggregation_continuation : 1, + fisa_timeout : 1, + tcp_udp_chksum_fail_copy : 1, + msdu_limit_error : 1, + flow_idx_timeout : 1, + flow_idx_invalid : 1, + cce_match : 1, + amsdu_parser_error : 1, + cumulative_ip_length : 16; + uint32_t key_id_octet : 8, + reserved_8a : 24; + uint32_t reserved_9a : 6, + service_code : 9, + priority_valid : 1, + intra_bss : 1, + dest_chip_id : 2, + multicast_echo : 1, + wds_learning_event : 1, + wds_roaming_event : 1, + wds_keep_alive_event : 1, + reserved_9b : 9; + uint32_t msdu_length : 14, + stbc : 1, + ipsec_esp : 1, + l3_offset : 7, + ipsec_ah : 1, + l4_offset : 8; + uint32_t msdu_number : 8, + decap_format : 2, + ipv4_proto : 1, + ipv6_proto : 1, + tcp_proto : 1, + udp_proto : 1, + ip_frag : 1, + tcp_only_ack : 1, + da_is_bcast_mcast : 1, + toeplitz_hash_sel : 2, + ip_fixed_header_valid : 1, + ip_extn_header_valid : 1, + tcp_udp_header_valid : 1, + mesh_control_present : 1, + ldpc : 1, + ip4_protocol_ip6_next_header : 8; + uint32_t vlan_ctag_ci : 16, + vlan_stag_ci : 16; + uint32_t peer_meta_data : 32; + uint32_t user_rssi : 8, + pkt_type : 4, + sgi : 2, + rate_mcs : 4, + receive_bandwidth : 3, + reception_type : 3, + mimo_ss_bitmap : 7, + msdu_done_copy : 1; + uint32_t flow_id_toeplitz : 32; + uint32_t ppdu_start_timestamp_63_32; + uint32_t sw_phy_meta_data : 32; + uint32_t first_mpdu : 1, + reserved_16a : 1, + mcast_bcast : 1, + ast_index_not_found : 1, + ast_index_timeout : 1, + power_mgmt : 1, + non_qos : 1, + null_data : 1, + mgmt_type : 1, + ctrl_type : 1, + more_data : 1, + eosp : 1, + a_msdu_error : 1, + reserved_16b : 1, + order : 1, + wifi_parser_error : 1, + overflow_err : 1, + msdu_length_err : 1, + tcp_udp_chksum_fail : 1, + ip_chksum_fail : 1, + sa_idx_invalid : 1, + da_idx_invalid : 1, + amsdu_addr_mismatch : 1, + rx_in_tx_decrypt_byp : 1, + encrypt_required : 1, + directed : 1, + buffer_fragment : 1, + mpdu_length_err : 1, + tkip_mic_err : 1, + decrypt_err : 1, + unencrypted_frame_err : 1, + fcs_err : 1; + uint32_t reserved_17a : 10, + decrypt_status_code : 3, + rx_bitmap_not_updated : 1, + reserved_17b : 17, + msdu_done : 1; +}; + +struct rx_mpdu_start_compact { + uint32_t rx_reo_queue_desc_addr_39_32 : 8, + receive_queue_number : 16, + pre_delim_err_warning : 1, + first_delim_err : 1, + reserved_0 : 6; + uint32_t pn_31_0 : 32; + uint32_t pn_63_32 : 32; + uint32_t pn_95_64 : 32; + uint32_t ast_index : 16, + sw_peer_id : 16; + uint32_t mpdu_frame_control_valid : 1, + mpdu_duration_valid : 1, + mac_addr_ad1_valid : 1, + mac_addr_ad2_valid : 1, + mac_addr_ad3_valid : 1, + mac_addr_ad4_valid : 1, + mpdu_sequence_control_valid : 1, + mpdu_qos_control_valid : 1, + mpdu_ht_control_valid : 1, + frame_encryption_info_valid : 1, + mpdu_fragment_number : 4, + more_fragment_flag : 1, + reserved_7a : 1, + fr_ds : 1, + to_ds : 1, + encrypted : 1, + mpdu_retry : 1, + mpdu_sequence_number : 12; + uint32_t mpdu_frame_control_field : 16, + mpdu_duration_field : 16; + uint32_t mac_addr_ad1_31_0 : 32; + uint32_t mac_addr_ad1_47_32 : 16, + mac_addr_ad2_15_0 : 16; + uint32_t mac_addr_ad2_47_16 : 32; + uint32_t mac_addr_ad3_31_0 : 32; + uint32_t mac_addr_ad3_47_32 : 16, + mpdu_sequence_control_field : 16; +}; +#else +struct rx_msdu_end_compact { + uint32_t ip_chksum_fail_copy : 1, + fr_ds : 1, + last_msdu : 1, + first_msdu : 1, + l3_header_padding : 2, + da_is_mcbc : 1, + da_is_valid : 1, + sa_is_valid : 1, + tid : 4, + to_ds : 1, + da_idx_timeout : 1, + sa_idx_timeout : 1, + sa_sw_peer_id : 16; + uint32_t da_idx_or_sw_peer_id : 16, + sa_idx : 16; + uint32_t fragment_flag : 1, + vlan_stag_stripped : 1, + vlan_ctag_stripped : 1, + mesh_sta : 2, + use_ppe : 1, + flow_idx : 20, + reo_destination_indication : 5, + msdu_drop : 1; + uint32_t fse_metadata : 32; + uint32_t tcp_udp_chksum : 16, + cce_metadata : 16; + uint32_t cumulative_ip_length : 16, + amsdu_parser_error : 1, + cce_match : 1, + flow_idx_invalid : 1, + flow_idx_timeout : 1, + msdu_limit_error : 1, + tcp_udp_chksum_fail_copy : 1, + fisa_timeout : 1, + flow_aggregation_continuation : 1, + aggregation_count : 8; + uint32_t reserved_8a : 24, + key_id_octet : 8; + uint32_t reserved_9b : 9, + wds_keep_alive_event : 1, + wds_roaming_event : 1, + wds_learning_event : 1, + multicast_echo : 1, + dest_chip_id : 2, + intra_bss : 1, + priority_valid : 1, + service_code : 9, + reserved_9a : 6; + uint32_t l4_offset : 8, + ipsec_ah : 1, + l3_offset : 7, + ipsec_esp : 1, + stbc : 1, + msdu_length : 14; + uint32_t ip4_protocol_ip6_next_header : 8, + ldpc : 1, + mesh_control_present : 1, + tcp_udp_header_valid : 1, + ip_extn_header_valid : 1, + ip_fixed_header_valid : 1, + toeplitz_hash_sel : 2, + da_is_bcast_mcast : 1, + tcp_only_ack : 1, + ip_frag : 1, + udp_proto : 1, + tcp_proto : 1, + ipv6_proto : 1, + ipv4_proto : 1, + decap_format : 2, + msdu_number : 8; + uint32_t vlan_stag_ci : 16, + vlan_ctag_ci : 16; + uint32_t peer_meta_data : 32; + uint32_t msdu_done_copy : 1, + mimo_ss_bitmap : 7, + reception_type : 3, + receive_bandwidth : 3, + rate_mcs : 4, + sgi : 2, + pkt_type : 4, + user_rssi : 8; + uint32_t flow_id_toeplitz : 32; + uint32_t ppdu_start_timestamp_63_32; + uint32_t sw_phy_meta_data : 32; + uint32_t fcs_err : 1, + unencrypted_frame_err : 1, + decrypt_err : 1, + tkip_mic_err : 1, + mpdu_length_err : 1, + buffer_fragment : 1, + directed : 1, + encrypt_required : 1, + rx_in_tx_decrypt_byp : 1, + amsdu_addr_mismatch : 1, + da_idx_invalid : 1, + sa_idx_invalid : 1, + ip_chksum_fail : 1, + tcp_udp_chksum_fail : 1, + msdu_length_err : 1, + overflow_err : 1, + wifi_parser_error : 1, + order : 1, + reserved_16b : 1, + a_msdu_error : 1, + eosp : 1, + more_data : 1, + ctrl_type : 1, + mgmt_type : 1, + null_data : 1, + non_qos : 1, + power_mgmt : 1, + ast_index_timeout : 1, + ast_index_not_found : 1, + mcast_bcast : 1, + reserved_16a : 1, + first_mpdu : 1; + uint32_t msdu_done : 1, + reserved_17b : 17, + rx_bitmap_not_updated : 1, + decrypt_status_code : 3, + reserved_17a : 10; +}; + +struct rx_mpdu_start_compact { + uint32_t reserved_0 : 6, + first_delim_err : 1, + pre_delim_err_warning : 1, + receive_queue_number : 16, + rx_reo_queue_desc_addr_39_32 : 8; + uint32_t pn_31_0 : 32; + uint32_t pn_63_32 : 32; + uint32_t pn_95_64 : 32; + uint32_t sw_peer_id : 16, + ast_index : 16; + uint32_t mpdu_sequence_number : 12, + mpdu_retry : 1, + encrypted : 1, + to_ds : 1, + fr_ds : 1, + reserved_7a : 1, + more_fragment_flag : 1, + mpdu_fragment_number : 4, + frame_encryption_info_valid : 1, + mpdu_ht_control_valid : 1, + mpdu_qos_control_valid : 1, + mpdu_sequence_control_valid : 1, + mac_addr_ad4_valid : 1, + mac_addr_ad3_valid : 1, + mac_addr_ad2_valid : 1, + mac_addr_ad1_valid : 1, + mpdu_duration_valid : 1, + mpdu_frame_control_valid : 1; + uint32_t mpdu_duration_field : 16, + mpdu_frame_control_field : 16, + uint32_t mac_addr_ad1_31_0 : 32; + uint32_t mac_addr_ad2_15_0 : 16, + mac_addr_ad1_47_32 : 16; + uint32_t mac_addr_ad2_47_16 : 32; + uint32_t mac_addr_ad3_31_0 : 32; + uint32_t mpdu_sequence_control_field : 16, + mac_addr_ad3_47_32 : 16; +}; +#endif +#define RX_BE_PADDING0_BYTES 4 + +typedef struct rx_mpdu_start_compact hal_rx_mpdu_start_t; +typedef struct rx_msdu_end_compact hal_rx_msdu_end_t; + +struct rx_mpdu_start_tlv { + hal_rx_mpdu_start_t rx_mpdu_start; +}; + +struct rx_msdu_end_tlv { + uint64_t tag; /* 8 B */ + hal_rx_msdu_end_t rx_msdu_end; +}; + +struct rx_pkt_tlvs { + struct rx_msdu_end_tlv msdu_end_tlv; /* 80 bytes */ + struct rx_mpdu_start_tlv mpdu_start_tlv; /* 48 bytes */ +}; + +#define HAL_RX_MSDU_END(_rx_pkt_tlv) \ + (((struct rx_pkt_tlvs *)_rx_pkt_tlv)->msdu_end_tlv.rx_msdu_end) + +#define HAL_RX_MPDU_START(_rx_pkt_tlv) \ + (((struct rx_pkt_tlvs *)_rx_pkt_tlv)->mpdu_start_tlv. \ + rx_mpdu_start) + +#define HAL_RX_TLV_TID_GET(_rx_pkt_tlv) \ + HAL_RX_MSDU_END(_rx_pkt_tlv).tid + +#define HAL_RX_TLV_FIRST_MPDU_GET(_rx_pkt_tlv) \ + HAL_RX_MSDU_END(_rx_pkt_tlv).first_mpdu +#else /* CONFIG_WORD_BASED_TLV */ +typedef struct rx_mpdu_start hal_rx_mpdu_start_t; +typedef struct rx_msdu_end hal_rx_msdu_end_t; + +#define RX_BE_PADDING0_BYTES 8 +/* + * Each RX descriptor TLV is preceded by 1 QWORD "tag" + */ + #ifndef CONFIG_NO_TLV_TAGS struct rx_mpdu_start_tlv { uint64_t tag; /* 8 B */ @@ -82,7 +442,46 @@ struct rx_pkt_tlvs { struct rx_pkt_hdr_tlv pkt_hdr_tlv; /* 128 bytes */ #endif }; -#endif +#endif /*CONFIG_NO_TLV_TAGS */ + +#define HAL_RX_MSDU_END(_rx_pkt_tlv) \ + (((struct rx_pkt_tlvs *)_rx_pkt_tlv)->msdu_end_tlv.rx_msdu_end) + +#define HAL_RX_MPDU_START(_rx_pkt_tlv) \ + (((struct rx_pkt_tlvs *)_rx_pkt_tlv)->mpdu_start_tlv. \ + rx_mpdu_start.rx_mpdu_info_details) + +#define HAL_RX_REO_QUEUE_DESC_ADDR_31_0_GET(_rx_pkt_tlv) \ + HAL_RX_MPDU_START(_rx_pkt_tlv).rx_reo_queue_desc_addr_31_0 + +#define HAL_RX_TLV_AMPDU_FLAG_GET(_rx_pkt_tlv) \ + HAL_RX_MPDU_START(_rx_pkt_tlv).ampdu_flag + +#define HAL_RX_TLV_MPDU_PN_127_96_GET(_rx_pkt_tlv) \ + HAL_RX_MPDU_START(_rx_pkt_tlv).pn_127_96 + +#define HAL_RX_TLV_TID_GET(_rx_pkt_tlv) \ + HAL_RX_MPDU_START(_rx_pkt_tlv).tid + +#define HAL_RX_TLV_FIRST_MPDU_GET(_rx_pkt_tlv) \ + HAL_RX_MPDU_START(_rx_pkt_tlv).first_mpdu + +#define HAL_RX_TLV_L3_TYPE_GET(_rx_pkt_tlv) \ + HAL_RX_MSDU_END(_rx_pkt_tlv).l3_type + +#define HAL_RX_GET_PPDU_ID(_rx_pkt_tlv) \ + HAL_RX_MPDU_START(_rx_pkt_tlv).phy_ppdu_id + +#define HAL_RX_TLV_PHY_PPDU_ID_GET(_rx_pkt_tlv) \ + HAL_RX_MSDU_END(_rx_pkt_tlv).phy_ppdu_id + +#define HAL_RX_GET_FILTER_CATEGORY(_rx_pkt_tlv) \ + HAL_RX_MPDU_START(_rx_pkt_tlv).rxpcu_mpdu_filter_in_category + +#define HAL_RX_TLV_SW_FRAME_GROUP_ID_GET(_rx_pkt_tlv) \ + HAL_RX_MPDU_START(_rx_pkt_tlv).sw_frame_group_id + +#endif /* CONFIG_WORD_BASED_TLV */ /** * struct rx_mon_pkt_tlvs - RX packet data structure for DEST ring in the @@ -107,23 +506,6 @@ struct rx_mon_pkt_tlvs { #define RX_PKT_TLV_OFFSET(field) qdf_offsetof(struct rx_pkt_tlvs, field) -#ifndef CONFIG_WORD_BASED_TLV -#define HAL_RX_MSDU_END(_rx_pkt_tlv) \ - (((struct rx_pkt_tlvs *)_rx_pkt_tlv)->msdu_end_tlv.rx_msdu_end) - -#define HAL_RX_MPDU_START(_rx_pkt_tlv) \ - (((struct rx_pkt_tlvs *)_rx_pkt_tlv)->mpdu_start_tlv. \ - rx_mpdu_start.rx_mpdu_info_details) - -#else /* CONFIG_WORD_BASED_TLV */ -#define HAL_RX_MSDU_END(_rx_pkt_tlv) \ - (((struct rx_pkt_tlvs *)_rx_pkt_tlv)->msdu_end_tlv.rx_msdu_end) - -#define HAL_RX_MPDU_START(_rx_pkt_tlv) \ - (((struct rx_pkt_tlvs *)_rx_pkt_tlv)->mpdu_start_tlv. \ - rx_mpdu_start) -#endif /* CONFIG_WORD_BASED_TLV */ - #define HAL_RX_TLV_MSDU_DONE_GET(_rx_pkt_tlv) \ HAL_RX_MSDU_END(_rx_pkt_tlv).msdu_done @@ -159,9 +541,6 @@ struct rx_mon_pkt_tlvs { #define HAL_RX_TLV_CCE_MATCH_GET(_rx_pkt_tlv) \ HAL_RX_MSDU_END(_rx_pkt_tlv).cce_match -#define HAL_RX_TLV_PHY_PPDU_ID_GET(_rx_pkt_tlv) \ - HAL_RX_MSDU_END(_rx_pkt_tlv).phy_ppdu_id - #define HAL_RX_TLV_BW_GET(_rx_pkt_tlv) \ HAL_RX_MSDU_END(_rx_pkt_tlv).receive_bandwidth @@ -219,14 +598,6 @@ struct rx_mon_pkt_tlvs { #define HAL_RX_TLV_IS_MCAST_GET(_rx_pkt_tlv) \ HAL_RX_MSDU_END(_rx_pkt_tlv).mcast_bcast -#ifndef CONFIG_WORD_BASED_TLV -#define HAL_RX_TLV_FIRST_MPDU_GET(_rx_pkt_tlv) \ - HAL_RX_MPDU_START(_rx_pkt_tlv).first_mpdu -#else -#define HAL_RX_TLV_FIRST_MPDU_GET(_rx_pkt_tlv) \ - HAL_RX_MSDU_END(_rx_pkt_tlv).first_mpdu -#endif - #ifdef RECEIVE_OFFLOAD /** * LRO information needed from the TLVs @@ -252,21 +623,9 @@ struct rx_mon_pkt_tlvs { HAL_RX_MSDU_END(_rx_pkt_tlv).peer_meta_data #endif -#define HAL_RX_GET_FILTER_CATEGORY(_rx_pkt_tlv) \ - HAL_RX_MPDU_START(_rx_pkt_tlv).rxpcu_mpdu_filter_in_category - -#define HAL_RX_GET_PPDU_ID(_rx_pkt_tlv) \ - HAL_RX_MPDU_START(_rx_pkt_tlv).phy_ppdu_id - #define HAL_RX_TLV_PEER_META_DATA_GET(_rx_pkt_tlv) \ HAL_RX_MPDU_START(_rx_pkt_tlv).peer_meta_data -#define HAL_RX_TLV_AMPDU_FLAG_GET(_rx_pkt_tlv) \ - HAL_RX_MPDU_START(_rx_pkt_tlv).ampdu_flag - -#define HAL_RX_TLV_SW_FRAME_GROUP_ID_GET(_rx_pkt_tlv) \ - HAL_RX_MPDU_START(_rx_pkt_tlv).sw_frame_group_id - #define HAL_RX_TLV_KEYID_OCTET_GET(_rx_pkt_tlv) \ HAL_RX_MSDU_END(_rx_pkt_tlv).key_id_octet @@ -291,12 +650,6 @@ struct rx_mon_pkt_tlvs { #define HAL_RX_TLV_LAST_MSDU_GET(_rx_pkt_tlv) \ HAL_RX_MSDU_END(_rx_pkt_tlv).last_msdu -/* - * Get tid from RX_MPDU_START - */ -#define HAL_RX_TLV_TID_GET(_rx_pkt_tlv) \ - HAL_RX_MPDU_START(_rx_pkt_tlv).tid - #define HAL_RX_TLV_DA_IS_MCBC_GET(_rx_pkt_tlv) \ HAL_RX_MSDU_END(_rx_pkt_tlv).da_is_mcbc @@ -318,9 +671,6 @@ struct rx_mon_pkt_tlvs { #define HAL_RX_TLV_MPDU_PN_95_64_GET(_rx_pkt_tlv) \ HAL_RX_MPDU_START(_rx_pkt_tlv).pn_95_64 -#define HAL_RX_TLV_MPDU_PN_127_96_GET(_rx_pkt_tlv) \ - HAL_RX_MPDU_START(_rx_pkt_tlv).pn_127_96 - #define HAL_RX_TLV_DA_IS_VALID_GET(_rx_pkt_tlv) \ HAL_RX_MSDU_END(_rx_pkt_tlv).da_is_valid @@ -432,9 +782,6 @@ struct rx_mon_pkt_tlvs { #define HAL_RX_MSDU_END_SA_SW_PEER_ID_GET(_rx_pkt_tlv) \ HAL_RX_MSDU_END(_rx_pkt_tlv).sa_sw_peer_id -#define HAL_RX_REO_QUEUE_DESC_ADDR_31_0_GET(_rx_pkt_tlv) \ - HAL_RX_MPDU_START(_rx_pkt_tlv).rx_reo_queue_desc_addr_31_0 - #define HAL_RX_REO_QUEUE_DESC_ADDR_39_32_GET(_rx_pkt_tlv) \ HAL_RX_MPDU_START(_rx_pkt_tlv).rx_reo_queue_desc_addr_39_32 @@ -488,6 +835,222 @@ static inline bool hal_rx_msdu_cce_match_get_be(uint8_t *buf) return HAL_RX_TLV_CCE_MATCH_GET(rx_pkt_tlvs); } +#ifdef RX_MSDU_END_PEER_META_DATA_OFFSET +/* + * Get peer_meta_data from RX_MSDU_END + */ + +static inline uint32_t hal_rx_msdu_peer_meta_data_get_be(uint8_t *buf) +{ + struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf; + + return HAL_RX_TLV_MSDU_PEER_META_DATA_GET(rx_pkt_tlvs); +} +#endif + +/* + * hal_rx_mpdu_get_addr1_be(): API to check get address1 of the mpdu + * + * @buf: pointer to the start of RX PKT TLV headera + * @mac_addr: pointer to mac address + * Return: success/failure + */ +static inline QDF_STATUS hal_rx_mpdu_get_addr1_be(uint8_t *buf, + uint8_t *mac_addr) +{ + struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf; + struct __attribute__((__packed__)) hal_addr1 { + uint32_t ad1_31_0; + uint16_t ad1_47_32; + }; + struct hal_addr1 *addr = (struct hal_addr1 *)mac_addr; + uint32_t mac_addr_ad1_valid; + + mac_addr_ad1_valid = HAL_RX_TLV_MPDU_MAC_ADDR_AD1_VALID_GET( + rx_pkt_tlvs); + + if (mac_addr_ad1_valid) { + addr->ad1_31_0 = HAL_RX_TLV_MPDU_AD1_31_0_GET(rx_pkt_tlvs); + addr->ad1_47_32 = HAL_RX_TLV_MPDU_AD1_47_32_GET(rx_pkt_tlvs); + return QDF_STATUS_SUCCESS; + } + + return QDF_STATUS_E_FAILURE; +} + +#ifndef CONFIG_WORD_BASED_TLV +/** + * hal_rx_mpdu_info_ampdu_flag_get_be(): get ampdu flag bit + * from rx mpdu info + * @buf: pointer to rx_pkt_tlvs + * + * Return: ampdu flag + */ +static inline bool hal_rx_mpdu_info_ampdu_flag_get_be(uint8_t *buf) +{ + struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf; + + return !!HAL_RX_TLV_AMPDU_FLAG_GET(rx_pkt_tlvs); +} + +/** + * hal_rx_get_qdesc_addr_be(): API to get qdesc address of reo + * entrance ring desc + * + * @dst_ring_desc: reo dest ring descriptor (used for Lithium DP) + * @buf: pointer to the start of RX PKT TLV headers + * Return: qdesc adrress in reo destination ring buffer + */ +static inline uint64_t hal_rx_get_qdesc_addr_be(uint8_t *dst_ring_desc, + uint8_t *buf) +{ + struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf; + + return (uint64_t)HAL_RX_REO_QUEUE_DESC_ADDR_31_0_GET(rx_pkt_tlvs); +} + +/* + * @ hal_rx_print_pn_be: Prints the PN of rx packet. + * + * @ buf: rx_tlv_hdr of the received packet + * @ Return: void + */ +static inline void hal_rx_print_pn_be(uint8_t *buf) +{ + struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf; + + uint32_t pn_31_0 = HAL_RX_TLV_MPDU_PN_31_0_GET(rx_pkt_tlvs); + uint32_t pn_63_32 = HAL_RX_TLV_MPDU_PN_63_32_GET(rx_pkt_tlvs); + uint32_t pn_95_64 = HAL_RX_TLV_MPDU_PN_95_64_GET(rx_pkt_tlvs); + uint32_t pn_127_96 = HAL_RX_TLV_MPDU_PN_127_96_GET(rx_pkt_tlvs); + + hal_debug("PN number pn_127_96 0x%x pn_95_64 0x%x pn_63_32 0x%x pn_31_0 0x%x ", + pn_127_96, pn_95_64, pn_63_32, pn_31_0); +} + +static inline void hal_rx_tlv_get_pn_num_be(uint8_t *buf, uint64_t *pn_num) +{ + struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf; + + pn_num[0] = HAL_RX_TLV_MPDU_PN_31_0_GET(pkt_tlvs); + pn_num[0] |= ((uint64_t)HAL_RX_TLV_MPDU_PN_63_32_GET(pkt_tlvs) << 32); + + pn_num[1] = HAL_RX_TLV_MPDU_PN_95_64_GET(pkt_tlvs); + pn_num[1] |= ((uint64_t)HAL_RX_TLV_MPDU_PN_127_96_GET(pkt_tlvs) << 32); +} + +/* + * hal_rx_mpdu_get_addr4_be(): API to get address4 of the mpdu + * in the packet + * + * @buf: pointer to the start of RX PKT TLV header + * @mac_addr: pointer to mac address + * Return: success/failure + */ +static inline QDF_STATUS hal_rx_mpdu_get_addr4_be(uint8_t *buf, + uint8_t *mac_addr) +{ + struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf; + struct __attribute__((__packed__)) hal_addr4 { + uint32_t ad4_31_0; + uint16_t ad4_47_32; + }; + struct hal_addr4 *addr = (struct hal_addr4 *)mac_addr; + uint32_t mac_addr_ad4_valid; + + mac_addr_ad4_valid = HAL_RX_TLV_MPDU_MAC_ADDR_AD4_VALID_GET(pkt_tlvs); + + if (mac_addr_ad4_valid) { + addr->ad4_31_0 = HAL_RX_TLV_MPDU_AD4_31_0_GET(pkt_tlvs); + addr->ad4_47_32 = HAL_RX_TLV_MPDU_AD4_47_32_GET(pkt_tlvs); + return QDF_STATUS_SUCCESS; + } + + return QDF_STATUS_E_FAILURE; +} + +/** + * hal_rx_priv_info_set_in_tlv_be(): Save the private info to + * the reserved bytes of rx_tlv_hdr + * @buf: start of rx_tlv_hdr + * @priv_data: hal_wbm_err_desc_info structure + * @len: length of the private data + * Return: void + */ +static inline void hal_rx_priv_info_set_in_tlv_be(uint8_t *buf, + uint8_t *priv_data, + uint32_t len) +{ + struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf; + uint32_t copy_len = (len > RX_BE_PADDING0_BYTES) ? + RX_BE_PADDING0_BYTES : len; + + qdf_mem_copy(pkt_tlvs->rx_padding0, priv_data, copy_len); +} + +/** + * hal_rx_priv_info_get_from_tlv_be(): retrieve the private data from + * the reserved bytes of rx_tlv_hdr. + * @buf: start of rx_tlv_hdr + * @priv_data: Handle to get the private data, output parameter. + * @len: length of the private data + * Return: void + */ +static inline void hal_rx_priv_info_get_from_tlv_be(uint8_t *buf, + uint8_t *priv_data, + uint32_t len) +{ + struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf; + uint32_t copy_len = (len > RX_BE_PADDING0_BYTES) ? + RX_BE_PADDING0_BYTES : len; + + qdf_mem_copy(priv_data, pkt_tlvs->rx_padding0, copy_len); +} + +/** + * hal_rx_tlv_l3_type_get_be(): API to get the l3 type + * from rx_msdu_start TLV + * + * @buf: pointer to the start of RX PKT TLV headers + * Return: uint32_t(l3 type) + */ +static inline uint32_t hal_rx_tlv_l3_type_get_be(uint8_t *buf) +{ + struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf; + + return HAL_RX_TLV_L3_TYPE_GET(rx_pkt_tlvs); +} + +/** + * hal_rx_hw_desc_get_ppduid_get_be(): retrieve ppdu id + * @rx_tlv_hdr: start address of rx_pkt_tlvs + * @rxdma_dst_ring_desc: Rx HW descriptor + * + * Return: ppdu id + */ +static inline uint32_t +hal_rx_hw_desc_get_ppduid_get_be(void *rx_tlv_hdr, void *rxdma_dst_ring_desc) +{ + struct rx_pkt_tlvs *rx_pkt_tlvs = + (struct rx_pkt_tlvs *)rx_tlv_hdr; + + return HAL_RX_TLV_PHY_PPDU_ID_GET(rx_pkt_tlvs); +} + +/* + * hal_rx_tlv_phy_ppdu_id_get(): get phy_ppdu_id value + * from rx attention + * @buf: pointer to rx_pkt_tlvs + * + * Return: phy_ppdu_id + */ +static inline uint16_t hal_rx_tlv_phy_ppdu_id_get_be(uint8_t *buf) +{ + struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf; + + return HAL_RX_TLV_PHY_PPDU_ID_GET(rx_pkt_tlvs); +} + /* * hal_rx_attn_phy_ppdu_id_get(): get phy_ppdu_id value * from rx attention @@ -505,18 +1068,12 @@ static inline uint16_t hal_rx_attn_phy_ppdu_id_get_be(uint8_t *buf) return phy_ppdu_id; } -/* - * hal_rx_tlv_phy_ppdu_id_get(): get phy_ppdu_id value - * from rx attention - * @buf: pointer to rx_pkt_tlvs - * - * Return: phy_ppdu_id - */ -static inline uint16_t hal_rx_tlv_phy_ppdu_id_get_be(uint8_t *buf) +static inline uint32_t +hal_rx_get_ppdu_id_be(uint8_t *buf) { struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf; - return HAL_RX_TLV_PHY_PPDU_ID_GET(rx_pkt_tlvs); + return HAL_RX_GET_PPDU_ID(rx_pkt_tlvs); } /* @@ -545,33 +1102,116 @@ static inline uint32_t hal_rx_mpdu_peer_meta_data_get_be(uint8_t *buf) return HAL_RX_TLV_PEER_META_DATA_GET(rx_pkt_tlvs); } -#ifdef RX_MSDU_END_PEER_META_DATA_OFFSET -/* - * Get peer_meta_data from RX_MSDU_END - */ - -static inline uint32_t hal_rx_msdu_peer_meta_data_get_be(uint8_t *buf) +static inline uint8_t hal_rx_get_filter_category_be(uint8_t *buf) { struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf; - return HAL_RX_TLV_MSDU_PEER_META_DATA_GET(rx_pkt_tlvs); + return HAL_RX_GET_FILTER_CATEGORY(rx_pkt_tlvs); } -#endif /** - * hal_rx_mpdu_info_ampdu_flag_get_be(): get ampdu flag bit - * from rx mpdu info - * @buf: pointer to rx_pkt_tlvs + * hal_rx_is_unicast_be: check packet is unicast frame or not. * - * Return: ampdu flag + * @ buf: pointer to rx pkt TLV. + * Return: true on unicast. */ -static inline bool hal_rx_mpdu_info_ampdu_flag_get_be(uint8_t *buf) +static inline bool hal_rx_is_unicast_be(uint8_t *buf) +{ + struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf; + uint32_t grp_id; + + grp_id = HAL_RX_TLV_SW_FRAME_GROUP_ID_GET(rx_pkt_tlvs); + + return (HAL_MPDU_SW_FRAME_GROUP_UNICAST_DATA == grp_id) ? true : false; +} + +#else +#define IS_ADDR_MULTICAST(_a) (*(_a) & 0x01) +/** + * hal_rx_is_unicast_be: check packet is unicast frame or not. + * + * @ buf: pointer to rx pkt TLV. + * Return: true on unicast. + */ +static inline bool hal_rx_is_unicast_be(uint8_t *buf) +{ + uint8_t mac[QDF_MAC_ADDR_SIZE] = {0}; + + hal_rx_mpdu_get_addr1_be(buf, &mac[0]); + + return !IS_ADDR_MULTICAST(mac); +} + +/** + * hal_rx_priv_info_set_in_tlv_be(): Save the private info to + * the reserved bytes of rx_tlv_hdr + * @buf: start of rx_tlv_hdr + * @priv_data: hal_wbm_err_desc_info structure + * @len: length of the private data + * Return: void + */ +static inline void hal_rx_priv_info_set_in_tlv_be(uint8_t *buf, + uint8_t *priv_data, + uint32_t len) +{ + struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf; + uint32_t copy_len = (len > RX_BE_PADDING0_BYTES) ? + RX_BE_PADDING0_BYTES : len; + + qdf_mem_copy(&(HAL_RX_MSDU_END(pkt_tlvs).ppdu_start_timestamp_63_32), + priv_data, copy_len); +} + +/** + * hal_rx_priv_info_get_from_tlv_be(): retrieve the private data from + * the reserved bytes of rx_tlv_hdr. + * @buf: start of rx_tlv_hdr + * @priv_data: Handle to get the private data, output parameter. + * @len: length of the private data + * Return: void + */ +static inline void hal_rx_priv_info_get_from_tlv_be(uint8_t *buf, + uint8_t *priv_data, + uint32_t len) +{ + struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf; + uint32_t copy_len = (len > RX_BE_PADDING0_BYTES) ? + RX_BE_PADDING0_BYTES : len; + + qdf_mem_copy(priv_data, + &(HAL_RX_MSDU_END(pkt_tlvs).ppdu_start_timestamp_63_32), + copy_len); +} + +/* + * @ hal_rx_print_pn_be: Prints the PN of rx packet. + * + * @ buf: rx_tlv_hdr of the received packet + * @ Return: void + */ +static inline void hal_rx_print_pn_be(uint8_t *buf) { struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf; - return !!HAL_RX_TLV_AMPDU_FLAG_GET(rx_pkt_tlvs); + uint32_t pn_31_0 = HAL_RX_TLV_MPDU_PN_31_0_GET(rx_pkt_tlvs); + uint32_t pn_63_32 = HAL_RX_TLV_MPDU_PN_63_32_GET(rx_pkt_tlvs); + uint32_t pn_95_64 = HAL_RX_TLV_MPDU_PN_95_64_GET(rx_pkt_tlvs); + + hal_debug("PN number pn_95_64 0x%x pn_63_32 0x%x pn_31_0 0x%x ", + pn_95_64, pn_63_32, pn_31_0); } +static inline void hal_rx_tlv_get_pn_num_be(uint8_t *buf, uint64_t *pn_num) +{ + struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf; + + pn_num[0] = HAL_RX_TLV_MPDU_PN_31_0_GET(pkt_tlvs); + pn_num[0] |= ((uint64_t)HAL_RX_TLV_MPDU_PN_63_32_GET(pkt_tlvs) << 32); + + pn_num[1] = HAL_RX_TLV_MPDU_PN_95_64_GET(pkt_tlvs); +} +#endif + /** * hal_rx_tlv_msdu_len_get(): API to get the MSDU length * from rx_msdu_start TLV @@ -787,22 +1427,6 @@ static inline uint8_t *hal_get_reo_ent_desc_qdesc_addr_be(uint8_t *desc) return desc + REO_ENTRANCE_RING_RX_REO_QUEUE_DESC_ADDR_31_0_OFFSET; } -/** - * hal_rx_get_qdesc_addr_be(): API to get qdesc address of reo - * entrance ring desc - * - * @dst_ring_desc: reo dest ring descriptor (used for Lithium DP) - * @buf: pointer to the start of RX PKT TLV headers - * Return: qdesc address in reo destination ring buffer - */ -static inline uint64_t hal_rx_get_qdesc_addr_be(uint8_t *dst_ring_desc, - uint8_t *buf) -{ - struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf; - - return (uint64_t)HAL_RX_REO_QUEUE_DESC_ADDR_31_0_GET(rx_pkt_tlvs); -} - /** * hal_set_reo_ent_desc_reo_dest_ind_be(): API to set reo destination * indication of reo entrance ring desc @@ -1103,36 +1727,6 @@ static inline uint32_t hal_rx_encryption_info_valid_be(uint8_t *buf) return encryption_info; } -/* - * @ hal_rx_print_pn_be: Prints the PN of rx packet. - * - * @ buf: rx_tlv_hdr of the received packet - * @ Return: void - */ -static inline void hal_rx_print_pn_be(uint8_t *buf) -{ - struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf; - - uint32_t pn_31_0 = HAL_RX_TLV_MPDU_PN_31_0_GET(rx_pkt_tlvs); - uint32_t pn_63_32 = HAL_RX_TLV_MPDU_PN_63_32_GET(rx_pkt_tlvs); - uint32_t pn_95_64 = HAL_RX_TLV_MPDU_PN_95_64_GET(rx_pkt_tlvs); - uint32_t pn_127_96 = HAL_RX_TLV_MPDU_PN_127_96_GET(rx_pkt_tlvs); - - hal_debug_rl("PN number pn_127_96 0x%x pn_95_64 0x%x pn_63_32 0x%x pn_31_0 0x%x ", - pn_127_96, pn_95_64, pn_63_32, pn_31_0); -} - -static inline void hal_rx_tlv_get_pn_num_be(uint8_t *buf, uint64_t *pn_num) -{ - struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf; - - pn_num[0] = HAL_RX_TLV_MPDU_PN_31_0_GET(rx_pkt_tlvs); - pn_num[0] |= ((uint64_t)HAL_RX_TLV_MPDU_PN_63_32_GET(rx_pkt_tlvs) << 32); - - pn_num[1] = HAL_RX_TLV_MPDU_PN_95_64_GET(rx_pkt_tlvs); - pn_num[1] |= ((uint64_t)HAL_RX_TLV_MPDU_PN_127_96_GET(rx_pkt_tlvs) << 32); -} - /** * hal_rx_tlv_first_msdu_get_be: API to get first msdu status * from rx_msdu_end TLV @@ -1255,35 +1849,6 @@ static inline uint8_t hal_rx_get_mpdu_frame_control_valid_be(uint8_t *buf) return HAL_RX_TLV_MPDU_GET_FRAME_CONTROL_VALID(rx_pkt_tlvs); } -/* - * hal_rx_mpdu_get_addr1_be(): API to check get address1 of the mpdu - * - * @buf: pointer to the start of RX PKT TLV headera - * @mac_addr: pointer to mac address - * Return: success/failure - */ -static inline QDF_STATUS hal_rx_mpdu_get_addr1_be(uint8_t *buf, - uint8_t *mac_addr) -{ - struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf; - struct __attribute__((__packed__)) hal_addr1 { - uint32_t ad1_31_0; - uint16_t ad1_47_32; - }; - struct hal_addr1 *addr = (struct hal_addr1 *)mac_addr; - uint32_t mac_addr_ad1_valid; - - mac_addr_ad1_valid = HAL_RX_TLV_MPDU_MAC_ADDR_AD1_VALID_GET(rx_pkt_tlvs); - - if (mac_addr_ad1_valid) { - addr->ad1_31_0 = HAL_RX_TLV_MPDU_AD1_31_0_GET(rx_pkt_tlvs); - addr->ad1_47_32 = HAL_RX_TLV_MPDU_AD1_47_32_GET(rx_pkt_tlvs); - return QDF_STATUS_SUCCESS; - } - - return QDF_STATUS_E_FAILURE; -} - /* * hal_rx_mpdu_get_addr2_be(): API to check get address2 of the mpdu * in the packet @@ -1344,36 +1909,6 @@ static inline QDF_STATUS hal_rx_mpdu_get_addr3_be(uint8_t *buf, return QDF_STATUS_E_FAILURE; } -/* - * hal_rx_mpdu_get_addr4_be(): API to get address4 of the mpdu - * in the packet - * - * @buf: pointer to the start of RX PKT TLV header - * @mac_addr: pointer to mac address - * Return: success/failure - */ -static inline QDF_STATUS hal_rx_mpdu_get_addr4_be(uint8_t *buf, - uint8_t *mac_addr) -{ - struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf; - struct __attribute__((__packed__)) hal_addr4 { - uint32_t ad4_31_0; - uint16_t ad4_47_32; - }; - struct hal_addr4 *addr = (struct hal_addr4 *)mac_addr; - uint32_t mac_addr_ad4_valid; - - mac_addr_ad4_valid = HAL_RX_TLV_MPDU_MAC_ADDR_AD4_VALID_GET(rx_pkt_tlvs); - - if (mac_addr_ad4_valid) { - addr->ad4_31_0 = HAL_RX_TLV_MPDU_AD4_31_0_GET(rx_pkt_tlvs); - addr->ad4_47_32 = HAL_RX_TLV_MPDU_AD4_47_32_GET(rx_pkt_tlvs); - return QDF_STATUS_SUCCESS; - } - - return QDF_STATUS_E_FAILURE; -} - /* * hal_rx_get_mpdu_sequence_control_valid_be(): Get mpdu * sequence control valid @@ -1430,53 +1965,6 @@ static inline uint8_t hal_rx_get_mac_addr2_valid_be(uint8_t *buf) return HAL_RX_TLV_MPDU_MAC_ADDR_AD2_VALID_GET(rx_pkt_tlvs); } -/** - * hal_rx_is_unicast_be: check packet is unicast frame or not. - * - * @ buf: pointer to rx pkt TLV. - * Return: true on unicast. - */ -static inline bool hal_rx_is_unicast_be(uint8_t *buf) -{ - struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf; - uint32_t grp_id; - - grp_id = HAL_RX_TLV_SW_FRAME_GROUP_ID_GET(rx_pkt_tlvs); - - return (HAL_MPDU_SW_FRAME_GROUP_UNICAST_DATA == grp_id) ? true : false; -} - -static inline uint8_t hal_rx_get_filter_category_be(uint8_t *buf) -{ - struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf; - - return HAL_RX_GET_FILTER_CATEGORY(rx_pkt_tlvs); -} - -/** - * hal_rx_hw_desc_get_ppduid_get_be(): retrieve ppdu id - * @rx_tlv_hdr: start address of rx_pkt_tlvs - * @rxdma_dst_ring_desc: Rx HW descriptor - * - * Return: ppdu id - */ -static inline uint32_t -hal_rx_hw_desc_get_ppduid_get_be(void *rx_tlv_hdr, void *rxdma_dst_ring_desc) -{ - struct rx_pkt_tlvs *rx_pkt_tlvs = - (struct rx_pkt_tlvs *)rx_tlv_hdr; - - return HAL_RX_TLV_PHY_PPDU_ID_GET(rx_pkt_tlvs); -} - -static inline uint32_t -hal_rx_get_ppdu_id_be(uint8_t *buf) -{ - struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf; - - return HAL_RX_GET_PPDU_ID(rx_pkt_tlvs); -} - /** * hal_rx_msdu_flow_idx_get_be: API to get flow index * from rx_msdu_end TLV @@ -1922,44 +2410,6 @@ static inline uint8_t *hal_rx_pkt_hdr_get_be(uint8_t *buf) } #endif -/** - * hal_rx_priv_info_set_in_tlv_be(): Save the private info to - * the reserved bytes of rx_tlv_hdr - * @buf: start of rx_tlv_hdr - * @priv_data: hal_wbm_err_desc_info structure - * @len: length of the private data - * Return: void - */ -static inline void hal_rx_priv_info_set_in_tlv_be(uint8_t *buf, - uint8_t *priv_data, - uint32_t len) -{ - struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf; - uint32_t copy_len = (len > RX_BE_PADDING0_BYTES) ? - RX_BE_PADDING0_BYTES : len; - - qdf_mem_copy(pkt_tlvs->rx_padding0, priv_data, copy_len); -} - -/** - * hal_rx_priv_info_get_from_tlv_be(): retrieve the private data from - * the reserved bytes of rx_tlv_hdr. - * @buf: start of rx_tlv_hdr - * @priv_data: Handle to get the private data, output parameter. - * @len: length of the private data - * Return: void - */ -static inline void hal_rx_priv_info_get_from_tlv_be(uint8_t *buf, - uint8_t *priv_data, - uint32_t len) -{ - struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf; - uint32_t copy_len = (len > RX_BE_PADDING0_BYTES) ? - RX_BE_PADDING0_BYTES : len; - - qdf_mem_copy(priv_data, pkt_tlvs->rx_padding0, copy_len); -} - /** * hal_rx_tlv_csum_err_get_be() - Get IP and tcp-udp checksum fail flag * @rx_tlv_hdr: start address of rx_tlv_hdr @@ -2076,18 +2526,4 @@ hal_rx_msdu_end_sa_sw_peer_id_get_be(uint8_t *buf) return HAL_RX_MSDU_END_SA_SW_PEER_ID_GET(msdu_end); } - -/** - * hal_rx_tlv_l3_type_get_be(): API to get the l3 type - * from rx_msdu_start TLV - * - * @buf: pointer to the start of RX PKT TLV headers - * Return: uint32_t(l3 type) - */ -static inline uint32_t hal_rx_tlv_l3_type_get_be(uint8_t *buf) -{ - struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf; - - return HAL_RX_TLV_L3_TYPE_GET(rx_pkt_tlvs); -} #endif /* _HAL_BE_RX_TLV_H_ */ diff --git a/hal/wifi3.0/qcn9224/hal_9224.h b/hal/wifi3.0/qcn9224/hal_9224.h index 997e962bc5..5e1e52653b 100644 --- a/hal/wifi3.0/qcn9224/hal_9224.h +++ b/hal/wifi3.0/qcn9224/hal_9224.h @@ -129,535 +129,6 @@ /* For Berryllium sw2rxdma ring size increased to 20 bits */ #define HAL_RXDMA_MAX_RING_SIZE_BE 0xFFFFF -#ifdef CONFIG_WORD_BASED_TLV -#ifndef BIG_ENDIAN_HOST -struct rx_msdu_end_compact_qca9224 { - uint32_t rxpcu_mpdu_filter_in_category : 2, // [1:0] - sw_frame_group_id : 7, // [8:2] - reserved_0 : 7, // [15:9] - phy_ppdu_id : 16; // [31:16] - uint32_t ip_hdr_chksum : 16, // [15:0] - reported_mpdu_length : 14, // [29:16] - reserved_1a : 2; // [31:30] - uint32_t key_id_octet : 8, // [7:0] - cce_super_rule : 6, // [13:8] - cce_classify_not_done_truncate : 1, // [14:14] - cce_classify_not_done_cce_dis : 1, // [15:15] - cumulative_l3_checksum : 16; // [31:16] - uint32_t rule_indication_31_0 : 32; // [31:0] - uint32_t rule_indication_63_32 : 32; // [31:0] - uint32_t da_offset : 6, // [5:0] - sa_offset : 6, // [11:6] - da_offset_valid : 1, // [12:12] - sa_offset_valid : 1, // [13:13] - reserved_5a : 2, // [15:14] - l3_type : 16; // [31:16] - uint32_t ipv6_options_crc : 32; // [31:0] - uint32_t tcp_seq_number : 32; // [31:0] - uint32_t tcp_ack_number : 32; // [31:0] - uint32_t tcp_flag : 9, // [8:0] - lro_eligible : 1, // [9:9] - reserved_9a : 6, // [15:10] - window_size : 16; // [31:16] - uint32_t tcp_udp_chksum : 16, // [15:0] - sa_idx_timeout : 1, // [16:16] - da_idx_timeout : 1, // [17:17] - msdu_limit_error : 1, // [18:18] - flow_idx_timeout : 1, // [19:19] - flow_idx_invalid : 1, // [20:20] - wifi_parser_error : 1, // [21:21] - amsdu_parser_error : 1, // [22:22] - sa_is_valid : 1, // [23:23] - da_is_valid : 1, // [24:24] - da_is_mcbc : 1, // [25:25] - l3_header_padding : 2, // [27:26] - first_msdu : 1, // [28:28] - last_msdu : 1, // [29:29] - tcp_udp_chksum_fail_copy : 1, // [30:30] - ip_chksum_fail_copy : 1; // [31:31] - uint32_t sa_idx : 16, // [15:0] - da_idx_or_sw_peer_id : 16; // [31:16] - uint32_t msdu_drop : 1, // [0:0] - reo_destination_indication : 5, // [5:1] - flow_idx : 20, // [25:6] - use_ppe : 1, // [26:26] - reserved_12a : 5; // [31:27] - uint32_t fse_metadata : 32; // [31:0] - uint32_t cce_metadata : 16, // [15:0] - sa_sw_peer_id : 16; // [31:16] - uint32_t aggregation_count : 8, // [7:0] - flow_aggregation_continuation : 1, // [8:8] - fisa_timeout : 1, // [9:9] - reserved_15a : 22; // [31:10] - uint32_t cumulative_l4_checksum : 16, // [15:0] - cumulative_ip_length : 16; // [31:16] - uint32_t reserved_17a : 6, // [5:0] - service_code : 9, // [14:6] - priority_valid : 1, // [15:15] - intra_bss : 1, // [16:16] - dest_chip_id : 2, // [18:17] - multicast_echo : 1, // [19:19] - wds_learning_event : 1, // [20:20] - wds_roaming_event : 1, // [21:21] - wds_keep_alive_event : 1, // [22:22] - reserved_17b : 9; // [31:23] - uint32_t msdu_length : 14, // [13:0] - stbc : 1, // [14:14] - ipsec_esp : 1, // [15:15] - l3_offset : 7, // [22:16] - ipsec_ah : 1, // [23:23] - l4_offset : 8; // [31:24] - uint32_t msdu_number : 8, // [7:0] - decap_format : 2, // [9:8] - ipv4_proto : 1, // [10:10] - ipv6_proto : 1, // [11:11] - tcp_proto : 1, // [12:12] - udp_proto : 1, // [13:13] - ip_frag : 1, // [14:14] - tcp_only_ack : 1, // [15:15] - da_is_bcast_mcast : 1, // [16:16] - toeplitz_hash_sel : 2, // [18:17] - ip_fixed_header_valid : 1, // [19:19] - ip_extn_header_valid : 1, // [20:20] - tcp_udp_header_valid : 1, // [21:21] - mesh_control_present : 1, // [22:22] - ldpc : 1, // [23:23] - ip4_protocol_ip6_next_header : 8; // [31:24] - uint32_t toeplitz_hash_2_or_4 : 32; // [31:0] - uint32_t flow_id_toeplitz : 32; // [31:0] - uint32_t user_rssi : 8, // [7:0] - pkt_type : 4, // [11:8] - sgi : 2, // [13:12] - rate_mcs : 4, // [17:14] - receive_bandwidth : 3, // [20:18] - reception_type : 3, // [23:21] - mimo_ss_bitmap : 8; // [31:24] - uint32_t ppdu_start_timestamp_31_0 : 32; // [31:0] - uint32_t ppdu_start_timestamp_63_32 : 32; // [31:0] - uint32_t sw_phy_meta_data : 32; // [31:0] - uint32_t vlan_ctag_ci : 16, // [15:0] - vlan_stag_ci : 16; // [31:16] - uint32_t reserved_27a : 32; // [31:0] - uint32_t reserved_28a : 32; // [31:0] - uint32_t reserved_29a : 32; // [31:0] - uint32_t first_mpdu : 1, // [0:0] - reserved_30a : 1, // [1:1] - mcast_bcast : 1, // [2:2] - ast_index_not_found : 1, // [3:3] - ast_index_timeout : 1, // [4:4] - power_mgmt : 1, // [5:5] - non_qos : 1, // [6:6] - null_data : 1, // [7:7] - mgmt_type : 1, // [8:8] - ctrl_type : 1, // [9:9] - more_data : 1, // [10:10] - eosp : 1, // [11:11] - a_msdu_error : 1, // [12:12] - fragment_flag : 1, // [13:13] - order : 1, // [14:14] - cce_match : 1, // [15:15] - overflow_err : 1, // [16:16] - msdu_length_err : 1, // [17:17] - tcp_udp_chksum_fail : 1, // [18:18] - ip_chksum_fail : 1, // [19:19] - sa_idx_invalid : 1, // [20:20] - da_idx_invalid : 1, // [21:21] - reserved_30b : 1, // [22:22] - rx_in_tx_decrypt_byp : 1, // [23:23] - encrypt_required : 1, // [24:24] - directed : 1, // [25:25] - buffer_fragment : 1, // [26:26] - mpdu_length_err : 1, // [27:27] - tkip_mic_err : 1, // [28:28] - decrypt_err : 1, // [29:29] - unencrypted_frame_err : 1, // [30:30] - fcs_err : 1; // [31:31] - uint32_t reserved_31a : 10, // [9:0] - decrypt_status_code : 3, // [12:10] - rx_bitmap_not_updated : 1, // [13:13] - reserved_31b : 17, // [30:14] - msdu_done : 1; // [31:31] - -}; - -struct rx_mpdu_start_compact_qca9224 { - struct rxpt_classify_info rxpt_classify_info_details; - uint32_t rx_reo_queue_desc_addr_31_0 : 32; // [31:0] - uint32_t rx_reo_queue_desc_addr_39_32 : 8, // [7:0] - receive_queue_number : 16, // [23:8] - pre_delim_err_warning : 1, // [24:24] - first_delim_err : 1, // [25:25] - reserved_2a : 6; // [31:26] - uint32_t pn_31_0 : 32; // [31:0] - uint32_t pn_63_32 : 32; // [31:0] - uint32_t pn_95_64 : 32; // [31:0] - uint32_t pn_127_96 : 32; // [31:0] - uint32_t epd_en : 1, // [0:0] - all_frames_shall_be_encrypted : 1, // [1:1] - encrypt_type : 4, // [5:2] - wep_key_width_for_variable_key : 2, // [7:6] - mesh_sta : 2, // [9:8] - bssid_hit : 1, // [10:10] - bssid_number : 4, // [14:11] - tid : 4, // [18:15] - reserved_7a : 13; // [31:19] - uint32_t peer_meta_data : 32; // [31:0] - uint32_t rxpcu_mpdu_filter_in_category : 2, // [1:0] - sw_frame_group_id : 7, // [8:2] - ndp_frame : 1, // [9:9] - phy_err : 1, // [10:10] - phy_err_during_mpdu_header : 1, // [11:11] - protocol_version_err : 1, // [12:12] - ast_based_lookup_valid : 1, // [13:13] - ranging : 1, // [14:14] - reserved_9a : 1, // [15:15] - phy_ppdu_id : 16; // [31:16] - uint32_t ast_index : 16, // [15:0] - sw_peer_id : 16; // [31:16] - uint32_t mpdu_frame_control_valid : 1, // [0:0] - mpdu_duration_valid : 1, // [1:1] - mac_addr_ad1_valid : 1, // [2:2] - mac_addr_ad2_valid : 1, // [3:3] - mac_addr_ad3_valid : 1, // [4:4] - mac_addr_ad4_valid : 1, // [5:5] - mpdu_sequence_control_valid : 1, // [6:6] - mpdu_qos_control_valid : 1, // [7:7] - mpdu_ht_control_valid : 1, // [8:8] - frame_encryption_info_valid : 1, // [9:9] - mpdu_fragment_number : 4, // [13:10] - more_fragment_flag : 1, // [14:14] - reserved_11a : 1, // [15:15] - fr_ds : 1, // [16:16] - to_ds : 1, // [17:17] - encrypted : 1, // [18:18] - mpdu_retry : 1, // [19:19] - mpdu_sequence_number : 12; // [31:20] - uint32_t key_id_octet : 8, // [7:0] - new_peer_entry : 1, // [8:8] - decrypt_needed : 1, // [9:9] - decap_type : 2, // [11:10] - rx_insert_vlan_c_tag_padding : 1, // [12:12] - rx_insert_vlan_s_tag_padding : 1, // [13:13] - strip_vlan_c_tag_decap : 1, // [14:14] - strip_vlan_s_tag_decap : 1, // [15:15] - pre_delim_count : 12, // [27:16] - ampdu_flag : 1, // [28:28] - bar_frame : 1, // [29:29] - raw_mpdu : 1, // [30:30] - reserved_12 : 1; // [31:31] - uint32_t mpdu_length : 14, // [13:0] - first_mpdu : 1, // [14:14] - mcast_bcast : 1, // [15:15] - ast_index_not_found : 1, // [16:16] - ast_index_timeout : 1, // [17:17] - power_mgmt : 1, // [18:18] - non_qos : 1, // [19:19] - null_data : 1, // [20:20] - mgmt_type : 1, // [21:21] - ctrl_type : 1, // [22:22] - more_data : 1, // [23:23] - eosp : 1, // [24:24] - fragment_flag : 1, // [25:25] - order : 1, // [26:26] - u_apsd_trigger : 1, // [27:27] - encrypt_required : 1, // [28:28] - directed : 1, // [29:29] - amsdu_present : 1, // [30:30] - reserved_13 : 1; // [31:31] - uint32_t mpdu_frame_control_field : 16, // [15:0] - mpdu_duration_field : 16; // [31:16] - uint32_t mac_addr_ad1_31_0 : 32; // [31:0] - uint32_t mac_addr_ad1_47_32 : 16, // [15:0] - mac_addr_ad2_15_0 : 16; // [31:16] - uint32_t mac_addr_ad2_47_16 : 32; // [31:0] - uint32_t mac_addr_ad3_31_0 : 32; // [31:0] - uint32_t mac_addr_ad3_47_32 : 16, // [15:0] - mpdu_sequence_control_field : 16; // [31:16] - uint32_t mac_addr_ad4_31_0 : 32; // [31:0] - uint32_t mac_addr_ad4_47_32 : 16, // [15:0] - mpdu_qos_control_field : 16; // [31:16] - uint32_t mpdu_ht_control_field : 32; // [31:0] - uint32_t vdev_id : 8, // [7:0] - service_code : 9, // [16:8] - priority_valid : 1, // [17:17] - src_info : 12, // [29:18] - reserved_23a : 1, // [30:30] - multi_link_addr_ad1_ad2_valid : 1; // [31:31] - uint32_t multi_link_addr_ad1_31_0 : 32; // [31:0] - uint32_t multi_link_addr_ad1_47_32 : 16, // [15:0] - multi_link_addr_ad2_15_0 : 16; // [31:16] - uint32_t multi_link_addr_ad2_47_16 : 32; // [31:0] - uint32_t reserved_27a : 32; // [31:0] - uint32_t reserved_28a : 32; // [31:0] - uint32_t reserved_29a : 32; // [31:0] -}; -#else -struct rx_msdu_end_compact_qca9224 { - uint32_t phy_ppdu_id : 16, // [31:16] - reserved_0 : 7, // [15:9] - sw_frame_group_id : 7, // [8:2] - rxpcu_mpdu_filter_in_category : 2; // [1:0] - uint32_t reserved_1a : 2, // [31:30] - reported_mpdu_length : 14, // [29:16] - ip_hdr_chksum : 16; // [15:0] - uint32_t cumulative_l3_checksum : 16, // [31:16] - cce_classify_not_done_cce_dis : 1, // [15:15] - cce_classify_not_done_truncate : 1, // [14:14] - cce_super_rule : 6, // [13:8] - key_id_octet : 8; // [7:0] - uint32_t rule_indication_31_0 : 32; // [31:0] - uint32_t rule_indication_63_32 : 32; // [31:0] - uint32_t l3_type : 16, // [31:16] - reserved_5a : 2, // [15:14] - sa_offset_valid : 1, // [13:13] - da_offset_valid : 1, // [12:12] - sa_offset : 6, // [11:6] - da_offset : 6; // [5:0] - uint32_t ipv6_options_crc : 32; // [31:0] - uint32_t tcp_seq_number : 32; // [31:0] - uint32_t tcp_ack_number : 32; // [31:0] - uint32_t window_size : 16, // [31:16] - reserved_9a : 6, // [15:10] - lro_eligible : 1, // [9:9] - tcp_flag : 9; // [8:0] - uint32_t ip_chksum_fail_copy : 1, // [31:31] - tcp_udp_chksum_fail_copy : 1, // [30:30] - last_msdu : 1, // [29:29] - first_msdu : 1, // [28:28] - l3_header_padding : 2, // [27:26] - da_is_mcbc : 1, // [25:25] - da_is_valid : 1, // [24:24] - sa_is_valid : 1, // [23:23] - amsdu_parser_error : 1, // [22:22] - wifi_parser_error : 1, // [21:21] - flow_idx_invalid : 1, // [20:20] - flow_idx_timeout : 1, // [19:19] - msdu_limit_error : 1, // [18:18] - da_idx_timeout : 1, // [17:17] - sa_idx_timeout : 1, // [16:16] - tcp_udp_chksum : 16; // [15:0] - uint32_t da_idx_or_sw_peer_id : 16, // [31:16] - sa_idx : 16; // [15:0] - uint32_t reserved_12a : 5, // [31:27] - use_ppe : 1, // [26:26] - flow_idx : 20, // [25:6] - reo_destination_indication : 5, // [5:1] - msdu_drop : 1; // [0:0] - uint32_t fse_metadata : 32; // [31:0] - uint32_t sa_sw_peer_id : 16, // [31:16] - cce_metadata : 16; // [15:0] - uint32_t reserved_15a : 22, // [31:10] - fisa_timeout : 1, // [9:9] - flow_aggregation_continuation : 1, // [8:8] - aggregation_count : 8; // [7:0] - uint32_t cumulative_ip_length : 16, // [31:16] - cumulative_l4_checksum : 16; // [15:0] - uint32_t reserved_17b : 9, // [31:23] - wds_keep_alive_event : 1, // [22:22] - wds_roaming_event : 1, // [21:21] - wds_learning_event : 1, // [20:20] - multicast_echo : 1, // [19:19] - dest_chip_id : 2, // [18:17] - intra_bss : 1, // [16:16] - priority_valid : 1, // [15:15] - service_code : 9, // [14:6] - reserved_17a : 6; // [5:0] - uint32_t l4_offset : 8, // [31:24] - ipsec_ah : 1, // [23:23] - l3_offset : 7, // [22:16] - ipsec_esp : 1, // [15:15] - stbc : 1, // [14:14] - msdu_length : 14; // [13:0] - uint32_t ip4_protocol_ip6_next_header : 8, // [31:24] - ldpc : 1, // [23:23] - mesh_control_present : 1, // [22:22] - tcp_udp_header_valid : 1, // [21:21] - ip_extn_header_valid : 1, // [20:20] - ip_fixed_header_valid : 1, // [19:19] - toeplitz_hash_sel : 2, // [18:17] - da_is_bcast_mcast : 1, // [16:16] - tcp_only_ack : 1, // [15:15] - ip_frag : 1, // [14:14] - udp_proto : 1, // [13:13] - tcp_proto : 1, // [12:12] - ipv6_proto : 1, // [11:11] - ipv4_proto : 1, // [10:10] - decap_format : 2, // [9:8] - msdu_number : 8; // [7:0] - uint32_t toeplitz_hash_2_or_4 : 32; // [31:0] - uint32_t flow_id_toeplitz : 32; // [31:0] - uint32_t mimo_ss_bitmap : 8, // [31:24] - reception_type : 3, // [23:21] - receive_bandwidth : 3, // [20:18] - rate_mcs : 4, // [17:14] - sgi : 2, // [13:12] - pkt_type : 4, // [11:8] - user_rssi : 8; // [7:0] - uint32_t ppdu_start_timestamp_31_0 : 32; // [31:0] - uint32_t ppdu_start_timestamp_63_32 : 32; // [31:0] - uint32_t sw_phy_meta_data : 32; // [31:0] - uint32_t vlan_stag_ci : 16, // [31:16] - vlan_ctag_ci : 16; // [15:0] - uint32_t reserved_27a : 32; // [31:0] - uint32_t reserved_28a : 32; // [31:0] - uint32_t reserved_29a : 32; // [31:0] - uint32_t fcs_err : 1, // [31:31] - unencrypted_frame_err : 1, // [30:30] - decrypt_err : 1, // [29:29] - tkip_mic_err : 1, // [28:28] - mpdu_length_err : 1, // [27:27] - buffer_fragment : 1, // [26:26] - directed : 1, // [25:25] - encrypt_required : 1, // [24:24] - rx_in_tx_decrypt_byp : 1, // [23:23] - reserved_30b : 1, // [22:22] - da_idx_invalid : 1, // [21:21] - sa_idx_invalid : 1, // [20:20] - ip_chksum_fail : 1, // [19:19] - tcp_udp_chksum_fail : 1, // [18:18] - msdu_length_err : 1, // [17:17] - overflow_err : 1, // [16:16] - cce_match : 1, // [15:15] - order : 1, // [14:14] - fragment_flag : 1, // [13:13] - a_msdu_error : 1, // [12:12] - eosp : 1, // [11:11] - more_data : 1, // [10:10] - ctrl_type : 1, // [9:9] - mgmt_type : 1, // [8:8] - null_data : 1, // [7:7] - non_qos : 1, // [6:6] - power_mgmt : 1, // [5:5] - ast_index_timeout : 1, // [4:4] - ast_index_not_found : 1, // [3:3] - mcast_bcast : 1, // [2:2] - reserved_30a : 1, // [1:1] - first_mpdu : 1; // [0:0] - uint32_t msdu_done : 1, // [31:31] - reserved_31b : 17, // [30:14] - rx_bitmap_not_updated : 1, // [13:13] - decrypt_status_code : 3, // [12:10] - reserved_31a : 10; // [9:0] -}; - -struct rx_mpdu_start_compact_qca9224 { - struct rxpt_classify_info rxpt_classify_info_details; - uint32_t rx_reo_queue_desc_addr_31_0 : 32; // [31:0] - uint32_t reserved_2a : 6, // [31:26] - first_delim_err : 1, // [25:25] - pre_delim_err_warning : 1, // [24:24] - receive_queue_number : 16, // [23:8] - rx_reo_queue_desc_addr_39_32 : 8; // [7:0] - uint32_t pn_31_0 : 32; // [31:0] - uint32_t pn_63_32 : 32; // [31:0] - uint32_t pn_95_64 : 32; // [31:0] - uint32_t pn_127_96 : 32; // [31:0] - uint32_t reserved_7a : 13, // [31:19] - tid : 4, // [18:15] - bssid_number : 4, // [14:11] - bssid_hit : 1, // [10:10] - mesh_sta : 2, // [9:8] - wep_key_width_for_variable_key : 2, // [7:6] - encrypt_type : 4, // [5:2] - all_frames_shall_be_encrypted : 1, // [1:1] - epd_en : 1; // [0:0] - uint32_t peer_meta_data : 32; // [31:0] - uint32_t phy_ppdu_id : 16, // [31:16] - reserved_9a : 1, // [15:15] - ranging : 1, // [14:14] - ast_based_lookup_valid : 1, // [13:13] - protocol_version_err : 1, // [12:12] - phy_err_during_mpdu_header : 1, // [11:11] - phy_err : 1, // [10:10] - ndp_frame : 1, // [9:9] - sw_frame_group_id : 7, // [8:2] - rxpcu_mpdu_filter_in_category : 2; // [1:0] - uint32_t sw_peer_id : 16, // [31:16] - ast_index : 16; // [15:0] - uint32_t mpdu_sequence_number : 12, // [31:20] - mpdu_retry : 1, // [19:19] - encrypted : 1, // [18:18] - to_ds : 1, // [17:17] - fr_ds : 1, // [16:16] - reserved_11a : 1, // [15:15] - more_fragment_flag : 1, // [14:14] - mpdu_fragment_number : 4, // [13:10] - frame_encryption_info_valid : 1, // [9:9] - mpdu_ht_control_valid : 1, // [8:8] - mpdu_qos_control_valid : 1, // [7:7] - mpdu_sequence_control_valid : 1, // [6:6] - mac_addr_ad4_valid : 1, // [5:5] - mac_addr_ad3_valid : 1, // [4:4] - mac_addr_ad2_valid : 1, // [3:3] - mac_addr_ad1_valid : 1, // [2:2] - mpdu_duration_valid : 1, // [1:1] - mpdu_frame_control_valid : 1; // [0:0] - uint32_t reserved_12 : 1, // [31:31] - raw_mpdu : 1, // [30:30] - bar_frame : 1, // [29:29] - ampdu_flag : 1, // [28:28] - pre_delim_count : 12, // [27:16] - strip_vlan_s_tag_decap : 1, // [15:15] - strip_vlan_c_tag_decap : 1, // [14:14] - rx_insert_vlan_s_tag_padding : 1, // [13:13] - rx_insert_vlan_c_tag_padding : 1, // [12:12] - decap_type : 2, // [11:10] - decrypt_needed : 1, // [9:9] - new_peer_entry : 1, // [8:8] - key_id_octet : 8; // [7:0] - uint32_t reserved_13 : 1, // [31:31] - amsdu_present : 1, // [30:30] - directed : 1, // [29:29] - encrypt_required : 1, // [28:28] - u_apsd_trigger : 1, // [27:27] - order : 1, // [26:26] - fragment_flag : 1, // [25:25] - eosp : 1, // [24:24] - more_data : 1, // [23:23] - ctrl_type : 1, // [22:22] - mgmt_type : 1, // [21:21] - null_data : 1, // [20:20] - non_qos : 1, // [19:19] - power_mgmt : 1, // [18:18] - ast_index_timeout : 1, // [17:17] - ast_index_not_found : 1, // [16:16] - mcast_bcast : 1, // [15:15] - first_mpdu : 1, // [14:14] - mpdu_length : 14; // [13:0] - uint32_t mpdu_duration_field : 16, // [31:16] - mpdu_frame_control_field : 16; // [15:0] - uint32_t mac_addr_ad1_31_0 : 32; // [31:0] - uint32_t mac_addr_ad2_15_0 : 16, // [31:16] - mac_addr_ad1_47_32 : 16; // [15:0] - uint32_t mac_addr_ad2_47_16 : 32; // [31:0] - uint32_t mac_addr_ad3_31_0 : 32; // [31:0] - uint32_t mpdu_sequence_control_field : 16, // [31:16] - mac_addr_ad3_47_32 : 16; // [15:0] - uint32_t mac_addr_ad4_31_0 : 32; // [31:0] - uint32_t mpdu_qos_control_field : 16, // [31:16] - mac_addr_ad4_47_32 : 16; // [15:0] - uint32_t mpdu_ht_control_field : 32; // [31:0] - uint32_t multi_link_addr_ad1_ad2_valid : 1, // [31:31] - reserved_23a : 1, // [30:30] - src_info : 12, // [29:18] - priority_valid : 1, // [17:17] - service_code : 9, // [16:8] - vdev_id : 8; // [7:0] - uint32_t multi_link_addr_ad1_31_0 : 32; // [31:0] - uint32_t multi_link_addr_ad2_15_0 : 16, // [31:16] - multi_link_addr_ad1_47_32 : 16; // [15:0] - uint32_t multi_link_addr_ad2_47_16 : 32; // [31:0] - uint32_t reserved_27a : 32; // [31:0] - uint32_t reserved_28a : 32; // [31:0] - uint32_t reserved_29a : 32; // [31:0] -}; -#endif /* BIG_ENDIAN_HOST */ - -/* TLV struct for word based Tlv */ -typedef struct rx_mpdu_start_compact_qca9224 hal_rx_mpdu_start_t; -typedef struct rx_msdu_end_compact_qca9224 hal_rx_msdu_end_t; -#endif /* CONFIG_WORD_BASED_TLV */ - #include "hal_9224_rx.h" #include "hal_9224_tx.h" #include "hal_be_rx_tlv.h" @@ -918,8 +389,8 @@ static inline void hal_rx_dump_mpdu_start_tlv_9224(void *mpdustart, uint8_t dbg_level) { #ifdef CONFIG_WORD_BASED_TLV - struct rx_mpdu_start_compact_qca9224 *mpdu_info = - (struct rx_mpdu_start_compact_qca9224 *)mpdustart; + struct rx_mpdu_start_compact *mpdu_info = + (struct rx_mpdu_start_compact *)mpdustart; #else struct rx_mpdu_start *mpdu_start = (struct rx_mpdu_start *)mpdustart; struct rx_mpdu_info *mpdu_info = @@ -927,44 +398,20 @@ static inline void hal_rx_dump_mpdu_start_tlv_9224(void *mpdustart, #endif QDF_TRACE(QDF_MODULE_ID_HAL, dbg_level, "rx_mpdu_start tlv (1/5) - " - "rx_reo_queue_desc_addr_31_0 :%x" "rx_reo_queue_desc_addr_39_32 :%x" "receive_queue_number:%x " "pre_delim_err_warning:%x " "first_delim_err:%x " - "reserved_2a:%x " "pn_31_0:%x " "pn_63_32:%x " - "pn_95_64:%x " - "pn_127_96:%x " - "epd_en:%x " - "all_frames_shall_be_encrypted :%x" - "encrypt_type:%x " - "wep_key_width_for_variable_key :%x" - "mesh_sta:%x " - "bssid_hit:%x " - "bssid_number:%x " - "tid:%x " - "reserved_7a:%x ", - mpdu_info->rx_reo_queue_desc_addr_31_0, + "pn_95_64:%x ", mpdu_info->rx_reo_queue_desc_addr_39_32, mpdu_info->receive_queue_number, mpdu_info->pre_delim_err_warning, mpdu_info->first_delim_err, - mpdu_info->reserved_2a, mpdu_info->pn_31_0, mpdu_info->pn_63_32, - mpdu_info->pn_95_64, - mpdu_info->pn_127_96, - mpdu_info->epd_en, - mpdu_info->all_frames_shall_be_encrypted, - mpdu_info->encrypt_type, - mpdu_info->wep_key_width_for_variable_key, - mpdu_info->mesh_sta, - mpdu_info->bssid_hit, - mpdu_info->bssid_number, - mpdu_info->tid, - mpdu_info->reserved_7a); + mpdu_info->pn_95_64); QDF_TRACE(QDF_MODULE_ID_HAL, dbg_level, "rx_mpdu_start tlv (2/5) - " @@ -997,7 +444,6 @@ static inline void hal_rx_dump_mpdu_start_tlv_9224(void *mpdustart, "rx_mpdu_start tlv (3/5) - " "mpdu_fragment_number:%x " "more_fragment_flag:%x " - "reserved_11a:%x " "fr_ds:%x " "to_ds:%x " "encrypted:%x " @@ -1005,7 +451,6 @@ static inline void hal_rx_dump_mpdu_start_tlv_9224(void *mpdustart, "mpdu_sequence_number:%x ", mpdu_info->mpdu_fragment_number, mpdu_info->more_fragment_flag, - mpdu_info->reserved_11a, mpdu_info->fr_ds, mpdu_info->to_ds, mpdu_info->encrypted, @@ -1027,20 +472,14 @@ static inline void hal_rx_dump_mpdu_start_tlv_9224(void *mpdustart, "mac_addr_ad2_47_16:%x " "mac_addr_ad3_31_0:%x " "mac_addr_ad3_47_32:%x " - "mpdu_sequence_control_field :%x" - "mac_addr_ad4_31_0:%x " - "mac_addr_ad4_47_32:%x " - "mpdu_qos_control_field:%x ", + "mpdu_sequence_control_field :%x", mpdu_info->mac_addr_ad1_31_0, mpdu_info->mac_addr_ad1_47_32, mpdu_info->mac_addr_ad2_15_0, mpdu_info->mac_addr_ad2_47_16, mpdu_info->mac_addr_ad3_31_0, mpdu_info->mac_addr_ad3_47_32, - mpdu_info->mpdu_sequence_control_field, - mpdu_info->mac_addr_ad4_31_0, - mpdu_info->mac_addr_ad4_47_32, - mpdu_info->mpdu_qos_control_field); + mpdu_info->mpdu_sequence_control_field); } /** @@ -1055,8 +494,8 @@ static void hal_rx_dump_msdu_end_tlv_9224(void *msduend, uint8_t dbg_level) { #ifdef CONFIG_WORD_BASED_TLV - struct rx_msdu_end_compact_qca9224 *msdu_end = - (struct rx_msdu_end_compact_qca9224 *)msduend; + struct rx_msdu_end_compact *msdu_end = + (struct rx_msdu_end_compact *)msduend; #else struct rx_msdu_end *msdu_end = (struct rx_msdu_end *)msduend; @@ -1064,10 +503,6 @@ static void hal_rx_dump_msdu_end_tlv_9224(void *msduend, QDF_TRACE(QDF_MODULE_ID_DP, dbg_level, "rx_msdu_end tlv - " "key_id_octet: %d " - "cce_super_rule: %d " - "cce_classify_not_done_truncat: %d " - "cce_classify_not_done_cce_dis: %d " - "rule_indication_31_0: %d " "tcp_udp_chksum: %d " "sa_idx_timeout: %d " "da_idx_timeout: %d " @@ -1090,10 +525,6 @@ static void hal_rx_dump_msdu_end_tlv_9224(void *msduend, "cce_metadata: %d " "sa_sw_peer_id: %d ", msdu_end->key_id_octet, - msdu_end->cce_super_rule, - msdu_end->cce_classify_not_done_truncate, - msdu_end->cce_classify_not_done_cce_dis, - msdu_end->rule_indication_31_0, msdu_end->tcp_udp_chksum, msdu_end->sa_idx_timeout, msdu_end->da_idx_timeout, @@ -1615,9 +1046,9 @@ static void hal_rx_dump_pkt_tlvs_9224(hal_soc_handle_t hal_soc_hdl, uint8_t *buf, uint8_t dbg_level) { struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf; - struct rx_msdu_end_compact_qca9224 *msdu_end = + struct rx_msdu_end_compact *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end; - struct rx_mpdu_start_compact_qca9224 *mpdu_start = + struct rx_mpdu_start_compact *mpdu_start = &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start; hal_rx_dump_msdu_end_tlv_9224(msdu_end, dbg_level); @@ -1932,13 +1363,10 @@ static void hal_hw_txrx_ops_attach_qcn9224(struct hal_soc *hal_soc) hal_soc->ops->hal_rx_mpdu_get_addr1 = hal_rx_mpdu_get_addr1_be; hal_soc->ops->hal_rx_mpdu_get_addr2 = hal_rx_mpdu_get_addr2_be; hal_soc->ops->hal_rx_mpdu_get_addr3 = hal_rx_mpdu_get_addr3_be; - hal_soc->ops->hal_rx_mpdu_get_addr4 = hal_rx_mpdu_get_addr4_be; hal_soc->ops->hal_rx_get_mpdu_sequence_control_valid = hal_rx_get_mpdu_sequence_control_valid_be; hal_soc->ops->hal_rx_is_unicast = hal_rx_is_unicast_be; hal_soc->ops->hal_rx_tid_get = hal_rx_tid_get_be; - hal_soc->ops->hal_rx_hw_desc_get_ppduid_get = - hal_rx_hw_desc_get_ppduid_get_be; hal_soc->ops->hal_rx_mpdu_start_mpdu_qos_control_valid_get = hal_rx_mpdu_start_mpdu_qos_control_valid_get_be; hal_soc->ops->hal_rx_msdu_end_sa_sw_peer_id_get = @@ -1953,9 +1381,6 @@ static void hal_hw_txrx_ops_attach_qcn9224(struct hal_soc *hal_soc) hal_soc->ops->hal_rx_get_to_ds_flag = hal_rx_get_to_ds_flag_be; hal_soc->ops->hal_rx_get_mac_addr2_valid = hal_rx_get_mac_addr2_valid_be; - hal_soc->ops->hal_rx_get_filter_category = - hal_rx_get_filter_category_be; - hal_soc->ops->hal_rx_get_ppdu_id = hal_rx_get_ppdu_id_be; hal_soc->ops->hal_reo_config = hal_reo_config_9224; hal_soc->ops->hal_rx_msdu_flow_idx_get = hal_rx_msdu_flow_idx_get_be; hal_soc->ops->hal_rx_msdu_flow_idx_invalid = @@ -2022,8 +1447,6 @@ static void hal_hw_txrx_ops_attach_qcn9224(struct hal_soc *hal_soc) hal_soc->ops->hal_rx_get_proto_params = hal_rx_get_proto_params_be; hal_soc->ops->hal_rx_get_l3_l4_offsets = hal_rx_get_l3_l4_offsets_be; #endif - hal_soc->ops->hal_rx_tlv_phy_ppdu_id_get = - hal_rx_attn_phy_ppdu_id_get_be; hal_soc->ops->hal_rx_tlv_msdu_done_get = hal_rx_tlv_msdu_done_copy_get_9224; hal_soc->ops->hal_rx_tlv_msdu_len_get = @@ -2031,8 +1454,18 @@ static void hal_hw_txrx_ops_attach_qcn9224(struct hal_soc *hal_soc) hal_soc->ops->hal_rx_get_frame_ctrl_field = hal_rx_get_frame_ctrl_field_be; hal_soc->ops->hal_rx_tlv_csum_err_get = hal_rx_tlv_csum_err_get_be; +#ifndef CONFIG_WORD_BASED_TLV hal_soc->ops->hal_rx_mpdu_info_ampdu_flag_get = hal_rx_mpdu_info_ampdu_flag_get_be; + hal_soc->ops->hal_rx_mpdu_get_addr4 = hal_rx_mpdu_get_addr4_be; + hal_soc->ops->hal_rx_hw_desc_get_ppduid_get = + hal_rx_hw_desc_get_ppduid_get_be; + hal_soc->ops->hal_rx_get_ppdu_id = hal_rx_get_ppdu_id_be; + hal_soc->ops->hal_rx_tlv_phy_ppdu_id_get = + hal_rx_attn_phy_ppdu_id_get_be; + hal_soc->ops->hal_rx_get_filter_category = + hal_rx_get_filter_category_be; +#endif hal_soc->ops->hal_rx_tlv_msdu_len_set = hal_rx_msdu_start_msdu_len_set_be; hal_soc->ops->hal_rx_tlv_sgi_get = hal_rx_tlv_sgi_get_be;