acx.h 28.3 KB
Newer Older
L
Luciano Coelho 已提交
1 2 3 4
/*
 * This file is part of wl1271
 *
 * Copyright (C) 1998-2009 Texas Instruments. All rights reserved.
5
 * Copyright (C) 2008-2010 Nokia Corporation
L
Luciano Coelho 已提交
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
 *
 * Contact: Luciano Coelho <luciano.coelho@nokia.com>
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * version 2 as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA
 *
 */

S
Shahar Levi 已提交
25 26
#ifndef __ACX_H__
#define __ACX_H__
L
Luciano Coelho 已提交
27

28
#include "wlcore.h"
S
Shahar Levi 已提交
29
#include "cmd.h"
L
Luciano Coelho 已提交
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49

/*************************************************************************

    Host Interrupt Register (WiLink -> Host)

**************************************************************************/
/* HW Initiated interrupt Watchdog timer expiration */
#define WL1271_ACX_INTR_WATCHDOG           BIT(0)
/* Init sequence is done (masked interrupt, detection through polling only ) */
#define WL1271_ACX_INTR_INIT_COMPLETE      BIT(1)
/* Event was entered to Event MBOX #A*/
#define WL1271_ACX_INTR_EVENT_A            BIT(2)
/* Event was entered to Event MBOX #B*/
#define WL1271_ACX_INTR_EVENT_B            BIT(3)
/* Command processing completion*/
#define WL1271_ACX_INTR_CMD_COMPLETE       BIT(4)
/* Signaling the host on HW wakeup */
#define WL1271_ACX_INTR_HW_AVAILABLE       BIT(5)
/* The MISC bit is used for aggregation of RX, TxComplete and TX rate update */
#define WL1271_ACX_INTR_DATA               BIT(6)
S
Stefan Weil 已提交
50
/* Trace message on MBOX #A */
L
Luciano Coelho 已提交
51
#define WL1271_ACX_INTR_TRACE_A            BIT(7)
S
Stefan Weil 已提交
52
/* Trace message on MBOX #B */
L
Luciano Coelho 已提交
53
#define WL1271_ACX_INTR_TRACE_B            BIT(8)
54 55
/* SW FW Initiated interrupt Watchdog timer expiration */
#define WL1271_ACX_SW_INTR_WATCHDOG        BIT(9)
L
Luciano Coelho 已提交
56

57
#define WL1271_ACX_INTR_ALL             0xFFFFFFFF
L
Luciano Coelho 已提交
58

59 60 61 62 63 64 65
/* all possible interrupts - only appropriate ones will be masked in */
#define WLCORE_ALL_INTR_MASK		(WL1271_ACX_INTR_WATCHDOG     | \
					WL1271_ACX_INTR_EVENT_A       | \
					WL1271_ACX_INTR_EVENT_B       | \
					WL1271_ACX_INTR_HW_AVAILABLE  | \
					WL1271_ACX_INTR_DATA          | \
					WL1271_ACX_SW_INTR_WATCHDOG)
L
Luciano Coelho 已提交
66 67 68 69 70 71

/* Target's information element */
struct acx_header {
	struct wl1271_cmd_header cmd;

	/* acx (or information element) header */
L
Luciano Coelho 已提交
72
	__le16 id;
L
Luciano Coelho 已提交
73 74

	/* payload length (not including headers */
L
Luciano Coelho 已提交
75
	__le16 len;
76
} __packed;
L
Luciano Coelho 已提交
77 78 79 80 81 82 83

struct acx_error_counter {
	struct acx_header header;

	/* The number of PLCP errors since the last time this */
	/* information element was interrogated. This field is */
	/* automatically cleared when it is interrogated.*/
L
Luciano Coelho 已提交
84
	__le32 PLCP_error;
L
Luciano Coelho 已提交
85 86 87 88

	/* The number of FCS errors since the last time this */
	/* information element was interrogated. This field is */
	/* automatically cleared when it is interrogated.*/
L
Luciano Coelho 已提交
89
	__le32 FCS_error;
L
Luciano Coelho 已提交
90 91 92 93

	/* The number of MPDUs without PLCP header errors received*/
	/* since the last time this information element was interrogated. */
	/* This field is automatically cleared when it is interrogated.*/
L
Luciano Coelho 已提交
94
	__le32 valid_frame;
L
Luciano Coelho 已提交
95 96 97

	/* the number of missed sequence numbers in the squentially */
	/* values of frames seq numbers */
L
Luciano Coelho 已提交
98
	__le32 seq_num_miss;
99
} __packed;
L
Luciano Coelho 已提交
100

E
Eliad Peller 已提交
101 102 103 104 105 106 107 108 109 110 111
enum wl12xx_role {
	WL1271_ROLE_STA = 0,
	WL1271_ROLE_IBSS,
	WL1271_ROLE_AP,
	WL1271_ROLE_DEVICE,
	WL1271_ROLE_P2P_CL,
	WL1271_ROLE_P2P_GO,

	WL12XX_INVALID_ROLE_TYPE = 0xff
};

L
Luciano Coelho 已提交
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
enum wl1271_psm_mode {
	/* Active mode */
	WL1271_PSM_CAM = 0,

	/* Power save mode */
	WL1271_PSM_PS = 1,

	/* Extreme low power */
	WL1271_PSM_ELP = 2,
};

struct acx_sleep_auth {
	struct acx_header header;

	/* The sleep level authorization of the device. */
	/* 0 - Always active*/
	/* 1 - Power down mode: light / fast sleep*/
	/* 2 - ELP mode: Deep / Max sleep*/
	u8  sleep_auth;
	u8  padding[3];
132
} __packed;
L
Luciano Coelho 已提交
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167

enum {
	HOSTIF_PCI_MASTER_HOST_INDIRECT,
	HOSTIF_PCI_MASTER_HOST_DIRECT,
	HOSTIF_SLAVE,
	HOSTIF_PKT_RING,
	HOSTIF_DONTCARE = 0xFF
};

#define DEFAULT_UCAST_PRIORITY          0
#define DEFAULT_RX_Q_PRIORITY           0
#define DEFAULT_RXQ_PRIORITY            0 /* low 0 .. 15 high  */
#define DEFAULT_RXQ_TYPE                0x07    /* All frames, Data/Ctrl/Mgmt */
#define TRACE_BUFFER_MAX_SIZE           256

