acx.h 32.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

S
Shahar Levi 已提交
28 29
#include "wl12xx.h"
#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 54 55 56 57 58 59 60 61 62 63
#define WL1271_ACX_INTR_TRACE_B            BIT(8)

#define WL1271_ACX_INTR_ALL		   0xFFFFFFFF
#define WL1271_ACX_ALL_EVENTS_VECTOR       (WL1271_ACX_INTR_WATCHDOG      | \
					    WL1271_ACX_INTR_INIT_COMPLETE | \
					    WL1271_ACX_INTR_EVENT_A       | \
					    WL1271_ACX_INTR_EVENT_B       | \
					    WL1271_ACX_INTR_CMD_COMPLETE  | \
					    WL1271_ACX_INTR_HW_AVAILABLE  | \
					    WL1271_ACX_INTR_DATA)

64 65
#define WL1271_INTR_MASK                   (WL1271_ACX_INTR_WATCHDOG     | \
					    WL1271_ACX_INTR_EVENT_A      | \
66 67
					    WL1271_ACX_INTR_EVENT_B      | \
					    WL1271_ACX_INTR_HW_AVAILABLE | \
L
Luciano Coelho 已提交
68 69 70 71 72 73 74
					    WL1271_ACX_INTR_DATA)

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

	/* acx (or information element) header */
L
Luciano Coelho 已提交
75
	__le16 id;
L
Luciano Coelho 已提交
76 77

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

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 已提交
87
	__le32 PLCP_error;
L
Luciano Coelho 已提交
88 89 90 91

	/* 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 已提交
92
	__le32 FCS_error;
L
Luciano Coelho 已提交
93 94 95 96

	/* 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 已提交
97
	__le32 valid_frame;
L
Luciano Coelho 已提交
98 99 100

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

E
Eliad Peller 已提交
104 105 106 107 108 109 110 111 112 113 114
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 已提交
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
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];
135
} __packed;
L
Luciano Coelho 已提交
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 168 169 170

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 已提交
171
	__le32 lifetime;
172
} __packed;
L
Luciano Coelho 已提交
173 174 175 176 177 178 179 180 181 182 183 184 185

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 已提交
186
	u8 role_id;
L
Luciano Coelho 已提交
187 188
	u8 wone_index; /* Reserved */
	u8 slot_time;
E
Eliad Peller 已提交
189
	u8 reserved[5];
190
} __packed;
L
Luciano Coelho 已提交
191 192


193 194
#define ACX_MC_ADDRESS_GROUP_MAX	(8)
#define ADDRESS_GROUP_MAX_LEN	        (ETH_ALEN * ACX_MC_ADDRESS_GROUP_MAX)
L
Luciano Coelho 已提交
195 196 197 198

