wmi_unified_dbr_param.h 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. /*
  2. * Copyright (c) 2016-2018, 2020 The Linux Foundation. All rights reserved.
  3. * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
  4. *
  5. * Permission to use, copy, modify, and/or distribute this software for
  6. * any purpose with or without fee is hereby granted, provided that the
  7. * above copyright notice and this permission notice appear in all
  8. * copies.
  9. *
  10. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
  11. * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
  12. * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
  13. * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
  14. * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
  15. * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
  16. * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  17. * PERFORMANCE OF THIS SOFTWARE.
  18. */
  19. #ifndef _WMI_UNIFIED_DBR_PARAM_H_
  20. #define _WMI_UNIFIED_DBR_PARAM_H_
  21. #define WMI_HOST_DBR_RING_ADDR_LO_S 0
  22. #define WMI_HOST_DBR_RING_ADDR_LO_M 0xffffffff
  23. #define WMI_HOST_DBR_RING_ADDR_LO \
  24. (WMI_HOST_DBR_RING_ADDR_LO_M << WMI_HOST_DBR_RING_ADDR_LO_S)
  25. #define WMI_HOST_DBR_RING_ADDR_LO_GET(dword) \
  26. WMI_HOST_F_MS(dword, WMI_HOST_DBR_RING_ADDR_LO)
  27. #define WMI_HOST_DBR_RING_ADDR_LO_SET(dword, val) \
  28. WMI_HOST_F_RMW(dword, val, WMI_HOST_DBR_RING_ADDR_LO)
  29. #define WMI_HOST_DBR_RING_ADDR_HI_S 0
  30. #define WMI_HOST_DBR_RING_ADDR_HI_M 0xf
  31. #define WMI_HOST_DBR_RING_ADDR_HI \
  32. (WMI_HOST_DBR_RING_ADDR_HI_M << WMI_HOST_DBR_RING_ADDR_HI_S)
  33. #define WMI_HOST_DBR_RING_ADDR_HI_GET(dword) \
  34. WMI_HOST_F_MS(dword, WMI_HOST_DBR_RING_ADDR_HI)
  35. #define WMI_HOST_DBR_RING_ADDR_HI_SET(dword, val) \
  36. WMI_HOST_F_RMW(dword, val, WMI_HOST_DBR_RING_ADDR_HI)
  37. #define WMI_HOST_DBR_DATA_ADDR_LO_S 0
  38. #define WMI_HOST_DBR_DATA_ADDR_LO_M 0xffffffff
  39. #define WMI_HOST_DBR_DATA_ADDR_LO \
  40. (WMI_HOST_DBR_DATA_ADDR_LO_M << WMI_HOST_DBR_DATA_ADDR_LO_S)
  41. #define WMI_HOST_DBR_DATA_ADDR_LO_GET(dword) \
  42. WMI_HOST_F_MS(dword, WMI_HOST_DBR_DATA_ADDR_LO)
  43. #define WMI_HOST_DBR_DATA_ADDR_LO_SET(dword, val) \
  44. WMI_HOST_F_RMW(dword, val, WMI_HOST_DBR_DATA_ADDR_LO)
  45. #define WMI_HOST_DBR_DATA_ADDR_HI_S 0
  46. #define WMI_HOST_DBR_DATA_ADDR_HI_M 0xf
  47. #define WMI_HOST_DBR_DATA_ADDR_HI \
  48. (WMI_HOST_DBR_DATA_ADDR_HI_M << WMI_HOST_DBR_DATA_ADDR_HI_S)
  49. #define WMI_HOST_DBR_DATA_ADDR_HI_GET(dword) \
  50. WMI_HOST_F_MS(dword, WMI_HOST_DBR_DATA_ADDR_HI)
  51. #define WMI_HOST_DBR_DATA_ADDR_HI_SET(dword, val) \
  52. WMI_HOST_F_RMW(dword, val, WMI_HOST_DBR_DATA_ADDR_HI)
  53. #define WMI_HOST_DBR_DATA_ADDR_HI_HOST_DATA_S 12
  54. #define WMI_HOST_DBR_DATA_ADDR_HI_HOST_DATA_M 0x7ffff
  55. #define WMI_HOST_DBR_DATA_ADDR_HI_HOST_DATA \
  56. (WMI_HOST_DBR_DATA_ADDR_HI_HOST_DATA_M << \
  57. WMI_HOST_DBR_DATA_ADDR_HI_HOST_DATA_S)
  58. #define WMI_HOST_DBR_DATA_ADDR_HI_HOST_DATA_GET(dword) \
  59. WMI_HOST_F_MS(dword, WMI_HOST_DBR_DATA_ADDR_HI_HOST_DATA)
  60. #define WMI_HOST_DBR_DATA_ADDR_HI_HOST_DATA_SET(dword, val) \
  61. WMI_HOST_F_RMW(dword, val, WMI_HOST_DBR_DATA_ADDR_HI_HOST_DATA)
  62. #define WMI_HOST_MAX_NUM_CHAINS 8
  63. /**
  64. * struct direct_buf_rx_rsp: direct buffer rx response structure
  65. *
  66. * @pdev_id: Index of the pdev for which response is received
  67. * @mod_id: Index of the module for which respone is received
  68. * @num_buf_release_entry: Number of buffers released through event
  69. * @num_meta_data_entry: Number of meta data released
  70. * @num_cv_meta_data_entry: Number of cv meta data released
  71. * @num_cqi_meta_data_entry: Number of cqi meta data released
  72. * @dbr_entries: Pointer to direct buffer rx entry struct
  73. */
  74. struct direct_buf_rx_rsp {
  75. uint32_t pdev_id;
  76. uint32_t mod_id;
  77. uint32_t num_buf_release_entry;
  78. uint32_t num_meta_data_entry;
  79. uint32_t num_cv_meta_data_entry;
  80. uint32_t num_cqi_meta_data_entry;
  81. struct direct_buf_rx_entry *dbr_entries;
  82. };
  83. /**
  84. * struct direct_buf_rx_cfg_req: direct buffer rx config request structure
  85. *
  86. * @pdev_id: Index of the pdev for which response is received
  87. * @mod_id: Index of the module for which respone is received
  88. * @base_paddr_lo: Lower 32bits of ring base address
  89. * @base_paddr_hi: Higher 32bits of ring base address
  90. * @head_idx_paddr_lo: Lower 32bits of head idx register address
  91. * @head_idx_paddr_hi: Higher 32bits of head idx register address
  92. * @tail_idx_paddr_lo: Lower 32bits of tail idx register address
  93. * @tail_idx_paddr_hi: Higher 32bits of tail idx register address
  94. * @buf_size: Size of the buffer for each pointer in the ring
  95. * @num_elems: Number of pointers allocated and part of the source ring
  96. * @event_timeout_ms:
  97. * @num_resp_per_event:
  98. */
  99. struct direct_buf_rx_cfg_req {
  100. uint32_t pdev_id;
  101. uint32_t mod_id;
  102. uint32_t base_paddr_lo;
  103. uint32_t base_paddr_hi;
  104. uint32_t head_idx_paddr_lo;
  105. uint32_t head_idx_paddr_hi;
  106. uint32_t tail_idx_paddr_hi;
  107. uint32_t tail_idx_paddr_lo;
  108. uint32_t buf_size;
  109. uint32_t num_elems;
  110. uint32_t event_timeout_ms;
  111. uint32_t num_resp_per_event;
  112. };
  113. /**
  114. * struct direct_buf_rx_metadata: direct buffer metadata
  115. *
  116. * @noisefloor: noisefloor
  117. * @reset_delay: reset delay
  118. * @cfreq1: center frequency 1
  119. * @cfreq2: center frequency 2
  120. * @ch_width: channel width
  121. */
  122. struct direct_buf_rx_metadata {
  123. int32_t noisefloor[WMI_HOST_MAX_NUM_CHAINS];
  124. uint32_t reset_delay;
  125. uint32_t cfreq1;
  126. uint32_t cfreq2;
  127. uint32_t ch_width;
  128. };
  129. /**
  130. * struct direct_buf_rx_cv_metadata: direct buffer metadata for TxBF CV upload
  131. *
  132. * @is_valid: Set cv metadata is valid,
  133. * false if sw_peer_id is invalid or FCS error
  134. * @fb_type: Feedback type, 0 for SU 1 for MU
  135. * @asnr_len: Average SNR length
  136. * @asnr_offset: Average SNR offset
  137. * @dsnr_len: Delta SNR length
  138. * @dsnr_offset: Delta SNR offset
  139. * @peer_mac: Peer macaddr
  140. * @fb_params: Feedback params, [1:0] Nc [3:2] nss_num
  141. */
  142. struct direct_buf_rx_cv_metadata {
  143. uint32_t is_valid;
  144. uint32_t fb_type;
  145. uint16_t asnr_len;
  146. uint16_t asnr_offset;
  147. uint16_t dsnr_len;
  148. uint16_t dsnr_offset;
  149. struct qdf_mac_addr peer_mac;
  150. uint32_t fb_params;
  151. };
  152. /*
  153. * In CQI data buffer, each user CQI data will be stored
  154. * in a fixed offset of 64 locations from each other,
  155. * and each location corresponds to 64-bit length.
  156. */
  157. #define CQI_USER_DATA_LENGTH (64 * 8)
  158. #define CQI_USER_DATA_OFFSET(idx) ((idx) * CQI_USER_DATA_LENGTH)
  159. #define MAX_NUM_CQI_USERS 3
  160. /*
  161. * struct direct_buf_rx_cqi_per_user_info: Per user CQI data
  162. *
  163. * @asnr_len: Average SNR length
  164. * @asnr_offset: Average SNR offset
  165. * @fb_params: Feedback params, [1:0] Nc
  166. * @peer_mac: Peer macaddr
  167. */
  168. struct direct_buf_rx_cqi_per_user_info {
  169. uint16_t asnr_len;
  170. uint16_t asnr_offset;
  171. uint32_t fb_params;
  172. struct qdf_mac_addr peer_mac;
  173. };
  174. /**
  175. * struct direct_buf_rx_cqi_metadata: direct buffer metadata for CQI upload
  176. *
  177. * @num_users: Number of user info in a metadta buffer
  178. * @is_valid: Set cqi metadata is valid,
  179. * false if sw_peer_id is invalid or FCS error
  180. * @fb_type: Feedback type, 0 for SU 1 for MU 2 for CQI
  181. * @fb_params: Feedback params
  182. * [0] is_valid0
  183. * [1] is_valid1
  184. * [2] is_valid2
  185. * [4:3] Nc0
  186. * [5:4] Nc1
  187. * [6:5] Nc2
  188. * @user_info: Per user CQI info
  189. */
  190. struct direct_buf_rx_cqi_metadata {
  191. uint8_t num_users;
  192. uint32_t is_valid;
  193. uint32_t fb_type;
  194. uint32_t fb_params;
  195. struct direct_buf_rx_cqi_per_user_info user_info[MAX_NUM_CQI_USERS];
  196. };
  197. /**
  198. * struct direct_buf_rx_entry: direct buffer rx release entry structure
  199. *
  200. * @paddr_lo: LSB 32-bits of the buffer
  201. * @paddr_hi: MSB 32-bits of the buffer
  202. * @len: Length of the buffer
  203. */
  204. struct direct_buf_rx_entry {
  205. uint32_t paddr_lo;
  206. uint32_t paddr_hi;
  207. uint32_t len;
  208. };
  209. #endif /* _WMI_UNIFIED_DBR_PARAM_H_ */