#define  DP_RX_PACKET_RING_CHUNK_SIZE 1600
#define  DP_TX_PACKET_RING_CHUNK_SIZE 1600
#define  DP_RX_PACKET_RING_CHUNK_NUM 2
#define  DP_TX_PACKET_RING_CHUNK_NUM 2
#define  DP_TX_COMPLETE_TIME_OUT 20

#define TX_MSDU_LIFETIME_MIN       0
#define TX_MSDU_LIFETIME_MAX       3000
#define TX_MSDU_LIFETIME_DEF       512
#define RX_MSDU_LIFETIME_MIN       0
#define RX_MSDU_LIFETIME_MAX       0xFFFFFFFF
#define RX_MSDU_LIFETIME_DEF       512000

struct acx_rx_msdu_lifetime {
	struct acx_header header;

	/*
	 * The maximum amount of time, in TU, before the
	 * firmware discards the MSDU.
	 */
L
Luciano Coelho 已提交
168
	__le32 lifetime;
169
} __packed;
L
Luciano Coelho 已提交
170 171 172 173 174 175 176 177 178 179 180 181 182

enum acx_slot_type {
	SLOT_TIME_LONG = 0,
	SLOT_TIME_SHORT = 1,
	DEFAULT_SLOT_TIME = SLOT_TIME_SHORT,
	MAX_SLOT_TIMES = 0xFF
};

#define STATION_WONE_INDEX 0

struct acx_slot {
	struct acx_header header;

E
Eliad Peller 已提交
183
	u8 role_id;
L
Luciano Coelho 已提交
184 185
	u8 wone_index; /* Reserved */
	u8 slot_time;
E
Eliad Peller 已提交
186
	u8 reserved[5];
187
} __packed;
L
Luciano Coelho 已提交
188 189


190 191
#define ACX_MC_ADDRESS_GROUP_MAX	(8)
#define ADDRESS_GROUP_MAX_LEN	        (ETH_ALEN * ACX_MC_ADDRESS_GROUP_MAX)
L
Luciano Coelho 已提交
192 193 194 195

struct acx_dot11_grp_addr_tbl {
	struct acx_header header;

E
Eliad Peller 已提交
196
	u8 role_id;
L
Luciano Coelho 已提交
197 198
	u8 enabled;
	u8 num_groups;
E
Eliad Peller 已提交
199
	u8 pad[1];
L
Luciano Coelho 已提交
200
	u8 mac_table[ADDRESS_GROUP_MAX_LEN];
201
} __packed;
L
Luciano Coelho 已提交
202 203 204 205

struct acx_rx_timeout {
	struct acx_header header;

E
Eliad Peller 已提交
206 207
	u8 role_id;
	u8 reserved;
L
Luciano Coelho 已提交
208 209
	__le16 ps_poll_timeout;
	__le16 upsd_timeout;
E
Eliad Peller 已提交
210
	u8 padding[2];
211
} __packed;
L
Luciano Coelho 已提交
212 213 214 215

struct acx_rts_threshold {
	struct acx_header header;

E
Eliad Peller 已提交
216 217
	u8 role_id;
	u8 reserved;
L
Luciano Coelho 已提交
218
	__le16 threshold;
219
} __packed;
L
Luciano Coelho 已提交
220 221 222 223

struct acx_beacon_filter_option {
	struct acx_header header;

E
Eliad Peller 已提交
224
	u8 role_id;
L
Luciano Coelho 已提交
225 226 227 228 229 230 231 232 233
	u8 enable;
	/*
	 * The number of beacons without the unicast TIM
	 * bit set that the firmware buffers before
	 * signaling the host about ready frames.
	 * When set to 0 and the filter is enabled, beacons
	 * without the unicast TIM bit set are dropped.
	 */
	u8 max_num_beacons;
E
Eliad Peller 已提交
234
	u8 pad[1];
235
} __packed;
L
Luciano Coelho 已提交
236 237 238 239 240

/*
 * ACXBeaconFilterEntry (not 221)
 * Byte Offset     Size (Bytes)    Definition
 * ===========     ============    ==========
241
 * 0               1               IE identifier
L
Luciano Coelho 已提交
242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272
 * 1               1               Treatment bit mask
 *
 * ACXBeaconFilterEntry (221)
 * Byte Offset     Size (Bytes)    Definition
 * ===========     ============    ==========
 * 0               1               IE identifier
 * 1               1               Treatment bit mask
 * 2               3               OUI
 * 5               1               Type
 * 6               2               Version
 *
 *
 * Treatment bit mask - The information element handling:
 * bit 0 - The information element is compared and transferred
 * in case of change.
 * bit 1 - The information element is transferred to the host
 * with each appearance or disappearance.
 * Note that both bits can be set at the same time.
 */
#define	BEACON_FILTER_TABLE_MAX_IE_NUM		       (32)
#define BEACON_FILTER_TABLE_MAX_VENDOR_SPECIFIC_IE_NUM (6)
#define BEACON_FILTER_TABLE_IE_ENTRY_SIZE	       (2)
#define BEACON_FILTER_TABLE_EXTRA_VENDOR_SPECIFIC_IE_SIZE (6)
#define BEACON_FILTER_TABLE_MAX_SIZE ((BEACON_FILTER_TABLE_MAX_IE_NUM * \
			    BEACON_FILTER_TABLE_IE_ENTRY_SIZE) + \
			   (BEACON_FILTER_TABLE_MAX_VENDOR_SPECIFIC_IE_NUM * \
			    BEACON_FILTER_TABLE_EXTRA_VENDOR_SPECIFIC_IE_SIZE))

struct acx_beacon_filter_ie_table {
	struct acx_header header;

E
Eliad Peller 已提交
273
	u8 role_id;
L
Luciano Coelho 已提交
274
	u8 num_ie;
E
Eliad Peller 已提交
275
	u8 pad[2];
276
	u8 table[BEACON_FILTER_TABLE_MAX_SIZE];
277
} __packed;
L
Luciano Coelho 已提交
278

279 280 281
struct acx_conn_monit_params {
       struct acx_header header;

E
Eliad Peller 已提交
282 283
	   u8 role_id;
	   u8 padding[3];
L
Luciano Coelho 已提交
284 285
       __le32 synch_fail_thold; /* number of beacons missed */
       __le32 bss_lose_timeout; /* number of TU's from synch fail */
286
} __packed;
287

