epping_internal.h 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. /*
  2. * Copyright (c) 2014-2020 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 EPPING_INTERNAL_H
  19. #define EPPING_INTERNAL_H
  20. /**===========================================================================
  21. \file epping_internal.h
  22. \brief Linux epping internal head file
  23. ==========================================================================*/
  24. /*---------------------------------------------------------------------------
  25. Include files
  26. -------------------------------------------------------------------------*/
  27. #include <linux/netdevice.h>
  28. #include <linux/skbuff.h>
  29. #include <linux/spinlock.h>
  30. #include <linux/kthread.h>
  31. #include <linux/semaphore.h>
  32. #if defined(WLAN_OPEN_SOURCE) && defined(CONFIG_HAS_WAKELOCK)
  33. #include <linux/wakelock.h>
  34. #endif
  35. #include "htc_api.h"
  36. #include "htc_packet.h"
  37. #include "epping_test.h"
  38. #include <qdf_atomic.h>
  39. #include <sir_mac_prot_def.h>
  40. #include <sir_debug.h>
  41. #define EPPING_LOG_MASK (1<<EPPING_CMD_CAPTURE_RECV_CNT)
  42. #define EPPING_STATS_LOG_COUNT 50000
  43. #define EPPING_KTID_KILL_WAIT_TIME_MS 50
  44. #define EPPING_FRAG_PER_MSDU 1
  45. #ifndef EPPING_TXBUF
  46. #define EPPING_TXBUF (512/EPPING_FRAG_PER_MSDU)
  47. #endif
  48. /*---------------------------------------------------------------------------
  49. Preprocessor definitions and constants
  50. -------------------------------------------------------------------------*/
  51. #define EPPING_MAX_ADAPTERS 1
  52. #define EPPING_LOG(level, args ...) QDF_TRACE(QDF_MODULE_ID_HDD, level, ## args)
  53. #define EPPING_HEX_DUMP(level, data, len) qdf_trace_hex_dump( \
  54. QDF_MODULE_ID_HDD, \
  55. level, \
  56. data, buf_len)
  57. struct epping_cookie {
  58. HTC_PACKET HtcPkt; /* HTC packet wrapper */
  59. struct epping_cookie *next;
  60. };
  61. typedef enum {
  62. EPPING_CTX_STATE_INITIAL = 0,
  63. EPPING_CTX_STATE_HIF_INIT,
  64. EPPING_CTX_STATE_STARTUP,
  65. EPPING_CTX_STATE_STARTED,
  66. EPPING_CTX_STATE_STOP
  67. } epping_ctx_state_t;
  68. #define EPPING_MAX_NUM_EPIDS 4
  69. #define MAX_COOKIE_SLOTS_NUM 4
  70. #define MAX_COOKIE_SLOT_SIZE 512
  71. #define MAX_TX_PKT_DUP_NUM 4
  72. #if defined(HIF_PCI) || defined(HIF_IPCI)
  73. #define WLAN_EPPING_DELAY_TIMEOUT_US 10
  74. #define EPPING_MAX_CE_NUMS 8
  75. #define EPPING_MAX_WATER_MARK 8
  76. typedef struct {
  77. struct task_struct *pid;
  78. void *arg;
  79. bool done;
  80. qdf_nbuf_t skb;
  81. HTC_ENDPOINT_ID eid;
  82. struct semaphore sem;
  83. bool inited;
  84. qdf_atomic_t atm;
  85. } epping_poll_t;
  86. #endif
  87. typedef struct epping_context {
  88. int32_t con_mode;
  89. char *pwlan_module_name;
  90. uint32_t target_type;
  91. void *p_cds_context; /* CDS context */
  92. struct device *parent_dev; /* Pointer to the parent device */
  93. epping_ctx_state_t e_ctx_state;
  94. bool wow_nack;
  95. void *epping_adapter;
  96. HTC_HANDLE HTCHandle;
  97. HTC_ENDPOINT_ID EppingEndpoint[EPPING_MAX_NUM_EPIDS];
  98. unsigned int kperf_num_rx_recv[EPPING_MAX_NUM_EPIDS];
  99. unsigned int kperf_num_tx_acks[EPPING_MAX_NUM_EPIDS];
  100. unsigned int total_rx_recv;
  101. unsigned int total_tx_acks;
  102. #if defined(HIF_PCI) || defined(HIF_IPCI)
  103. epping_poll_t epping_poll[EPPING_MAX_NUM_EPIDS];
  104. #endif
  105. struct epping_cookie *cookie_list;
  106. int cookie_count;
  107. struct epping_cookie *s_cookie_mem[MAX_COOKIE_SLOTS_NUM];
  108. qdf_spinlock_t cookie_lock;
  109. } epping_context_t;
  110. typedef enum {
  111. EPPING_TX_TIMER_STOPPED,
  112. EPPING_TX_TIMER_RUNNING
  113. } epping_tx_timer_state_t;
  114. typedef struct epping_adapter_s {
  115. epping_context_t *pEpping_ctx;
  116. enum QDF_OPMODE device_mode;
  117. /** Handle to the network device */
  118. struct net_device *dev;
  119. struct qdf_mac_addr macAddressCurrent;
  120. uint8_t sessionId;
  121. /* for mboxping */
  122. qdf_spinlock_t data_lock;
  123. qdf_nbuf_queue_t nodrop_queue;
  124. qdf_timer_t epping_timer;
  125. epping_tx_timer_state_t epping_timer_state;
  126. bool registered;
  127. bool started;
  128. struct net_device_stats stats;
  129. } epping_adapter_t;
  130. /* epping_helper signatures */
  131. int epping_cookie_init(epping_context_t *pEpping_ctx);
  132. void epping_cookie_cleanup(epping_context_t *pEpping_ctx);
  133. void epping_free_cookie(epping_context_t *pEpping_ctx,
  134. struct epping_cookie *cookie);
  135. struct epping_cookie *epping_alloc_cookie(epping_context_t *pEpping_ctx);
  136. void epping_get_dummy_mac_addr(tSirMacAddr macAddr);
  137. void epping_hex_dump(void *data, int buf_len, const char *str);
  138. void *epping_get_qdf_ctx(void);
  139. void epping_log_packet(epping_adapter_t *adapter,
  140. EPPING_HEADER *eppingHdr, int ret, const char *str);
  141. void epping_log_stats(epping_adapter_t *adapter, const char *str);
  142. void epping_set_kperf_flag(epping_adapter_t *adapter,
  143. HTC_ENDPOINT_ID eid, uint8_t kperf_flag);
  144. /* epping_tx signatures */
  145. void epping_tx_timer_expire(epping_adapter_t *adapter);
  146. void epping_tx_complete(void *ctx, HTC_PACKET *htc_pkt);
  147. int epping_tx_send(qdf_nbuf_t skb, epping_adapter_t *adapter);
  148. #ifdef HIF_SDIO
  149. enum htc_send_full_action epping_tx_queue_full(void *Context,
  150. struct _HTC_PACKET *pPacket);
  151. #endif
  152. void epping_tx_dup_pkt(epping_adapter_t *adapter,
  153. HTC_ENDPOINT_ID eid, qdf_nbuf_t skb);
  154. /* epping_rx signatures */
  155. void epping_rx(void *Context, HTC_PACKET *pPacket);
  156. #ifdef HIF_SDIO
  157. void epping_refill(void *ctx, HTC_ENDPOINT_ID Endpoint);
  158. #endif
  159. /* epping_txrx signatures */
  160. epping_adapter_t *epping_add_adapter(epping_context_t *pEpping_ctx,
  161. tSirMacAddr macAddr,
  162. enum QDF_OPMODE device_mode,
  163. bool rtnl_held);
  164. void epping_destroy_adapter(epping_adapter_t *adapter);
  165. int epping_connect_service(epping_context_t *pEpping_ctx);
  166. #if defined(HIF_PCI) || defined(HIF_IPCI)
  167. void epping_register_tx_copier(HTC_ENDPOINT_ID eid,
  168. epping_context_t *pEpping_ctx);
  169. void epping_unregister_tx_copier(HTC_ENDPOINT_ID eid,
  170. epping_context_t *pEpping_ctx);
  171. void epping_tx_copier_schedule(epping_context_t *pEpping_ctx,
  172. HTC_ENDPOINT_ID eid, qdf_nbuf_t skb);
  173. #endif /* HIF_PCI || HIF_IPCI */
  174. #endif /* end #ifndef EPPING_INTERNAL_H */