wmi_unified_dbr_param.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. /*
  2. * Copyright (c) 2016-2018 The Linux Foundation. All rights reserved.
  3. *
  4. * Permission to use, copy, modify, and/or distribute this software for
  5. * any purpose with or without fee is hereby granted, provided that the
  6. * above copyright notice and this permission notice appear in all
  7. * copies.
  8. *
  9. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
  10. * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
  11. * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
  12. * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
  13. * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
  14. * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
  15. * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  16. * PERFORMANCE OF THIS SOFTWARE.
  17. */
  18. #ifndef _WMI_UNIFIED_DBR_PARAM_H_
  19. #define _WMI_UNIFIED_DBR_PARAM_H_
  20. #define WMI_HOST_DBR_RING_ADDR_LO_S 0
  21. #define WMI_HOST_DBR_RING_ADDR_LO 0xffffffff
  22. #define WMI_HOST_DBR_RING_ADDR_LO_GET(dword) \
  23. WMI_HOST_F_MS(dword, WMI_HOST_DBR_RING_ADDR_LO)
  24. #define WMI_HOST_DBR_RING_ADDR_LO_SET(dword, val) \
  25. WMI_HOST_F_RMW(dword, val, WMI_HOST_DBR_RING_ADDR_LO)
  26. #define WMI_HOST_DBR_RING_ADDR_HI_S 0
  27. #define WMI_HOST_DBR_RING_ADDR_HI 0xf
  28. #define WMI_HOST_DBR_RING_ADDR_HI_GET(dword) \
  29. WMI_HOST_F_MS(dword, WMI_HOST_DBR_RING_ADDR_HI)
  30. #define WMI_HOST_DBR_RING_ADDR_HI_SET(dword, val) \
  31. WMI_HOST_F_RMW(dword, val, WMI_HOST_DBR_RING_ADDR_HI)
  32. #define WMI_HOST_DBR_DATA_ADDR_LO_S 0
  33. #define WMI_HOST_DBR_DATA_ADDR_LO 0xffffffff
  34. #define WMI_HOST_DBR_DATA_ADDR_LO_GET(dword) \
  35. WMI_HOST_F_MS(dword, WMI_HOST_DBR_DATA_ADDR_LO)
  36. #define WMI_HOST_DBR_DATA_ADDR_LO_SET(dword, val) \
  37. WMI_HOST_F_RMW(dword, val, WMI_HOST_DBR_DATA_ADDR_LO)
  38. #define WMI_HOST_DBR_DATA_ADDR_HI_S 0
  39. #define WMI_HOST_DBR_DATA_ADDR_HI 0xf
  40. #define WMI_HOST_DBR_DATA_ADDR_HI_GET(dword) \
  41. WMI_HOST_F_MS(dword, WMI_HOST_DBR_DATA_ADDR_HI)
  42. #define WMI_HOST_DBR_DATA_ADDR_HI_SET(dword, val) \
  43. WMI_HOST_F_RMW(dword, val, WMI_HOST_DBR_DATA_ADDR_HI)
  44. #define WMI_HOST_DBR_DATA_ADDR_HI_HOST_DATA_S 12
  45. #define WMI_HOST_DBR_DATA_ADDR_HI_HOST_DATA 0x7fffff
  46. #define WMI_HOST_DBR_DATA_ADDR_HI_HOST_DATA_GET(dword) \
  47. WMI_HOST_F_MS(dword, WMI_HOST_DBR_DATA_ADDR_HI_HOST_DATA)
  48. #define WMI_HOST_DBR_DATA_ADDR_HI_HOST_DATA_SET(dword, val) \
  49. WMI_HOST_F_RMW(dword, val, WMI_HOST_DBR_DATA_ADDR_HI_HOST_DATA)
  50. #define WMI_HOST_MAX_NUM_CHAINS 8
  51. /**
  52. * struct direct_buf_rx_rsp: direct buffer rx response structure
  53. *
  54. * @pdev_id: Index of the pdev for which response is received
  55. * @mod_mod: Index of the module for which respone is received
  56. * @num_buf_release_entry: Number of buffers released through event
  57. * @dbr_entries: Pointer to direct buffer rx entry struct
  58. */
  59. struct direct_buf_rx_rsp {
  60. uint32_t pdev_id;
  61. uint32_t mod_id;
  62. uint32_t num_buf_release_entry;
  63. uint32_t num_meta_data_entry;
  64. struct direct_buf_rx_entry *dbr_entries;
  65. };
  66. /**
  67. * struct direct_buf_rx_cfg_req: direct buffer rx config request structure
  68. *
  69. * @pdev_id: Index of the pdev for which response is received
  70. * @mod_id: Index of the module for which respone is received
  71. * @base_paddr_lo: Lower 32bits of ring base address
  72. * @base_paddr_hi: Higher 32bits of ring base address
  73. * @head_idx_paddr_lo: Lower 32bits of head idx register address
  74. * @head_idx_paddr_hi: Higher 32bits of head idx register address
  75. * @tail_idx_paddr_lo: Lower 32bits of tail idx register address
  76. * @tail_idx_paddr_hi: Higher 32bits of tail idx register address
  77. * @buf_size: Size of the buffer for each pointer in the ring
  78. * @num_elems: Number of pointers allocated and part of the source ring
  79. */
  80. struct direct_buf_rx_cfg_req {
  81. uint32_t pdev_id;
  82. uint32_t mod_id;
  83. uint32_t base_paddr_lo;
  84. uint32_t base_paddr_hi;
  85. uint32_t head_idx_paddr_lo;
  86. uint32_t head_idx_paddr_hi;
  87. uint32_t tail_idx_paddr_hi;
  88. uint32_t tail_idx_paddr_lo;
  89. uint32_t buf_size;
  90. uint32_t num_elems;
  91. uint32_t event_timeout_ms;
  92. uint32_t num_resp_per_event;
  93. };
  94. /**
  95. * struct direct_buf_rx_metadata: direct buffer metadata
  96. *
  97. * @noisefloor: noisefloor
  98. * @reset_delay: reset delay
  99. */
  100. struct direct_buf_rx_metadata {
  101. int32_t noisefloor[WMI_HOST_MAX_NUM_CHAINS];
  102. uint32_t reset_delay;
  103. };
  104. /**
  105. * struct direct_buf_rx_entry: direct buffer rx release entry structure
  106. *
  107. * @addr_lo: LSB 32-bits of the buffer
  108. * @addr_hi: MSB 32-bits of the buffer
  109. * @len: Length of the buffer
  110. */
  111. struct direct_buf_rx_entry {
  112. uint32_t paddr_lo;
  113. uint32_t paddr_hi;
  114. uint32_t len;
  115. };
  116. #endif /* _WMI_UNIFIED_DBR_PARAM_H_ */