L
Luciano Coelho 已提交
288 289 290 291 292
struct acx_bt_wlan_coex {
	struct acx_header header;

	u8 enable;
	u8 pad[3];
293
} __packed;
L
Luciano Coelho 已提交
294

295
struct acx_bt_wlan_coex_param {
296 297
	struct acx_header header;

298
	__le32 params[CONF_SG_PARAMS_MAX];
299
	u8 param_idx;
300
	u8 padding[3];
301
} __packed;
302

303
struct acx_dco_itrim_params {
L
Luciano Coelho 已提交
304 305
	struct acx_header header;

306
	u8 enable;
307
	u8 padding[3];
308
	__le32 timeout;
309
} __packed;
L
Luciano Coelho 已提交
310 311 312 313 314

struct acx_energy_detection {
	struct acx_header header;

	/* The RX Clear Channel Assessment threshold in the PHY */
L
Luciano Coelho 已提交
315
	__le16 rx_cca_threshold;
L
Luciano Coelho 已提交
316 317
	u8 tx_energy_detection;
	u8 pad;
318
} __packed;
L
Luciano Coelho 已提交
319 320 321 322

struct acx_beacon_broadcast {
	struct acx_header header;

E
Eliad Peller 已提交
323
	u8 role_id;
L
Luciano Coelho 已提交
324 325 326
	/* Enables receiving of broadcast packets in PS mode */
	u8 rx_broadcast_in_ps;

E
Eliad Peller 已提交
327 328 329
	__le16 beacon_rx_timeout;
	__le16 broadcast_timeout;

L
Luciano Coelho 已提交
330 331
	/* Consecutive PS Poll failures before updating the host */
	u8 ps_poll_threshold;
E
Eliad Peller 已提交
332
	u8 pad[1];
333
} __packed;
L
Luciano Coelho 已提交
334 335 336 337

struct acx_event_mask {
	struct acx_header header;

L
Luciano Coelho 已提交
338 339
	__le32 event_mask;
	__le32 high_event_mask; /* Unused */
340
} __packed;
L
Luciano Coelho 已提交
341 342 343 344 345 346

#define SCAN_PASSIVE		BIT(0)
#define SCAN_5GHZ_BAND		BIT(1)
#define SCAN_TRIGGERED		BIT(2)
#define SCAN_PRIORITY_HIGH	BIT(3)

347 348 349 350
/* When set, disable HW encryption */
#define DF_ENCRYPTION_DISABLE      0x01
#define DF_SNIFF_MODE_ENABLE       0x80

L
Luciano Coelho 已提交
351 352 353
struct acx_feature_config {
	struct acx_header header;

E
Eliad Peller 已提交
354 355
	u8 role_id;
	u8 padding[3];
L
Luciano Coelho 已提交
356 357
	__le32 options;
	__le32 data_flow_options;
358
} __packed;
L
Luciano Coelho 已提交
359 360 361 362

struct acx_current_tx_power {
	struct acx_header header;

E
Eliad Peller 已提交
363
	u8  role_id;
L
Luciano Coelho 已提交
364
	u8  current_tx_power;
E
Eliad Peller 已提交
365
	u8  padding[2];
366
} __packed;
L
Luciano Coelho 已提交
367 368 369 370

struct acx_wake_up_condition {
	struct acx_header header;

E
Eliad Peller 已提交
371
	u8 role_id;
L
Luciano Coelho 已提交
372 373
	u8 wake_up_event; /* Only one bit can be set */
	u8 listen_interval;
E
Eliad Peller 已提交
374
	u8 pad[1];
375
} __packed;
L
Luciano Coelho 已提交
376 377 378 379 380 381 382

struct acx_aid {
	struct acx_header header;

	/*
	 * To be set when associated with an AP.
	 */
E
Eliad Peller 已提交
383 384
	u8 role_id;
	u8 reserved;
L
Luciano Coelho 已提交
385
	__le16 aid;
386
} __packed;
L
Luciano Coelho 已提交
387 388 389 390 391 392 393 394 395 396 397 398 399

enum acx_preamble_type {
	ACX_PREAMBLE_LONG = 0,
	ACX_PREAMBLE_SHORT = 1
};

struct acx_preamble {
	struct acx_header header;

	/*
	 * When set, the WiLink transmits the frames with a short preamble and
	 * when cleared, the WiLink transmits the frames with a long preamble.
	 */
E
Eliad Peller 已提交
400
	u8 role_id;
L
Luciano Coelho 已提交
401
	u8 preamble;
E
Eliad Peller 已提交
402
	u8 padding[2];
403
} __packed;
L
Luciano Coelho 已提交
404 405 406 407 408 409 410 411

enum acx_ctsprotect_type {
	CTSPROTECT_DISABLE = 0,
	CTSPROTECT_ENABLE = 1
};

struct acx_ctsprotect {
	struct acx_header header;
E
Eliad Peller 已提交
412
	u8 role_id;
L
Luciano Coelho 已提交
413
	u8 ctsprotect;
E
Eliad Peller 已提交
414
	u8 padding[2];
415
} __packed;
L
Luciano Coelho 已提交
416 417

struct acx_rate_class {
L
Luciano Coelho 已提交
418
	__le32 enabled_rates;
L
Luciano Coelho 已提交
419 420 421 422 423 424
	u8 short_retry_limit;
	u8 long_retry_limit;
	u8 aflags;
	u8 reserved;
};

E
Eliad Peller 已提交
425
struct acx_rate_policy {
426 427 428 429 430 431
	struct acx_header header;

	__le32 rate_policy_idx;
	struct acx_rate_class rate_policy;
} __packed;

L
Luciano Coelho 已提交
432 433
struct acx_ac_cfg {
	struct acx_header header;
E
Eliad Peller 已提交
434
	u8 role_id;
L
Luciano Coelho 已提交
435
	u8 ac;
E
Eliad Peller 已提交
436
	u8 aifsn;
L
Luciano Coelho 已提交
437
	u8 cw_min;
L
Luciano Coelho 已提交
438 439
	__le16 cw_max;
	__le16 tx_op_limit;
440
} __packed;
L
Luciano Coelho 已提交
441 442 443

struct acx_tid_config {
	struct acx_header header;
E
Eliad Peller 已提交
444
	u8 role_id;
L
Luciano Coelho 已提交
445 446 447 448 449
	u8 queue_id;
	u8 channel_type;
	u8 tsid;
	u8 ps_scheme;
	u8 ack_policy;
E
Eliad Peller 已提交
450
	u8 padding[2];
L
Luciano Coelho 已提交
451
	__le32 apsd_conf[2];
452
} __packed;
L
Luciano Coelho 已提交
453 454 455