struct acx_dot11_grp_addr_tbl {
	struct acx_header header;

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

struct acx_rx_timeout {
	struct acx_header header;

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

struct acx_rts_threshold {
	struct acx_header header;

E
Eliad Peller 已提交
219 220
	u8 role_id;
	u8 reserved;
L
Luciano Coelho 已提交
221
	__le16 threshold;
222
} __packed;
L
Luciano Coelho 已提交
223 224 225 226

struct acx_beacon_filter_option {
	struct acx_header header;

E
Eliad Peller 已提交
227
	u8 role_id;
L
Luciano Coelho 已提交
228 229 230 231 232 233 234 235 236
	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 已提交
237
	u8 pad[1];
238
} __packed;
L
Luciano Coelho 已提交
239 240 241 242 243

/*
 * ACXBeaconFilterEntry (not 221)
 * Byte Offset     Size (Bytes)    Definition
 * ===========     ============    ==========
244
 * 0               1               IE identifier
L
Luciano Coelho 已提交
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 273 274 275
 * 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 已提交
276
	u8 role_id;
L
Luciano Coelho 已提交
277
	u8 num_ie;
E
Eliad Peller 已提交
278
	u8 pad[2];
279
	u8 table[BEACON_FILTER_TABLE_MAX_SIZE];
280
} __packed;
L
Luciano Coelho 已提交
281

282 283 284
struct acx_conn_monit_params {
       struct acx_header header;

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

L
Luciano Coelho 已提交
291 292 293 294 295
struct acx_bt_wlan_coex {
	struct acx_header header;

	u8 enable;
	u8 pad[3];
296
} __packed;
L
Luciano Coelho 已提交
297

298
struct acx_bt_wlan_coex_param {
299 300
	struct acx_header header;

301
	__le32 params[CONF_SG_PARAMS_MAX];
302
	u8 param_idx;
303
	u8 padding[3];
304
} __packed;
305

306
struct acx_dco_itrim_params {
L
Luciano Coelho 已提交
307 308
	struct acx_header header;

309
	u8 enable;
310
	u8 padding[3];
311
	__le32 timeout;
312
} __packed;
L
Luciano Coelho 已提交
313 314 315 316 317

struct acx_energy_detection {
	struct acx_header header;

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

struct acx_beacon_broadcast {
	struct acx_header header;

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

E
Eliad Peller 已提交
330 331 332
	__le16 beacon_rx_timeout;
	__le16 broadcast_timeout;

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

struct acx_event_mask {
	struct acx_header header;

L
Luciano Coelho 已提交
341 342
	__le32 event_mask;
	__le32 high_event_mask; /* Unused */
343
} __packed;
L
Luciano Coelho 已提交
344 345 346 347 348 349

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

350 351 352 353
/* When set, disable HW encryption */
#define DF_ENCRYPTION_DISABLE      0x01
#define DF_SNIFF_MODE_ENABLE       0x80

L
Luciano Coelho 已提交
354 355 356
struct acx_feature_config {
	struct acx_header header;

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

struct acx_current_tx_power {
	struct acx_header header;

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

struct acx_wake_up_condition {
	struct acx_header header;

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

struct acx_aid {
	struct acx_header header;

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

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 已提交
403
	u8 role_id;
L
Luciano Coelho 已提交
404
	u8 preamble;
E
Eliad Peller 已提交
405
	u8 padding[2];
406
} __packed;
L
Luciano Coelho 已提交
407 408 409 410 411 412 413 414

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

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

struct acx_tx_statistics {
L
Luciano Coelho 已提交
421
	__le32 internal_desc_overflow;
422
}  __packed;
L
Luciano Coelho 已提交
423 424

struct acx_rx_statistics {
L
Luciano Coelho 已提交
425 426 427 428 429 430 431 432
	__le32 out_of_mem;
	__le32 hdr_overflow;
	__le32 hw_stuck;
	__le32 dropped;
	__le32 fcs_err;
	__le32 xfr_hint_trig;
	__le32 path_reset;
	__le32 reset_counter;
433
} __packed;
L
Luciano Coelho 已提交
434 435

struct acx_dma_statistics {
L
Luciano Coelho 已提交
436 437 438 439
	__le32 rx_requested;
	__le32 rx_errors;
	__le32 tx_requested;
	__le32 tx_errors;
440
}  __packed;
L
Luciano Coelho 已提交
441 442 443

struct acx_isr_statistics {
	/* host command complete */
L
Luciano Coelho 已提交
444
	__le32 cmd_cmplt;
L
Luciano Coelho 已提交
445 446

	/* fiqisr() */
L
Luciano Coelho 已提交
447
	__le32 fiqs;
L
Luciano Coelho 已提交
448 449

	/* (INT_STS_ND & INT_TRIG_RX_HEADER) */
L
Luciano Coelho 已提交
450
	__le32 rx_headers;
L
Luciano Coelho 已提交
451 452

	/* (INT_STS_ND & INT_TRIG_RX_CMPLT) */
L
Luciano Coelho 已提交
453
	__le32 rx_completes;
L
Luciano Coelho 已提交
454 455

	/* (INT_STS_ND & INT_TRIG_NO_RX_BUF) */
L
Luciano Coelho 已提交
456
	__le32 rx_mem_overflow;
L
Luciano Coelho 已提交
457 458

	/* (INT_STS_ND & INT_TRIG_S_RX_RDY) */
L
Luciano Coelho 已提交
459
	__le32 rx_rdys;
L
Luciano Coelho 已提交
460 461

	/* irqisr() */
L
Luciano Coelho 已提交
462
	__le32 irqs;
L
Luciano Coelho 已提交
463 464

	/* (INT_STS_ND & INT_TRIG_TX_PROC) */
L
Luciano Coelho 已提交
465
	__le32 tx_procs;
L
Luciano Coelho 已提交
466 467

	/* (INT_STS_ND & INT_TRIG_DECRYPT_DONE) */
L
Luciano Coelho 已提交
468
	__le32 decrypt_done;
L
Luciano Coelho 已提交
469 470

	/* (INT_STS_ND & INT_TRIG_DMA0) */
L
Luciano Coelho 已提交
471
	__le32 dma0_done;
L
Luciano Coelho 已提交
472 473

	/* (INT_STS_ND & INT_TRIG_DMA1) */
L
Luciano Coelho 已提交
474
	__le32 dma1_done;
L
Luciano Coelho 已提交
475 476

	/* (INT_STS_ND & INT_TRIG_TX_EXC_CMPLT) */
L
Luciano Coelho 已提交
477
	__le32 tx_exch_complete;
L
Luciano Coelho 已提交
478 479

	/* (INT_STS_ND & INT_TRIG_COMMAND) */
L
Luciano Coelho 已提交
480
	__le32 commands;
L
Luciano Coelho 已提交
481 482

	/* (INT_STS_ND & INT_TRIG_RX_PROC) */
L
Luciano Coelho 已提交
483
	__le32 rx_procs;
L
Luciano Coelho 已提交
484 485

	/* (INT_STS_ND & INT_TRIG_PM_802) */
L
Luciano Coelho 已提交
486
	__le32 hw_pm_mode_changes;
L
Luciano Coelho 已提交
487 488

