• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * DHD Linux header file (dhd_linux exports for cfg80211 and other components)
3  *
4  * Copyright (C) 2020, Broadcom.
5  *
6  *      Unless you and Broadcom execute a separate written software license
7  * agreement governing use of this software, this software is licensed to you
8  * under the terms of the GNU General Public License version 2 (the "GPL"),
9  * available at http://www.broadcom.com/licenses/GPLv2.php, with the
10  * following added to such license:
11  *
12  *      As a special exception, the copyright holders of this software give you
13  * permission to link this software with independent modules, and to copy and
14  * distribute the resulting executable under terms of your choice, provided that
15  * you also meet, for each linked independent module, the terms and conditions of
16  * the license of that module.  An independent module is a module which is not
17  * derived from this software.  The special exception does not apply to any
18  * modifications of the software.
19  *
20  *
21  * <<Broadcom-WL-IPTag/Open:>>
22  *
23  * $Id$
24  */
25 
26 /* wifi platform functions for power, interrupt and pre-alloc, either
27  * from Android-like platform device data, or Broadcom wifi platform
28  * device data.
29  *
30  */
31 #ifndef __DHD_LINUX_H__
32 #define __DHD_LINUX_H__
33 
34 #include <linux/kernel.h>
35 #include <linux/init.h>
36 #include <linux/fs.h>
37 #include <dngl_stats.h>
38 #include <dhd.h>
39 #ifdef DHD_WMF
40 #include <dhd_wmf_linux.h>
41 #endif
42 /* Linux wireless extension support */
43 #if defined(WL_WIRELESS_EXT)
44 #include <wl_iw.h>
45 #endif /* defined(WL_WIRELESS_EXT) */
46 #if defined(CONFIG_HAS_EARLYSUSPEND) && defined(DHD_USE_EARLYSUSPEND)
47 #include <linux/earlysuspend.h>
48 #endif /* defined(CONFIG_HAS_EARLYSUSPEND) && defined(DHD_USE_EARLYSUSPEND) */
49 
50 #ifdef BCMPCIE
51 #include <bcmmsgbuf.h>
52 #endif /* BCMPCIE */
53 
54 #ifdef PCIE_FULL_DONGLE
55 #include <etd.h>
56 #endif /* PCIE_FULL_DONGLE */
57 
58 #ifdef WL_MONITOR
59 #ifdef HOST_RADIOTAP_CONV
60 #include <bcmwifi_monitor.h>
61 #else
62 #define MAX_RADIOTAP_SIZE      256 /* Maximum size to hold HE Radiotap header format */
63 #define MAX_MON_PKT_SIZE       (4096 + MAX_RADIOTAP_SIZE)
64 #endif /* HOST_RADIOTAP_CONV */
65 #endif /* WL_MONITOR */
66 
67 /* dongle status */
68 enum wifi_adapter_status {
69 	WIFI_STATUS_POWER_ON = 0,
70 	WIFI_STATUS_ATTACH,
71 	WIFI_STATUS_FW_READY,
72 	WIFI_STATUS_DETTACH
73 };
74 #define wifi_chk_adapter_status(adapter, stat) (test_bit(stat, &(adapter)->status))
75 #define wifi_get_adapter_status(adapter, stat) (test_bit(stat, &(adapter)->status))
76 #define wifi_set_adapter_status(adapter, stat) (set_bit(stat, &(adapter)->status))
77 #define wifi_clr_adapter_status(adapter, stat) (clear_bit(stat, &(adapter)->status))
78 #define wifi_chg_adapter_status(adapter, stat) (change_bit(stat, &(adapter)->status))
79 
80 #define DHD_REGISTRATION_TIMEOUT  12000  /* msec : allowed time to finished dhd registration */
81 #define DHD_FW_READY_TIMEOUT  5000  /* msec : allowed time to finished fw download */
82 
83 typedef struct wifi_adapter_info {
84 	const char	*name;
85 	uint		irq_num;
86 	uint		intr_flags;
87 	const char	*fw_path;
88 	const char	*nv_path;
89 	const char	*clm_path;
90 	const char	*conf_path;
91 	void		*wifi_plat_data;	/* wifi ctrl func, for backward compatibility */
92 	uint		bus_type;
93 	uint		bus_num;
94 	uint		slot_num;
95 	wait_queue_head_t status_event;
96 	unsigned long status;
97 #if defined (BT_OVER_SDIO)
98 	const char	*btfw_path;
99 #endif /* defined (BT_OVER_SDIO) */
100 #if defined(BCMSDIO)
101 	struct sdio_func *sdio_func;
102 #endif /* BCMSDIO */
103 #if defined(BCMPCIE)
104 	struct pci_dev *pci_dev;
105 	struct pci_saved_state *pci_saved_state;
106 #endif /* BCMPCIE */
107 } wifi_adapter_info_t;
108 
109 #if defined(CONFIG_WIFI_CONTROL_FUNC) || defined(CUSTOMER_HW4)
110 #include <linux/wlan_plat.h>
111 #else
112 #include <dhd_plat.h>
113 #endif /* CONFIG_WIFI_CONTROL_FUNC */
114 
115 typedef struct bcmdhd_wifi_platdata {
116 	uint				num_adapters;
117 	wifi_adapter_info_t	*adapters;
118 } bcmdhd_wifi_platdata_t;
119 
120 /** Per STA params. A list of dhd_sta objects are managed in dhd_if */
121 typedef struct dhd_sta {
122 	cumm_ctr_t cumm_ctr;    /* cummulative queue length of child flowrings */
123 	uint16 flowid[NUMPRIO]; /* allocated flow ring ids (by priority) */
124 	void * ifp;             /* associated dhd_if */
125 	struct ether_addr ea;   /* stations ethernet mac address */
126 	struct list_head list;  /* link into dhd_if::sta_list */
127 	int idx;                /* index of self in dhd_pub::sta_pool[] */
128 	int ifidx;              /* index of interface in dhd */
129 #ifdef DHD_WMF
130 	struct dhd_sta *psta_prim; /* primary index of psta interface */
131 #endif /* DHD_WMF */
132 } dhd_sta_t;
133 typedef dhd_sta_t dhd_sta_pool_t;
134 
135 #ifdef DHD_4WAYM4_FAIL_DISCONNECT
136 typedef enum {
137 	NONE_4WAY,
138 	M1_4WAY,
139 	M2_4WAY,
140 	M3_4WAY,
141 	M4_4WAY
142 } msg_4way_t;
143 typedef enum {
144 	M3_RXED,
145 	M4_TXFAILED
146 } msg_4way_state_t;
147 #define MAX_4WAY_TIMEOUT_MS 2000
148 #endif /* DHD_4WAYM4_FAIL_DISCONNECT */
149 
150 #if defined(DHD_LB)
151 /* Dynamic CPU selection for load balancing. */
152 #include <linux/cpu.h>
153 #include <linux/cpumask.h>
154 #include <linux/notifier.h>
155 #include <linux/workqueue.h>
156 #include <asm/atomic.h>
157 
158 /* FIXME: Make this a module param or a sysfs. */
159 #if !defined(DHD_LB_PRIMARY_CPUS)
160 #define DHD_LB_PRIMARY_CPUS     0x0 /* Big CPU coreids mask */
161 #endif
162 #if !defined(DHD_LB_SECONDARY_CPUS)
163 #define DHD_LB_SECONDARY_CPUS   0xFE /* Little CPU coreids mask */
164 #endif
165 
166 #define HIST_BIN_SIZE	9
167 
168 #if defined(DHD_LB_TXP)
169 /* Pkttag not compatible with PROP_TXSTATUS or WLFC */
170 typedef struct dhd_tx_lb_pkttag_fr {
171 	struct net_device *net;
172 	int ifidx;
173 } dhd_tx_lb_pkttag_fr_t;
174 
175 #define DHD_LB_TX_PKTTAG_SET_NETDEV(tag, netdevp)	((tag)->net = netdevp)
176 #define DHD_LB_TX_PKTTAG_NETDEV(tag)			((tag)->net)
177 
178 #define DHD_LB_TX_PKTTAG_SET_IFIDX(tag, ifidx)	((tag)->ifidx = ifidx)
179 #define DHD_LB_TX_PKTTAG_IFIDX(tag)		((tag)->ifidx)
180 #endif /* DHD_LB_TXP */
181 #endif /* DHD_LB */
182 
183 #define FILE_DUMP_MAX_WAIT_TIME 4000
184 
185 #ifdef IL_BIGENDIAN
186 #include <bcmendian.h>
187 #define htod32(i) (bcmswap32(i))
188 #define htod16(i) (bcmswap16(i))
189 #define dtoh32(i) (bcmswap32(i))
190 #define dtoh16(i) (bcmswap16(i))
191 #define htodchanspec(i) htod16(i)
192 #define dtohchanspec(i) dtoh16(i)
193 #else
194 #define htod32(i) (i)
195 #define htod16(i) (i)
196 #define dtoh32(i) (i)
197 #define dtoh16(i) (i)
198 #define htodchanspec(i) (i)
199 #define dtohchanspec(i) (i)
200 #endif /* IL_BIGENDINA */
201 
202 #if defined(DHD_TCP_WINSIZE_ADJUST)
203 #define MIN_TCP_WIN_SIZE 18000
204 #define WIN_SIZE_SCALE_FACTOR 2
205 #define MAX_TARGET_PORTS 5
206 #endif /* DHD_TCP_WINSIZE_ADJUST */
207 
208 #ifdef BLOCK_IPV6_PACKET
209 #define HEX_PREF_STR	"0x"
210 #define UNI_FILTER_STR	"010000000000"
211 #define ZERO_ADDR_STR	"000000000000"
212 #define ETHER_TYPE_STR	"0000"
213 #define IPV6_FILTER_STR	"20"
214 #define ZERO_TYPE_STR	"00"
215 #endif /* BLOCK_IPV6_PACKET */
216 
217 #if defined(OEM_ANDROID) && defined(SOFTAP)
218 extern bool ap_cfg_running;
219 extern bool ap_fw_loaded;
220 #endif
221 
222 #if defined(OEM_ANDROID) && defined(BCMPCIE)
223 extern int dhd_get_suspend_bcn_li_dtim(dhd_pub_t *dhd, int *dtim_period, int *bcn_interval);
224 #else
225 extern int dhd_get_suspend_bcn_li_dtim(dhd_pub_t *dhd);
226 #endif /* OEM_ANDROID && BCMPCIE */
227 
228 #ifdef CUSTOMER_HW4
229 #ifdef MIMO_ANT_SETTING
230 #ifdef DHD_EXPORT_CNTL_FILE
231 extern unsigned long antsel;
232 #endif /* DHD_EXPORT_CNTL_FILE */
233 extern int dhd_sel_ant_from_file(dhd_pub_t *dhd);
234 #endif /* MIMO_ANT_SETTING */
235 #ifdef WRITE_WLANINFO
236 #define MAX_VERSION_LEN		512
237 #ifdef DHD_EXPORT_CNTL_FILE
238 extern char version_info[MAX_VERSION_LEN];
239 #endif /* DHD_EXPORT_CNTL_FILE */
240 extern uint32 sec_save_wlinfo(char *firm_ver, char *dhd_ver, char *nvram_p, char *clm_ver);
241 #endif /* WRITE_WLANINFO */
242 #ifdef LOGTRACE_FROM_FILE
243 extern int dhd_logtrace_from_file(dhd_pub_t *dhd);
244 #ifdef DHD_EXPORT_CNTL_FILE
245 extern unsigned long logtrace_val;
246 #endif /* DHD_EXPORT_CNTL_FILE */
247 #endif /* LOGTRACE_FROM_FILE */
248 #ifdef GEN_SOFTAP_INFO_FILE
249 #define SOFTAP_INFO_BUF_SZ 512
250 #ifdef DHD_EXPORT_CNTL_FILE
251 extern char softapinfostr[SOFTAP_INFO_BUF_SZ];
252 #endif /* DHD_EXPORT_CNTL_FILE */
253 extern uint32 sec_save_softap_info(void);
254 #endif /* GEN_SOFTAP_INFO_FILE */
255 #endif /* CUSTOMER_HW4 */
256 
257 #ifdef DHD_SEND_HANG_PRIVCMD_ERRORS
258 extern uint32 report_hang_privcmd_err;
259 #endif /* DHD_SEND_HANG_PRIVCMD_ERRORS */
260 
261 #if defined(SOFTAP_TPUT_ENHANCE)
262 extern void dhd_bus_setidletime(dhd_pub_t *dhdp, int idle_time);
263 extern void dhd_bus_getidletime(dhd_pub_t *dhdp, int* idle_time);
264 #endif /* SOFTAP_TPUT_ENHANCE */
265 
266 #if defined(BCM_ROUTER_DHD)
267 void traffic_mgmt_pkt_set_prio(dhd_pub_t *dhdp, void * pktbuf);
268 #endif /* BCM_ROUTER_DHD */
269 
270 #ifdef DHD_LOG_DUMP
271 /* 0: DLD_BUF_TYPE_GENERAL, 1: DLD_BUF_TYPE_PRESERVE
272 * 2: DLD_BUF_TYPE_SPECIAL
273 */
274 #define DLD_BUFFER_NUM 3
275 
276 #ifndef CUSTOM_LOG_DUMP_BUFSIZE_MB
277 #define CUSTOM_LOG_DUMP_BUFSIZE_MB	4 /* DHD_LOG_DUMP_BUF_SIZE 4 MB static memory in kernel */
278 #endif /* CUSTOM_LOG_DUMP_BUFSIZE_MB */
279 
280 #define LOG_DUMP_TOTAL_BUFSIZE (1024 * 1024 * CUSTOM_LOG_DUMP_BUFSIZE_MB)
281 
282 /*
283  * Below are different sections that use the prealloced buffer
284  * and sum of the sizes of these should not cross LOG_DUMP_TOTAL_BUFSIZE
285  */
286 #ifdef EWP_BCM_TRACE
287 #define LOG_DUMP_GENERAL_MAX_BUFSIZE (192 * 1024 * CUSTOM_LOG_DUMP_BUFSIZE_MB)
288 #define LOG_DUMP_BCM_TRACE_MAX_BUFSIZE (64 * 1024 * CUSTOM_LOG_DUMP_BUFSIZE_MB)
289 #else
290 #define LOG_DUMP_GENERAL_MAX_BUFSIZE (256 * 1024 * CUSTOM_LOG_DUMP_BUFSIZE_MB)
291 #define LOG_DUMP_BCM_TRACE_MAX_BUFSIZE 0
292 #endif /* EWP_BCM_TRACE */
293 #define LOG_DUMP_PRESERVE_MAX_BUFSIZE (128 * 1024 * CUSTOM_LOG_DUMP_BUFSIZE_MB)
294 #define LOG_DUMP_ECNTRS_MAX_BUFSIZE (256 * 1024 * CUSTOM_LOG_DUMP_BUFSIZE_MB)
295 #define LOG_DUMP_RTT_MAX_BUFSIZE (256 * 1024 * CUSTOM_LOG_DUMP_BUFSIZE_MB)
296 #define LOG_DUMP_FILTER_MAX_BUFSIZE (128 * 1024 * CUSTOM_LOG_DUMP_BUFSIZE_MB)
297 
298 #if LOG_DUMP_TOTAL_BUFSIZE < \
299 	(LOG_DUMP_GENERAL_MAX_BUFSIZE + LOG_DUMP_PRESERVE_MAX_BUFSIZE + \
300 	LOG_DUMP_ECNTRS_MAX_BUFSIZE + LOG_DUMP_RTT_MAX_BUFSIZE + \
301 	LOG_DUMP_BCM_TRACE_MAX_BUFSIZE + LOG_DUMP_FILTER_MAX_BUFSIZE)
302 #error "LOG_DUMP_TOTAL_BUFSIZE is lesser than sum of all rings"
303 #endif
304 
305 /* Special buffer is allocated as separately in prealloc */
306 #define LOG_DUMP_SPECIAL_MAX_BUFSIZE (8 * 1024)
307 
308 #define LOG_DUMP_MAX_FILESIZE (8 *1024 * 1024) /* 8 MB default */
309 
310 #ifdef CONFIG_LOG_BUF_SHIFT
311 /* 15% of kernel log buf size, if for example klog buf size is 512KB
312 * 15% of 512KB ~= 80KB
313 */
314 #define LOG_DUMP_KERNEL_TAIL_FLUSH_SIZE \
315 	(15 * ((1 << CONFIG_LOG_BUF_SHIFT)/100))
316 #endif /* CONFIG_LOG_BUF_SHIFT */
317 
318 #define LOG_DUMP_COOKIE_BUFSIZE	1024u
319 typedef struct {
320 	char *hdr_str;
321 	log_dump_section_type_t sec_type;
322 } dld_hdr_t;
323 
324 #define DHD_PRINT_BUF_NAME_LEN 30
325 void dhd_get_debug_dump_len(void *handle, struct sk_buff *skb, void *event_info, u8 event);
326 void cfgvendor_log_dump_len(dhd_pub_t *dhdp, log_dump_type_t *type, struct sk_buff *skb);
327 #endif /* DHD_LOG_DUMP */
328 
329 typedef struct dhd_if_event {
330 	struct list_head	list;
331 	wl_event_data_if_t	event;
332 	char			name[IFNAMSIZ+1];
333 	uint8			mac[ETHER_ADDR_LEN];
334 } dhd_if_event_t;
335 
336 /* Interface control information */
337 typedef struct dhd_if {
338 	struct dhd_info *info;			/* back pointer to dhd_info */
339 	/* OS/stack specifics */
340 	struct net_device *net;
341 	int				idx;			/* iface idx in dongle */
342 	uint			subunit;		/* subunit */
343 	uint8			mac_addr[ETHER_ADDR_LEN];	/* assigned MAC address */
344 	bool			set_macaddress;
345 	bool			set_multicast;
346 	uint8			bssidx;			/* bsscfg index for the interface */
347 	bool			attached;		/* Delayed attachment when unset */
348 	bool			txflowcontrol;	/* Per interface flow control indicator */
349 	char			name[IFNAMSIZ+1]; /* linux interface name */
350 	char			dngl_name[IFNAMSIZ+1]; /* corresponding dongle interface name */
351 	struct net_device_stats stats;
352 #ifdef DHD_WMF
353 	dhd_wmf_t		wmf;		/* per bsscfg wmf setting */
354 	bool	wmf_psta_disable;		/* enable/disable MC pkt to each mac
355 						 * of MC group behind PSTA
356 						 */
357 #endif /* DHD_WMF */
358 #ifdef PCIE_FULL_DONGLE
359 	struct list_head sta_list;		/* sll of associated stations */
360 	spinlock_t	sta_list_lock;		/* lock for manipulating sll */
361 #endif /* PCIE_FULL_DONGLE */
362 	uint32  ap_isolate;			/* ap-isolation settings */
363 #ifdef DHD_L2_FILTER
364 	bool parp_enable;
365 	bool parp_discard;
366 	bool parp_allnode;
367 	arp_table_t *phnd_arp_table;
368 	/* for Per BSS modification */
369 	bool dhcp_unicast;
370 	bool block_ping;
371 	bool grat_arp;
372 	bool block_tdls;
373 #endif /* DHD_L2_FILTER */
374 #if (defined(BCM_ROUTER_DHD) && defined(QOS_MAP_SET))
375 	uint8	 *qosmap_up_table;		/* user priority table, size is UP_TABLE_MAX */
376 	bool qosmap_up_table_enable;	/* flag set only when app want to set additional UP */
377 #endif /* BCM_ROUTER_DHD && QOS_MAP_SET */
378 #ifdef DHD_MCAST_REGEN
379 	bool mcast_regen_bss_enable;
380 #endif
381 	bool rx_pkt_chainable;		/* set all rx packet to chainable config by default */
382 	cumm_ctr_t cumm_ctr;		/* cummulative queue length of child flowrings */
383 #ifdef BCM_ROUTER_DHD
384 	bool	primsta_dwds;		/* DWDS status of primary sta interface */
385 #endif /* BCM_ROUTER_DHD */
386 	uint8 tx_paths_active;
387 	bool del_in_progress;
388 	bool static_if;			/* used to avoid some operations on static_if */
389 #ifdef DHD_4WAYM4_FAIL_DISCONNECT
390 	struct delayed_work m4state_work;
391 	atomic_t m4state;
392 #endif /* DHD_4WAYM4_FAIL_DISCONNECT */
393 #ifdef DHDTCPSYNC_FLOOD_BLK
394 	uint32 tsync_rcvd;
395 	uint32 tsyncack_txed;
396 	u64 last_sync;
397 	struct work_struct  blk_tsfl_work;
398 	uint32 tsync_per_sec;
399 	bool disconnect_tsync_flood;
400 #endif /* DHDTCPSYNC_FLOOD_BLK */
401 #ifdef DHD_POST_EAPOL_M1_AFTER_ROAM_EVT
402 	bool recv_reassoc_evt;
403 	bool post_roam_evt;
404 #endif /* DHD_POST_EAPOL_M1_AFTER_ROAM_EVT */
405 #ifdef WLEASYMESH
406 	uint8 _1905_al_ucast[ETHER_ADDR_LEN];
407 	uint8 _1905_al_mcast[ETHER_ADDR_LEN];
408 #endif /* WLEASYMESH */
409 } dhd_if_t;
410 
411 struct ipv6_work_info_t {
412 	uint8			if_idx;
413 	char			ipv6_addr[IPV6_ADDR_LEN];
414 	unsigned long		event;
415 };
416 
417 typedef struct dhd_dump {
418 	uint8 *buf;
419 	int bufsize;
420 	uint8 *hscb_buf;
421 	int hscb_bufsize;
422 } dhd_dump_t;
423 #ifdef DNGL_AXI_ERROR_LOGGING
424 typedef struct dhd_axi_error_dump {
425 	ulong fault_address;
426 	uint32 axid;
427 	struct hnd_ext_trap_axi_error_v1 etd_axi_error_v1;
428 } dhd_axi_error_dump_t;
429 #endif /* DNGL_AXI_ERROR_LOGGING */
430 #ifdef BCM_ROUTER_DHD
431 typedef struct dhd_write_file {
432 	char file_path[64];
433 	uint32 file_flags;
434 	uint8 *buf;
435 	int bufsize;
436 } dhd_write_file_t;
437 #endif
438 
439 #ifdef DHD_PCIE_NATIVE_RUNTIMEPM
440 struct dhd_rx_tx_work {
441 	struct work_struct work;
442 	struct sk_buff *skb;
443 	struct net_device *net;
444 	struct dhd_pub *pub;
445 };
446 #endif /* DHD_PCIE_NATIVE_RUNTIMEPM */
447 
448 #ifdef FILTER_IE
449 #define FILTER_IE_PATH "/vendor/etc/wifi/filter_ie"
450 #define FILTER_IE_BUFSZ 1024 /* ioc buffsize for FILTER_IE */
451 #define FILE_BLOCK_READ_SIZE 256
452 #define WL_FILTER_IE_IOV_HDR_SIZE OFFSETOF(wl_filter_ie_iov_v1_t, tlvs)
453 #endif /* FILTER_IE */
454 
455 #define NULL_CHECK(p, s, err)  \
456 			do { \
457 				if (!(p)) { \
458 					printk("NULL POINTER (%s) : %s\n", __FUNCTION__, (s)); \
459 					err = BCME_ERROR; \
460 					return err; \
461 				} \
462 			} while (0)
463 
464 int dhd_wifi_platform_register_drv(void);
465 void dhd_wifi_platform_unregister_drv(void);
466 wifi_adapter_info_t* dhd_wifi_platform_attach_adapter(uint32 bus_type,
467 	uint32 bus_num, uint32 slot_num, unsigned long status);
468 wifi_adapter_info_t* dhd_wifi_platform_get_adapter(uint32 bus_type, uint32 bus_num,
469 	uint32 slot_num);
470 int wifi_platform_set_power(wifi_adapter_info_t *adapter, bool on, unsigned long msec);
471 int wifi_platform_bus_enumerate(wifi_adapter_info_t *adapter, bool device_present);
472 int wifi_platform_get_irq_number(wifi_adapter_info_t *adapter, unsigned long *irq_flags_ptr);
473 int wifi_platform_get_mac_addr(wifi_adapter_info_t *adapter, unsigned char *buf, char *name);
474 #ifdef DHD_COREDUMP
475 int wifi_platform_set_coredump(wifi_adapter_info_t *adapter, const char *buf, int buf_len,
476 	const char *info);
477 #endif /* DHD_COREDUMP */
478 #ifdef CUSTOM_COUNTRY_CODE
479 void *wifi_platform_get_country_code(wifi_adapter_info_t *adapter, char *ccode,
480 	u32 flags);
481 #else
482 void *wifi_platform_get_country_code(wifi_adapter_info_t *adapter, char *ccode);
483 #endif /* CUSTOM_COUNTRY_CODE */
484 void* wifi_platform_prealloc(wifi_adapter_info_t *adapter, int section, unsigned long size);
485 void* wifi_platform_get_prealloc_func_ptr(wifi_adapter_info_t *adapter);
486 
487 int dhd_get_fw_mode(struct dhd_info *dhdinfo);
488 bool dhd_update_fw_nv_path(struct dhd_info *dhdinfo);
489 #ifdef BCM_ROUTER_DHD
490 void dhd_update_dpsta_interface_for_sta(dhd_pub_t* dhdp, int ifidx, void* event_data);
491 #endif /* BCM_ROUTER_DHD */
492 #ifdef DHD_WMF
493 dhd_wmf_t* dhd_wmf_conf(dhd_pub_t *dhdp, uint32 idx);
494 int dhd_get_wmf_psta_disable(dhd_pub_t *dhdp, uint32 idx);
495 int dhd_set_wmf_psta_disable(dhd_pub_t *dhdp, uint32 idx, int val);
496 void dhd_update_psta_interface_for_sta(dhd_pub_t *dhdp, char* ifname,
497 		void* mac_addr, void* event_data);
498 #endif /* DHD_WMF */
499 
500 #if defined (BT_OVER_SDIO)
501 int dhd_net_bus_get(struct net_device *dev);
502 int dhd_net_bus_put(struct net_device *dev);
503 #endif /* BT_OVER_SDIO */
504 #if defined(WLADPS) || defined(WLADPS_PRIVATE_CMD)
505 #define ADPS_ENABLE	1
506 #define ADPS_DISABLE	0
507 
508 int dhd_enable_adps(dhd_pub_t *dhd, uint8 on);
509 #endif /* WLADPS || WLADPS_PRIVATE_CMD */
510 #ifdef DHDTCPSYNC_FLOOD_BLK
511 extern void dhd_reset_tcpsync_info_by_ifp(dhd_if_t *ifp);
512 extern void dhd_reset_tcpsync_info_by_dev(struct net_device *dev);
513 #endif /* DHDTCPSYNC_FLOOD_BLK */
514 #ifdef PCIE_FULL_DONGLE
515 extern void dhd_net_del_flowrings_sta(dhd_pub_t * dhd, struct net_device * ndev);
516 #endif /* PCIE_FULL_DONGLE */
517 int dhd_get_fw_capabilities(dhd_pub_t * dhd);
518 #endif /* __DHD_LINUX_H__ */
519