struct acx_frag_threshold {
	struct acx_header header;
L
Luciano Coelho 已提交
456
	__le16 frag_threshold;
L
Luciano Coelho 已提交
457
	u8 padding[2];
458
} __packed;
L
Luciano Coelho 已提交
459 460 461

struct acx_tx_config_options {
	struct acx_header header;
L
Luciano Coelho 已提交
462 463
	__le16 tx_compl_timeout;     /* msec */
	__le16 tx_compl_threshold;   /* number of packets */
464
} __packed;
L
Luciano Coelho 已提交
465

E
Eliad Peller 已提交
466
struct wl12xx_acx_config_memory {
467 468 469 470 471 472 473 474 475 476 477
	struct acx_header header;

	u8 rx_mem_block_num;
	u8 tx_min_mem_block_num;
	u8 num_stations;
	u8 num_ssid_profiles;
	__le32 total_tx_descriptors;
	u8 dyn_mem_enable;
	u8 tx_free_req;
	u8 rx_free_req;
	u8 tx_min;
478 479
	u8 fwlog_blocks;
	u8 padding[3];
480 481
} __packed;

L
Luciano Coelho 已提交
482 483 484
struct wl1271_acx_mem_map {
	struct acx_header header;

L
Luciano Coelho 已提交
485 486
	__le32 code_start;
	__le32 code_end;
L
Luciano Coelho 已提交
487

L
Luciano Coelho 已提交
488 489
	__le32 wep_defkey_start;
	__le32 wep_defkey_end;
L
Luciano Coelho 已提交
490

L
Luciano Coelho 已提交
491 492
	__le32 sta_table_start;
	__le32 sta_table_end;
L
Luciano Coelho 已提交
493

L
Luciano Coelho 已提交
494 495
	__le32 packet_template_start;
	__le32 packet_template_end;
L
Luciano Coelho 已提交
496 497

	/* Address of the TX result interface (control block) */
L
Luciano Coelho 已提交
498 499
	__le32 tx_result;
	__le32 tx_result_queue_start;
L
Luciano Coelho 已提交
500

L
Luciano Coelho 已提交
501 502
	__le32 queue_memory_start;
	__le32 queue_memory_end;
L
Luciano Coelho 已提交
503

L
Luciano Coelho 已提交
504 505
	__le32 packet_memory_pool_start;
	__le32 packet_memory_pool_end;
L
Luciano Coelho 已提交
506

L
Luciano Coelho 已提交
507 508
	__le32 debug_buffer1_start;
	__le32 debug_buffer1_end;
L
Luciano Coelho 已提交
509

L
Luciano Coelho 已提交
510 511
	__le32 debug_buffer2_start;
	__le32 debug_buffer2_end;
L
Luciano Coelho 已提交
512 513

	/* Number of blocks FW allocated for TX packets */
L
Luciano Coelho 已提交
514
	__le32 num_tx_mem_blocks;
L
Luciano Coelho 已提交
515 516

	/* Number of blocks FW allocated for RX packets */
L
Luciano Coelho 已提交
517
	__le32 num_rx_mem_blocks;
L
Luciano Coelho 已提交
518 519 520 521

	/* the following 4 fields are valid in SLAVE mode only */
	u8 *tx_cbuf;
	u8 *rx_cbuf;
L
Luciano Coelho 已提交
522 523
	__le32 rx_ctrl;
	__le32 tx_ctrl;
524
} __packed;
L
Luciano Coelho 已提交
525 526 527 528

struct wl1271_acx_rx_config_opt {
	struct acx_header header;

L
Luciano Coelho 已提交
529 530 531
	__le16 mblk_threshold;
	__le16 threshold;
	__le16 timeout;
L
Luciano Coelho 已提交
532 533
	u8 queue_type;
	u8 reserved;
534
} __packed;
L
Luciano Coelho 已提交
535

536 537 538 539

struct wl1271_acx_bet_enable {
	struct acx_header header;

E
Eliad Peller 已提交
540
	u8 role_id;
541 542
	u8 enable;
	u8 max_consecutive;
E
Eliad Peller 已提交
543
	u8 padding[1];
544
} __packed;
545

546 547 548
#define ACX_IPV4_VERSION 4
#define ACX_IPV6_VERSION 6
#define ACX_IPV4_ADDR_SIZE 4
E
Eliad Peller 已提交
549 550 551 552 553

/* bitmap of enabled arp_filter features */
#define ACX_ARP_FILTER_ARP_FILTERING	BIT(0)
#define ACX_ARP_FILTER_AUTO_ARP		BIT(1)

554 555
struct wl1271_acx_arp_filter {
	struct acx_header header;
E
Eliad Peller 已提交
556
	u8 role_id;
557
	u8 version;         /* ACX_IPV4_VERSION, ACX_IPV6_VERSION */
E
Eliad Peller 已提交
558
	u8 enable;          /* bitmap of enabled ARP filtering features */
E
Eliad Peller 已提交
559
	u8 padding[1];
560 561 562 563
	u8 address[16];     /* The configured device IP address - all ARP
			       requests directed to this IP address will pass
			       through. For IPv4, the first four bytes are
			       used. */
564
} __packed;
565

566 567 568 569 570 571
struct wl1271_acx_pm_config {
	struct acx_header header;

	__le32 host_clk_settling_time;
	u8 host_fast_wakeup_support;
	u8 padding[3];
572
} __packed;
573

574 575 576
struct wl1271_acx_keep_alive_mode {
	struct acx_header header;

E
Eliad Peller 已提交
577
	u8 role_id;
578
	u8 enabled;
E
Eliad Peller 已提交
579
	u8 padding[2];
580
} __packed;
581 582 583 584 585 586 587 588 589 590 591 592 593 594

enum {
	ACX_KEEP_ALIVE_NO_TX = 0,
	ACX_KEEP_ALIVE_PERIOD_ONLY
};

enum {
	ACX_KEEP_ALIVE_TPL_INVALID = 0,
	ACX_KEEP_ALIVE_TPL_VALID
};

