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