	/* (INT_STS_ND & INT_TRIG_ACKNOWLEDGE) */
L
Luciano Coelho 已提交
489
	__le32 host_acknowledges;
L
Luciano Coelho 已提交
490 491

	/* (INT_STS_ND & INT_TRIG_PM_PCI) */
L
Luciano Coelho 已提交
492
	__le32 pci_pm;
L
Luciano Coelho 已提交
493 494

	/* (INT_STS_ND & INT_TRIG_ACM_WAKEUP) */
L
Luciano Coelho 已提交
495
	__le32 wakeups;
L
Luciano Coelho 已提交
496 497

	/* (INT_STS_ND & INT_TRIG_LOW_RSSI) */
L
Luciano Coelho 已提交
498
	__le32 low_rssi;
499
} __packed;
L
Luciano Coelho 已提交
500 501 502

struct acx_wep_statistics {
	/* WEP address keys configured */
L
Luciano Coelho 已提交
503
	__le32 addr_key_count;
L
Luciano Coelho 已提交
504 505

	/* default keys configured */
L
Luciano Coelho 已提交
506
	__le32 default_key_count;
L
Luciano Coelho 已提交
507

L
Luciano Coelho 已提交
508
	__le32 reserved;
L
Luciano Coelho 已提交
509 510

	/* number of times that WEP key not found on lookup */
L
Luciano Coelho 已提交
511
	__le32 key_not_found;
L
Luciano Coelho 已提交
512 513

	/* number of times that WEP key decryption failed */
L
Luciano Coelho 已提交
514
	__le32 decrypt_fail;
L
Luciano Coelho 已提交
515 516

	/* WEP packets decrypted */
L
Luciano Coelho 已提交
517
	__le32 packets;
L
Luciano Coelho 已提交
518 519

	/* WEP decrypt interrupts */
L
Luciano Coelho 已提交
520
	__le32 interrupt;
521
} __packed;
L
Luciano Coelho 已提交
522 523 524 525 526

#define ACX_MISSED_BEACONS_SPREAD 10

struct acx_pwr_statistics {
	/* the amount of enters into power save mode (both PD & ELP) */
L
Luciano Coelho 已提交
527
	__le32 ps_enter;
L
Luciano Coelho 已提交
528 529

	/* the amount of enters into ELP mode */
L
Luciano Coelho 已提交
530
	__le32 elp_enter;
L
Luciano Coelho 已提交
531 532

	/* the amount of missing beacon interrupts to the host */
L
Luciano Coelho 已提交
533
	__le32 missing_bcns;
L
Luciano Coelho 已提交
534 535

	/* the amount of wake on host-access times */
L
Luciano Coelho 已提交
536
	__le32 wake_on_host;
L
Luciano Coelho 已提交
537 538

	/* the amount of wake on timer-expire */
L
Luciano Coelho 已提交
539
	__le32 wake_on_timer_exp;
L
Luciano Coelho 已提交
540 541

	/* the number of packets that were transmitted with PS bit set */
L
Luciano Coelho 已提交
542
	__le32 tx_with_ps;
L
Luciano Coelho 已提交
543 544

	/* the number of packets that were transmitted with PS bit clear */
L
Luciano Coelho 已提交
545
	__le32 tx_without_ps;
L
Luciano Coelho 已提交
546 547

	/* the number of received beacons */
L
Luciano Coelho 已提交
548
	__le32 rcvd_beacons;
L
Luciano Coelho 已提交
549 550

	/* the number of entering into PowerOn (power save off) */
L
Luciano Coelho 已提交
551
	__le32 power_save_off;
L
Luciano Coelho 已提交
552 553

	/* the number of entries into power save mode */
L
Luciano Coelho 已提交
554
	__le16 enable_ps;
L
Luciano Coelho 已提交
555 556 557 558 559

	/*
	 * the number of exits from power save, not including failed PS
	 * transitions
	 */
L
Luciano Coelho 已提交
560
	__le16 disable_ps;
L
Luciano Coelho 已提交
561 562 563 564 565

	/*
	 * the number of times the TSF counter was adjusted because
	 * of drift
	 */
L
Luciano Coelho 已提交
566
	__le32 fix_tsf_ps;
L
Luciano Coelho 已提交
567 568 569 570 571 572 573 574 575 576

	/* Gives statistics about the spread continuous missed beacons.
	 * The 16 LSB are dedicated for the PS mode.
	 * The 16 MSB are dedicated for the PS mode.
	 * cont_miss_bcns_spread[0] - single missed beacon.
	 * cont_miss_bcns_spread[1] - two continuous missed beacons.
	 * cont_miss_bcns_spread[2] - three continuous missed beacons.
	 * ...
	 * cont_miss_bcns_spread[9] - ten and more continuous missed beacons.
	*/
L
Luciano Coelho 已提交
577
	__le32 cont_miss_bcns_spread[ACX_MISSED_BEACONS_SPREAD];
L
Luciano Coelho 已提交
578 579

