epping_internal.h 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. /*
  2. * Copyright (c) 2014-2019 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. struct epping_cookie {
  54. HTC_PACKET HtcPkt; /* HTC packet wrapper */
  55. struct epping_cookie *next;
  56. };
  57. typedef enum {
  58. EPPING_CTX_STATE_INITIAL = 0,
  59. EPPING_CTX_STATE_HIF_INIT,
  60. EPPING_CTX_STATE_STARTUP,
  61. EPPING_CTX_STATE_STARTED,
  62. EPPING_CTX_STATE_STOP
  63. } epping_ctx_state_t;
  64. #define EPPING_MAX_NUM_EPIDS 4
  65. #define MAX_COOKIE_SLOTS_NUM 4
  66. #define MAX_COOKIE_SLOT_SIZE 512
  67. #define MAX_TX_PKT_DUP_NUM 4
  68. #ifdef HIF_PCI
  69. #define WLAN_EPPING_DELAY_TIMEOUT_US 10
  70. #define EPPING_MAX_CE_NUMS 8
  71. #define EPPING_MAX_WATER_MARK 8
  72. typedef struct {
  73. struct task_struct *pid;
  74. void *arg;
  75. bool done;
  76. qdf_nbuf_t skb;
  77. HTC_ENDPOINT_ID eid;
  78. struct semaphore sem;
  79. bool inited;
  80. qdf_atomic_t atm;
  81. } epping_poll_t;
  82. #endif
  83. typedef struct epping_context {
  84. int32_t con_mode;
  85. char *pwlan_module_name;
  86. uint32_t target_type;
  87. void *p_cds_context; /* CDS context */
  88. struct device *parent_dev; /* Pointer to the parent device */
  89. epping_ctx_state_t e_ctx_state;
  90. bool wow_nack;
  91. void *epping_adapter;
  92. HTC_HANDLE HTCHandle;
  93. HTC_ENDPOINT_ID EppingEndpoint[EPPING_MAX_NUM_EPIDS];
  94. unsigned int kperf_num_rx_recv[EPPING_MAX_NUM_EPIDS];
  95. unsigned int kperf_num_tx_acks[EPPING_MAX_NUM_EPIDS];
  96. unsigned int total_rx_recv;
  97. unsigned int total_tx_acks;
  98. #ifdef HIF_PCI
  99. epping_poll_t epping_poll[EPPING_MAX_NUM_EPIDS];
  100. #endif
  101. struct epping_cookie *cookie_list;
  102. int cookie_count;
  103. struct epping_cookie *s_cookie_mem[MAX_COOKIE_SLOTS_NUM];
  104. qdf_spinlock_t cookie_lock;
  105. } epping_context_t;
  106. typedef enum {
  107. EPPING_TX_TIMER_STOPPED,
  108. EPPING_TX_TIMER_RUNNING
  109. } epping_tx_timer_state_t;
  110. typedef struct epping_adapter_s {
  111. epping_context_t *pEpping_ctx;
  112. enum QDF_OPMODE device_mode;
  113. /** Handle to the network device */
  114. struct net_device *dev;
  115. struct qdf_mac_addr macAddressCurrent;
  116. uint8_t sessionId;
  117. /* for mboxping */
  118. qdf_spinlock_t data_lock;
  119. qdf_nbuf_queue_t nodrop_queue;
  120. qdf_timer_t epping_timer;
  121. epping_tx_timer_state_t epping_timer_state;
  122. bool registered;
  123. bool started;
  124. struct net_device_stats stats;
  125. } epping_adapter_t;
  126. /* epping_helper signatures */
  127. int epping_cookie_init(epping_context_t *pEpping_ctx);
  128. void epping_cookie_cleanup(epping_context_t *pEpping_ctx);
  129. void epping_free_cookie(epping_context_t *pEpping_ctx,
  130. struct epping_cookie *cookie);
  131. struct epping_cookie *epping_alloc_cookie(epping_context_t *pEpping_ctx);
  132. void epping_get_dummy_mac_addr(tSirMacAddr macAddr);
  133. void epping_hex_dump(void *data, int buf_len, const char *str);
  134. void *epping_get_qdf_ctx(void);
  135. void epping_log_packet(epping_adapter_t *adapter,
  136. EPPING_HEADER *eppingHdr, int ret, const char *str);
  137. void epping_log_stats(epping_adapter_t *adapter, const char *str);
  138. void epping_set_kperf_flag(epping_adapter_t *adapter,
  139. HTC_ENDPOINT_ID eid, uint8_t kperf_flag);
  140. /* epping_tx signatures */
  141. void epping_tx_timer_expire(epping_adapter_t *adapter);
  142. void epping_tx_complete(void *ctx, HTC_PACKET *htc_pkt);
  143. int epping_tx_send(qdf_nbuf_t skb, epping_adapter_t *adapter);
  144. #ifdef HIF_SDIO
  145. enum htc_send_full_action epping_tx_queue_full(void *Context,
  146. struct _HTC_PACKET *pPacket);
  147. #endif
  148. void epping_tx_dup_pkt(epping_adapter_t *adapter,
  149. HTC_ENDPOINT_ID eid, qdf_nbuf_t skb);
  150. /* epping_rx signatures */
  151. void epping_rx(void *Context, HTC_PACKET *pPacket);
  152. #ifdef HIF_SDIO
  153. void epping_refill(void *ctx, HTC_ENDPOINT_ID Endpoint);
  154. #endif
  155. /* epping_txrx signatures */
  156. epping_adapter_t *epping_add_adapter(epping_context_t *pEpping_ctx,
  157. tSirMacAddr macAddr,
  158. enum QDF_OPMODE device_mode,
  159. bool rtnl_held);
  160. void epping_destroy_adapter(epping_adapter_t *adapter);
  161. int epping_connect_service(epping_context_t *pEpping_ctx);
  162. #ifdef HIF_PCI
  163. void epping_register_tx_copier(HTC_ENDPOINT_ID eid,
  164. epping_context_t *pEpping_ctx);
  165. void epping_unregister_tx_copier(HTC_ENDPOINT_ID eid,
  166. epping_context_t *pEpping_ctx);
  167. void epping_tx_copier_schedule(epping_context_t *pEpping_ctx,
  168. HTC_ENDPOINT_ID eid, qdf_nbuf_t skb);
  169. #endif /* HIF_PCI */
  170. #endif /* end #ifndef EPPING_INTERNAL_H */