wal_rx_desc.h 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. /*
  2. * Copyright (c) 2011-2016 The Linux Foundation. All rights reserved.
  3. *
  4. * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
  5. *
  6. *
  7. * Permission to use, copy, modify, and/or distribute this software for
  8. * any purpose with or without fee is hereby granted, provided that the
  9. * above copyright notice and this permission notice appear in all
  10. * copies.
  11. *
  12. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
  13. * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
  14. * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
  15. * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
  16. * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
  17. * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
  18. * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  19. * PERFORMANCE OF THIS SOFTWARE.
  20. */
  21. /*
  22. * This file was originally distributed by Qualcomm Atheros, Inc.
  23. * under proprietary terms before Copyright ownership was assigned
  24. * to the Linux Foundation.
  25. */
  26. #ifndef _WAL_RX_DESC__H_
  27. #define _WAL_RX_DESC__H_
  28. #if defined(ATH_TARGET)
  29. #include <athdefs.h> /* A_UINT8 */
  30. #else
  31. #include <a_types.h> /* A_UINT8 */
  32. #endif
  33. /*
  34. * As this header is used by host also,
  35. * and host will access target registers by target reg tbl,
  36. * so disable direct-reference here for host.
  37. *
  38. */
  39. #if !defined(ATH_PERF_PWR_OFFLOAD)
  40. #if defined(CONFIG_AR900B_SUPPORT) || defined(AR900B) //FIXME_WIFI2 beeliner enbled by default (will be removed once we have target aware HTT)
  41. #include <hw/interface/rx_location_info.h>
  42. #include <hw/interface/rx_pkt_end.h>
  43. #include <hw/interface/rx_phy_ppdu_end.h>
  44. #include <hw/interface/rx_timing_offset.h>
  45. #include <hw/interface/rx_location_info.h>
  46. #include <hw/tlv/rx_attention.h>
  47. #include <hw/tlv/rx_frag_info.h>
  48. #include <hw/tlv/rx_msdu_start.h>
  49. #include <hw/tlv/rx_msdu_end.h>
  50. #include <hw/tlv/rx_mpdu_start.h>
  51. #include <hw/tlv/rx_mpdu_end.h>
  52. #include <hw/tlv/rx_ppdu_start.h>
  53. #include <hw/tlv/rx_ppdu_end.h>
  54. #else
  55. /* HW rx descriptor definitions */
  56. #include <mac_descriptors/rx_attention.h>
  57. #include <mac_descriptors/rx_frag_info.h>
  58. #include <mac_descriptors/rx_msdu_start.h>
  59. #include <mac_descriptors/rx_msdu_end.h>
  60. #include <mac_descriptors/rx_mpdu_start.h>
  61. #include <mac_descriptors/rx_mpdu_end.h>
  62. #include <mac_descriptors/rx_ppdu_start.h>
  63. #include <mac_descriptors/rx_ppdu_end.h>
  64. #endif
  65. /*
  66. * This struct defines the basic descriptor information, which is
  67. * written by the 11ac HW MAC into the WAL's rx status descriptor
  68. * ring.
  69. */
  70. struct hw_rx_desc_base {
  71. struct rx_attention attention;
  72. struct rx_frag_info frag_info;
  73. struct rx_mpdu_start mpdu_start;
  74. struct rx_msdu_start msdu_start;
  75. struct rx_msdu_end msdu_end;
  76. struct rx_mpdu_end mpdu_end;
  77. struct rx_ppdu_start ppdu_start;
  78. struct rx_ppdu_end ppdu_end;
  79. };
  80. #endif
  81. /*
  82. * This struct defines the basic MSDU rx descriptor created by FW.
  83. */
  84. struct fw_rx_desc_base {
  85. union {
  86. struct {
  87. A_UINT8 discard : 1,
  88. forward : 1,
  89. any_err : 1,
  90. dup_err : 1,
  91. ipa_ind : 1,
  92. inspect : 1,
  93. extension: 2;
  94. }bits;
  95. A_UINT8 val;
  96. }u;
  97. };
  98. #define FW_MSDU_INFO_FIRST_WAKEUP_M 0x40
  99. #define FW_MSDU_INFO_FIRST_WAKEUP_S 6
  100. #define FW_RX_DESC_DISCARD_M 0x1
  101. #define FW_RX_DESC_DISCARD_S 0
  102. #define FW_RX_DESC_FORWARD_M 0x2
  103. #define FW_RX_DESC_FORWARD_S 1
  104. #define FW_RX_DESC_ANY_ERR_M 0x4
  105. #define FW_RX_DESC_ANY_ERR_S 2
  106. #define FW_RX_DESC_DUP_ERR_M 0x8
  107. #define FW_RX_DESC_DUP_ERR_S 3
  108. #define FW_RX_DESC_INSPECT_M 0x20
  109. #define FW_RX_DESC_INSPECT_S 5
  110. #define FW_RX_DESC_EXT_M 0xc0
  111. #define FW_RX_DESC_EXT_S 6
  112. #define FW_RX_DESC_CNT_2_BYTES(_fw_desc_cnt) (_fw_desc_cnt)
  113. enum {
  114. FW_RX_DESC_EXT_NONE = 0,
  115. FW_RX_DESC_EXT_LRO_ONLY,
  116. FW_RX_DESC_EXT_LRO_AND_OTHER,
  117. FW_RX_DESC_EXT_OTHER
  118. };
  119. #define FW_RX_DESC_DISCARD_GET(_var) \
  120. (((_var) & FW_RX_DESC_DISCARD_M) >> FW_RX_DESC_DISCARD_S)
  121. #define FW_RX_DESC_DISCARD_SET(_var, _val) \
  122. ((_var) |= ((_val) << FW_RX_DESC_DISCARD_S))
  123. #define FW_RX_DESC_FORWARD_GET(_var) \
  124. (((_var) & FW_RX_DESC_FORWARD_M) >> FW_RX_DESC_FORWARD_S)
  125. #define FW_RX_DESC_FORWARD_SET(_var, _val) \
  126. ((_var) |= ((_val) << FW_RX_DESC_FORWARD_S))
  127. #define FW_RX_DESC_INSPECT_GET(_var) \
  128. (((_var) & FW_RX_DESC_INSPECT_M) >> FW_RX_DESC_INSPECT_S)
  129. #define FW_RX_DESC_INSPECT_SET(_var, _val) \
  130. ((_var) |= ((_val) << FW_RX_DESC_INSPECT_S))
  131. #define FW_RX_DESC_EXT_GET(_var) \
  132. (((_var) & FW_RX_DESC_EXT_M) >> FW_RX_DESC_EXT_S)
  133. #define FW_RX_DESC_EXT_SET(_var, _val) \
  134. ((_var) |= ((_val) << FW_RX_DESC_EXT_S))
  135. /*
  136. * This struct defines TCP_CHKSUM_OFFLOAD bit fields which are needed by host.
  137. */
  138. struct fw_rx_msdu_info {
  139. union {
  140. /*
  141. * The "bits" struct defines the flags in fw_rx_msdu_info used
  142. * during regular operation.
  143. */
  144. struct {
  145. A_UINT8 tcp_udp_chksum_fail : 1, /* for tcp checksum offload use */
  146. ip_chksum_fail : 1,
  147. ipv6_proto : 1,
  148. tcp_proto : 1,
  149. udp_proto : 1,
  150. ip_frag : 1,
  151. first_wakeup : 1,
  152. reserved : 1;
  153. } bits;
  154. /*
  155. * The "mon" struct defines the flags in fw_rx_msdu_info used
  156. * during monitor mode.
  157. */
  158. struct {
  159. A_UINT8 last_frag : 1,
  160. reserved : 7;
  161. } mon;
  162. A_UINT8 val;
  163. } u;
  164. };
  165. /* regular operation flags */
  166. #define FW_RX_MSDU_INFO_TCP_UDP_CHKSUM_FAIL_M 0x1
  167. #define FW_RX_MSDU_INFO_TCP_UDP_CHKSUM_FAIL_S 0
  168. #define FW_RX_MSDU_INFO_IP_CHKSUM_FAIL_M 0x2
  169. #define FW_RX_MSDU_INFO_IP_CHKSUM_FAIL_S 1
  170. #define FW_RX_MSDU_INFO_IPV6_PROTO_M 0x4
  171. #define FW_RX_MSDU_INFO_IPV6_PROTO_S 2
  172. #define FW_RX_MSDU_INFO_TCP_PROTO_M 0x8
  173. #define FW_RX_MSDU_INFO_TCP_PROTO_S 3
  174. #define FW_RX_MSDU_INFO_UDP_PROTO_M 0x10
  175. #define FW_RX_MSDU_INFO_UDP_PROTO_S 4
  176. #define FW_RX_MSDU_INFO_IP_FRAG_M 0x20
  177. #define FW_RX_MSDU_INFO_IP_FRAG_S 5
  178. #define FW_RX_MSDU_INFO_FIRST_WAKEUP_M 0x40
  179. #define FW_RX_MSDU_INFO_FIRST_WAKEUP_S 6
  180. #define FW_RX_MSDU_INFO_TCP_UDP_CHKSUM_FAIL_GET(_var) \
  181. (((_var) & FW_RX_MSDU_INFO_TCP_UDP_CHKSUM_FAIL_M) >> FW_RX_MSDU_INFO_TCP_UDP_CHKSUM_FAIL_S)
  182. #define FW_RX_MSDU_INFO_TCP_UDP_CHKSUM_FAIL_SET(_var, _val) \
  183. ((_var) |= ((_val) << FW_RX_MSDU_INFO_TCP_UDP_CHKSUM_FAIL_S))
  184. #define FW_RX_MSDU_INFO_IP_CHKSUM_FAIL_GET(_var) \
  185. (((_var) & FW_RX_MSDU_INFO_IP_CHKSUM_FAIL_M) >> FW_RX_MSDU_INFO_IP_CHKSUM_FAIL_S)
  186. #define FW_RX_MSDU_INFO_IP_CHKSUM_FAIL_SET(_var, _val) \
  187. ((_var) |= ((_val) << FW_RX_MSDU_INFO_IP_CHKSUM_FAIL_S))
  188. #define FW_RX_MSDU_INFO_IPV6_PROTO_GET(_var) \
  189. (((_var) & FW_RX_MSDU_INFO_IPV6_PROTO_M) >> FW_RX_MSDU_INFO_IPV6_PROTO_S)
  190. #define FW_RX_MSDU_INFO_IPV6_PROTO_SET(_var, _val) \
  191. ((_var) |= ((_val) << FW_RX_MSDU_INFO_IPV6_PROTO_S))
  192. #define FW_RX_MSDU_INFO_TCP_PROTO_GET(_var) \
  193. (((_var) & FW_RX_MSDU_INFO_TCP_PROTO_M) >> FW_RX_MSDU_INFO_TCP_PROTO_S)
  194. #define FW_RX_MSDU_INFO_TCP_PROTO_SET(_var, _val) \
  195. ((_var) |= ((_val) << FW_RX_MSDU_INFO_TCP_PROTO_S))
  196. #define FW_RX_MSDU_INFO_UDP_PROTO_GET(_var) \
  197. (((_var) & FW_RX_MSDU_INFO_UDP_PROTO_M) >> FW_RX_MSDU_INFO_UDP_PROTO_S)
  198. #define FW_RX_MSDU_INFO_UDP_PROTO_SET(_var, _val) \
  199. ((_var) |= ((_val) << FW_RX_MSDU_INFO_UDP_PROTO_S))
  200. #define FW_RX_MSDU_INFO_IP_FRAG_GET(_var) \
  201. (((_var) & FW_RX_MSDU_INFO_IP_FRAG_M) >> FW_RX_MSDU_INFO_IP_FRAG_S)
  202. #define FW_RX_MSDU_INFO_IP_FRAG_SET(_var, _val) \
  203. ((_var) |= ((_val) << FW_RX_MSDU_INFO_IP_FRAG_S))
  204. #define FW_RX_MSDU_INFO_FIRST_WAKEUP_GET(_var) \
  205. (((_var) & FW_RX_MSDU_INFO_FIRST_WAKEUP_M) >> FW_RX_MSDU_INFO_FIRST_WAKEUP_S)
  206. #define FW_RX_MSDU_INFO_FIRST_WAKEUP_SET(_var, _val) \
  207. ((_var) |= ((_val) << FW_RX_MSDU_INFO_FIRST_WAKEUP_S))
  208. /* monitor mode flags */
  209. #define FW_RX_MSDU_INFO_MON_LAST_FRAG_M 0x1
  210. #define FW_RX_MSDU_INFO_MON_LAST_FRAG_S 0
  211. #define FW_RX_MSDU_INFO_MON_LAST_FRAG_GET(_var) \
  212. (((_var) & FW_RX_MSDU_INFO_MON_LAST_FRAG_M) >> FW_RX_MSDU_INFO_MON_LAST_FRAG_S)
  213. #define FW_RX_MSDU_INFO_MON_LAST_FRAG_SET(_var, _val) \
  214. ((_var) |= ((_val) << FW_RX_MSDU_INFO_MON_LAST_FRAG_S))
  215. #endif /* _WAL_RX_DESC__H_ */