wbm_buffer_ring.h 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. /*
  2. * Copyright (c) 2019, The Linux Foundation. All rights reserved.
  3. *
  4. * Permission to use, copy, modify, and/or distribute this software for any
  5. * purpose with or without fee is hereby granted, provided that the above
  6. * copyright notice and this permission notice appear in all copies.
  7. *
  8. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  9. * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  10. * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  11. * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  12. * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  13. * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  14. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  15. */
  16. #ifndef _WBM_BUFFER_RING_H_
  17. #define _WBM_BUFFER_RING_H_
  18. #if !defined(__ASSEMBLER__)
  19. #endif
  20. #include "buffer_addr_info.h"
  21. // ################ START SUMMARY #################
  22. //
  23. // Dword Fields
  24. // 0-1 struct buffer_addr_info buf_addr_info;
  25. //
  26. // ################ END SUMMARY #################
  27. #define NUM_OF_DWORDS_WBM_BUFFER_RING 2
  28. struct wbm_buffer_ring {
  29. struct buffer_addr_info buf_addr_info;
  30. };
  31. /*
  32. struct buffer_addr_info buf_addr_info
  33. Consumer: WBM
  34. Producer: WBM
  35. Details of the physical address of the buffer + source
  36. buffer owner + some SW meta data.
  37. All modules getting this buffer address info, shall keep
  38. all the 64 bits of info in this descriptor together and
  39. eventually all 64 bits shall be given back to WMB when the
  40. buffer is released.
  41. */
  42. /* EXTERNAL REFERENCE : struct buffer_addr_info buf_addr_info */
  43. /* Description WBM_BUFFER_RING_0_BUF_ADDR_INFO_BUFFER_ADDR_31_0
  44. Address (lower 32 bits) of the MSDU buffer OR
  45. MSDU_EXTENSION descriptor OR Link Descriptor
  46. In case of 'NULL' pointer, this field is set to 0
  47. <legal all>
  48. */
  49. #define WBM_BUFFER_RING_0_BUF_ADDR_INFO_BUFFER_ADDR_31_0_OFFSET 0x00000000
  50. #define WBM_BUFFER_RING_0_BUF_ADDR_INFO_BUFFER_ADDR_31_0_LSB 0
  51. #define WBM_BUFFER_RING_0_BUF_ADDR_INFO_BUFFER_ADDR_31_0_MASK 0xffffffff
  52. /* Description WBM_BUFFER_RING_1_BUF_ADDR_INFO_BUFFER_ADDR_39_32
  53. Address (upper 8 bits) of the MSDU buffer OR
  54. MSDU_EXTENSION descriptor OR Link Descriptor
  55. In case of 'NULL' pointer, this field is set to 0
  56. <legal all>
  57. */
  58. #define WBM_BUFFER_RING_1_BUF_ADDR_INFO_BUFFER_ADDR_39_32_OFFSET 0x00000004
  59. #define WBM_BUFFER_RING_1_BUF_ADDR_INFO_BUFFER_ADDR_39_32_LSB 0
  60. #define WBM_BUFFER_RING_1_BUF_ADDR_INFO_BUFFER_ADDR_39_32_MASK 0x000000ff
  61. /* Description WBM_BUFFER_RING_1_BUF_ADDR_INFO_RETURN_BUFFER_MANAGER
  62. Consumer: WBM
  63. Producer: SW/FW
  64. In case of 'NULL' pointer, this field is set to 0
  65. Indicates to which buffer manager the buffer OR
  66. MSDU_EXTENSION descriptor OR link descriptor that is being
  67. pointed to shall be returned after the frame has been
  68. processed. It is used by WBM for routing purposes.
  69. <enum 0 WBM_IDLE_BUF_LIST> This buffer shall be returned
  70. to the WMB buffer idle list
  71. <enum 1 WBM_IDLE_DESC_LIST> This buffer shall be
  72. returned to the WMB idle link descriptor idle list
  73. <enum 2 FW_BM> This buffer shall be returned to the FW
  74. <enum 3 SW0_BM> This buffer shall be returned to the SW,
  75. ring 0
  76. <enum 4 SW1_BM> This buffer shall be returned to the SW,
  77. ring 1
  78. <enum 5 SW2_BM> This buffer shall be returned to the SW,
  79. ring 2
  80. <enum 6 SW3_BM> This buffer shall be returned to the SW,
  81. ring 3
  82. <enum 7 SW4_BM> This buffer shall be returned to the SW,
  83. ring 4
  84. <legal all>
  85. */
  86. #define WBM_BUFFER_RING_1_BUF_ADDR_INFO_RETURN_BUFFER_MANAGER_OFFSET 0x00000004
  87. #define WBM_BUFFER_RING_1_BUF_ADDR_INFO_RETURN_BUFFER_MANAGER_LSB 8
  88. #define WBM_BUFFER_RING_1_BUF_ADDR_INFO_RETURN_BUFFER_MANAGER_MASK 0x00000700
  89. /* Description WBM_BUFFER_RING_1_BUF_ADDR_INFO_SW_BUFFER_COOKIE
  90. Cookie field exclusively used by SW.
  91. In case of 'NULL' pointer, this field is set to 0
  92. HW ignores the contents, accept that it passes the
  93. programmed value on to other descriptors together with the
  94. physical address
  95. Field can be used by SW to for example associate the
  96. buffers physical address with the virtual address
  97. The bit definitions as used by SW are within SW HLD
  98. specification
  99. NOTE:
  100. The three most significant bits can have a special
  101. meaning in case this struct is embedded in a TX_MPDU_DETAILS
  102. STRUCT, and field transmit_bw_restriction is set
  103. In case of NON punctured transmission:
  104. Sw_buffer_cookie[20:19] = 2'b00: 20 MHz TX only
  105. Sw_buffer_cookie[20:19] = 2'b01: 40 MHz TX only
  106. Sw_buffer_cookie[20:19] = 2'b10: 80 MHz TX only
  107. Sw_buffer_cookie[20:19] = 2'b11: 160 MHz TX only
  108. In case of punctured transmission:
  109. Sw_buffer_cookie[20:18] = 3'b000: pattern 0 only
  110. Sw_buffer_cookie[20:18] = 3'b001: pattern 1 only
  111. Sw_buffer_cookie[20:18] = 3'b010: pattern 2 only
  112. Sw_buffer_cookie[20:18] = 3'b011: pattern 3 only
  113. Sw_buffer_cookie[20:18] = 3'b100: pattern 4 only
  114. Sw_buffer_cookie[20:18] = 3'b101: pattern 5 only
  115. Sw_buffer_cookie[20:18] = 3'b110: pattern 6 only
  116. Sw_buffer_cookie[20:18] = 3'b111: pattern 7 only
  117. Note: a punctured transmission is indicated by the
  118. presence of TLV TX_PUNCTURE_SETUP embedded in the scheduler
  119. TLV
  120. <legal all>
  121. */
  122. #define WBM_BUFFER_RING_1_BUF_ADDR_INFO_SW_BUFFER_COOKIE_OFFSET 0x00000004
  123. #define WBM_BUFFER_RING_1_BUF_ADDR_INFO_SW_BUFFER_COOKIE_LSB 11
  124. #define WBM_BUFFER_RING_1_BUF_ADDR_INFO_SW_BUFFER_COOKIE_MASK 0xfffff800
  125. #endif // _WBM_BUFFER_RING_H_