wdi_ipa.h 67 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465
  1. /*
  2. * Copyright (c) 2011-2017 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. /**
  27. * @file wdi_ipa.h
  28. *
  29. * @details WIFI <-> IPA direct data-path interface related definitions.
  30. */
  31. #ifndef _WDI_IPA_H_
  32. #define _WDI_IPA_H_
  33. #if defined(ATH_TARGET)
  34. #include <osapi.h> /* A_UINT32 */
  35. #else
  36. #if defined(IPA_TARGET)
  37. typedef unsigned int A_UINT32
  38. typedef unsigned char A_UINT8
  39. #define A_ASSERT(__bool) \
  40. do { \
  41. if (0 == (__bool)) { \
  42. while(1); \
  43. } \
  44. } while(0)
  45. #define A_COMPILE_TIME_ASSERT(assertion_name, predicate) \
  46. typedef char assertion_name[(predicate) ? 1 : -1];
  47. #define PREPACK
  48. #define POSTPACK
  49. #else
  50. #include <a_types.h> /* A_UINT32 */
  51. #include <a_osapi.h> /* PREPACK, POSTPACK */
  52. #endif /* IPA_TARGET */
  53. #endif /* ATH_TARGET */
  54. #ifndef offsetof
  55. #define offsetof(type, field) ((unsigned int)(&((type *)0)->field))
  56. #endif
  57. /*
  58. * WDI_IPA version history:
  59. * 1.0 initial numbered version
  60. */
  61. #define WDI_IPA_CURRENT_VERSION_MAJOR 1
  62. #define WDI_IPA_CURRENT_VERSION_MINOR 1
  63. #define WDI_IPA_CHECK_SET_VAL(field, val) \
  64. A_ASSERT(!((val) & ~((field ## _M) >> (field ## _S))))
  65. /**
  66. * @brief WDI_IPA TX_FRAG_DESC
  67. *
  68. * |31 24|23 16|15 8|7 0|
  69. * |----------------+----------------+----------------+----------------|
  70. * | frag buf ptr |
  71. * |-------------------------------------------------------------------|
  72. * | Reserved | frag len |
  73. * |-------------------------------------------------------------------|
  74. * | 0 |
  75. * |-------------------------------------------------------------------|
  76. *
  77. * Header fields:
  78. * Header fields:
  79. * - FRAG_BUF_PTR
  80. * Bits 31:0
  81. * Purpose: Specify pointer to the starting of Ethernet Packet
  82. * - FRAG_LEN
  83. * Bits 15:0
  84. * Purpose: Specify total length of the Ethernet Packet.
  85. * - 0
  86. * Bits 31:0
  87. * Purpose: fixed value 0, it is used for indicating WIFI HW
  88. * that Ethernet Packet is contained in ONE fragment.
  89. *
  90. */
  91. #define WDI_IPA_TX_FRAG_DESC_SZ 12 /* bytes */
  92. #define WDI_IPA_TX_FRAG_DESC_FRAG_BUF_PTR_M 0xffffffff
  93. #define WDI_IPA_TX_FRAG_DESC_FRAG_BUF_PTR_S 0
  94. #define WDI_IPA_TX_FRAG_DESC_FRAG_LEN_M 0x0000ffff
  95. #define WDI_IPA_TX_FRAG_DESC_FRAG_LEN_S 0
  96. #define WDI_IPA_TX_FRAG_DESC_FRAG_BUF_PTR_GET(_var) \
  97. (((_var) & WDI_IPA_TX_FRAG_DESC_FRAG_BUF_PTR_M) >> \
  98. WDI_IPA_TX_FRAG_DESC_FRAG_BUF_PTR_S)
  99. #define WDI_IPA_TX_FRAG_DESC_FRAG_BUF_PTR_SET(_var, _val) \
  100. do { \
  101. WDI_IPA_CHECK_SET_VAL(WDI_IPA_TX_FRAG_DESC_FRAG_BUF_PTR, _val); \
  102. ((_var) &= (WDI_IPA_TX_FRAG_DESC_FRAG_BUF_PTR_M)); \
  103. ((_var) |= ((_val) << WDI_IPA_TX_FRAG_DESC_FRAG_BUF_PTR_S)); \ } while(0)
  104. #define WDI_IPA_TX_FRAG_DESC_FRAG_LEN_GET(_var) \
  105. (((_var) & WDI_IPA_TX_FRAG_DESC_FRAG_LEN_M) >> \
  106. WDI_IPA_TX_FRAG_DESC_FRAG_LEN_S)
  107. #define WDI_IPA_TX_FRAG_DESC_FRAG_LEN_SET(_var, _val) \
  108. do { \
  109. WDI_IPA_CHECK_SET_VAL(WDI_IPA_TX_FRAG_DESC_FRAG_LEN, _val); \
  110. ((_var) &= (WDI_IPA_TX_FRAG_DESC_FRAG_LEN_M)); \
  111. ((_var) |= ((_val) << WDI_IPA_TX_FRAG_DESC_FRAG_LEN_S)); \ } while(0)
  112. PREPACK struct wdi_ipa_tx_frag_desc_t
  113. {
  114. A_UINT32 frag_buf_ptr; /* word 0 */
  115. A_UINT32 /* word 1 */
  116. frag_len: 16,
  117. reserved: 16;
  118. A_UINT32 fixed_val_zero; /* word 2 */
  119. } POSTPACK;
  120. /**
  121. * @brief WDI_IPA TX_HTT_DESC is same as HTT TX Msdu descriptor (defined in
  122. * htt.h). TX_HTT_DESC fields are opaque to IPA uC, so we just need
  123. * to define size of the descriptor in wdi_ipa.h. Host WLAN driver
  124. * and WIFI FW uses htt.h for the bit-field definitions.
  125. *
  126. */
  127. #define WDI_IPA_TX_HTT_DESC_SZ 16 /* bytes */
  128. /**
  129. * @brief WDI_IPA TX_IPA_DESC
  130. *
  131. * |31 24|23 16|15 8|7 0|
  132. * |----------------+----------------+----------------+----------------|
  133. * | Reserved | vdev id |
  134. * |-------------------------------------------------------------------|
  135. *
  136. * Header fields:
  137. * Header fields:
  138. * - VDEV_ID
  139. * Bits 23:16
  140. * Purpose: Specifies the SoftAP VDEV interface, pertaining to the packet
  141. * filled by IPA HW.
  142. */
  143. #define WDI_IPA_TX_IPA_DESC_SZ 4 /* bytes */
  144. #define WDI_IPA_TX_IPA_DESC_VDEV_ID_M 0x000000ff
  145. #define WDI_IPA_TX_IPA_DESC_VDEV_ID_S 0
  146. #define WDI_IPA_TX_IPA_DESC_VDEV_ID_GET(_var) \
  147. (((_var) & WDI_IPA_TX_IPA_DESC_VDEV_ID_M) >> \
  148. WDI_IPA_TX_IPA_DESC_VDEV_ID_S)
  149. #define WDI_IPA_TX_IPA_DESC_VDEV_ID_SET(_var, _val) \
  150. do { \
  151. WDI_IPA_CHECK_SET_VAL(WDI_IPA_TX_IPA_DESC_VDEV_ID, _val); \
  152. ((_var) &= (WDI_IPA_TX_IPA_DESC_VDEV_ID_M)); \
  153. ((_var) |= ((_val) << WDI_IPA_TX_IPA_DESC_VDEV_ID_S)); \
  154. } while(0)
  155. PREPACK struct wdi_ipa_tx_ipa_desc_t
  156. {
  157. A_UINT32 /* word 0 */
  158. vdev_id: 8,
  159. reserved: 24;
  160. } POSTPACK;
  161. #define WDI_IPA_TX_ETHR_PKT_MAX_SZ 1518 /* bytes */
  162. PREPACK struct wdi_ipa_tx_pkt_buf_t
  163. {
  164. A_UINT8 htt_desc[WDI_IPA_TX_HTT_DESC_SZ];
  165. struct wdi_ipa_tx_frag_desc_t frag_desc;
  166. struct wdi_ipa_tx_ipa_desc_t ipa_desc;
  167. A_UINT8 ethr_pkt[WDI_IPA_TX_ETHR_PKT_MAX_SZ];
  168. } POSTPACK;
  169. #define WDI_IPA_TX_PKT_BUF_MAX_SZ 2048 /* bytes */
  170. A_COMPILE_TIME_ASSERT(verify_pkt_buf_sz,
  171. sizeof(struct wdi_ipa_tx_pkt_buf_t)<=WDI_IPA_TX_PKT_BUF_MAX_SZ);
  172. #define WDI_IPA_TX_PKT_POOL_SZ 1023 /* packets */
  173. /**
  174. * @brief WDI_IPA TX_CE_DESC
  175. *
  176. * |31 24|23 16|15 8|7 0|
  177. * |----------------+----------------+----------------+----------------|
  178. * | src ptr |
  179. * |-------------------------------------------------------------------|
  180. * | meta data |S|G| src buf len |
  181. * |-------------------------------------------------------------------|
  182. *
  183. * Header fields:
  184. * Header fields:
  185. * - SRC_PTR
  186. * Bits 31:0
  187. * Purpose: Specify pointer to the starting of Pacet Buf
  188. * - SRC_BUF_LEN
  189. * Bits 15:0
  190. * Purpose: Specify number of bytes to be copied by Copy Engine
  191. * - G
  192. * Bits 16
  193. * Purpose: Enable gather of multiple CE descriptors to one destination
  194. * Always 0 (disable) for WDI_IPA data path
  195. * - S
  196. * Bits 17
  197. * Purpose: Enable byte swap for endian conversation.
  198. * Always 0 (disable) for WDI_IPA data path.
  199. * META_DATA
  200. * Bits 31:18
  201. * Purpose: unused
  202. */
  203. #define WDI_IPA_TX_CE_DESC_SZ 8 /* bytes */
  204. #define WDI_IPA_TX_CE_DESC_SRC_PTR_M 0xffffffff
  205. #define WDI_IPA_TX_CE_DESC_SRC_PTR_S 0
  206. #define WDI_IPA_TX_CE_DESC_SRC_BUF_LEN_M 0x0000ffff
  207. #define WDI_IPA_TX_CE_DESC_SRC_BUF_LEN_S 0
  208. #define WDI_IPA_TX_CE_DESC_G_M 0x00010000
  209. #define WDI_IPA_TX_CE_DESC_G_S 16
  210. #define WDI_IPA_TX_CE_DESC_S_M 0x00020000
  211. #define WDI_IPA_TX_CE_DESC_S_S 17
  212. #define WDI_IPA_TX_CE_DESC_META_DATA_M 0xFFFC0000
  213. #define WDI_IPA_TX_CE_DESC_META_DATA_S 18
  214. #define WDI_IPA_TX_CE_DESC_SRC_PTR_GET(_var) \
  215. (((_var) & WDI_IPA_TX_CE_DESC_SRC_PTR_M) >> \
  216. WDI_IPA_TX_CE_DESC_SRC_PTR_S)
  217. #define WDI_IPA_TX_CE_DESC_SRC_PTR_SET(_var, _val) \
  218. do { \
  219. WDI_IPA_CHECK_SET_VAL(WDI_IPA_TX_CE_DESC_SRC_PTR, _val); \
  220. ((_var) &= (WDI_IPA_TX_CE_DESC_SRC_PTR_M)); \
  221. ((_var) |= ((_val) << WDI_IPA_TX_CE_DESC_SRC_PTR_S)); \
  222. } while(0)
  223. #define WDI_IPA_TX_CE_DESC_SRC_BUF_LEN_GET(_var) \
  224. (((_var) & WDI_IPA_TX_CE_DESC_SRC_BUF_LEN_M) >> \
  225. WDI_IPA_TX_CE_DESC_SRC_BUF_LEN_S)
  226. #define WDI_IPA_TX_CE_DESC_SRC_BUF_LEN_SET(_var, _val) \
  227. do { \
  228. WDI_IPA_CHECK_SET_VAL(WDI_IPA_TX_CE_DESC_SRC_BUF_LEN, _val); \
  229. ((_var) &= (WDI_IPA_TX_CE_DESC_SRC_BUF_LEN_M)); \
  230. ((_var) |= ((_val) << WDI_IPA_TX_CE_DESC_SRC_BUF_LEN_S)); \
  231. } while(0)
  232. #define WDI_IPA_TX_CE_DESC_G_GET(_var) \
  233. (((_var) & WDI_IPA_TX_CE_DESC_G_M) >> \
  234. WDI_IPA_TX_CE_DESC_G_S)
  235. #define WDI_IPA_TX_CE_DESC_G_SET(_var, _val) \
  236. do { \
  237. WDI_IPA_CHECK_SET_VAL(WDI_IPA_TX_CE_DESC_G, _val); \
  238. ((_var) &= (WDI_IPA_TX_CE_DESC_G_M)); \
  239. ((_var) |= ((_val) << WDI_IPA_TX_CE_DESC_G_S)); \
  240. } while(0)
  241. #define WDI_IPA_TX_CE_DESC_S_GET(_var) \
  242. (((_var) & WDI_IPA_TX_CE_DESC_S_M) >> \
  243. WDI_IPA_TX_CE_DESC_S_S)
  244. #define WDI_IPA_TX_CE_DESC_S_SET(_var, _val) \
  245. do { \
  246. WDI_IPA_CHECK_SET_VAL(WDI_IPA_TX_CE_DESC_S, _val); \
  247. ((_var) &= (WDI_IPA_TX_CE_DESC_S_M)); \
  248. ((_var) |= ((_val) << WDI_IPA_TX_CE_DESC_S_S)); \
  249. } while(0)
  250. #define WDI_IPA_TX_CE_DESC_META_DATA_GET(_var) \
  251. (((_var) & WDI_IPA_TX_CE_DESC_META_DATA_M) >> \
  252. WDI_IPA_TX_CE_DESC_META_DATA_S)
  253. #define WDI_IPA_TX_CE_DESC_META_DATA_SET(_var, _val) \
  254. do { \
  255. WDI_IPA_CHECK_SET_VAL(WDI_IPA_TX_CE_DESC_META_DATA, _val); \
  256. ((_var) &= (WDI_IPA_TX_CE_DESC_META_DATA_M)); \
  257. ((_var) |= ((_val) << WDI_IPA_TX_CE_DESC_META_DATA_S)); \
  258. } while(0)
  259. PREPACK struct wdi_ipa_tx_ce_desc_t
  260. {
  261. A_UINT32 src_ptr; /* word 0 */
  262. A_UINT32 /* word 1 */
  263. src_buf_len: 16,
  264. g: 1,
  265. s: 1,
  266. meta_data: 14;
  267. } POSTPACK;
  268. #define WDI_IPA_TX_CE_RING_SZ 1024 /* no. of desc */
  269. #define WDI_IPA_TX_INITIAL_PKT_HDR_SZ 28
  270. #define WDI_IPA_TX_CE_FIXED_BUF_LEN (WDI_IPA_TX_FRAG_DESC_SZ + \
  271. WDI_IPA_TX_HTT_DESC_SZ + \
  272. WDI_IPA_TX_IPA_DESC_SZ + \
  273. WDI_IPA_TX_INITIAL_PKT_HDR_SZ)
  274. /* Verify that CE ring size is power of 2 */
  275. A_COMPILE_TIME_ASSERT(verify_ce_ring_sz,
  276. ((WDI_IPA_TX_CE_RING_SZ) ^ (WDI_IPA_TX_CE_RING_SZ-1)) ==
  277. ((WDI_IPA_TX_CE_RING_SZ<<1)-1));
  278. A_COMPILE_TIME_ASSERT(verify_pkt_pool_sz,
  279. WDI_IPA_TX_PKT_POOL_SZ < WDI_IPA_TX_CE_RING_SZ);
  280. /**
  281. * @brief WDI_IPA TX_COMP_DESC
  282. *
  283. * |31 24|23 16|15 8|7 0|
  284. * |----------------+----------------+----------------+----------------|
  285. * | Packet Buf Ptr |
  286. * |-------------------------------------------------------------------|
  287. *
  288. * Header fields:
  289. * Header fields:
  290. * - PKT_BUF_PTR
  291. * Bits 31:0
  292. * Purpose: Specify pointer to Packet Buf, which is being freed
  293. * after TX comp
  294. */
  295. #define WDI_IPA_TX_COMP_DESC_SZ 4 /* bytes */
  296. #define WDI_IPA_TX_COMP_DESC_PKT_BUF_PTR_M 0xffffffff
  297. #define WDI_IPA_TX_COMP_DESC_PKT_BUF_PTR_S 0
  298. #define WDI_IPA_TX_COMP_DESC_PKT_BUF_PTR_GET(_var) \
  299. (((_var) & WDI_IPA_TX_COMP_DESC_PKT_BUF_PTR_M) >> \
  300. WDI_IPA_TX_COMP_DESC_PKT_BUF_PTR_S)
  301. #define WDI_IPA_TX_COMP_DESC_PKT_BUF_PTR_SET(_var, _val) \
  302. do { \
  303. WDI_IPA_CHECK_SET_VAL(WDI_IPA_TX_COMP_DESC_PKT_BUF_PTR, _val);\
  304. ((_var) &= (WDI_IPA_TX_COMP_DESC_PKT_BUF_PTR_M)); \
  305. ((_var) |= ((_val) << WDI_IPA_TX_COMP_DESC_PKT_BUF_PTR_S)); \
  306. } while(0)
  307. PREPACK struct wdi_ipa_tx_comp_desc_t
  308. {
  309. A_UINT32 pkt_buf_ptr; /* word 0 */
  310. } POSTPACK;
  311. #define WDI_IPA_TX_COMP_RING_SZ 1024 /* no. of desc */
  312. /* Verify that TX COMP ring size is power of 2 */
  313. A_COMPILE_TIME_ASSERT(verify_tx_comp_ring_sz,
  314. ((WDI_IPA_TX_COMP_RING_SZ) ^ (WDI_IPA_TX_COMP_RING_SZ-1)) ==
  315. ((WDI_IPA_TX_COMP_RING_SZ<<1)-1));
  316. A_COMPILE_TIME_ASSERT(verify_Pkt_pool_sz,
  317. WDI_IPA_TX_PKT_POOL_SZ < WDI_IPA_TX_COMP_RING_SZ);
  318. /**
  319. * @brief WDI_IPA RX_IND_DESC
  320. *
  321. * |31 24|23 16|15 8|7 0|
  322. * |----------------+----------------+----------------+----------------|
  323. * | Packet Ptr |
  324. * |-------------------------------------------------------------------|
  325. * | Reserved | vdev id | Packet Length |
  326. * |-------------------------------------------------------------------|
  327. *
  328. * Header fields:
  329. * Header fields:
  330. * - PKT_PTR
  331. * Bits 31:0
  332. * Purpose: Specify pointer to starting of Ethernet Packet
  333. * - PKT_LENGTH
  334. * Bits 15:0
  335. * Purpose: Specify length Ethernet Packet
  336. * - VDEV_ID
  337. * Bits 23:16
  338. * Purpose: Specify the VDEV ID corrsponding the the packet
  339. */
  340. #define WDI_IPA_RX_IND_DESC_SZ 8 /* bytes */
  341. #define WDI_IPA_RX_IND_DESC_PKT_PTR_M 0xffffffff
  342. #define WDI_IPA_RX_IND_DESC_PKT_PTR_S 0
  343. #define WDI_IPA_RX_IND_DESC_PKT_LEN_M 0x0000ffff
  344. #define WDI_IPA_RX_IND_DESC_PKT_LEN_S 0
  345. #define WDI_IPA_RX_IND_DESC_VDEV_ID_M 0x00ff0000
  346. #define WDI_IPA_RX_IND_DESC_VDEV_ID_S 16
  347. #define WDI_IPA_RX_IND_DESC_PKT_PTR_GET(_var) \
  348. (((_var) & WDI_IPA_RX_IND_DESC_PKT_PTR_M) >> \
  349. WDI_IPA_RX_IND_DESC_PKT_PTR_S)
  350. #define WDI_IPA_RX_IND_DESC_PKT_PTR_SET(_var, _val) \
  351. do { \
  352. WDI_IPA_CHECK_SET_VAL(WDI_IPA_RX_IND_DESC_PKT_PTR, _val);\
  353. ((_var) &= (WDI_IPA_RX_IND_DESC_PKT_PTR_M)); \
  354. ((_var) |= ((_val) << WDI_IPA_RX_IND_DESC_PKT_PTR_S)); \
  355. } while(0)
  356. #define WDI_IPA_RX_IND_DESC_PKT_LEN_GET(_var) \
  357. (((_var) & WDI_IPA_RX_IND_DESC_PKT_LEN_M) >> \
  358. WDI_IPA_RX_IND_DESC_PKT_LEN_S)
  359. #define WDI_IPA_RX_IND_DESC_PKT_LEN_SET(_var, _val) \
  360. do { \
  361. WDI_IPA_CHECK_SET_VAL(WDI_IPA_RX_IND_DESC_PKT_LEN, _val);\
  362. ((_var) &= (WDI_IPA_RX_IND_DESC_PKT_LEN_M)); \
  363. ((_var) |= ((_val) << WDI_IPA_RX_IND_DESC_PKT_LEN_S)); \
  364. } while(0)
  365. #define WDI_IPA_RX_IND_DESC_VDEV_ID_GET(_var) \
  366. (((_var) & WDI_IPA_RX_IND_DESC_VDEV_ID_M) >> \
  367. WDI_IPA_RX_IND_DESC_VDEV_ID_S)
  368. #define WDI_IPA_RX_IND_DESC_VDEV_ID_SET(_var, _val) \
  369. do { \
  370. WDI_IPA_CHECK_SET_VAL(WDI_IPA_RX_IND_DESC_VDEV_ID, _val);\
  371. ((_var) &= (WDI_IPA_RX_IND_DESC_VDEV_ID_M)); \
  372. ((_var) |= ((_val) << WDI_IPA_RX_IND_DESC_VDEV_ID_S)); \
  373. } while(0)
  374. PREPACK struct wdi_ipa_rx_ind_desc_t
  375. {
  376. A_UINT32 pkt_ptr; /* word 0 */
  377. A_UINT32 /* word 1 */
  378. pkt_len:16,
  379. vdev_id:8,
  380. reserved:8;
  381. } POSTPACK;
  382. #define WDI_IPA_RX_IND_RING_SZ 512 /* no. of desc */
  383. /* Verify that RX IND ring size is power of 2 */
  384. A_COMPILE_TIME_ASSERT(verify_rx_ind_ring_sz,
  385. ((WDI_IPA_RX_IND_RING_SZ) ^ (WDI_IPA_RX_IND_RING_SZ-1)) ==
  386. ((WDI_IPA_RX_IND_RING_SZ<<1)-1));
  387. /**
  388. * @brief WLAN_WDI_IPA_DBG_STATS
  389. *
  390. * |31 24|23 16|15 8|7 0|
  391. * |----------------+----------------+----------------+----------------|
  392. * | tx comp ring base |
  393. * |-------------------------------------------------------------------|
  394. * | tx comp ring size |
  395. * |-------------------------------------------------------------------|
  396. * | tx comp ring dbell addr |
  397. * |-------------------------------------------------------------------|
  398. * | tx comp ring dbell ind val |
  399. * |-------------------------------------------------------------------|
  400. * | tx comp ring dbell cached val |
  401. * |-------------------------------------------------------------------|
  402. * | tx pkts enqueued |
  403. * |-------------------------------------------------------------------|
  404. * | tx pkts completed |
  405. * |-------------------------------------------------------------------|
  406. * | tx is suspend |
  407. * |-------------------------------------------------------------------|
  408. * | reserved0 |
  409. * |-------------------------------------------------------------------|
  410. * | rx ind ring base |
  411. * |-------------------------------------------------------------------|
  412. * | rx ind ring size |
  413. * |-------------------------------------------------------------------|
  414. * | rx ind ring dbell addr |
  415. * |-------------------------------------------------------------------|
  416. * | rx ind ring dbell ind val |
  417. * |-------------------------------------------------------------------|
  418. * | rx ind ring dbell cached val |
  419. * |-------------------------------------------------------------------|
  420. * | rx ind ring rdidx addr |
  421. * |-------------------------------------------------------------------|
  422. * | rx ind ring rd idx cached val |
  423. * |-------------------------------------------------------------------|
  424. * | rx refill idx |
  425. * |-------------------------------------------------------------------|
  426. * | rx num pkts indicated |
  427. * |-------------------------------------------------------------------|
  428. * | rx buf refilled |
  429. * |-------------------------------------------------------------------|
  430. * | rx num ind drop no space |
  431. * |-------------------------------------------------------------------|
  432. * | rx num ind drop no buf |
  433. * |-------------------------------------------------------------------|
  434. * | rx is suspend |
  435. * |-------------------------------------------------------------------|
  436. * | reserved1 |
  437. * |-------------------------------------------------------------------|
  438. *
  439. * Header fields:
  440. * Header fields:
  441. * - TX_COMP_RING_BASE
  442. * Bits 31:0
  443. * Purpose: Specifies TX_COMP RING base in DDR
  444. * - TX_COMP_RING_SIZE
  445. * Bits 31:0
  446. * Purpose: Specifies TX_COMP RING size in terms of elements
  447. * - TX_COMP_RING_DBELL ADDR
  448. * Bits 31:0
  449. * Purpose: Specifies DBELL ADDR for updating TX COMP RING write index
  450. * - TX_COMP_RING_DBELL_IND_VAL
  451. * Bits 31:0
  452. * Purpose: Specifies latest TX COMP RING write index written to
  453. * Dbell address.
  454. * - TX_COMP_RING_DBELL_CACHED_VAL
  455. * Bits 31:0
  456. * Purpose: Specifies WLAN maintained latest TX COMP RING write index
  457. * - TX_PKTS_ENQUEUED
  458. * Bits 31:0
  459. * Purpose: Specifies total number of packets queued for transmission from
  460. * WDI_IPA path
  461. * - TX_PKTS_COMPLETED
  462. * Bits 31:0
  463. * Purpose: Specifies total number of packets completed on WDI_IPA path
  464. * - TX_IS_SUSPEND
  465. * Bits 31:0
  466. * Purpose: Specifies whether WDI_IPA TX is suspended or not.
  467. * - RX_IND_RING_BASE
  468. * Bits 31:0
  469. * Purpose: Specifies RX_IND Ring base in DDR.
  470. * - RX_IND_RING_SIZE
  471. * Bits 31:0
  472. * Purpose: Specifies RX_IND Ring size in terms of elements.
  473. * - RX_IND_RING_DBELL_ADDR
  474. * Bits 31:0
  475. * Purpose: Specifies DBELL ADDR for updating RX_IND WR idx.
  476. * - RX_IND_RING_DBELL_IND_VAL
  477. * Bits 31:0
  478. * Purpose: Specifies latest RX IND RING write index written to
  479. * Dbell address.
  480. * - RX_IND_RING_DBELL_CACHED_VAL
  481. * Bits 31:0
  482. * Purpose: Specifies WLAN maintained latest RX IND RING write index
  483. * - RX_IND_RING_RDIDX_ADDR
  484. * Bits 31:0
  485. * Purpose: Specifies ADDR where RX_IND Read Index is updated.
  486. * - RX_IND_RING_RDIDX_CACHED_VAL
  487. * Bits 31:0
  488. * Purpose: Specifies WLAN maintained latest RX IND Read index.
  489. * - RX_REFILL_IDX
  490. * Bits 31:0
  491. * Purpose: Specifies IDX upto which buffers are recycled from RX IND ring.
  492. * - RX_NUM_PKTS_INDICATED
  493. * Bits 31:0
  494. * Purpose: Specifies total number of RX pakets indicated on WDI_IPA path.
  495. * - RX_NUM_BUF_REFILLED
  496. * Bits 31:0
  497. * Purpose: Specifies total number of RX buffers recycled on WDI_IPA path.
  498. * - RX_NUM_IND_DROPS_NO_SPACE
  499. * Bits 31:0
  500. * Purpose: Specifies number of times RX packets dropped as
  501. * not enough space in RX_IND ring
  502. * - RX_NUM_IND_DROPS_NO_BUF
  503. * Bits 31:0
  504. * Purpose: Specifies number of times RX packets dropped as
  505. * not enough buffers available on WLAN
  506. * - RX_IS_SUSPEND
  507. * Bits 31:0
  508. * Purpose: Specifies whether WDI_IPA RX path is in suspend or not
  509. */
  510. #define WLAN_WDI_IPA_DBG_STATS_SZ 92 /* bytes */
  511. #define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_BASE_M 0xffffffff
  512. #define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_BASE_S 0x0
  513. #define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_SIZE_M 0xffffffff
  514. #define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_SIZE_S 0x0
  515. #define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_ADDR_M 0xffffffff
  516. #define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_ADDR_S 0x0
  517. #define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_IND_VAL_M 0xffffffff
  518. #define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_IND_VAL_S 0x0
  519. #define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_CACHED_VAL_M 0xffffffff
  520. #define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_CACHED_VAL_S 0x0
  521. #define WLAN_WDI_IPA_DBG_STATS_TX_PKTS_ENQUEUED_M 0xffffffff
  522. #define WLAN_WDI_IPA_DBG_STATS_TX_PKTS_ENQUEUED_S 0x0
  523. #define WLAN_WDI_IPA_DBG_STATS_TX_PKTS_COMPLETED_M 0xffffffff
  524. #define WLAN_WDI_IPA_DBG_STATS_TX_PKTS_COMPLETED_S 0x0
  525. #define WLAN_WDI_IPA_DBG_STATS_TX_IS_SUSPEND_M 0xffffffff
  526. #define WLAN_WDI_IPA_DBG_STATS_TX_IS_SUSPEND_S 0x0
  527. #define WLAN_WDI_IPA_DBG_STATS_RESERVED0_M 0xffffffff
  528. #define WLAN_WDI_IPA_DBG_STATS_RESERVED0_S 0x0
  529. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_BASE_M 0xffffffff
  530. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_BASE_S 0x0
  531. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_SIZE_M 0xffffffff
  532. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_SIZE_S 0x0
  533. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_ADDR_M 0xffffffff
  534. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_ADDR_S 0x0
  535. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_IND_VAL_M 0xffffffff
  536. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_IND_VAL_S 0x0
  537. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_CACHED_VAL_M 0xffffffff
  538. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_CACHED_VAL_S 0x0
  539. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_ADDR_M 0xffffffff
  540. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_ADDR_S 0x0
  541. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_CACHED_VAL_M 0xffffffff
  542. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_CACHED_VAL_S 0x0
  543. #define WLAN_WDI_IPA_DBG_STATS_RX_REFILL_IDX_M 0xffffffff
  544. #define WLAN_WDI_IPA_DBG_STATS_RX_REFILL_IDX_S 0x0
  545. #define WLAN_WDI_IPA_DBG_STATS_RX_NUM_PKTS_INDICATED_M 0xffffffff
  546. #define WLAN_WDI_IPA_DBG_STATS_RX_NUM_PKTS_INDICATED_S 0x0
  547. #define WLAN_WDI_IPA_DBG_STATS_RX_BUF_REFILLED_M 0xffffffff
  548. #define WLAN_WDI_IPA_DBG_STATS_RX_BUF_REFILLED_S 0x0
  549. #define WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_SPACE_M 0xffffffff
  550. #define WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_SPACE_S 0x0
  551. #define WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_BUF_M 0xffffffff
  552. #define WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_BUF_S 0x0
  553. #define WLAN_WDI_IPA_DBG_STATS_RX_IS_SUSPEND_M 0xffffffff
  554. #define WLAN_WDI_IPA_DBG_STATS_RX_IS_SUSPEND_S 0x0
  555. #define WLAN_WDI_IPA_DBG_STATS_RESERVED1_M 0xffffffff
  556. #define WLAN_WDI_IPA_DBG_STATS_RESERVED1_S 0x0
  557. #define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_BASE_GET(_var) \
  558. (((_var) & WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_BASE_M) >> \
  559. WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_BASE_S)
  560. #define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_BASE_SET(_var, _val) \
  561. do { \
  562. WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_BASE, _val);\
  563. ((_var) &= (WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_BASE_M)); \
  564. ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_BASE_S )); \
  565. } while(0)
  566. #define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_SIZE_GET(_var) \
  567. (((_var) & WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_SIZE_M) >> \
  568. WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_SIZE_S)
  569. #define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_SIZE_SET(_var, _val) \
  570. do { \
  571. WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_SIZE, _val);\
  572. ((_var) &= (WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_SIZE_M)); \
  573. ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_SIZE_S )); \
  574. } while(0)
  575. #define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_ADDR_GET(_var) \
  576. (((_var) & WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_ADDR_M) >> \
  577. WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_ADDR_S)
  578. #define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_ADDR_SET(_var, _val) \
  579. do { \
  580. WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_ADDR, _val);\
  581. ((_var) &= (WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_ADDR_M)); \
  582. ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_ADDR_S )); \
  583. } while(0)
  584. #define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_IND_VAL_GET(_var) \
  585. (((_var) & WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_IND_VAL_M) >> \
  586. WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_IND_VAL_S)
  587. #define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_IND_VAL_SET(_var, _val) \
  588. do { \
  589. WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_IND_VAL, _val);\
  590. ((_var) &= (WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_IND_VAL_M)); \
  591. ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_IND_VAL_S )); \
  592. } while(0)
  593. #define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_CACHED_VAL_GET(_var) \
  594. (((_var) & WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_CACHED_VAL_M) >> \
  595. WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_CACHED_VAL_S)
  596. #define WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_CACHED_VAL_SET(_var, _val) \
  597. do { \
  598. WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_CACHED_VAL, _val);\
  599. ((_var) &= (WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_CACHED_VAL_M)); \
  600. ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_TX_COMP_RING_DBELL_CACHED_VAL_S )); \
  601. } while(0)
  602. #define WLAN_WDI_IPA_DBG_STATS_TX_PKTS_ENQUEUED_GET(_var) \
  603. (((_var) & WLAN_WDI_IPA_DBG_STATS_TX_PKTS_ENQUEUED_M) >> \
  604. WLAN_WDI_IPA_DBG_STATS_TX_PKTS_ENQUEUED_S)
  605. #define WLAN_WDI_IPA_DBG_STATS_TX_PKTS_ENQUEUED_SET(_var, _val) \
  606. do { \
  607. WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_TX_PKTS_ENQUEUED, _val);\
  608. ((_var) &= (WLAN_WDI_IPA_DBG_STATS_TX_PKTS_ENQUEUED_M)); \
  609. ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_TX_PKTS_ENQUEUED_S )); \
  610. } while(0)
  611. #define WLAN_WDI_IPA_DBG_STATS_TX_PKTS_COMPLETED_GET(_var) \
  612. (((_var) & WLAN_WDI_IPA_DBG_STATS_TX_PKTS_COMPLETED_M) >> \
  613. WLAN_WDI_IPA_DBG_STATS_TX_PKTS_COMPLETED_S)
  614. #define WLAN_WDI_IPA_DBG_STATS_TX_PKTS_COMPLETED_SET(_var, _val) \
  615. do { \
  616. WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_TX_PKTS_COMPLETED, _val);\
  617. ((_var) &= (WLAN_WDI_IPA_DBG_STATS_TX_PKTS_COMPLETED_M)); \
  618. ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_TX_PKTS_COMPLETED_S )); \
  619. } while(0)
  620. #define WLAN_WDI_IPA_DBG_STATS_TX_IS_SUSPEND_GET(_var) \
  621. (((_var) & WLAN_WDI_IPA_DBG_STATS_TX_IS_SUSPEND_M) >> \
  622. WLAN_WDI_IPA_DBG_STATS_TX_IS_SUSPEND_S)
  623. #define WLAN_WDI_IPA_DBG_STATS_TX_IS_SUSPEND_SET(_var, _val) \
  624. do { \
  625. WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_TX_IS_SUSPEND, _val);\
  626. ((_var) &= (WLAN_WDI_IPA_DBG_STATS_TX_IS_SUSPEND_M)); \
  627. ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_TX_IS_SUSPEND_S )); \
  628. } while(0)
  629. #define WLAN_WDI_IPA_DBG_STATS_RESERVED0_GET(_var) \
  630. (((_var) & WLAN_WDI_IPA_DBG_STATS_RESERVED0_M) >> \
  631. WLAN_WDI_IPA_DBG_STATS_RESERVED0_S)
  632. #define WLAN_WDI_IPA_DBG_STATS_RESERVED0_SET(_var, _val) \
  633. do { \
  634. WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RESERVED0, _val);\
  635. ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RESERVED0_M)); \
  636. ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RESERVED0_S )); \
  637. } while(0)
  638. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_BASE_GET(_var) \
  639. (((_var) & WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_BASE_M) >> \
  640. WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_BASE_S)
  641. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_BASE_SET(_var, _val) \
  642. do { \
  643. WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_BASE, _val);\
  644. ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_BASE_M)); \
  645. ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_BASE_S )); \
  646. } while(0)
  647. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_SIZE_GET(_var) \
  648. (((_var) & WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_SIZE_M) >> \
  649. WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_SIZE_S)
  650. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_SIZE_SET(_var, _val) \
  651. do { \
  652. WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_SIZE, _val);\
  653. ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_SIZE_M)); \
  654. ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_SIZE_S )); \
  655. } while(0)
  656. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_ADDR_GET(_var) \
  657. (((_var) & WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_ADDR_M) >> \
  658. WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_ADDR_S)
  659. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_ADDR_SET(_var, _val) \
  660. do { \
  661. WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_ADDR, _val);\
  662. ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_ADDR_M)); \
  663. ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_ADDR_S )); \
  664. } while(0)
  665. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_IND_VAL_GET(_var) \
  666. (((_var) & WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_IND_VAL_M) >> \
  667. WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_IND_VAL_S)
  668. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_IND_VAL_SET(_var, _val) \
  669. do { \
  670. WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_IND_VAL, _val);\
  671. ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_IND_VAL_M)); \
  672. ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_IND_VAL_S )); \
  673. } while(0)
  674. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_CACHED_VAL_GET(_var) \
  675. (((_var) & WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_CACHED_VAL_M) >> \
  676. WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_CACHED_VAL_S)
  677. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_CACHED_VAL_SET(_var, _val) \
  678. do { \
  679. WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_CACHED_VAL, _val);\
  680. ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_CACHED_VAL_M)); \
  681. ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_DBELL_CACHED_VAL_S )); \
  682. } while(0)
  683. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_ADDR_GET(_var) \
  684. (((_var) & WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_ADDR_M) >> \
  685. WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_ADDR_S)
  686. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_ADDR_SET(_var, _val) \
  687. do { \
  688. WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_ADDR, _val);\
  689. ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_ADDR_M)); \
  690. ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_ADDR_S )); \
  691. } while(0)
  692. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_CACHED_VAL_GET(_var) \
  693. (((_var) & WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_CACHED_VAL_M) >> \
  694. WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_CACHED_VAL_S)
  695. #define WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_CACHED_VAL_SET(_var, _val) \
  696. do { \
  697. WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_CACHED_VAL, _val);\
  698. ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_CACHED_VAL_M)); \
  699. ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RX_IND_RING_RDIDX_CACHED_VAL_S )); \
  700. } while(0)
  701. #define WLAN_WDI_IPA_DBG_STATS_RX_REFILL_IDX_GET(_var) \
  702. (((_var) & WLAN_WDI_IPA_DBG_STATS_RX_REFILL_IDX_M) >> \
  703. WLAN_WDI_IPA_DBG_STATS_RX_REFILL_IDX_S)
  704. #define WLAN_WDI_IPA_DBG_STATS_RX_REFILL_IDX_SET(_var, _val) \
  705. do { \
  706. WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RX_REFILL_IDX, _val);\
  707. ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RX_REFILL_IDX_M)); \
  708. ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RX_REFILL_IDX_S )); \
  709. } while(0)
  710. #define WLAN_WDI_IPA_DBG_STATS_RX_NUM_PKTS_INDICATED_GET(_var) \
  711. (((_var) & WLAN_WDI_IPA_DBG_STATS_RX_NUM_PKTS_INDICATED_M) >> \
  712. WLAN_WDI_IPA_DBG_STATS_RX_NUM_PKTS_INDICATED_S)
  713. #define WLAN_WDI_IPA_DBG_STATS_RX_NUM_PKTS_INDICATED_SET(_var, _val) \
  714. do { \
  715. WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RX_NUM_PKTS_INDICATED, _val);\
  716. ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RX_NUM_PKTS_INDICATED_M)); \
  717. ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RX_NUM_PKTS_INDICATED_S )); \
  718. } while(0)
  719. #define WLAN_WDI_IPA_DBG_STATS_RX_BUF_REFILLED_GET(_var) \
  720. (((_var) & WLAN_WDI_IPA_DBG_STATS_RX_BUF_REFILLED_M) >> \
  721. WLAN_WDI_IPA_DBG_STATS_RX_BUF_REFILLED_S)
  722. #define WLAN_WDI_IPA_DBG_STATS_RX_BUF_REFILLED_SET(_var, _val) \
  723. do { \
  724. WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RX_BUF_REFILLED, _val);\
  725. ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RX_BUF_REFILLED_M)); \
  726. ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RX_BUF_REFILLED_S )); \
  727. } while(0)
  728. #define WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_SPACE_GET(_var) \
  729. (((_var) & WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_SPACE_M) >> \
  730. WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_SPACE_S)
  731. #define WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_SPACE_SET(_var, _val) \
  732. do { \
  733. WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_SPACE, _val);\
  734. ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_SPACE_M)); \
  735. ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_SPACE_S )); \
  736. } while(0)
  737. #define WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_BUF_GET(_var) \
  738. (((_var) & WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_BUF_M) >> \
  739. WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_BUF_S)
  740. #define WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_BUF_SET(_var, _val) \
  741. do { \
  742. WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_BUF, _val);\
  743. ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_BUF_M)); \
  744. ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RX_NUM_IND_DROPS_NO_BUF_S)); \
  745. } while(0)
  746. #define WLAN_WDI_IPA_DBG_STATS_RX_IS_SUSPEND_GET(_var) \
  747. (((_var) & WLAN_WDI_IPA_DBG_STATS_RX_IS_SUSPEND_M) >> \
  748. WLAN_WDI_IPA_DBG_STATS_RX_IS_SUSPEND_S)
  749. #define WLAN_WDI_IPA_DBG_STATS_RX_IS_SUSPEND_SET(_var, _val) \
  750. do { \
  751. WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RX_IS_SUSPEND, _val);\
  752. ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RX_IS_SUSPEND_M)); \
  753. ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RX_IS_SUSPEND_S)); \
  754. } while(0)
  755. #define WLAN_WDI_IPA_DBG_STATS_RESERVED1_GET(_var) \
  756. (((_var) & WLAN_WDI_IPA_DBG_STATS_RESERVED1_M) >> \
  757. WLAN_WDI_IPA_DBG_STATS_RESERVED1_S)
  758. #define WLAN_WDI_IPA_DBG_STATS_RESERVED1_SET(_var, _val) \
  759. do { \
  760. WDI_IPA_CHECK_SET_VAL(WLAN_WDI_IPA_DBG_STATS_RESERVED1, _val);\
  761. ((_var) &= (WLAN_WDI_IPA_DBG_STATS_RESERVED1_M)); \
  762. ((_var) |= ((_val) << WLAN_WDI_IPA_DBG_STATS_RESERVED1_S )); \
  763. } while(0)
  764. PREPACK struct wlan_wdi_ipa_dbg_stats_t
  765. {
  766. A_UINT32 tx_comp_ring_base; /* word 0 */
  767. A_UINT32 tx_comp_ring_size; /* word 1 */
  768. A_UINT32 tx_comp_ring_dbell_addr; /* word 2 */
  769. A_UINT32 tx_comp_ring_dbell_ind_val; /* word 3 */
  770. A_UINT32 tx_comp_ring_dbell_cached_val; /* word 4 */
  771. A_UINT32 tx_pkts_enqueued; /* word 5 */
  772. A_UINT32 tx_pkts_completed; /* word 6 */
  773. A_UINT32 tx_is_suspend; /* word 7 */
  774. A_UINT32 reserved0; /* word 8 */
  775. A_UINT32 rx_ind_ring_base; /* word 9 */
  776. A_UINT32 rx_ind_ring_size; /* word 10 */
  777. A_UINT32 rx_ind_ring_dbell_addr; /* word 11 */
  778. A_UINT32 rx_ind_ring_dbell_ind_val; /* word 12 */
  779. A_UINT32 rx_ind_ring_dbell_cached_val; /* word 13 */
  780. A_UINT32 rx_ind_ring_rdidx_addr; /* word 14 */
  781. A_UINT32 rx_ind_ring_rdidx_cached_val; /* word 15 */
  782. A_UINT32 rx_refill_idx; /* word 16 */
  783. A_UINT32 rx_num_pkts_indicated; /* word 17 */
  784. A_UINT32 rx_buf_refilled; /* word 18 */
  785. A_UINT32 rx_num_ind_drops_no_space; /* word 19 */
  786. A_UINT32 rx_num_ind_drops_no_buf; /* word 20 */
  787. A_UINT32 rx_is_suspend; /* word 21 */
  788. A_UINT32 reserved1; /* word 22 */
  789. } POSTPACK;
  790. /**
  791. * @brief WLAN_WDI_IPA_GET_SHARING_STATS_REQ
  792. *
  793. * |31 24|23 16|15 8|7 0|
  794. * |----------------+----------------+----------------+----------------|
  795. * | reserved | reset_stats |
  796. * |-------------------------------------------------------------------|
  797. * Header fields:
  798. * - RESET_STATS
  799. * Bits 7:0
  800. * Purpose: when 1, FW clears sharing stats
  801. * - RESERVED
  802. * Bits 31:8
  803. * Purpose: reserved bits
  804. **/
  805. #define WLAN_WDI_IPA_GET_SHARING_STATS_REQ_SZ 4 /* bytes */
  806. #define WLAN_WDI_IPA_GET_SHARING_STATS_REQ_RESET_STATS_M 0x000000ff
  807. #define WLAN_WDI_IPA_GET_SHARING_STATS_REQ_RESET_STATS_S 0x0
  808. #define WLAN_WDI_IPA_GET_SHARING_STATS_REQ_RESET_STATS_GET(_var) \
  809. (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_REQ_RESET_STATS_M) >> \
  810. WLAN_WDI_IPA_GET_SHARING_STATS_REQ_RESET_STATS_S)
  811. #define WLAN_WDI_IPA_GET_SHARING_STATS_REQ_RESET_STATS_SET(_var, _val) \
  812. do { \
  813. ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_REQ_RESET_STATS_M)); \
  814. ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_REQ_RESET_STATS_S)); \
  815. } while(0)
  816. PREPACK struct wlan_wdi_ipa_get_sharing_stats_req_t {
  817. A_UINT32 reset_stats:8,
  818. reserved:24;
  819. } POSTPACK;
  820. /*
  821. * Response-type specific info for HTT_WDI_IPA_OPCODE_GET_SHARING_STATS
  822. *
  823. */
  824. /**
  825. * @brief WLAN_WDI_IPA_GET_SHARING_STATS_RESP
  826. *
  827. * |31 24|23 16|15 8|7 0|
  828. * |----------------+----------------+----------------+----------------|
  829. * | ipv4_rx_packets_lo |
  830. * |-------------------------------------------------------------------|
  831. * | ipv4_rx_packets_hi |
  832. * |-------------------------------------------------------------------|
  833. * | ipv4_rx_bytes_lo |
  834. * |-------------------------------------------------------------------|
  835. * | ipv4_rx_bytes_lo |
  836. * |-------------------------------------------------------------------|
  837. * | ipv6_rx_packets_lo |
  838. * |-------------------------------------------------------------------|
  839. * | ipv6_rx_packets_hi |
  840. * |-------------------------------------------------------------------|
  841. * | ipv6_rx_bytes_lo |
  842. * |-------------------------------------------------------------------|
  843. * | ipv6_rx_bytes_hi |
  844. * |-------------------------------------------------------------------|
  845. * | ipv4_tx_packets_lo |
  846. * |-------------------------------------------------------------------|
  847. * | ipv4_tx_packets_hi |
  848. * |-------------------------------------------------------------------|
  849. * | ipv4_tx_bytes_lo |
  850. * |-------------------------------------------------------------------|
  851. * | ipv4_tx_bytes_lo |
  852. * |-------------------------------------------------------------------|
  853. * | ipv6_tx_packets_lo |
  854. * |-------------------------------------------------------------------|
  855. * | ipv6_tx_packets_hi |
  856. * |-------------------------------------------------------------------|
  857. * | ipv6_tx_bytes_lo |
  858. * |-------------------------------------------------------------------|
  859. * | ipv6_tx_bytes_hi |
  860. * |-------------------------------------------------------------------|
  861. *
  862. * Header fields:
  863. * - ipv4_rx_packets_lo
  864. * Bits 31:0
  865. * Purpose: number of IPv4 RX packets, low 32-bit
  866. * - ipv4_rx_packets_hi
  867. * Bits 31:0
  868. * Purpose: number of IPv4 RX packets, high 32-bit
  869. * - ipv4_rx_bytes_lo
  870. * Bits 31:0
  871. * Purpose: bytes of IPv4 RX packets, low 32-bit
  872. * - ipv4_rx_bytes_lo
  873. * Bits 31:0
  874. * Purpose: bytes of IPv4 RX packets, low 32-bit
  875. * - ipv6_rx_packets_lo
  876. * Bits 31:0
  877. * Purpose: number of IPv6 RX packets, low 32-bit
  878. * - ipv6_rx_packets_hi
  879. * Bits 31:0
  880. * Purpose: number of IPv6 RX packets, high 32-bit
  881. * - ipv6_rx_bytes_lo
  882. * Bits 31:0
  883. * Purpose: bytes of IPv6 RX packets, low 32-bit
  884. * - ipv6_rx_bytes_lo
  885. * Bits 31:0
  886. * Purpose: bytes of IPv6 RX packets, low 32-bit
  887. * - ipv4_tx_packets_lo
  888. * Bits 31:0
  889. * Purpose: number of IPv4 TX packets, low 32-bit
  890. * - ipv4_tx_packets_hi
  891. * Bits 31:0
  892. * Purpose: number of IPv4 TX packets, high 32-bit
  893. * - ipv4_tx_bytes_lo
  894. * Bits 31:0
  895. * Purpose: bytes of IPv4 TX packets, low 32-bit
  896. * - ipv4_tx_bytes_lo
  897. * Bits 31:0
  898. * Purpose: bytes of IPv4 TX packets, low 32-bit
  899. * - ipv6_tx_packets_lo
  900. * Bits 31:0
  901. * Purpose: number of IPv6 TX packets, low 32-bit
  902. * - ipv6_tx_packets_hi
  903. * Bits 31:0
  904. * Purpose: number of IPv6 TX packets, high 32-bit
  905. * - ipv6_tx_bytes_lo
  906. * Bits 31:0
  907. * Purpose: bytes of IPv6 TX packets, low 32-bit
  908. * - ipv6_tx_bytes_lo
  909. * Bits 31:0
  910. * Purpose: bytes of IPv6 TX packets, low 32-bit
  911. *
  912. **/
  913. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_SZ 64 /* bytes */
  914. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_LO_M 0xffffffff
  915. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_LO_S 0x0
  916. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_HI_M 0xffffffff
  917. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_HI_S 0x0
  918. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_LO_M 0xffffffff
  919. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_LO_S 0x0
  920. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_HI_M 0xffffffff
  921. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_HI_S 0x0
  922. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_LO_M 0xffffffff
  923. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_LO_S 0x0
  924. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_HI_M 0xffffffff
  925. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_HI_S 0x0
  926. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_LO_M 0xffffffff
  927. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_LO_S 0x0
  928. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_HI_M 0xffffffff
  929. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_HI_S 0x0
  930. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_LO_M 0xffffffff
  931. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_LO_S 0x0
  932. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_HI_M 0xffffffff
  933. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_HI_S 0x0
  934. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_LO_M 0xffffffff
  935. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_LO_S 0x0
  936. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_HI_M 0xffffffff
  937. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_HI_S 0x0
  938. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_LO_M 0xffffffff
  939. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_LO_S 0x0
  940. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_HI_M 0xffffffff
  941. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_HI_S 0x0
  942. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_LO_M 0xffffffff
  943. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_LO_S 0x0
  944. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_HI_M 0xffffffff
  945. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_HI_S 0x0
  946. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_LO_GET(_var) \
  947. (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_LO_M) >> \
  948. WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_LO_S)
  949. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_LO_SET(_var, _val) \
  950. do { \
  951. ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_LO_M)); \
  952. ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_LO_S)); \
  953. } while(0)
  954. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_HI_GET(_var) \
  955. (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_HI_M) >> \
  956. WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_HI_S)
  957. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_HI_SET(_var, _val) \
  958. do { \
  959. ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_HI_M)); \
  960. ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_PKTS_HI_S)); \
  961. } while(0)
  962. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_LO_GET(_var) \
  963. (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_LO_M) >> \
  964. WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_LO_S)
  965. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_LO_SET(_var, _val) \
  966. do { \
  967. ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_LO_M)); \
  968. ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_LO_S)); \
  969. } while(0)
  970. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_HI_GET(_var) \
  971. (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_HI_M) >> \
  972. WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_HI_S)
  973. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_HI_SET(_var, _val) \
  974. do { \
  975. ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_HI_M)); \
  976. ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_RX_BYTES_HI_S)); \
  977. } while(0)
  978. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_LO_GET(_var) \
  979. (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_LO_M) >> \
  980. WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_LO_S)
  981. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_LO_SET(_var, _val) \
  982. do { \
  983. ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_LO_M)); \
  984. ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_LO_S)); \
  985. } while(0)
  986. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_HI_GET(_var) \
  987. (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_HI_M) >> \
  988. WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_HI_S)
  989. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_HI_SET(_var, _val) \
  990. do { \
  991. ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_HI_M)); \
  992. ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_PKTS_HI_S)); \
  993. } while(0)
  994. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_LO_GET(_var) \
  995. (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_LO_M) >> \
  996. WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_LO_S)
  997. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_LO_SET(_var, _val) \
  998. do { \
  999. ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_LO_M)); \
  1000. ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_LO_S)); \
  1001. } while(0)
  1002. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_HI_GET(_var) \
  1003. (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_HI_M) >> \
  1004. WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_HI_S)
  1005. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_HI_SET(_var, _val) \
  1006. do { \
  1007. ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_HI_M)); \
  1008. ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_RX_BYTES_HI_S)); \
  1009. } while(0)
  1010. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_LO_GET(_var) \
  1011. (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_LO_M) >> \
  1012. WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_LO_S)
  1013. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_LO_SET(_var, _val) \
  1014. do { \
  1015. ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_LO_M)); \
  1016. ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_LO_S)); \
  1017. } while(0)
  1018. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_HI_GET(_var) \
  1019. (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_HI_M) >> \
  1020. WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_HI_S)
  1021. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_HI_SET(_var, _val) \
  1022. do { \
  1023. ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_HI_M)); \
  1024. ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_PKTS_HI_S)); \
  1025. } while(0)
  1026. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_LO_GET(_var) \
  1027. (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_LO_M) >> \
  1028. WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_LO_S)
  1029. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_LO_SET(_var, _val) \
  1030. do { \
  1031. ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_LO_M)); \
  1032. ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_LO_S)); \
  1033. } while(0)
  1034. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_HI_GET(_var) \
  1035. (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_HI_M) >> \
  1036. WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_HI_S)
  1037. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_HI_SET(_var, _val) \
  1038. do { \
  1039. ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_HI_M)); \
  1040. ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV4_TX_BYTES_HI_S)); \
  1041. } while(0)
  1042. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_LO_GET(_var) \
  1043. (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_LO_M) >> \
  1044. WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_LO_S)
  1045. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_LO_SET(_var, _val) \
  1046. do { \
  1047. ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_LO_M)); \
  1048. ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_LO_S)); \
  1049. } while(0)
  1050. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_HI_GET(_var) \
  1051. (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_HI_M) >> \
  1052. WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_HI_S)
  1053. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_HI_SET(_var, _val) \
  1054. do { \
  1055. ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_HI_M)); \
  1056. ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_PKTS_HI_S)); \
  1057. } while(0)
  1058. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_LO_GET(_var) \
  1059. (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_LO_M) >> \
  1060. WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_LO_S)
  1061. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_LO_SET(_var, _val) \
  1062. do { \
  1063. ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_LO_M)); \
  1064. ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_LO_S)); \
  1065. } while(0)
  1066. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_HI_GET(_var) \
  1067. (((_var) & WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_HI_M) >> \
  1068. WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_HI_S)
  1069. #define WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_HI_SET(_var, _val) \
  1070. do { \
  1071. ((_var) &= (WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_HI_M)); \
  1072. ((_var) |= ((_val) << WLAN_WDI_IPA_GET_SHARING_STATS_RESP_IPV6_TX_BYTES_HI_S)); \
  1073. } while(0)
  1074. PREPACK struct wlan_wdi_ipa_get_sharing_stats_resp_t {
  1075. A_UINT32 ipv4_rx_packets_lo;
  1076. A_UINT32 ipv4_rx_packets_hi;
  1077. A_UINT32 ipv4_rx_bytes_lo;
  1078. A_UINT32 ipv4_rx_bytes_hi;
  1079. A_UINT32 ipv6_rx_packets_lo;
  1080. A_UINT32 ipv6_rx_packets_hi;
  1081. A_UINT32 ipv6_rx_bytes_lo;
  1082. A_UINT32 ipv6_rx_bytes_hi;
  1083. A_UINT32 ipv4_tx_packets_lo;
  1084. A_UINT32 ipv4_tx_packets_hi;
  1085. A_UINT32 ipv4_tx_bytes_lo;
  1086. A_UINT32 ipv4_tx_bytes_hi;
  1087. A_UINT32 ipv6_tx_packets_lo;
  1088. A_UINT32 ipv6_tx_packets_hi;
  1089. A_UINT32 ipv6_tx_bytes_lo;
  1090. A_UINT32 ipv6_tx_bytes_hi;
  1091. } POSTPACK;
  1092. /**
  1093. * @brief WLAN_WDI_IPA_SET_QUOTA_REQ
  1094. *
  1095. * |31 24|23 16|15 8|7 0|
  1096. * |----------------+----------------+----------------+----------------|
  1097. * | reserved | set_quota |
  1098. * |-------------------------------------------------------------------|
  1099. * | quota_lo |
  1100. * |-------------------------------------------------------------------|
  1101. * | quota_hi |
  1102. * |-------------------------------------------------------------------|
  1103. * Header fields:
  1104. * - set_quota
  1105. * Bits 7:0
  1106. * Purpose: when 1, FW configures quota and starts quota monitoring. when 0, FW stops.
  1107. * - RESERVED
  1108. * Bits 31:8
  1109. * Purpose: reserved bits
  1110. * - quota_lo
  1111. * Bits 31:0
  1112. * Purpose: bytes of quota to be set, low 32-bit.
  1113. * It is accumulated number of bytes from when quota is configured.
  1114. * - quota_hi
  1115. * Bits 31:0
  1116. * Purpose: bytes of quota to be set, high 32-bit
  1117. **/
  1118. #define WLAN_WDI_IPA_SET_QUOTA_REQ_SZ 12 /* bytes */
  1119. #define WLAN_WDI_IPA_SET_QUOTA_REQ_SET_QUOTA_M 0x000000ff
  1120. #define WLAN_WDI_IPA_SET_QUOTA_REQ_SET_QUOTA_S 0x0
  1121. #define WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_LO_M 0xffffffff
  1122. #define WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_LO_S 0x0
  1123. #define WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_HI_M 0xffffffff
  1124. #define WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_HI_S 0x0
  1125. #define WLAN_WDI_IPA_SET_QUOTA_REQ_SET_QUOTA_GET(_var) \
  1126. (((_var) & WLAN_WDI_IPA_SET_QUOTA_REQ_SET_QUOTA_M) >> \
  1127. WLAN_WDI_IPA_SET_QUOTA_REQ_SET_QUOTA_S)
  1128. #define WLAN_WDI_IPA_SET_QUOTA_REQ_SET_QUOTA_SET(_var, _val) \
  1129. do { \
  1130. ((_var) &= (WLAN_WDI_IPA_SET_QUOTA_REQ_SET_QUOTA_M)); \
  1131. ((_var) |= ((_val) << WLAN_WDI_IPA_SET_QUOTA_REQ_SET_QUOTA_S)); \
  1132. } while(0)
  1133. #define WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_LO_GET(_var) \
  1134. (((_var) & WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_LO_M) >> \
  1135. WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_LO_S)
  1136. #define WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_LO_SET(_var, _val) \
  1137. do { \
  1138. ((_var) &= (WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_LO_M)); \
  1139. ((_var) |= ((_val) << WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_LO_S)); \
  1140. } while(0)
  1141. #define WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_HI_GET(_var) \
  1142. (((_var) & WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_HI_M) >> \
  1143. WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_HI_S)
  1144. #define WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_HI_SET(_var, _val) \
  1145. do { \
  1146. ((_var) &= (WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_HI_M)); \
  1147. ((_var) |= ((_val) << WLAN_WDI_IPA_SET_QUOTA_REQ_QUOTA_HI_S)); \
  1148. } while(0)
  1149. PREPACK struct wlan_wdi_ipa_set_quota_req_t {
  1150. A_UINT32 set_quota:8,
  1151. reserved:24;
  1152. A_UINT32 quota_lo;
  1153. A_UINT32 quota_hi;
  1154. } POSTPACK;
  1155. /**
  1156. * @brief WLAN_WDI_IPA_SET_QUOTA_RESP
  1157. *
  1158. * |31 24|23 16|15 8|7 0|
  1159. * |----------------+----------------+----------------+----------------|
  1160. * | reserved | success |
  1161. * |-------------------------------------------------------------------|
  1162. * | total_bytes_lo |
  1163. * |-------------------------------------------------------------------|
  1164. * | total_bytes_hi |
  1165. * |-------------------------------------------------------------------|
  1166. * Header fields:
  1167. * - success
  1168. * Bits 7:0
  1169. * Purpose: when 1, FW successfully sets the quota.
  1170. * when 0, FW rejects because quota is smaller than current total
  1171. * bytes.
  1172. * - total_bytes_lo
  1173. * Bits 31:0
  1174. * Purpose: total bytes so far when the quota is configured, low 32-bit.
  1175. * It is accumulated number of bytes when quota is configured.
  1176. * - total_bytes_hi
  1177. * Bits 31:0
  1178. * Purpose: total bytes, high 32-bit
  1179. **/
  1180. #define WLAN_WDI_IPA_SET_QUOTA_RESP_SZ 12 /* bytes */
  1181. #define WLAN_WDI_IPA_SET_QUOTA_RESP_SUCCESS_M 0x000000ff
  1182. #define WLAN_WDI_IPA_SET_QUOTA_RESP_SUCCESS_S 0x0
  1183. #define WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_LO_M 0xffffffff
  1184. #define WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_LO_S 0x0
  1185. #define WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_HI_M 0xffffffff
  1186. #define WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_HI_S 0x0
  1187. #define WLAN_WDI_IPA_SET_QUOTA_RESP_SUCCESS_GET(_var) \
  1188. (((_var) & WLAN_WDI_IPA_SET_QUOTA_RESP_SUCCESS_M) >> \
  1189. WLAN_WDI_IPA_SET_QUOTA_RESP_SUCCESS_S)
  1190. #define WLAN_WDI_IPA_SET_QUOTA_RESP_SUCCESS_SET(_var, _val) \
  1191. do { \
  1192. ((_var) &= (WLAN_WDI_IPA_SET_QUOTA_RESP_SUCCESS_M)); \
  1193. ((_var) |= ((_val) << WLAN_WDI_IPA_SET_QUOTA_RESP_SUCCESS_S)); \
  1194. } while(0)
  1195. #define WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_LO_GET(_var) \
  1196. (((_var) & WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_LO_M) >> \
  1197. WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_LO_S)
  1198. #define WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_LO_SET(_var, _val) \
  1199. do { \
  1200. ((_var) &= (WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_LO_M)); \
  1201. ((_var) |= ((_val) << WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_LO_S)); \
  1202. } while(0)
  1203. #define WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_HI_GET(_var) \
  1204. (((_var) & WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_HI_M) >> \
  1205. WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_HI_S)
  1206. #define WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_HI_SET(_var, _val) \
  1207. do { \
  1208. ((_var) &= (WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_HI_M)); \
  1209. ((_var) |= ((_val) << WLAN_WDI_IPA_SET_QUOTA_RESP_TOTAL_BYTES_HI_S)); \
  1210. } while(0)
  1211. PREPACK struct wlan_wdi_ipa_set_quota_resp_t {
  1212. A_UINT32 success:8,
  1213. reserved:24;
  1214. A_UINT32 total_bytes_lo;
  1215. A_UINT32 total_bytes_hi;
  1216. } POSTPACK;
  1217. /**
  1218. * @brief WLAN_WDI_IPA_QUOTA_IND_T
  1219. *
  1220. * |31 24|23 16|15 8|7 0|
  1221. * |----------------+----------------+----------------+----------------|
  1222. * | total_bytes_lo |
  1223. * |-------------------------------------------------------------------|
  1224. * | total_bytes_hi |
  1225. * |-------------------------------------------------------------------|
  1226. * Header fields:
  1227. * - total_bytes_lo
  1228. * Bits 31:0
  1229. * Purpose: accumulated bytes of packets through sharing interface
  1230. * when reaching to quota, low 32-bit
  1231. * - total_bytes_hi
  1232. * Bits 31:0
  1233. * Purpose: total bytes, high 32-bit
  1234. **/
  1235. #define WLAN_WDI_IPA_QUOTA_IND_SZ 8 /* bytes */
  1236. #define WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_LO_M 0xffffffff
  1237. #define WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_LO_S 0x0
  1238. #define WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_HI_M 0xffffffff
  1239. #define WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_HI_S 0x0
  1240. #define WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_LO_GET(_var) \
  1241. (((_var) & WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_LO_M) >> \
  1242. WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_LO_S)
  1243. #define WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_LO_SET(_var, _val) \
  1244. do { \
  1245. ((_var) &= (WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_LO_M)); \
  1246. ((_var) |= ((_val) << WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_LO_S)); \
  1247. } while(0)
  1248. #define WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_HI_GET(_var) \
  1249. (((_var) & WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_HI_M) >> \
  1250. WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_HI_S)
  1251. #define WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_HI_SET(_var, _val) \
  1252. do { \
  1253. ((_var) &= (WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_HI_M)); \
  1254. ((_var) |= ((_val) << WLAN_WDI_IPA_QUOTA_IND_TOTAL_BYTES_HI_S)); \
  1255. } while(0)
  1256. PREPACK struct wlan_wdi_ipa_quota_ind_t {
  1257. A_UINT32 total_bytes_lo;
  1258. A_UINT32 total_bytes_hi;
  1259. } POSTPACK;
  1260. #endif /* _WDI_IPA_H_ */