blob: ee32b4c7d4aa2133c32d0f97bb32eb94bfa1b13a [file] [log] [blame]
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001/*
2 * Copyright (c) 2014-2015 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/*
23 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
26 */
27
28#ifndef EPPING_INTERNAL_H
29#define EPPING_INTERNAL_H
30/**===========================================================================
31
32 \file epping_internal.h
33
34 \brief Linux epping internal head file
35
36 ==========================================================================*/
37
38/*---------------------------------------------------------------------------
39 Include files
40 -------------------------------------------------------------------------*/
41
42#include <linux/netdevice.h>
43#include <linux/skbuff.h>
44#include <linux/spinlock.h>
45#include <linux/kthread.h>
46#include <linux/semaphore.h>
47#if defined(WLAN_OPEN_SOURCE) && defined(CONFIG_HAS_WAKELOCK)
48#include <linux/wakelock.h>
49#endif
50#include "htc_api.h"
51#include "htc_packet.h"
52#include "epping_test.h"
53#include <cdf_atomic.h>
54#include <sir_mac_prot_def.h>
55#include <sir_debug.h>
56
57#define EPPING_LOG_MASK (1<<EPPING_CMD_CAPTURE_RECV_CNT)
58#define EPPING_STATS_LOG_COUNT 50000
59#define EPPING_KTID_KILL_WAIT_TIME_MS 50
60
61#define EPPING_FRAG_PER_MSDU 1
62#ifndef EPPING_TXBUF
63#define EPPING_TXBUF (512/EPPING_FRAG_PER_MSDU)
64#endif
65
66/*---------------------------------------------------------------------------
67 Preprocessor definitions and constants
68 -------------------------------------------------------------------------*/
69#define EPPING_MAX_ADAPTERS 1
70
71#define EPPING_LOG(level, args ...) CDF_TRACE( CDF_MODULE_ID_HDD, level, ## args)
72
73struct epping_cookie {
74 HTC_PACKET HtcPkt; /* HTC packet wrapper */
75 struct epping_cookie *next;
76};
77
78typedef enum {
79 EPPING_CTX_STATE_INITIAL = 0,
80 EPPING_CTX_STATE_HIF_INIT,
81 EPPING_CTX_STATE_STARTUP,
82 EPPING_CTX_STATE_STARTED,
83 EPPING_CTX_STATE_STOP
84} epping_ctx_state_t;
85
86#define EPPING_MAX_NUM_EPIDS 4
87#define MAX_COOKIE_SLOTS_NUM 4
88#define MAX_COOKIE_SLOT_SIZE 512
89#define MAX_TX_PKT_DUP_NUM 4
90
91#ifdef HIF_PCI
92#define WLAN_EPPING_DELAY_TIMEOUT_US 10
93#define EPPING_MAX_CE_NUMS 8
94#define EPPING_MAX_WATER_MARK 8
95typedef struct {
96 struct task_struct *pid;
97 void *arg;
98 bool done;
99 cdf_nbuf_t skb;
100 HTC_ENDPOINT_ID eid;
101 struct semaphore sem;
102 bool inited;
103 cdf_atomic_t atm;
104} epping_poll_t;
105#endif
106
107typedef struct epping_context_s {
108 int32_t con_mode;
109 char *pwlan_module_name;
110 uint32_t target_type;
111 void *p_cds_context; /* CDS context */
112 struct device *parent_dev; /* Pointer to the parent device */
113 epping_ctx_state_t e_ctx_state;
114 int wow_nack;
115 void *epping_adapter;
116 HTC_HANDLE HTCHandle;
117 HTC_ENDPOINT_ID EppingEndpoint[EPPING_MAX_NUM_EPIDS];
118 unsigned int kperf_num_rx_recv[EPPING_MAX_NUM_EPIDS];
119 unsigned int kperf_num_tx_acks[EPPING_MAX_NUM_EPIDS];
120 unsigned int total_rx_recv;
121 unsigned int total_tx_acks;
122#ifdef HIF_PCI
123 epping_poll_t epping_poll[EPPING_MAX_NUM_EPIDS];
124#endif
125 struct epping_cookie *cookie_list;
126 int cookie_count;
127 struct epping_cookie *s_cookie_mem[MAX_COOKIE_SLOTS_NUM];
128 cdf_spinlock_t cookie_lock;
129} epping_context_t;
130
131typedef enum {
132 EPPING_TX_TIMER_STOPPED,
133 EPPING_TX_TIMER_RUNNING
134} epping_tx_timer_state_t;
135
136typedef struct epping_adapter_s {
137 epping_context_t *pEpping_ctx;
138 tCDF_CON_MODE device_mode;
139 /** Handle to the network device */
140 struct net_device *dev;
141 struct cdf_mac_addr macAddressCurrent;
142 uint8_t sessionId;
143 /* for mboxping */
144 cdf_spinlock_t data_lock;
145 cdf_nbuf_queue_t nodrop_queue;
146 cdf_softirq_timer_t epping_timer;
147 epping_tx_timer_state_t epping_timer_state;
148 bool registered;
149 bool started;
150 struct net_device_stats stats;
151} epping_adapter_t;
152
153/* epping_helper signatures */
154int epping_cookie_init(epping_context_t *pEpping_ctx);
155void epping_cookie_cleanup(epping_context_t *pEpping_ctx);
156void epping_free_cookie(epping_context_t *pEpping_ctx,
157 struct epping_cookie *cookie);
158struct epping_cookie *epping_alloc_cookie(epping_context_t *pEpping_ctx);
159void epping_get_dummy_mac_addr(tSirMacAddr macAddr);
160void epping_hex_dump(void *data, int buf_len, const char *str);
161void *epping_get_cdf_ctx(void);
162void epping_log_packet(epping_adapter_t *pAdapter,
163 EPPING_HEADER *eppingHdr, int ret, const char *str);
164void epping_log_stats(epping_adapter_t *pAdapter, const char *str);
165void epping_set_kperf_flag(epping_adapter_t *pAdapter,
166 HTC_ENDPOINT_ID eid, A_UINT8 kperf_flag);
167
168/* epping_tx signatures */
169void epping_tx_timer_expire(epping_adapter_t *pAdapter);
170void epping_tx_complete_multiple(void *ctx, HTC_PACKET_QUEUE *pPacketQueue);
171int epping_tx_send(cdf_nbuf_t skb, epping_adapter_t *pAdapter);
172
173#ifdef HIF_SDIO
174HTC_SEND_FULL_ACTION epping_tx_queue_full(void *Context, HTC_PACKET *pPacket);
175#endif
176/* epping_rx signatures */
177void epping_rx(void *Context, HTC_PACKET *pPacket);
178
179#ifdef HIF_SDIO
180void epping_refill(void *ctx, HTC_ENDPOINT_ID Endpoint);
181#endif
182
183/* epping_txrx signatures */
184epping_adapter_t *epping_add_adapter(epping_context_t *pEpping_ctx,
185 tSirMacAddr macAddr,
186 tCDF_CON_MODE device_mode);
187void epping_destroy_adapter(epping_adapter_t *pAdapter);
188int epping_connect_service(epping_context_t *pEpping_ctx);
189#ifdef HIF_PCI
190void epping_register_tx_copier(HTC_ENDPOINT_ID eid,
191 epping_context_t *pEpping_ctx);
192void epping_unregister_tx_copier(HTC_ENDPOINT_ID eid,
193 epping_context_t *pEpping_ctx);
194void epping_tx_copier_schedule(epping_context_t *pEpping_ctx,
195 HTC_ENDPOINT_ID eid, cdf_nbuf_t skb);
196#endif /* HIF_PCI */
197#endif /* end #ifndef EPPING_INTERNAL_H */