1 /* 2 * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved. 3 * 4 * Permission to use, copy, modify, and/or distribute this software for 5 * any purpose with or without fee is hereby granted, provided that the 6 * above copyright notice and this permission notice appear in all 7 * copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 10 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 11 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 12 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 13 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 14 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 15 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 16 * PERFORMANCE OF THIS SOFTWARE. 17 */ 18 #ifndef __DP_RH_H 19 #define __DP_RH_H 20 21 #include <dp_types.h> 22 #include <dp_mon.h> 23 #include <dp_htt.h> 24 #include <hal_rh_tx.h> 25 #include <hal_rh_rx.h> 26 #include <qdf_pkt_add_timestamp.h> 27 #include "dp_rh_tx.h" 28 29 /** 30 * struct dp_soc_rh - Extended DP soc for RH targets 31 * @soc: dp soc structure 32 * @tcl_desc_pool: A pool of TCL descriptors that are allocated for RH targets 33 * @tx_endpoint: HTC endpoint ID for TX 34 */ 35 struct dp_soc_rh { 36 struct dp_soc soc; 37 struct dp_tx_tcl_desc_pool_s tcl_desc_pool[MAX_TXDESC_POOLS]; 38 HTC_ENDPOINT_ID tx_endpoint; 39 }; 40 41 /** 42 * struct dp_tx_ep_info_rh - TX endpoint info 43 * @tx_endpoint: HTC endpoint ID for TX 44 * @ce_tx_hdl: CE TX handle for enqueueing TX commands 45 * @download_len: Length of the packet that gets downloaded over CE 46 */ 47 struct dp_tx_ep_info_rh { 48 HTC_ENDPOINT_ID tx_endpoint; 49 struct CE_handle *ce_tx_hdl; 50 uint32_t download_len; 51 }; 52 53 /** 54 * struct dp_pdev_rh - Extended DP pdev for RH targets 55 * @pdev: dp_pdev structure 56 * @tx_ep_info: TX endpoint info 57 */ 58 struct dp_pdev_rh { 59 struct dp_pdev pdev; 60 struct dp_tx_ep_info_rh tx_ep_info; 61 }; 62 63 /** 64 * struct dp_vdev_rh - Extended DP vdev for RH targets 65 * @vdev: dp_vdev structure 66 */ 67 struct dp_vdev_rh { 68 struct dp_vdev vdev; 69 }; 70 71 /** 72 * struct dp_peer_rh - Extended DP peer for RH targets 73 * @peer: dp_peer structure 74 */ 75 struct dp_peer_rh { 76 struct dp_peer peer; 77 }; 78 79 /** 80 * struct dp_mon_soc_rh - Extended DP mon soc for RH targets 81 * @mon_soc: dp_mon_soc structure 82 */ 83 struct dp_mon_soc_rh { 84 struct dp_mon_soc mon_soc; 85 }; 86 87 /** 88 * struct dp_mon_pdev_rh - Extended DP mon pdev for RH targets 89 * @mon_pdev: dp_mon_pdev structure 90 */ 91 struct dp_mon_pdev_rh { 92 struct dp_mon_pdev mon_pdev; 93 }; 94 95 /** 96 * dp_get_soc_context_size_rh() - get context size for dp_soc_rh 97 * 98 * Return: value in bytes for RH specific soc structure 99 */ 100 qdf_size_t dp_get_soc_context_size_rh(void); 101 102 /** 103 * dp_initialize_arch_ops_rh() - initialize RH specific arch ops 104 * @arch_ops: arch ops pointer 105 * 106 * Return: none 107 */ 108 void dp_initialize_arch_ops_rh(struct dp_arch_ops *arch_ops); 109 110 /** 111 * dp_get_context_size_rh() - get RH specific size for peer/vdev/pdev/soc 112 * @context_type: Context type to get size 113 * 114 * Return: size in bytes for the context_type 115 */ 116 117 qdf_size_t dp_get_context_size_rh(enum dp_context_type context_type); 118 119 /** 120 * dp_mon_get_context_size_rh() - get RH specific size for mon pdev/soc 121 * @context_type: Mon context type to get size 122 * 123 * Return: size in bytes for the context_type 124 */ 125 126 qdf_size_t dp_mon_get_context_size_rh(enum dp_context_type context_type); 127 128 /** 129 * dp_get_rh_pdev_from_dp_pdev() - get dp_pdev_rh from dp_pdev 130 * @pdev: dp_pdev pointer 131 * 132 * Return: dp_pdev_rh pointer 133 */ 134 static inline 135 struct dp_pdev_rh *dp_get_rh_pdev_from_dp_pdev(struct dp_pdev *pdev) 136 { 137 return (struct dp_pdev_rh *)pdev; 138 } 139 140 /** 141 * dp_get_rh_soc_from_dp_soc() - get dp_soc_rh from dp_soc 142 * @soc: dp_soc pointer 143 * 144 * Return: dp_soc_rh pointer 145 */ 146 static inline struct dp_soc_rh *dp_get_rh_soc_from_dp_soc(struct dp_soc *soc) 147 { 148 return (struct dp_soc_rh *)soc; 149 } 150 #endif 151