epping_internal.h 6.4 KB

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