	/* the number of beacons in awake mode */
L
Luciano Coelho 已提交
580
	__le32 rcvd_awake_beacons;
581
} __packed;
L
Luciano Coelho 已提交
582 583

struct acx_mic_statistics {
L
Luciano Coelho 已提交
584 585
	__le32 rx_pkts;
	__le32 calc_failure;
586
} __packed;
L
Luciano Coelho 已提交
587 588

struct acx_aes_statistics {
L
Luciano Coelho 已提交
589 590 591 592 593 594
	__le32 encrypt_fail;
	__le32 decrypt_fail;
	__le32 encrypt_packets;
	__le32 decrypt_packets;
	__le32 encrypt_interrupt;
	__le32 decrypt_interrupt;
595
} __packed;
L
Luciano Coelho 已提交
596 597

struct acx_event_statistics {
L
Luciano Coelho 已提交
598 599 600 601 602 603 604 605
	__le32 heart_beat;
	__le32 calibration;
	__le32 rx_mismatch;
	__le32 rx_mem_empty;
	__le32 rx_pool;
	__le32 oom_late;
	__le32 phy_transmit_error;
	__le32 tx_stuck;
606
} __packed;
L
Luciano Coelho 已提交
607 608

struct acx_ps_statistics {
L
Luciano Coelho 已提交
609 610 611 612 613 614 615
	__le32 pspoll_timeouts;
	__le32 upsd_timeouts;
	__le32 upsd_max_sptime;
	__le32 upsd_max_apturn;
	__le32 pspoll_max_apturn;
	__le32 pspoll_utilization;
	__le32 upsd_utilization;
616
} __packed;
L
Luciano Coelho 已提交
617 618

struct acx_rxpipe_statistics {
L
Luciano Coelho 已提交
619 620 621 622 623
	__le32 rx_prep_beacon_drop;
	__le32 descr_host_int_trig_rx_data;
	__le32 beacon_buffer_thres_host_int_trig_rx_data;
	__le32 missed_beacon_host_int_trig_rx_data;
	__le32 tx_xfr_host_int_trig_rx_data;
624
} __packed;
L
Luciano Coelho 已提交
625 626 627 628 629 630 631 632 633 634 635 636 637 638 639

struct acx_statistics {
	struct acx_header header;

	struct acx_tx_statistics tx;
	struct acx_rx_statistics rx;
	struct acx_dma_statistics dma;
	struct acx_isr_statistics isr;
	struct acx_wep_statistics wep;
	struct acx_pwr_statistics pwr;
	struct acx_aes_statistics aes;
	struct acx_mic_statistics mic;
	struct acx_event_statistics event;
	struct acx_ps_statistics ps;
	struct acx_rxpipe_statistics rxpipe;
640
} __packed;
L
Luciano Coelho 已提交
641 642

struct acx_rate_class {
L
Luciano Coelho 已提交
643
	__le32 enabled_rates;
L
Luciano Coelho 已提交
644 645 646 647 648 649
	u8 short_retry_limit;
	u8 long_retry_limit;
	u8 aflags;
	u8 reserved;
};

E
Eliad Peller 已提交
650
struct acx_rate_policy {
651 652 653 654 655 656
	struct acx_header header;

	__le32 rate_policy_idx;
	struct acx_rate_class rate_policy;
} __packed;

L
Luciano Coelho 已提交
657 658
struct acx_ac_cfg {
	struct acx_header header;
E
Eliad Peller 已提交
659
	u8 role_id;
L
Luciano Coelho 已提交
660
	u8 ac;
E
Eliad Peller 已提交
661
	u8 aifsn;
L
Luciano Coelho 已提交
662
	u8 cw_min;
L
Luciano Coelho 已提交
663 664
	__le16 cw_max;
	__le16 tx_op_limit;
665
} __packed;
L
Luciano Coelho 已提交
666 667 668

struct acx_tid_config {
	struct acx_header header;
E
Eliad Peller 已提交
669
	u8 role_id;
L
Luciano Coelho 已提交
670 671 672 673 674
	u8 queue_id;
	u8 channel_type;
	u8 tsid;
	u8 ps_scheme;
	u8 ack_policy;
E
Eliad Peller 已提交
675
	u8 padding[2];
L
Luciano Coelho 已提交
676
	__le32 apsd_conf[2];
677
} __packed;
L
Luciano Coelho 已提交
678 679 680

struct acx_frag_threshold {
	struct acx_header header;
L
Luciano Coelho 已提交
681
	__le16 frag_threshold;
L
Luciano Coelho 已提交
682
	u8 padding[2];
683
} __packed;
L
Luciano Coelho 已提交
684 685 686

struct acx_tx_config_options {
	struct acx_header header;
L
Luciano Coelho 已提交
687 688
	__le16 tx_compl_timeout;     /* msec */
	__le16 tx_compl_threshold;   /* number of packets */
689
} __packed;
L
Luciano Coelho 已提交
690

E
Eliad Peller 已提交
691
struct wl12xx_acx_config_memory {
692 693 694 695 696 697 698 699 700 701 702
	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;
703 704
	u8 fwlog_blocks;
	u8 padding[3];
705 706
} __packed;

L
Luciano Coelho 已提交
707 708 709
struct wl1271_acx_mem_map {
	struct acx_header header;

L
Luciano Coelho 已提交
710 711
	__le32 code_start;
	__le32 code_end;
L
Luciano Coelho 已提交
712

L
Luciano Coelho 已提交
713 714
	__le32 wep_defkey_start;
	__le32 wep_defkey_end;
L
Luciano Coelho 已提交
715

L
Luciano Coelho 已提交
716 717
	__le32 sta_table_start;
	__le32 sta_table_end;
L
Luciano Coelho 已提交
718

L
Luciano Coelho 已提交
719 720
	__le32 packet_template_start;
	__le32 packet_template_end;
L
Luciano Coelho 已提交
721 722

