rx_frame_bitmap_req.h 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. /* Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
  2. *
  3. * Permission to use, copy, modify, and/or distribute this software for any
  4. * purpose with or without fee is hereby granted, provided that the above
  5. * copyright notice and this permission notice appear in all copies.
  6. *
  7. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  8. * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  9. * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  10. * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  11. * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  12. * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  13. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  14. */
  15. #ifndef _RX_FRAME_BITMAP_REQ_H_
  16. #define _RX_FRAME_BITMAP_REQ_H_
  17. #if !defined(__ASSEMBLER__)
  18. #endif
  19. #define NUM_OF_DWORDS_RX_FRAME_BITMAP_REQ 2
  20. #define NUM_OF_QWORDS_RX_FRAME_BITMAP_REQ 1
  21. struct rx_frame_bitmap_req {
  22. #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
  23. uint32_t explicit_user_request : 1, // [0:0]
  24. user_request_type : 1, // [1:1]
  25. user_number : 6, // [7:2]
  26. sw_peer_id : 16, // [23:8]
  27. tid_specific_request : 1, // [24:24]
  28. requested_tid : 4, // [28:25]
  29. reserved_0 : 3; // [31:29]
  30. uint32_t tlv64_padding : 32; // [31:0]
  31. #else
  32. uint32_t reserved_0 : 3, // [31:29]
  33. requested_tid : 4, // [28:25]
  34. tid_specific_request : 1, // [24:24]
  35. sw_peer_id : 16, // [23:8]
  36. user_number : 6, // [7:2]
  37. user_request_type : 1, // [1:1]
  38. explicit_user_request : 1; // [0:0]
  39. uint32_t tlv64_padding : 32; // [31:0]
  40. #endif
  41. };
  42. /* Description EXPLICIT_USER_REQUEST
  43. Note: TXCPU is allowed to interleave requests of the two
  44. different types
  45. Also, for either request, RXPCU shall clear the internal
  46. flag that linked the bitmap to the just received frame
  47. When set, TXPCU is asking for the bitmap for an explicit
  48. user. This is typically only to be used after an MU OFDMA
  49. or MU MIMO reception. Note that this request can be used
  50. to retrieve bitmaps that do not necessarily belong to the
  51. just received PPDU, but might have been generated a while
  52. ago.
  53. When not set, it is up to RXPCU to decide which bitmap it
  54. wants to give to TXPCU based on what is available (and
  55. has not been passed on the TXPCU in a previous request,
  56. which might have included a request in the 'Explicit_user_request'
  57. format). This type of request is typically (but not required
  58. to be) used in case of a non OFDMA reception, where a
  59. BA needs to be send back as response.
  60. It is mode is typically (but not required to be) used by
  61. TXPCU in case of sending a Multi STA BA
  62. Note that this request can only be used to retrieve bitmaps
  63. that are generated as result of the just received PPDU,
  64. and can not be used to retrieve bitmaps of earlier received
  65. PPDUs.
  66. <legal all>
  67. */
  68. #define RX_FRAME_BITMAP_REQ_EXPLICIT_USER_REQUEST_OFFSET 0x0000000000000000
  69. #define RX_FRAME_BITMAP_REQ_EXPLICIT_USER_REQUEST_LSB 0
  70. #define RX_FRAME_BITMAP_REQ_EXPLICIT_USER_REQUEST_MSB 0
  71. #define RX_FRAME_BITMAP_REQ_EXPLICIT_USER_REQUEST_MASK 0x0000000000000001
  72. /* Description USER_REQUEST_TYPE
  73. Field only valid when Explicit_user_request is set
  74. <enum 0 bitmap_req_user_number_based> The request is based
  75. on a user_number. This method is typically used in case
  76. of SIFS response for Multi User BA
  77. <enum 1 bitmap_req_sw_peer_id_based> The request is based
  78. on the sw_peer_id. This method is typically used in the
  79. response to response scenario where TXPCU got a new scheduling
  80. command for the response to response part, and SW now explicitly
  81. indicates for which STAs a BA shall be requested.
  82. <legal all>
  83. */
  84. #define RX_FRAME_BITMAP_REQ_USER_REQUEST_TYPE_OFFSET 0x0000000000000000
  85. #define RX_FRAME_BITMAP_REQ_USER_REQUEST_TYPE_LSB 1
  86. #define RX_FRAME_BITMAP_REQ_USER_REQUEST_TYPE_MSB 1
  87. #define RX_FRAME_BITMAP_REQ_USER_REQUEST_TYPE_MASK 0x0000000000000002
  88. /* Description USER_NUMBER
  89. Field only valid when Explicit_user_request is set
  90. and User_request_type is set to bitmap_req_user_number_based
  91. The user number for which the bitmap is requested.
  92. <legal all>
  93. */
  94. #define RX_FRAME_BITMAP_REQ_USER_NUMBER_OFFSET 0x0000000000000000
  95. #define RX_FRAME_BITMAP_REQ_USER_NUMBER_LSB 2
  96. #define RX_FRAME_BITMAP_REQ_USER_NUMBER_MSB 7
  97. #define RX_FRAME_BITMAP_REQ_USER_NUMBER_MASK 0x00000000000000fc
  98. /* Description SW_PEER_ID
  99. Field only valid when Explicit_user_request is set
  100. and User_request_type is set to bitmap_req_sw_peer_id_based
  101. The sw_peer_id for which the bitmap is requested.
  102. <legal all>
  103. */
  104. #define RX_FRAME_BITMAP_REQ_SW_PEER_ID_OFFSET 0x0000000000000000
  105. #define RX_FRAME_BITMAP_REQ_SW_PEER_ID_LSB 8
  106. #define RX_FRAME_BITMAP_REQ_SW_PEER_ID_MSB 23
  107. #define RX_FRAME_BITMAP_REQ_SW_PEER_ID_MASK 0x0000000000ffff00
  108. /* Description TID_SPECIFIC_REQUEST
  109. Field only valid when Explicit_user_request is set
  110. When set, the request is going out for a specific TID, indicated
  111. in field TID
  112. When clear, it is up to RXPCU to determine in which order
  113. it wants to return bitmaps to TXPCU. Note that these bitmaps
  114. do need to all belong the the requested user, as Explicit_user_request
  115. has also been set.
  116. <legal all>
  117. */
  118. #define RX_FRAME_BITMAP_REQ_TID_SPECIFIC_REQUEST_OFFSET 0x0000000000000000
  119. #define RX_FRAME_BITMAP_REQ_TID_SPECIFIC_REQUEST_LSB 24
  120. #define RX_FRAME_BITMAP_REQ_TID_SPECIFIC_REQUEST_MSB 24
  121. #define RX_FRAME_BITMAP_REQ_TID_SPECIFIC_REQUEST_MASK 0x0000000001000000
  122. /* Description REQUESTED_TID
  123. Field only valid when Explicit_user_request is set
  124. and User_request_type is set to bitmap_req_sw_peer_id_based
  125. and Tid_specific_request is set
  126. The TID for which a BA bitmap is requested
  127. <legal all>
  128. */
  129. #define RX_FRAME_BITMAP_REQ_REQUESTED_TID_OFFSET 0x0000000000000000
  130. #define RX_FRAME_BITMAP_REQ_REQUESTED_TID_LSB 25
  131. #define RX_FRAME_BITMAP_REQ_REQUESTED_TID_MSB 28
  132. #define RX_FRAME_BITMAP_REQ_REQUESTED_TID_MASK 0x000000001e000000
  133. /* Description RESERVED_0
  134. <legal 0>
  135. */
  136. #define RX_FRAME_BITMAP_REQ_RESERVED_0_OFFSET 0x0000000000000000
  137. #define RX_FRAME_BITMAP_REQ_RESERVED_0_LSB 29
  138. #define RX_FRAME_BITMAP_REQ_RESERVED_0_MSB 31
  139. #define RX_FRAME_BITMAP_REQ_RESERVED_0_MASK 0x00000000e0000000
  140. /* Description TLV64_PADDING
  141. Automatic DWORD padding inserted while converting TLV32
  142. to TLV64 for 64 bit ARCH
  143. <legal 0>
  144. */
  145. #define RX_FRAME_BITMAP_REQ_TLV64_PADDING_OFFSET 0x0000000000000000
  146. #define RX_FRAME_BITMAP_REQ_TLV64_PADDING_LSB 32
  147. #define RX_FRAME_BITMAP_REQ_TLV64_PADDING_MSB 63
  148. #define RX_FRAME_BITMAP_REQ_TLV64_PADDING_MASK 0xffffffff00000000
  149. #endif // RX_FRAME_BITMAP_REQ