struct wl1271_acx_keep_alive_config {
	struct acx_header header;

E
Eliad Peller 已提交
595
	u8 role_id;
596 597 598
	u8 index;
	u8 tpl_validation;
	u8 trigger;
E
Eliad Peller 已提交
599
	__le32 period;
600
} __packed;
601

602
/* TODO: maybe this needs to be moved somewhere else? */
603 604 605
#define HOST_IF_CFG_RX_FIFO_ENABLE     BIT(0)
#define HOST_IF_CFG_TX_EXTRA_BLKS_SWAP BIT(1)
#define HOST_IF_CFG_TX_PAD_TO_SDIO_BLK BIT(3)
L
Luciano Coelho 已提交
606 607
#define HOST_IF_CFG_RX_PAD_TO_SDIO_BLK BIT(4)
#define HOST_IF_CFG_ADD_RX_ALIGNMENT   BIT(6)
608

609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639
enum {
	WL1271_ACX_TRIG_TYPE_LEVEL = 0,
	WL1271_ACX_TRIG_TYPE_EDGE,
};

enum {
	WL1271_ACX_TRIG_DIR_LOW = 0,
	WL1271_ACX_TRIG_DIR_HIGH,
	WL1271_ACX_TRIG_DIR_BIDIR,
};

enum {
	WL1271_ACX_TRIG_ENABLE = 1,
	WL1271_ACX_TRIG_DISABLE,
};

enum {
	WL1271_ACX_TRIG_METRIC_RSSI_BEACON = 0,
	WL1271_ACX_TRIG_METRIC_RSSI_DATA,
	WL1271_ACX_TRIG_METRIC_SNR_BEACON,
	WL1271_ACX_TRIG_METRIC_SNR_DATA,
};

enum {
	WL1271_ACX_TRIG_IDX_RSSI = 0,
	WL1271_ACX_TRIG_COUNT = 8,
};

struct wl1271_acx_rssi_snr_trigger {
	struct acx_header header;

E
Eliad Peller 已提交
640
	u8 role_id;
641 642 643
	u8 metric;
	u8 type;
	u8 dir;
E
Eliad Peller 已提交
644 645
	__le16 threshold;
	__le16 pacing; /* 0 - 60000 ms */
646 647 648
	u8 hysteresis;
	u8 index;
	u8 enable;
E
Eliad Peller 已提交
649
	u8 padding[1];
650 651 652 653 654
};

struct wl1271_acx_rssi_snr_avg_weights {
	struct acx_header header;

E
Eliad Peller 已提交
655 656
	u8 role_id;
	u8 padding[3];
657 658 659 660 661 662
	u8 rssi_beacon;
	u8 rssi_data;
	u8 snr_beacon;
	u8 snr_data;
};

663 664 665 666

/* special capability bit (not employed by the 802.11n spec) */
#define WL12XX_HT_CAP_HT_OPERATION BIT(16)

S
Shahar Levi 已提交
667 668 669 670 671 672 673 674
/*
 * ACX_PEER_HT_CAP
 * Configure HT capabilities - declare the capabilities of the peer
 * we are connected to.
 */
struct wl1271_acx_ht_capabilities {
	struct acx_header header;

675
	/* bitmask of capability bits supported by the peer */
S
Shahar Levi 已提交
676 677
	__le32 ht_capabilites;

E
Eliad Peller 已提交
678 679
	/* Indicates to which link these capabilities apply. */
	u8 hlid;
S
Shahar Levi 已提交
680 681 682 683 684 685 686 687 688

	/*
	 * This the maximum A-MPDU length supported by the AP. The FW may not
	 * exceed this length when sending A-MPDUs
	 */
	u8 ampdu_max_length;

	/* This is the minimal spacing required when sending A-MPDUs to the AP*/
	u8 ampdu_min_spacing;
E
Eliad Peller 已提交
689 690

	u8 padding;
S
Shahar Levi 已提交
691 692 693 694 695 696 697 698 699
} __packed;

/*
 * ACX_HT_BSS_OPERATION
 * Configure HT capabilities - AP rules for behavior in the BSS.
 */
struct wl1271_acx_ht_information {
	struct acx_header header;

E
Eliad Peller 已提交
700 701
	u8 role_id;

S
Shahar Levi 已提交
702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722
	/* Values: 0 - RIFS not allowed, 1 - RIFS allowed */
	u8 rifs_mode;

	/* Values: 0 - 3 like in spec */
	u8 ht_protection;

	/* Values: 0 - GF protection not required, 1 - GF protection required */
	u8 gf_protection;

	/*Values: 0 - TX Burst limit not required, 1 - TX Burst Limit required*/
	u8 ht_tx_burst_limit;

	/*
	 * Values: 0 - Dual CTS protection not required,
	 *         1 - Dual CTS Protection required
	 * Note: When this value is set to 1 FW will protect all TXOP with RTS
	 * frame and will not use CTS-to-self regardless of the value of the
	 * ACX_CTS_PROTECTION information element
	 */
	u8 dual_cts_protection;

E
Eliad Peller 已提交
723
	u8 padding[2];
S
Shahar Levi 已提交
724 725
} __packed;

726
#define RX_BA_MAX_SESSIONS 3
L
Levi, Shahar 已提交
727

728
struct wl1271_acx_ba_initiator_policy {
L
Levi, Shahar 已提交
729
	struct acx_header header;
730 731

	/* Specifies role Id, Range 0-7, 0xFF means ANY role. */
L
Levi, Shahar 已提交
732
	u8 role_id;
733

L
Levi, Shahar 已提交
734
	/*
735 736
	 * Per TID setting for allowing TX BA. Set a bit to 1 to allow
	 * TX BA sessions for the corresponding TID.
L
Levi, Shahar 已提交
737
	 */
738
	u8 tid_bitmap;
L
Levi, Shahar 已提交
739 740

	/* Windows size in number of packets */
741
	u8 win_size;
L
Levi, Shahar 已提交
742

743
	u8 padding1[1];
L
Levi, Shahar 已提交
744

745 746
	/* As initiator inactivity timeout in time units(TU) of 1024us */
	u16 inactivity_timeout;
L
Levi, Shahar 已提交
747

748
	u8 padding[2];
L
Levi, Shahar 已提交
749 750
} __packed;

L
Levi, Shahar 已提交
751 752 753
struct wl1271_acx_ba_receiver_setup {
	struct acx_header header;

754 755
	/* Specifies link id, range 0-31 */
	u8 hlid;
L
Levi, Shahar 已提交
756 757 758 759 760 761