	/* Address of the TX result interface (control block) */
L
Luciano Coelho 已提交
723 724
	__le32 tx_result;
	__le32 tx_result_queue_start;
L
Luciano Coelho 已提交
725

L
Luciano Coelho 已提交
726 727
	__le32 queue_memory_start;
	__le32 queue_memory_end;
L
Luciano Coelho 已提交
728

L
Luciano Coelho 已提交
729 730
	__le32 packet_memory_pool_start;
	__le32 packet_memory_pool_end;
L
Luciano Coelho 已提交
731

L
Luciano Coelho 已提交
732 733
	__le32 debug_buffer1_start;
	__le32 debug_buffer1_end;
L
Luciano Coelho 已提交
734

L
Luciano Coelho 已提交
735 736
	__le32 debug_buffer2_start;
	__le32 debug_buffer2_end;
L
Luciano Coelho 已提交
737 738

	/* Number of blocks FW allocated for TX packets */
L
Luciano Coelho 已提交
739
	__le32 num_tx_mem_blocks;
L
Luciano Coelho 已提交
740 741

	/* Number of blocks FW allocated for RX packets */
L
Luciano Coelho 已提交
742
	__le32 num_rx_mem_blocks;
L
Luciano Coelho 已提交
743 744 745 746

	/* the following 4 fields are valid in SLAVE mode only */
	u8 *tx_cbuf;
	u8 *rx_cbuf;
L
Luciano Coelho 已提交
747 748
	__le32 rx_ctrl;
	__le32 tx_ctrl;
749
} __packed;
L
Luciano Coelho 已提交
750 751 752 753

struct wl1271_acx_rx_config_opt {
	struct acx_header header;

L
Luciano Coelho 已提交
754 755 756
	__le16 mblk_threshold;
	__le16 threshold;
	__le16 timeout;
L
Luciano Coelho 已提交
757 758
	u8 queue_type;
	u8 reserved;
759
} __packed;
L
Luciano Coelho 已提交
760

761 762 763 764

struct wl1271_acx_bet_enable {
	struct acx_header header;

E
Eliad Peller 已提交
765
	u8 role_id;
766 767
	u8 enable;
	u8 max_consecutive;
E
Eliad Peller 已提交
768
	u8 padding[1];
769
} __packed;
770

771 772 773
#define ACX_IPV4_VERSION 4
#define ACX_IPV6_VERSION 6
#define ACX_IPV4_ADDR_SIZE 4
E
Eliad Peller 已提交
774 775 776 777 778

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

779 780
struct wl1271_acx_arp_filter {
	struct acx_header header;
E
Eliad Peller 已提交
781
	u8 role_id;
782
	u8 version;         /* ACX_IPV4_VERSION, ACX_IPV6_VERSION */
E
Eliad Peller 已提交
783
	u8 enable;          /* bitmap of enabled ARP filtering features */
E
Eliad Peller 已提交
784
	u8 padding[1];
785 786 787 788
	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. */
789
} __packed;
790

791 792 793 794 795 796
struct wl1271_acx_pm_config {
	struct acx_header header;

	__le32 host_clk_settling_time;
	u8 host_fast_wakeup_support;
	u8 padding[3];
797
} __packed;
798

799 800 801
struct wl1271_acx_keep_alive_mode {
	struct acx_header header;

E
Eliad Peller 已提交
802
	u8 role_id;
803
	u8 enabled;
E
Eliad Peller 已提交
804
	u8 padding[2];
805
} __packed;
806 807 808 809 810 811 812 813 814 815 816 817 818 819

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 已提交
820
	u8 role_id;
821 822 823
	u8 index;
	u8 tpl_validation;
	u8 trigger;
E
Eliad Peller 已提交
824
	__le32 period;
825
} __packed;
826

827 828 829 830 831 832 833 834 835 836
#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)

struct wl1271_acx_host_config_bitmap {
	struct acx_header header;

