epping_internal.h 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. /*
  2. * Copyright (c) 2014-2020 The Linux Foundation. All rights reserved.
  3. * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
  4. *
  5. * Permission to use, copy, modify, and/or distribute this software for
  6. * any purpose with or without fee is hereby granted, provided that the
  7. * above copyright notice and this permission notice appear in all
  8. * copies.
  9. *
  10. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
  11. * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
  12. * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
  13. * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
  14. * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
  15. * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
  16. * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  17. * PERFORMANCE OF THIS SOFTWARE.
  18. */
  19. #ifndef EPPING_INTERNAL_H
  20. #define EPPING_INTERNAL_H
  21. /**
  22. * DOC: epping_internal.h
  23. * Linux epping internal head file
  24. */
  25. #include <linux/netdevice.h>
  26. #include <linux/skbuff.h>
  27. #include <linux/spinlock.h>
  28. #include <linux/kthread.h>
  29. #include <linux/semaphore.h>
  30. #if defined(CONFIG_HAS_WAKELOCK)
  31. #include <linux/wakelock.h>
  32. #endif
  33. #include "htc_api.h"
  34. #include "htc_packet.h"
  35. #include "epping_test.h"
  36. #include <qdf_atomic.h>
  37. #include <sir_mac_prot_def.h>
  38. #include <sir_debug.h>
  39. #define EPPING_LOG_MASK (1<<EPPING_CMD_CAPTURE_RECV_CNT)
  40. #define EPPING_STATS_LOG_COUNT 50000
  41. #define EPPING_KTID_KILL_WAIT_TIME_MS 50
  42. #define EPPING_FRAG_PER_MSDU 1
  43. #ifndef EPPING_TXBUF
  44. #define EPPING_TXBUF (512/EPPING_FRAG_PER_MSDU)
  45. #endif
  46. /*---------------------------------------------------------------------------
  47. Preprocessor definitions and constants
  48. -------------------------------------------------------------------------*/
  49. #define EPPING_MAX_ADAPTERS 1
  50. #define EPPING_LOG(level, args ...) QDF_TRACE(QDF_MODULE_ID_HDD, level, ## args)
  51. #define EPPING_HEX_DUMP(level, data, len) qdf_trace_hex_dump( \
  52. QDF_MODULE_ID_HDD, \
  53. level, \
  54. data, buf_len)
  55. struct epping_cookie {
  56. HTC_PACKET HtcPkt; /* HTC packet wrapper */
  57. struct epping_cookie *next;
  58. };
  59. typedef enum {
  60. EPPING_CTX_STATE_INITIAL = 0,
  61. EPPING_CTX_STATE_HIF_INIT,
  62. EPPING_CTX_STATE_STARTUP,
  63. EPPING_CTX_STATE_STARTED,
  64. EPPING_CTX_STATE_STOP
  65. } epping_ctx_state_t;
  66. #define EPPING_MAX_NUM_EPIDS 4
  67. #define MAX_COOKIE_SLOTS_NUM 4
  68. #define MAX_COOKIE_SLOT_SIZE 512
  69. #define MAX_TX_PKT_DUP_NUM 4
  70. #if defined(HIF_PCI) || defined(HIF_IPCI)
  71. #define WLAN_EPPING_DELAY_TIMEOUT_US 10
  72. #define EPPING_MAX_CE_NUMS 8
  73. #define EPPING_MAX_WATER_MARK 8
  74. typedef struct {
  75. struct task_struct *pid;
  76. void *arg;
  77. bool done;
  78. qdf_nbuf_t skb;
  79. HTC_ENDPOINT_ID eid;
  80. struct semaphore sem;
  81. bool inited;
  82. qdf_atomic_t atm;
  83. } epping_poll_t;
  84. #endif
  85. typedef struct epping_context {
  86. int32_t con_mode;
  87. char *pwlan_module_name;
  88. uint32_t target_type;
  89. void *p_cds_context; /* CDS context */
  90. struct device *parent_dev; /* Pointer to the parent device */
  91. epping_ctx_state_t e_ctx_state;
  92. bool wow_nack;
  93. void *epping_adapter;
  94. HTC_HANDLE HTCHandle;
  95. HTC_ENDPOINT_ID EppingEndpoint[EPPING_MAX_NUM_EPIDS];
  96. unsigned int kperf_num_rx_recv[EPPING_MAX_NUM_EPIDS];
  97. unsigned int kperf_num_tx_acks[EPPING_MAX_NUM_EPIDS];
  98. unsigned int total_rx_recv;
  99. unsigned int total_tx_acks;
  100. #if defined(HIF_PCI) || defined(HIF_IPCI)
  101. epping_poll_t epping_poll[EPPING_MAX_NUM_EPIDS];
  102. #endif
  103. struct epping_cookie *cookie_list;
  104. int cookie_count;
  105. struct epping_cookie *s_cookie_mem[MAX_COOKIE_SLOTS_NUM];
  106. qdf_spinlock_t cookie_lock;
  107. } epping_context_t;
  108. typedef enum {
  109. EPPING_TX_TIMER_STOPPED,
  110. EPPING_TX_TIMER_RUNNING
  111. } epping_tx_timer_state_t;
  112. typedef struct epping_adapter_s {
  113. epping_context_t *pEpping_ctx;
  114. enum QDF_OPMODE device_mode;
  115. /** Handle to the network device */
  116. struct net_device *dev;
  117. struct qdf_mac_addr macAddressCurrent;
  118. uint8_t sessionId;
  119. /* for mboxping */
  120. qdf_spinlock_t data_lock;
  121. qdf_nbuf_queue_t nodrop_queue;
  122. qdf_timer_t epping_timer;
  123. epping_tx_timer_state_t epping_timer_state;
  124. bool registered;
  125. bool started;
  126. struct net_device_stats stats;
  127. } epping_adapter_t;
  128. /* epping_helper signatures */
  129. int epping_cookie_init(epping_context_t *pEpping_ctx);
  130. void epping_cookie_cleanup(epping_context_t *pEpping_ctx);
  131. void epping_free_cookie(epping_context_t *pEpping_ctx,
  132. struct epping_cookie *cookie);
  133. struct epping_cookie *epping_alloc_cookie(epping_context_t *pEpping_ctx);
  134. void epping_get_dummy_mac_addr(tSirMacAddr macAddr);
  135. void epping_hex_dump(void *data, int buf_len, const char *str);
  136. void *epping_get_qdf_ctx(void);
  137. void epping_log_packet(epping_adapter_t *adapter,
  138. EPPING_HEADER *eppingHdr, int ret, const char *str);
  139. void epping_log_stats(epping_adapter_t *adapter, const char *str);
  140. void epping_set_kperf_flag(epping_adapter_t *adapter,
  141. HTC_ENDPOINT_ID eid, uint8_t kperf_flag);
  142. /* epping_tx signatures */
  143. void epping_tx_timer_expire(epping_adapter_t *adapter);
  144. void epping_tx_complete(void *ctx, HTC_PACKET *htc_pkt);
  145. int epping_tx_send(qdf_nbuf_t skb, epping_adapter_t *adapter);
  146. #ifdef HIF_SDIO
  147. enum htc_send_full_action epping_tx_queue_full(void *Context,
  148. struct _HTC_PACKET *pPacket);
  149. #endif
  150. void epping_tx_dup_pkt(epping_adapter_t *adapter,
  151. HTC_ENDPOINT_ID eid, qdf_nbuf_t skb);
  152. /* epping_rx signatures */
  153. void epping_rx(void *Context, HTC_PACKET *pPacket);
  154. #ifdef HIF_SDIO
  155. void epping_refill(void *ctx, HTC_ENDPOINT_ID Endpoint);
  156. #endif
  157. /* epping_txrx signatures */
  158. epping_adapter_t *epping_add_adapter(epping_context_t *pEpping_ctx,
  159. tSirMacAddr macAddr,
  160. enum QDF_OPMODE device_mode,
  161. bool rtnl_held);
  162. void epping_destroy_adapter(epping_adapter_t *adapter);
  163. int epping_connect_service(epping_context_t *pEpping_ctx);
  164. #if defined(HIF_PCI) || defined(HIF_IPCI)
  165. void epping_register_tx_copier(HTC_ENDPOINT_ID eid,
  166. epping_context_t *pEpping_ctx);
  167. void epping_unregister_tx_copier(HTC_ENDPOINT_ID eid,
  168. epping_context_t *pEpping_ctx);
  169. void epping_tx_copier_schedule(epping_context_t *pEpping_ctx,
  170. HTC_ENDPOINT_ID eid, qdf_nbuf_t skb);
  171. #endif /* HIF_PCI || HIF_IPCI */
  172. #endif /* end #ifndef EPPING_INTERNAL_H */