	u8 tid;

	u8 enable;

	/* Windows size in number of packets */
762
	u8 win_size;
L
Levi, Shahar 已提交
763 764 765

	/* BA session starting sequence number.  RANGE 0-FFF */
	u16 ssn;
766 767

	u8 padding[2];
L
Levi, Shahar 已提交
768 769
} __packed;

770
struct wl12xx_acx_fw_tsf_information {
J
Juuso Oikarinen 已提交
771 772
	struct acx_header header;

773 774
	u8 role_id;
	u8 padding1[3];
J
Juuso Oikarinen 已提交
775 776 777 778 779
	__le32 current_tsf_high;
	__le32 current_tsf_low;
	__le32 last_bttt_high;
	__le32 last_tbtt_low;
	u8 last_dtim_count;
780
	u8 padding2[3];
L
Luciano Coelho 已提交
781
} __packed;
J
Juuso Oikarinen 已提交
782

783 784 785
struct wl1271_acx_ps_rx_streaming {
	struct acx_header header;

E
Eliad Peller 已提交
786
	u8 role_id;
787 788 789 790 791 792 793 794
	u8 tid;
	u8 enable;

	/* interval between triggers (10-100 msec) */
	u8 period;

	/* timeout before first trigger (0-200 msec) */
	u8 timeout;
E
Eliad Peller 已提交
795
	u8 padding[3];
796 797
} __packed;

798
struct wl1271_acx_ap_max_tx_retry {
799 800
	struct acx_header header;

E
Eliad Peller 已提交
801 802 803
	u8 role_id;
	u8 padding_1;

804 805 806 807 808 809 810
	/*
	 * the number of frames transmission failures before
	 * issuing the aging event.
	 */
	__le16 max_tx_retry;
} __packed;

811 812 813 814 815 816 817 818 819
struct wl1271_acx_config_ps {
	struct acx_header header;

	u8 exit_retries;
	u8 enter_retries;
	u8 padding[2];
	__le32 null_data_rate;
} __packed;

820 821 822 823 824 825 826
struct wl1271_acx_inconnection_sta {
	struct acx_header header;

	u8 addr[ETH_ALEN];
	u8 padding1[2];
} __packed;

S
Shahar Levi 已提交
827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885
/*
 * ACX_FM_COEX_CFG
 * set the FM co-existence parameters.
 */
struct wl1271_acx_fm_coex {
	struct acx_header header;
	/* enable(1) / disable(0) the FM Coex feature */
	u8 enable;
	/*
	 * Swallow period used in COEX PLL swallowing mechanism.
	 * 0xFF = use FW default
	 */
	u8 swallow_period;
	/*
	 * The N divider used in COEX PLL swallowing mechanism for Fref of
	 * 38.4/19.2 Mhz. 0xFF = use FW default
	 */
	u8 n_divider_fref_set_1;
	/*
	 * The N divider used in COEX PLL swallowing mechanism for Fref of
	 * 26/52 Mhz. 0xFF = use FW default
	 */
	u8 n_divider_fref_set_2;
	/*
	 * The M divider used in COEX PLL swallowing mechanism for Fref of
	 * 38.4/19.2 Mhz. 0xFFFF = use FW default
	 */
	__le16 m_divider_fref_set_1;
	/*
	 * The M divider used in COEX PLL swallowing mechanism for Fref of
	 * 26/52 Mhz. 0xFFFF = use FW default
	 */
	__le16 m_divider_fref_set_2;
	/*
	 * The time duration in uSec required for COEX PLL to stabilize.
	 * 0xFFFFFFFF = use FW default
	 */
	__le32 coex_pll_stabilization_time;
	/*
	 * The time duration in uSec required for LDO to stabilize.
	 * 0xFFFFFFFF = use FW default
	 */
	__le16 ldo_stabilization_time;
	/*
	 * The disturbed frequency band margin around the disturbed frequency
	 * center (single sided).
	 * For example, if 2 is configured, the following channels will be
	 * considered disturbed channel:
	 *   80 +- 0.1 MHz, 91 +- 0.1 MHz, 98 +- 0.1 MHz, 102 +- 0.1 MH
	 * 0xFF = use FW default
	 */
	u8 fm_disturbed_band_margin;
	/*
	 * The swallow clock difference of the swallowing mechanism.
	 * 0xFF = use FW default
	 */
	u8 swallow_clk_diff;
} __packed;

886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909
#define ACX_RATE_MGMT_ALL_PARAMS 0xff
struct wl12xx_acx_set_rate_mgmt_params {
	struct acx_header header;

	u8 index; /* 0xff to configure all params */
	u8 padding1;
	__le16 rate_retry_score;
	__le16 per_add;
	__le16 per_th1;
	__le16 per_th2;
	__le16 max_per;
	u8 inverse_curiosity_factor;
	u8 tx_fail_low_th;
	u8 tx_fail_high_th;
	u8 per_alpha_shift;
	u8 per_add_shift;
	u8 per_beta1_shift;
	u8 per_beta2_shift;
	u8 rate_check_up;
	u8 rate_check_down;
	u8 rate_retry_policy[ACX_RATE_MGMT_NUM_OF_RATES];
	u8 padding2[2];
} __packed;

910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926
struct wl12xx_acx_config_hangover {
	struct acx_header header;

	__le32 recover_time;
	u8 hangover_period;
	u8 dynamic_mode;
	u8 early_termination_mode;
	u8 max_period;
	u8 min_period;
	u8 increase_delta;
	u8 decrease_delta;
	u8 quiet_time;
	u8 increase_time;
	u8 window_size;
	u8 padding[2];
} __packed;

927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952

struct acx_default_rx_filter {
	struct acx_header header;
	u8 enable;

	/* action of type FILTER_XXX */
	u8 default_action;

	u8 pad[2];
} __packed;


struct acx_rx_filter_cfg {
	struct acx_header header;

	u8 enable;

	/* 0 - WL1271_MAX_RX_FILTERS-1 */
	u8 index;

	u8 action;

	u8 num_fields;
	u8 fields[0];
} __packed;

