1
2
3
4
5
6
7#ifndef WILC_WFI_NETDEVICE
8#define WILC_WFI_NETDEVICE
9
10#include <linux/tcp.h>
11#include <linux/ieee80211.h>
12#include <net/cfg80211.h>
13#include <net/ieee80211_radiotap.h>
14#include <linux/if_arp.h>
15#include <linux/gpio/consumer.h>
16
17#include "host_interface.h"
18#include "wilc_wlan.h"
19
20#define FLOW_CONTROL_LOWER_THRESHOLD 128
21#define FLOW_CONTROL_UPPER_THRESHOLD 256
22
23#define WILC_MAX_NUM_PMKIDS 16
24#define PMKID_LEN 16
25#define PMKID_FOUND 1
26#define NUM_STA_ASSOCIATED 8
27
28#define NUM_REG_FRAME 2
29
30#define TCP_ACK_FILTER_LINK_SPEED_THRESH 54
31#define DEFAULT_LINK_SPEED 72
32
33#define GET_PKT_OFFSET(a) (((a) >> 22) & 0x1ff)
34
35struct wilc_wfi_stats {
36 unsigned long rx_packets;
37 unsigned long tx_packets;
38 unsigned long rx_bytes;
39 unsigned long tx_bytes;
40 u64 rx_time;
41 u64 tx_time;
42
43};
44
45struct wilc_wfi_key {
46 u8 *key;
47 u8 *seq;
48 int key_len;
49 int seq_len;
50 u32 cipher;
51};
52
53struct wilc_wfi_wep_key {
54 u8 *key;
55 u8 key_len;
56 u8 key_idx;
57};
58
59struct sta_info {
60 u8 sta_associated_bss[MAX_NUM_STA][ETH_ALEN];
61};
62
63
64struct wilc_wfi_p2p_listen_params {
65 struct ieee80211_channel *listen_ch;
66 u32 listen_duration;
67 u64 listen_cookie;
68 u32 listen_session_id;
69};
70
71struct wilc_priv {
72 struct wireless_dev *wdev;
73 struct cfg80211_scan_request *scan_req;
74
75 struct wilc_wfi_p2p_listen_params remain_on_ch_params;
76 u64 tx_cookie;
77
78 bool cfg_scanning;
79 u32 rcvd_ch_cnt;
80
81 u8 associated_bss[ETH_ALEN];
82 struct sta_info assoc_stainfo;
83 struct sk_buff *skb;
84 struct net_device *dev;
85 struct host_if_drv *hif_drv;
86 struct host_if_pmkid_attr pmkid_list;
87 u8 wep_key[4][WLAN_KEY_LEN_WEP104];
88 u8 wep_key_len[4];
89
90 struct net_device *real_ndev;
91 struct wilc_wfi_key *wilc_gtk[MAX_NUM_STA];
92 struct wilc_wfi_key *wilc_ptk[MAX_NUM_STA];
93 u8 wilc_groupkey;
94
95 struct mutex scan_req_lock;
96 bool p2p_listen_state;
97
98};
99
100struct frame_reg {
101 u16 type;
102 bool reg;
103};
104
105struct wilc_vif {
106 u8 idx;
107 u8 iftype;
108 int monitor_flag;
109 int mac_opened;
110 struct frame_reg frame_reg[NUM_REG_FRAME];
111 struct net_device_stats netstats;
112 struct wilc *wilc;
113 u8 src_addr[ETH_ALEN];
114 u8 bssid[ETH_ALEN];
115 struct host_if_drv *hif_drv;
116 struct net_device *ndev;
117 u8 mode;
118 u8 ifc_id;
119};
120
121struct wilc {
122 const struct wilc_hif_func *hif_func;
123 int io_type;
124 int mac_status;
125 struct gpio_desc *gpio_irq;
126 bool initialized;
127 int dev_irq_num;
128 int close;
129 u8 vif_num;
130 struct wilc_vif *vif[NUM_CONCURRENT_IFC];
131 u8 open_ifcs;
132
133 struct mutex txq_add_to_head_cs;
134
135 spinlock_t txq_spinlock;
136
137 struct mutex rxq_cs;
138
139 struct mutex hif_cs;
140
141 struct completion cfg_event;
142 struct completion sync_event;
143 struct completion txq_event;
144 struct completion txq_thread_started;
145
146 struct task_struct *txq_thread;
147
148 int quit;
149 int cfg_frame_in_use;
150 struct wilc_cfg_frame cfg_frame;
151 u32 cfg_frame_offset;
152 int cfg_seq_no;
153
154 u8 *rx_buffer;
155 u32 rx_buffer_offset;
156 u8 *tx_buffer;
157
158 struct txq_entry_t txq_head;
159 int txq_entries;
160
161 struct rxq_entry_t rxq_head;
162
163 const struct firmware *firmware;
164
165 struct device *dev;
166 bool suspend_event;
167
168 struct rf_info dummy_statistics;
169};
170
171struct wilc_wfi_mon_priv {
172 struct net_device *real_ndev;
173};
174
175void wilc_frmw_to_linux(struct wilc *wilc, u8 *buff, u32 size, u32 pkt_offset);
176void wilc_mac_indicate(struct wilc *wilc);
177void wilc_netdev_cleanup(struct wilc *wilc);
178int wilc_netdev_init(struct wilc **wilc, struct device *dev, int io_type,
179 const struct wilc_hif_func *ops);
180void wilc_wfi_mgmt_rx(struct wilc *wilc, u8 *buff, u32 size);
181int wilc_wlan_set_bssid(struct net_device *wilc_netdev, u8 *bssid, u8 mode);
182
183#endif
184