	__le32 host_cfg_bitmap;
} __packed;

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
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 已提交
868
	u8 role_id;
869 870 871
	u8 metric;
	u8 type;
	u8 dir;
E
Eliad Peller 已提交
872 873
	__le16 threshold;
	__le16 pacing; /* 0 - 60000 ms */
874 875 876
	u8 hysteresis;
	u8 index;
	u8 enable;
E
Eliad Peller 已提交
877
	u8 padding[1];
878 879 880 881 882
};

struct wl1271_acx_rssi_snr_avg_weights {
	struct acx_header header;

E
Eliad Peller 已提交
883 884
	u8 role_id;
	u8 padding[3];
885 886 887 888 889 890
	u8 rssi_beacon;
	u8 rssi_data;
	u8 snr_beacon;
	u8 snr_data;
};

891 892 893 894

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

S
Shahar Levi 已提交
895 896 897 898 899 900 901 902
/*
 * 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;

903
	/* bitmask of capability bits supported by the peer */
S
Shahar Levi 已提交
904 905
	__le32 ht_capabilites;

E
Eliad Peller 已提交
906 907
	/* Indicates to which link these capabilities apply. */
	u8 hlid;
S
Shahar Levi 已提交
908 909 910 911 912 913 914 915 916

	/*
	 * 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 已提交
917 918

	u8 padding;
S
Shahar Levi 已提交
919 920 921 922 923 924 925 926 927
} __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 已提交
928 929
	u8 role_id;

S
Shahar Levi 已提交
930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950
	/* 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 已提交
951
	u8 padding[2];
S
Shahar Levi 已提交
952 953
} __packed;

954
#define RX_BA_MAX_SESSIONS 2
L
Levi, Shahar 已提交
955

956
struct wl1271_acx_ba_initiator_policy {
L
Levi, Shahar 已提交
957
	struct acx_header header;
958 959

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

L
Levi, Shahar 已提交
962
	/*
963 964
	 * Per TID setting for allowing TX BA. Set a bit to 1 to allow
	 * TX BA sessions for the corresponding TID.
L
Levi, Shahar 已提交
965
	 */
966
	u8 tid_bitmap;
L
Levi, Shahar 已提交
967 968

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

971
	u8 padding1[1];
L
Levi, Shahar 已提交
972

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

976
	u8 padding[2];
L
Levi, Shahar 已提交
977 978
} __packed;

L
Levi, Shahar 已提交
979 980 981
struct wl1271_acx_ba_receiver_setup {
	struct acx_header header;

982 983
	/* Specifies link id, range 0-31 */
	u8 hlid;
L
Levi, Shahar 已提交
984 985 986 987 988 989

	u8 tid;

	u8 enable;

	/* Windows size in number of packets */
990
	u8 win_size;
L
Levi, Shahar 已提交
991 992 993

	/* BA session starting sequence number.  RANGE 0-FFF */
	u16 ssn;
994 995