L
Luciano Coelho 已提交
953
enum {
954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022
	ACX_WAKE_UP_CONDITIONS           = 0x0000,
	ACX_MEM_CFG                      = 0x0001,
	ACX_SLOT                         = 0x0002,
	ACX_AC_CFG                       = 0x0003,
	ACX_MEM_MAP                      = 0x0004,
	ACX_AID                          = 0x0005,
	ACX_MEDIUM_USAGE                 = 0x0006,
	ACX_STATISTICS                   = 0x0007,
	ACX_PWR_CONSUMPTION_STATISTICS   = 0x0008,
	ACX_TID_CFG                      = 0x0009,
	ACX_PS_RX_STREAMING              = 0x000A,
	ACX_BEACON_FILTER_OPT            = 0x000B,
	ACX_NOISE_HIST                   = 0x000C,
	ACX_HDK_VERSION                  = 0x000D,
	ACX_PD_THRESHOLD                 = 0x000E,
	ACX_TX_CONFIG_OPT                = 0x000F,
	ACX_CCA_THRESHOLD                = 0x0010,
	ACX_EVENT_MBOX_MASK              = 0x0011,
	ACX_CONN_MONIT_PARAMS            = 0x0012,
	ACX_DISABLE_BROADCASTS           = 0x0013,
	ACX_BCN_DTIM_OPTIONS             = 0x0014,
	ACX_SG_ENABLE                    = 0x0015,
	ACX_SG_CFG                       = 0x0016,
	ACX_FM_COEX_CFG                  = 0x0017,
	ACX_BEACON_FILTER_TABLE          = 0x0018,
	ACX_ARP_IP_FILTER                = 0x0019,
	ACX_ROAMING_STATISTICS_TBL       = 0x001A,
	ACX_RATE_POLICY                  = 0x001B,
	ACX_CTS_PROTECTION               = 0x001C,
	ACX_SLEEP_AUTH                   = 0x001D,
	ACX_PREAMBLE_TYPE                = 0x001E,
	ACX_ERROR_CNT                    = 0x001F,
	ACX_IBSS_FILTER                  = 0x0020,
	ACX_SERVICE_PERIOD_TIMEOUT       = 0x0021,
	ACX_TSF_INFO                     = 0x0022,
	ACX_CONFIG_PS_WMM                = 0x0023,
	ACX_ENABLE_RX_DATA_FILTER        = 0x0024,
	ACX_SET_RX_DATA_FILTER           = 0x0025,
	ACX_GET_DATA_FILTER_STATISTICS   = 0x0026,
	ACX_RX_CONFIG_OPT                = 0x0027,
	ACX_FRAG_CFG                     = 0x0028,
	ACX_BET_ENABLE                   = 0x0029,
	ACX_RSSI_SNR_TRIGGER             = 0x002A,
	ACX_RSSI_SNR_WEIGHTS             = 0x002B,
	ACX_KEEP_ALIVE_MODE              = 0x002C,
	ACX_SET_KEEP_ALIVE_CONFIG        = 0x002D,
	ACX_BA_SESSION_INIT_POLICY       = 0x002E,
	ACX_BA_SESSION_RX_SETUP          = 0x002F,
	ACX_PEER_HT_CAP                  = 0x0030,
	ACX_HT_BSS_OPERATION             = 0x0031,
	ACX_COEX_ACTIVITY                = 0x0032,
	ACX_BURST_MODE                   = 0x0033,
	ACX_SET_RATE_MGMT_PARAMS         = 0x0034,
	ACX_GET_RATE_MGMT_PARAMS         = 0x0035,
	ACX_SET_RATE_ADAPT_PARAMS        = 0x0036,
	ACX_SET_DCO_ITRIM_PARAMS         = 0x0037,
	ACX_GEN_FW_CMD                   = 0x0038,
	ACX_HOST_IF_CFG_BITMAP           = 0x0039,
	ACX_MAX_TX_FAILURE               = 0x003A,
	ACX_UPDATE_INCONNECTION_STA_LIST = 0x003B,
	DOT11_RX_MSDU_LIFE_TIME          = 0x003C,
	DOT11_CUR_TX_PWR                 = 0x003D,
	DOT11_RTS_THRESHOLD              = 0x003E,
	DOT11_GROUP_ADDRESS_TBL          = 0x003F,
	ACX_PM_CONFIG                    = 0x0040,
	ACX_CONFIG_PS                    = 0x0041,
	ACX_CONFIG_HANGOVER              = 0x0042,
	ACX_FEATURE_CFG                  = 0x0043,
	ACX_PROTECTION_CFG               = 0x0044,
1023
	ACX_CHECKSUM_CONFIG              = 0x0045,
L
Luciano Coelho 已提交
1024 1025 1026
};


E
Eliad Peller 已提交
1027
int wl1271_acx_wake_up_conditions(struct wl1271 *wl,
1028 1029
				  struct wl12xx_vif *wlvif,
				  u8 wake_up_event, u8 listen_interval);
L
Luciano Coelho 已提交
1030
int wl1271_acx_sleep_auth(struct wl1271 *wl, u8 sleep_auth);
E
Eliad Peller 已提交
1031 1032 1033
int wl1271_acx_tx_power(struct wl1271 *wl, struct wl12xx_vif *wlvif,
			int power);
int wl1271_acx_feature_cfg(struct wl1271 *wl, struct wl12xx_vif *wlvif);
L
Luciano Coelho 已提交
1034 1035
int wl1271_acx_mem_map(struct wl1271 *wl,
		       struct acx_header *mem_map, size_t len);
1036
int wl1271_acx_rx_msdu_life_time(struct wl1271 *wl);
E
Eliad Peller 已提交
1037 1038 1039 1040 1041 1042 1043 1044
int wl1271_acx_slot(struct wl1271 *wl, struct wl12xx_vif *wlvif,
		    enum acx_slot_type slot_time);
int wl1271_acx_group_address_tbl(struct wl1271 *wl, struct wl12xx_vif *wlvif,
				 bool enable, void *mc_list, u32 mc_list_len);
int wl1271_acx_service_period_timeout(struct wl1271 *wl,
				      struct wl12xx_vif *wlvif);
int wl1271_acx_rts_threshold(struct wl1271 *wl, struct wl12xx_vif *wlvif,
			     u32 rts_threshold);
1045
int wl1271_acx_dco_itrim_params(struct wl1271 *wl);
E
Eliad Peller 已提交
1046 1047 1048 1049 1050 1051
int wl1271_acx_beacon_filter_opt(struct wl1271 *wl, struct wl12xx_vif *wlvif,
				 bool enable_filter);
int wl1271_acx_beacon_filter_table(struct wl1271 *wl,
				   struct wl12xx_vif *wlvif);