	u8 padding[2];
L
Levi, Shahar 已提交
996 997
} __packed;

998
struct wl12xx_acx_fw_tsf_information {
J
Juuso Oikarinen 已提交
999 1000
	struct acx_header header;

1001 1002
	u8 role_id;
	u8 padding1[3];
J
Juuso Oikarinen 已提交
1003 1004 1005 1006 1007
	__le32 current_tsf_high;
	__le32 current_tsf_low;
	__le32 last_bttt_high;
	__le32 last_tbtt_low;
	u8 last_dtim_count;
1008
	u8 padding2[3];
L
Luciano Coelho 已提交
1009
} __packed;
J
Juuso Oikarinen 已提交
1010

1011 1012 1013
struct wl1271_acx_ps_rx_streaming {
	struct acx_header header;

E
Eliad Peller 已提交
1014
	u8 role_id;
1015 1016 1017 1018 1019 1020 1021 1022
	u8 tid;
	u8 enable;

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

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

1026
struct wl1271_acx_ap_max_tx_retry {
1027 1028
	struct acx_header header;

E
Eliad Peller 已提交
1029 1030 1031
	u8 role_id;
	u8 padding_1;

1032 1033 1034 1035 1036 1037 1038
	/*
	 * the number of frames transmission failures before
	 * issuing the aging event.
	 */
	__le16 max_tx_retry;
} __packed;

1039 1040 1041 1042 1043 1044 1045 1046 1047
struct wl1271_acx_config_ps {
	struct acx_header header;

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

1048 1049 1050 1051 1052 1053 1054
struct wl1271_acx_inconnection_sta {
	struct acx_header header;

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

S
Shahar Levi 已提交
1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113
/*
 * 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;

1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137
#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;

1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154
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;

L
Luciano Coelho 已提交
1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179
enum {
	ACX_WAKE_UP_CONDITIONS      = 0x0002,
	ACX_MEM_CFG                 = 0x0003,
	ACX_SLOT                    = 0x0004,
	ACX_AC_CFG                  = 0x0007,
	ACX_MEM_MAP                 = 0x0008,
	ACX_AID                     = 0x000A,
	ACX_MEDIUM_USAGE            = 0x000F,
	ACX_TX_QUEUE_CFG            = 0x0011, /* FIXME: only used by wl1251 */
	ACX_STATISTICS              = 0x0013, /* Debug API */
	ACX_PWR_CONSUMPTION_STATISTICS = 0x0014,
	ACX_FEATURE_CFG             = 0x0015,
	ACX_TID_CFG                 = 0x001A,
	ACX_PS_RX_STREAMING         = 0x001B,
	ACX_BEACON_FILTER_OPT       = 0x001F,
	ACX_NOISE_HIST              = 0x0021,
	ACX_HDK_VERSION             = 0x0022, /* ??? */
	ACX_PD_THRESHOLD            = 0x0023,
	ACX_TX_CONFIG_OPT           = 0x0024,
	ACX_CCA_THRESHOLD           = 0x0025,
	ACX_EVENT_MBOX_MASK         = 0x0026,
	ACX_CONN_MONIT_PARAMS       = 0x002D,
	ACX_BCN_DTIM_OPTIONS        = 0x0031,
	ACX_SG_ENABLE               = 0x0032,
	ACX_SG_CFG                  = 0x0033,
S
Shahar Levi 已提交
1180
	ACX_FM_COEX_CFG             = 0x0034,
L
Luciano Coelho 已提交
1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199
	ACX_BEACON_FILTER_TABLE     = 0x0038,
	ACX_ARP_IP_FILTER           = 0x0039,
	ACX_ROAMING_STATISTICS_TBL  = 0x003B,
	ACX_RATE_POLICY             = 0x003D,
	ACX_CTS_PROTECTION          = 0x003E,
	ACX_SLEEP_AUTH              = 0x003F,
	ACX_PREAMBLE_TYPE	    = 0x0040,
	ACX_ERROR_CNT               = 0x0041,
	ACX_IBSS_FILTER		    = 0x0044,
	ACX_SERVICE_PERIOD_TIMEOUT  = 0x0045,
	ACX_TSF_INFO                = 0x0046,
	ACX_CONFIG_PS_WMM           = 0x0049,
	ACX_ENABLE_RX_DATA_FILTER   = 0x004A,
	ACX_SET_RX_DATA_FILTER      = 0x004B,
	ACX_GET_DATA_FILTER_STATISTICS = 0x004C,
	ACX_RX_CONFIG_OPT           = 0x004E,
	ACX_FRAG_CFG                = 0x004F,
	ACX_BET_ENABLE              = 0x0050,
	ACX_RSSI_SNR_TRIGGER        = 0x0051,
1200
	ACX_RSSI_SNR_WEIGHTS        = 0x0052,
1201
	ACX_KEEP_ALIVE_MODE         = 0x0053,
L
Luciano Coelho 已提交
1202
	ACX_SET_KEEP_ALIVE_CONFIG   = 0x0054,
1203
	ACX_BA_SESSION_INIT_POLICY  = 0x0055,
L
Levi, Shahar 已提交
1204
	ACX_BA_SESSION_RX_SETUP     = 0x0056,
L
Luciano Coelho 已提交
1205 1206 1207
	ACX_PEER_HT_CAP             = 0x0057,
	ACX_HT_BSS_OPERATION        = 0x0058,
	ACX_COEX_ACTIVITY           = 0x0059,
E
Eliad Peller 已提交
1208 1209 1210
	ACX_BURST_MODE              = 0x005C,
	ACX_SET_RATE_MGMT_PARAMS    = 0x005D,
	ACX_SET_RATE_ADAPT_PARAMS   = 0x0060,
1211
	ACX_SET_DCO_ITRIM_PARAMS    = 0x0061,
1212 1213
	ACX_GEN_FW_CMD              = 0x0070,
	ACX_HOST_IF_CFG_BITMAP      = 0x0071,
1214
	ACX_MAX_TX_FAILURE          = 0x0072,
1215
	ACX_UPDATE_INCONNECTION_STA_LIST = 0x0073,
L
Luciano Coelho 已提交
1216 1217 1218 1219 1220
	DOT11_RX_MSDU_LIFE_TIME     = 0x1004,
	DOT11_CUR_TX_PWR            = 0x100D,
	DOT11_RX_DOT11_MODE         = 0x1012,
	DOT11_RTS_THRESHOLD         = 0x1013,
	DOT11_GROUP_ADDRESS_TBL     = 0x1014,
1221
	ACX_PM_CONFIG               = 0x1016,
1222
	ACX_CONFIG_PS               = 0x1017,
1223
	ACX_CONFIG_HANGOVER         = 0x1018,
L
Luciano Coelho 已提交
1224 1225 1226
};


E
Eliad Peller 已提交
1227 1228
int wl1271_acx_wake_up_conditions(struct wl1271 *wl,
				  struct wl12xx_vif *wlvif);
L
Luciano Coelho 已提交
1229
int wl1271_acx_sleep_auth(struct wl1271 *wl, u8 sleep_auth);
E
Eliad Peller 已提交
1230 1231 1232
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 已提交
1233 1234
int wl1271_acx_mem_map(struct wl1271 *wl,
		       struct acx_header *mem_map, size_t len);
1235
int wl1271_acx_rx_msdu_life_time(struct wl1271 *wl);
E
Eliad Peller 已提交
1236 1237 1238 1239 1240 1241 1242 1243
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);
1244
int wl1271_acx_dco_itrim_params(struct wl1271 *wl);
E
Eliad Peller 已提交
1245 1246 1247 1248 1249 1250
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);
1251
int wl1271_acx_sg_enable(struct wl1271 *wl, bool enable);
1252
int wl12xx_acx_sg_cfg(struct wl1271 *wl);
L
Luciano Coelho 已提交
1253
int wl1271_acx_cca_threshold(struct wl1271 *wl);
E
Eliad Peller 已提交
1254 1255
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 已提交
1256
int wl1271_acx_event_mbox_mask(struct wl1271 *wl, u32 event_mask);
E
Eliad Peller 已提交
1257 1258 1259
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,
1260
			   enum acx_ctsprotect_type ctsprotect);