int wl1271_acx_conn_monit_params(struct wl1271 *wl, struct wl12xx_vif *wlvif,
				 bool enable);
1052
int wl1271_acx_sg_enable(struct wl1271 *wl, bool enable);
1053
int wl12xx_acx_sg_cfg(struct wl1271 *wl);
L
Luciano Coelho 已提交
1054
int wl1271_acx_cca_threshold(struct wl1271 *wl);
E
Eliad Peller 已提交
1055 1056
int wl1271_acx_bcn_dtim_options(struct wl1271 *wl, struct wl12xx_vif *wlvif);
int wl1271_acx_aid(struct wl1271 *wl, struct wl12xx_vif *wlvif, u16 aid);
L
Luciano Coelho 已提交
1057
int wl1271_acx_event_mbox_mask(struct wl1271 *wl, u32 event_mask);
E
Eliad Peller 已提交
1058 1059 1060
int wl1271_acx_set_preamble(struct wl1271 *wl, struct wl12xx_vif *wlvif,
			    enum acx_preamble_type preamble);
int wl1271_acx_cts_protect(struct wl1271 *wl, struct wl12xx_vif *wlvif,
1061
			   enum acx_ctsprotect_type ctsprotect);
1062
int wl1271_acx_statistics(struct wl1271 *wl, void *stats);
E
Eliad Peller 已提交
1063
int wl1271_acx_sta_rate_policies(struct wl1271 *wl, struct wl12xx_vif *wlvif);
1064 1065
int wl1271_acx_ap_rate_policy(struct wl1271 *wl, struct conf_tx_rate_class *c,
		      u8 idx);
E
Eliad Peller 已提交
1066 1067 1068 1069
int wl1271_acx_ac_cfg(struct wl1271 *wl, struct wl12xx_vif *wlvif,
		      u8 ac, u8 cw_min, u16 cw_max, u8 aifsn, u16 txop);
int wl1271_acx_tid_cfg(struct wl1271 *wl, struct wl12xx_vif *wlvif,
		       u8 queue_id, u8 channel_type,
1070 1071
		       u8 tsid, u8 ps_scheme, u8 ack_policy,
		       u32 apsd_conf0, u32 apsd_conf1);
1072
int wl1271_acx_frag_threshold(struct wl1271 *wl, u32 frag_threshold);
L
Luciano Coelho 已提交
1073
int wl1271_acx_tx_config_options(struct wl1271 *wl);
E
Eliad Peller 已提交
1074
int wl12xx_acx_mem_cfg(struct wl1271 *wl);
L
Luciano Coelho 已提交
1075 1076
int wl1271_acx_init_mem_config(struct wl1271 *wl);
int wl1271_acx_init_rx_interrupt(struct wl1271 *wl);
J
Juuso Oikarinen 已提交
1077
int wl1271_acx_smart_reflex(struct wl1271 *wl);
E
Eliad Peller 已提交
1078 1079 1080 1081
int wl1271_acx_bet_enable(struct wl1271 *wl, struct wl12xx_vif *wlvif,
			  bool enable);
int wl1271_acx_arp_ip_filter(struct wl1271 *wl, struct wl12xx_vif *wlvif,
			     u8 enable, __be32 address);
1082
int wl1271_acx_pm_config(struct wl1271 *wl);
E
Eliad Peller 已提交
1083 1084 1085 1086 1087 1088 1089 1090
int wl1271_acx_keep_alive_mode(struct wl1271 *wl, struct wl12xx_vif *vif,
			       bool enable);
int wl1271_acx_keep_alive_config(struct wl1271 *wl, struct wl12xx_vif *wlvif,
				 u8 index, u8 tpl_valid);
int wl1271_acx_rssi_snr_trigger(struct wl1271 *wl, struct wl12xx_vif *wlvif,
				bool enable, s16 thold, u8 hyst);
int wl1271_acx_rssi_snr_avg_weights(struct wl1271 *wl,
				    struct wl12xx_vif *wlvif);
S
Shahar Levi 已提交
1091 1092
int wl1271_acx_set_ht_capabilities(struct wl1271 *wl,
				    struct ieee80211_sta_ht_cap *ht_cap,
1093
				    bool allow_ht_operation, u8 hlid);
S
Shahar Levi 已提交
1094
int wl1271_acx_set_ht_information(struct wl1271 *wl,
E
Eliad Peller 已提交
1095
				   struct wl12xx_vif *wlvif,
S
Shahar Levi 已提交
1096
				   u16 ht_operation_mode);
E
Eliad Peller 已提交
1097 1098
int wl12xx_acx_set_ba_initiator_policy(struct wl1271 *wl,
				       struct wl12xx_vif *wlvif);
1099 1100
int wl12xx_acx_set_ba_receiver_session(struct wl1271 *wl, u8 tid_index,
				       u16 ssn, bool enable, u8 peer_hlid);
1101 1102
int wl12xx_acx_tsf_info(struct wl1271 *wl, struct wl12xx_vif *wlvif,
			u64 *mactime);
E
Eliad Peller 已提交
1103 1104
int wl1271_acx_ps_rx_streaming(struct wl1271 *wl, struct wl12xx_vif *wlvif,
			       bool enable);
E
Eliad Peller 已提交
1105
int wl1271_acx_ap_max_tx_retry(struct wl1271 *wl, struct wl12xx_vif *wlvif);
E
Eliad Peller 已提交
1106
int wl12xx_acx_config_ps(struct wl1271 *wl, struct wl12xx_vif *wlvif);
1107
int wl1271_acx_set_inconnection_sta(struct wl1271 *wl, u8 *addr);
S
Shahar Levi 已提交
1108
int wl1271_acx_fm_coex(struct wl1271 *wl);
1109
int wl12xx_acx_set_rate_mgmt_params(struct wl1271 *wl);
1110
int wl12xx_acx_config_hangover(struct wl1271 *wl);
1111 1112

#ifdef CONFIG_PM
1113 1114 1115 1116
int wl1271_acx_default_rx_filter_enable(struct wl1271 *wl, bool enable,
					enum rx_filter_action action);
int wl1271_acx_set_rx_filter(struct wl1271 *wl, u8 index, bool enable,
			     struct wl12xx_rx_filter *filter);
1117
#endif /* CONFIG_PM */
L
Luciano Coelho 已提交
1118
#endif /* __WL1271_ACX_H__ */