L
Luciano Coelho 已提交
1261
int wl1271_acx_statistics(struct wl1271 *wl, struct acx_statistics *stats);
E
Eliad Peller 已提交
1262
int wl1271_acx_sta_rate_policies(struct wl1271 *wl, struct wl12xx_vif *wlvif);
1263 1264
int wl1271_acx_ap_rate_policy(struct wl1271 *wl, struct conf_tx_rate_class *c,
		      u8 idx);
E
Eliad Peller 已提交
1265 1266 1267 1268
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,
1269 1270
		       u8 tsid, u8 ps_scheme, u8 ack_policy,
		       u32 apsd_conf0, u32 apsd_conf1);
1271
int wl1271_acx_frag_threshold(struct wl1271 *wl, u32 frag_threshold);
L
Luciano Coelho 已提交
1272
int wl1271_acx_tx_config_options(struct wl1271 *wl);
E
Eliad Peller 已提交
1273
int wl12xx_acx_mem_cfg(struct wl1271 *wl);
L
Luciano Coelho 已提交
1274
int wl1271_acx_init_mem_config(struct wl1271 *wl);
1275
int wl1271_acx_host_if_cfg_bitmap(struct wl1271 *wl, u32 host_cfg_bitmap);
L
Luciano Coelho 已提交
1276
int wl1271_acx_init_rx_interrupt(struct wl1271 *wl);
J
Juuso Oikarinen 已提交
1277
int wl1271_acx_smart_reflex(struct wl1271 *wl);
E
Eliad Peller 已提交
1278 1279 1280 1281
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);
1282
int wl1271_acx_pm_config(struct wl1271 *wl);
E
Eliad Peller 已提交
1283 1284 1285 1286 1287 1288 1289 1290
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 已提交
1291 1292
int wl1271_acx_set_ht_capabilities(struct wl1271 *wl,
				    struct ieee80211_sta_ht_cap *ht_cap,
1293
				    bool allow_ht_operation, u8 hlid);
S
Shahar Levi 已提交
1294
int wl1271_acx_set_ht_information(struct wl1271 *wl,
E
Eliad Peller 已提交
1295
				   struct wl12xx_vif *wlvif,
S
Shahar Levi 已提交
1296
				   u16 ht_operation_mode);
E
Eliad Peller 已提交
1297 1298
int wl12xx_acx_set_ba_initiator_policy(struct wl1271 *wl,
				       struct wl12xx_vif *wlvif);
1299 1300
int wl12xx_acx_set_ba_receiver_session(struct wl1271 *wl, u8 tid_index,
				       u16 ssn, bool enable, u8 peer_hlid);
1301 1302
int wl12xx_acx_tsf_info(struct wl1271 *wl, struct wl12xx_vif *wlvif,
			u64 *mactime);
E
Eliad Peller 已提交
1303 1304
int wl1271_acx_ps_rx_streaming(struct wl1271 *wl, struct wl12xx_vif *wlvif,
			       bool enable);
E
Eliad Peller 已提交
1305
int wl1271_acx_ap_max_tx_retry(struct wl1271 *wl, struct wl12xx_vif *wlvif);
E
Eliad Peller 已提交
1306
int wl12xx_acx_config_ps(struct wl1271 *wl, struct wl12xx_vif *wlvif);
1307
int wl1271_acx_set_inconnection_sta(struct wl1271 *wl, u8 *addr);
S
Shahar Levi 已提交
1308
int wl1271_acx_fm_coex(struct wl1271 *wl);
1309
int wl12xx_acx_set_rate_mgmt_params(struct wl1271 *wl);
1310
int wl12xx_acx_config_hangover(struct wl1271 *wl);
L
Luciano Coelho 已提交
1311 1312

#endif /* __WL1271_ACX_H__ */