162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * This file is part of wl18xx
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2011 Texas Instruments. All rights reserved.
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#ifndef __WL18XX_ACX_H__
962306a36Sopenharmony_ci#define __WL18XX_ACX_H__
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include "../wlcore/wlcore.h"
1262306a36Sopenharmony_ci#include "../wlcore/acx.h"
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_cienum {
1562306a36Sopenharmony_ci	ACX_NS_IPV6_FILTER		 = 0x0050,
1662306a36Sopenharmony_ci	ACX_PEER_HT_OPERATION_MODE_CFG	 = 0x0051,
1762306a36Sopenharmony_ci	ACX_CSUM_CONFIG			 = 0x0052,
1862306a36Sopenharmony_ci	ACX_SIM_CONFIG			 = 0x0053,
1962306a36Sopenharmony_ci	ACX_CLEAR_STATISTICS		 = 0x0054,
2062306a36Sopenharmony_ci	ACX_AUTO_RX_STREAMING		 = 0x0055,
2162306a36Sopenharmony_ci	ACX_PEER_CAP			 = 0x0056,
2262306a36Sopenharmony_ci	ACX_INTERRUPT_NOTIFY		 = 0x0057,
2362306a36Sopenharmony_ci	ACX_RX_BA_FILTER		 = 0x0058,
2462306a36Sopenharmony_ci	ACX_AP_SLEEP_CFG                 = 0x0059,
2562306a36Sopenharmony_ci	ACX_DYNAMIC_TRACES_CFG		 = 0x005A,
2662306a36Sopenharmony_ci	ACX_TIME_SYNC_CFG		 = 0x005B,
2762306a36Sopenharmony_ci};
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci/* numbers of bits the length field takes (add 1 for the actual number) */
3062306a36Sopenharmony_ci#define WL18XX_HOST_IF_LEN_SIZE_FIELD 15
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci#define WL18XX_ACX_EVENTS_VECTOR	(WL1271_ACX_INTR_WATCHDOG	| \
3362306a36Sopenharmony_ci					 WL1271_ACX_INTR_INIT_COMPLETE	| \
3462306a36Sopenharmony_ci					 WL1271_ACX_INTR_EVENT_A	| \
3562306a36Sopenharmony_ci					 WL1271_ACX_INTR_EVENT_B	| \
3662306a36Sopenharmony_ci					 WL1271_ACX_INTR_CMD_COMPLETE	| \
3762306a36Sopenharmony_ci					 WL1271_ACX_INTR_HW_AVAILABLE	| \
3862306a36Sopenharmony_ci					 WL1271_ACX_INTR_DATA		| \
3962306a36Sopenharmony_ci					 WL1271_ACX_SW_INTR_WATCHDOG)
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci#define WL18XX_INTR_MASK		(WL1271_ACX_INTR_WATCHDOG	| \
4262306a36Sopenharmony_ci					 WL1271_ACX_INTR_EVENT_A	| \
4362306a36Sopenharmony_ci					 WL1271_ACX_INTR_EVENT_B	| \
4462306a36Sopenharmony_ci					 WL1271_ACX_INTR_HW_AVAILABLE	| \
4562306a36Sopenharmony_ci					 WL1271_ACX_INTR_DATA		| \
4662306a36Sopenharmony_ci					 WL1271_ACX_SW_INTR_WATCHDOG)
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_cistruct wl18xx_acx_host_config_bitmap {
4962306a36Sopenharmony_ci	struct acx_header header;
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci	__le32 host_cfg_bitmap;
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci	__le32 host_sdio_block_size;
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ci	/* extra mem blocks per frame in TX. */
5662306a36Sopenharmony_ci	__le32 extra_mem_blocks;
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci	/*
5962306a36Sopenharmony_ci	 * number of bits of the length field in the first TX word
6062306a36Sopenharmony_ci	 * (up to 15 - for using the entire 16 bits).
6162306a36Sopenharmony_ci	 */
6262306a36Sopenharmony_ci	__le32 length_field_size;
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ci} __packed;
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_cienum {
6762306a36Sopenharmony_ci	CHECKSUM_OFFLOAD_DISABLED = 0,
6862306a36Sopenharmony_ci	CHECKSUM_OFFLOAD_ENABLED  = 1,
6962306a36Sopenharmony_ci	CHECKSUM_OFFLOAD_FAKE_RX  = 2,
7062306a36Sopenharmony_ci	CHECKSUM_OFFLOAD_INVALID  = 0xFF
7162306a36Sopenharmony_ci};
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_cistruct wl18xx_acx_checksum_state {
7462306a36Sopenharmony_ci	struct acx_header header;
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_ci	 /* enum acx_checksum_state */
7762306a36Sopenharmony_ci	u8 checksum_state;
7862306a36Sopenharmony_ci	u8 pad[3];
7962306a36Sopenharmony_ci} __packed;
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_cistruct wl18xx_acx_error_stats {
8362306a36Sopenharmony_ci	u32 error_frame_non_ctrl;
8462306a36Sopenharmony_ci	u32 error_frame_ctrl;
8562306a36Sopenharmony_ci	u32 error_frame_during_protection;
8662306a36Sopenharmony_ci	u32 null_frame_tx_start;
8762306a36Sopenharmony_ci	u32 null_frame_cts_start;
8862306a36Sopenharmony_ci	u32 bar_retry;
8962306a36Sopenharmony_ci	u32 num_frame_cts_nul_flid;
9062306a36Sopenharmony_ci	u32 tx_abort_failure;
9162306a36Sopenharmony_ci	u32 tx_resume_failure;
9262306a36Sopenharmony_ci	u32 rx_cmplt_db_overflow_cnt;
9362306a36Sopenharmony_ci	u32 elp_while_rx_exch;
9462306a36Sopenharmony_ci	u32 elp_while_tx_exch;
9562306a36Sopenharmony_ci	u32 elp_while_tx;
9662306a36Sopenharmony_ci	u32 elp_while_nvic_pending;
9762306a36Sopenharmony_ci	u32 rx_excessive_frame_len;
9862306a36Sopenharmony_ci	u32 burst_mismatch;
9962306a36Sopenharmony_ci	u32 tbc_exch_mismatch;
10062306a36Sopenharmony_ci} __packed;
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ci#define NUM_OF_RATES_INDEXES 30
10362306a36Sopenharmony_cistruct wl18xx_acx_tx_stats {
10462306a36Sopenharmony_ci	u32 tx_prepared_descs;
10562306a36Sopenharmony_ci	u32 tx_cmplt;
10662306a36Sopenharmony_ci	u32 tx_template_prepared;
10762306a36Sopenharmony_ci	u32 tx_data_prepared;
10862306a36Sopenharmony_ci	u32 tx_template_programmed;
10962306a36Sopenharmony_ci	u32 tx_data_programmed;
11062306a36Sopenharmony_ci	u32 tx_burst_programmed;
11162306a36Sopenharmony_ci	u32 tx_starts;
11262306a36Sopenharmony_ci	u32 tx_stop;
11362306a36Sopenharmony_ci	u32 tx_start_templates;
11462306a36Sopenharmony_ci	u32 tx_start_int_templates;
11562306a36Sopenharmony_ci	u32 tx_start_fw_gen;
11662306a36Sopenharmony_ci	u32 tx_start_data;
11762306a36Sopenharmony_ci	u32 tx_start_null_frame;
11862306a36Sopenharmony_ci	u32 tx_exch;
11962306a36Sopenharmony_ci	u32 tx_retry_template;
12062306a36Sopenharmony_ci	u32 tx_retry_data;
12162306a36Sopenharmony_ci	u32 tx_retry_per_rate[NUM_OF_RATES_INDEXES];
12262306a36Sopenharmony_ci	u32 tx_exch_pending;
12362306a36Sopenharmony_ci	u32 tx_exch_expiry;
12462306a36Sopenharmony_ci	u32 tx_done_template;
12562306a36Sopenharmony_ci	u32 tx_done_data;
12662306a36Sopenharmony_ci	u32 tx_done_int_template;
12762306a36Sopenharmony_ci	u32 tx_cfe1;
12862306a36Sopenharmony_ci	u32 tx_cfe2;
12962306a36Sopenharmony_ci	u32 frag_called;
13062306a36Sopenharmony_ci	u32 frag_mpdu_alloc_failed;
13162306a36Sopenharmony_ci	u32 frag_init_called;
13262306a36Sopenharmony_ci	u32 frag_in_process_called;
13362306a36Sopenharmony_ci	u32 frag_tkip_called;
13462306a36Sopenharmony_ci	u32 frag_key_not_found;
13562306a36Sopenharmony_ci	u32 frag_need_fragmentation;
13662306a36Sopenharmony_ci	u32 frag_bad_mblk_num;
13762306a36Sopenharmony_ci	u32 frag_failed;
13862306a36Sopenharmony_ci	u32 frag_cache_hit;
13962306a36Sopenharmony_ci	u32 frag_cache_miss;
14062306a36Sopenharmony_ci} __packed;
14162306a36Sopenharmony_ci
14262306a36Sopenharmony_cistruct wl18xx_acx_rx_stats {
14362306a36Sopenharmony_ci	u32 rx_beacon_early_term;
14462306a36Sopenharmony_ci	u32 rx_out_of_mpdu_nodes;
14562306a36Sopenharmony_ci	u32 rx_hdr_overflow;
14662306a36Sopenharmony_ci	u32 rx_dropped_frame;
14762306a36Sopenharmony_ci	u32 rx_done_stage;
14862306a36Sopenharmony_ci	u32 rx_done;
14962306a36Sopenharmony_ci	u32 rx_defrag;
15062306a36Sopenharmony_ci	u32 rx_defrag_end;
15162306a36Sopenharmony_ci	u32 rx_cmplt;
15262306a36Sopenharmony_ci	u32 rx_pre_complt;
15362306a36Sopenharmony_ci	u32 rx_cmplt_task;
15462306a36Sopenharmony_ci	u32 rx_phy_hdr;
15562306a36Sopenharmony_ci	u32 rx_timeout;
15662306a36Sopenharmony_ci	u32 rx_rts_timeout;
15762306a36Sopenharmony_ci	u32 rx_timeout_wa;
15862306a36Sopenharmony_ci	u32 defrag_called;
15962306a36Sopenharmony_ci	u32 defrag_init_called;
16062306a36Sopenharmony_ci	u32 defrag_in_process_called;
16162306a36Sopenharmony_ci	u32 defrag_tkip_called;
16262306a36Sopenharmony_ci	u32 defrag_need_defrag;
16362306a36Sopenharmony_ci	u32 defrag_decrypt_failed;
16462306a36Sopenharmony_ci	u32 decrypt_key_not_found;
16562306a36Sopenharmony_ci	u32 defrag_need_decrypt;
16662306a36Sopenharmony_ci	u32 rx_tkip_replays;
16762306a36Sopenharmony_ci	u32 rx_xfr;
16862306a36Sopenharmony_ci} __packed;
16962306a36Sopenharmony_ci
17062306a36Sopenharmony_cistruct wl18xx_acx_isr_stats {
17162306a36Sopenharmony_ci	u32 irqs;
17262306a36Sopenharmony_ci} __packed;
17362306a36Sopenharmony_ci
17462306a36Sopenharmony_ci#define PWR_STAT_MAX_CONT_MISSED_BCNS_SPREAD 10
17562306a36Sopenharmony_ci
17662306a36Sopenharmony_cistruct wl18xx_acx_pwr_stats {
17762306a36Sopenharmony_ci	u32 missing_bcns_cnt;
17862306a36Sopenharmony_ci	u32 rcvd_bcns_cnt;
17962306a36Sopenharmony_ci	u32 connection_out_of_sync;
18062306a36Sopenharmony_ci	u32 cont_miss_bcns_spread[PWR_STAT_MAX_CONT_MISSED_BCNS_SPREAD];
18162306a36Sopenharmony_ci	u32 rcvd_awake_bcns_cnt;
18262306a36Sopenharmony_ci	u32 sleep_time_count;
18362306a36Sopenharmony_ci	u32 sleep_time_avg;
18462306a36Sopenharmony_ci	u32 sleep_cycle_avg;
18562306a36Sopenharmony_ci	u32 sleep_percent;
18662306a36Sopenharmony_ci	u32 ap_sleep_active_conf;
18762306a36Sopenharmony_ci	u32 ap_sleep_user_conf;
18862306a36Sopenharmony_ci	u32 ap_sleep_counter;
18962306a36Sopenharmony_ci} __packed;
19062306a36Sopenharmony_ci
19162306a36Sopenharmony_cistruct wl18xx_acx_rx_filter_stats {
19262306a36Sopenharmony_ci	u32 beacon_filter;
19362306a36Sopenharmony_ci	u32 arp_filter;
19462306a36Sopenharmony_ci	u32 mc_filter;
19562306a36Sopenharmony_ci	u32 dup_filter;
19662306a36Sopenharmony_ci	u32 data_filter;
19762306a36Sopenharmony_ci	u32 ibss_filter;
19862306a36Sopenharmony_ci	u32 protection_filter;
19962306a36Sopenharmony_ci	u32 accum_arp_pend_requests;
20062306a36Sopenharmony_ci	u32 max_arp_queue_dep;
20162306a36Sopenharmony_ci} __packed;
20262306a36Sopenharmony_ci
20362306a36Sopenharmony_cistruct wl18xx_acx_rx_rate_stats {
20462306a36Sopenharmony_ci	u32 rx_frames_per_rates[50];
20562306a36Sopenharmony_ci} __packed;
20662306a36Sopenharmony_ci
20762306a36Sopenharmony_ci#define AGGR_STATS_TX_AGG	16
20862306a36Sopenharmony_ci#define AGGR_STATS_RX_SIZE_LEN	16
20962306a36Sopenharmony_ci
21062306a36Sopenharmony_cistruct wl18xx_acx_aggr_stats {
21162306a36Sopenharmony_ci	u32 tx_agg_rate[AGGR_STATS_TX_AGG];
21262306a36Sopenharmony_ci	u32 tx_agg_len[AGGR_STATS_TX_AGG];
21362306a36Sopenharmony_ci	u32 rx_size[AGGR_STATS_RX_SIZE_LEN];
21462306a36Sopenharmony_ci} __packed;
21562306a36Sopenharmony_ci
21662306a36Sopenharmony_ci#define PIPE_STATS_HW_FIFO	11
21762306a36Sopenharmony_ci
21862306a36Sopenharmony_cistruct wl18xx_acx_pipeline_stats {
21962306a36Sopenharmony_ci	u32 hs_tx_stat_fifo_int;
22062306a36Sopenharmony_ci	u32 hs_rx_stat_fifo_int;
22162306a36Sopenharmony_ci	u32 enc_tx_stat_fifo_int;
22262306a36Sopenharmony_ci	u32 enc_rx_stat_fifo_int;
22362306a36Sopenharmony_ci	u32 rx_complete_stat_fifo_int;
22462306a36Sopenharmony_ci	u32 pre_proc_swi;
22562306a36Sopenharmony_ci	u32 post_proc_swi;
22662306a36Sopenharmony_ci	u32 sec_frag_swi;
22762306a36Sopenharmony_ci	u32 pre_to_defrag_swi;
22862306a36Sopenharmony_ci	u32 defrag_to_rx_xfer_swi;
22962306a36Sopenharmony_ci	u32 dec_packet_in;
23062306a36Sopenharmony_ci	u32 dec_packet_in_fifo_full;
23162306a36Sopenharmony_ci	u32 dec_packet_out;
23262306a36Sopenharmony_ci	u16 pipeline_fifo_full[PIPE_STATS_HW_FIFO];
23362306a36Sopenharmony_ci	u16 padding;
23462306a36Sopenharmony_ci} __packed;
23562306a36Sopenharmony_ci
23662306a36Sopenharmony_ci#define DIVERSITY_STATS_NUM_OF_ANT	2
23762306a36Sopenharmony_ci
23862306a36Sopenharmony_cistruct wl18xx_acx_diversity_stats {
23962306a36Sopenharmony_ci	u32 num_of_packets_per_ant[DIVERSITY_STATS_NUM_OF_ANT];
24062306a36Sopenharmony_ci	u32 total_num_of_toggles;
24162306a36Sopenharmony_ci} __packed;
24262306a36Sopenharmony_ci
24362306a36Sopenharmony_cistruct wl18xx_acx_thermal_stats {
24462306a36Sopenharmony_ci	u16 irq_thr_low;
24562306a36Sopenharmony_ci	u16 irq_thr_high;
24662306a36Sopenharmony_ci	u16 tx_stop;
24762306a36Sopenharmony_ci	u16 tx_resume;
24862306a36Sopenharmony_ci	u16 false_irq;
24962306a36Sopenharmony_ci	u16 adc_source_unexpected;
25062306a36Sopenharmony_ci} __packed;
25162306a36Sopenharmony_ci
25262306a36Sopenharmony_ci#define WL18XX_NUM_OF_CALIBRATIONS_ERRORS 18
25362306a36Sopenharmony_cistruct wl18xx_acx_calib_failure_stats {
25462306a36Sopenharmony_ci	u16 fail_count[WL18XX_NUM_OF_CALIBRATIONS_ERRORS];
25562306a36Sopenharmony_ci	u32 calib_count;
25662306a36Sopenharmony_ci} __packed;
25762306a36Sopenharmony_ci
25862306a36Sopenharmony_cistruct wl18xx_roaming_stats {
25962306a36Sopenharmony_ci	s32 rssi_level;
26062306a36Sopenharmony_ci} __packed;
26162306a36Sopenharmony_ci
26262306a36Sopenharmony_cistruct wl18xx_dfs_stats {
26362306a36Sopenharmony_ci	u32 num_of_radar_detections;
26462306a36Sopenharmony_ci} __packed;
26562306a36Sopenharmony_ci
26662306a36Sopenharmony_cistruct wl18xx_acx_statistics {
26762306a36Sopenharmony_ci	struct acx_header header;
26862306a36Sopenharmony_ci
26962306a36Sopenharmony_ci	struct wl18xx_acx_error_stats		error;
27062306a36Sopenharmony_ci	struct wl18xx_acx_tx_stats		tx;
27162306a36Sopenharmony_ci	struct wl18xx_acx_rx_stats		rx;
27262306a36Sopenharmony_ci	struct wl18xx_acx_isr_stats		isr;
27362306a36Sopenharmony_ci	struct wl18xx_acx_pwr_stats		pwr;
27462306a36Sopenharmony_ci	struct wl18xx_acx_rx_filter_stats	rx_filter;
27562306a36Sopenharmony_ci	struct wl18xx_acx_rx_rate_stats		rx_rate;
27662306a36Sopenharmony_ci	struct wl18xx_acx_aggr_stats		aggr_size;
27762306a36Sopenharmony_ci	struct wl18xx_acx_pipeline_stats	pipeline;
27862306a36Sopenharmony_ci	struct wl18xx_acx_diversity_stats	diversity;
27962306a36Sopenharmony_ci	struct wl18xx_acx_thermal_stats		thermal;
28062306a36Sopenharmony_ci	struct wl18xx_acx_calib_failure_stats	calib;
28162306a36Sopenharmony_ci	struct wl18xx_roaming_stats		roaming;
28262306a36Sopenharmony_ci	struct wl18xx_dfs_stats			dfs;
28362306a36Sopenharmony_ci} __packed;
28462306a36Sopenharmony_ci
28562306a36Sopenharmony_cistruct wl18xx_acx_clear_statistics {
28662306a36Sopenharmony_ci	struct acx_header header;
28762306a36Sopenharmony_ci};
28862306a36Sopenharmony_ci
28962306a36Sopenharmony_cienum wlcore_bandwidth {
29062306a36Sopenharmony_ci	WLCORE_BANDWIDTH_20MHZ,
29162306a36Sopenharmony_ci	WLCORE_BANDWIDTH_40MHZ,
29262306a36Sopenharmony_ci};
29362306a36Sopenharmony_ci
29462306a36Sopenharmony_cistruct wlcore_peer_ht_operation_mode {
29562306a36Sopenharmony_ci	struct acx_header header;
29662306a36Sopenharmony_ci
29762306a36Sopenharmony_ci	u8 hlid;
29862306a36Sopenharmony_ci	u8 bandwidth; /* enum wlcore_bandwidth */
29962306a36Sopenharmony_ci	u8 padding[2];
30062306a36Sopenharmony_ci};
30162306a36Sopenharmony_ci
30262306a36Sopenharmony_ci/*
30362306a36Sopenharmony_ci * ACX_PEER_CAP
30462306a36Sopenharmony_ci * this struct is very similar to wl1271_acx_ht_capabilities, with the
30562306a36Sopenharmony_ci * addition of supported rates
30662306a36Sopenharmony_ci */
30762306a36Sopenharmony_cistruct wlcore_acx_peer_cap {
30862306a36Sopenharmony_ci	struct acx_header header;
30962306a36Sopenharmony_ci
31062306a36Sopenharmony_ci	/* bitmask of capability bits supported by the peer */
31162306a36Sopenharmony_ci	__le32 ht_capabilites;
31262306a36Sopenharmony_ci
31362306a36Sopenharmony_ci	/* rates supported by the remote peer */
31462306a36Sopenharmony_ci	__le32 supported_rates;
31562306a36Sopenharmony_ci
31662306a36Sopenharmony_ci	/* Indicates to which link these capabilities apply. */
31762306a36Sopenharmony_ci	u8 hlid;
31862306a36Sopenharmony_ci
31962306a36Sopenharmony_ci	/*
32062306a36Sopenharmony_ci	 * This the maximum A-MPDU length supported by the AP. The FW may not
32162306a36Sopenharmony_ci	 * exceed this length when sending A-MPDUs
32262306a36Sopenharmony_ci	 */
32362306a36Sopenharmony_ci	u8 ampdu_max_length;
32462306a36Sopenharmony_ci
32562306a36Sopenharmony_ci	/* This is the minimal spacing required when sending A-MPDUs to the AP*/
32662306a36Sopenharmony_ci	u8 ampdu_min_spacing;
32762306a36Sopenharmony_ci
32862306a36Sopenharmony_ci	u8 padding;
32962306a36Sopenharmony_ci} __packed;
33062306a36Sopenharmony_ci
33162306a36Sopenharmony_ci/*
33262306a36Sopenharmony_ci * ACX_INTERRUPT_NOTIFY
33362306a36Sopenharmony_ci * enable/disable fast-link/PSM notification from FW
33462306a36Sopenharmony_ci */
33562306a36Sopenharmony_cistruct wl18xx_acx_interrupt_notify {
33662306a36Sopenharmony_ci	struct acx_header header;
33762306a36Sopenharmony_ci	u32 enable;
33862306a36Sopenharmony_ci};
33962306a36Sopenharmony_ci
34062306a36Sopenharmony_ci/*
34162306a36Sopenharmony_ci * ACX_RX_BA_FILTER
34262306a36Sopenharmony_ci * enable/disable RX BA filtering in FW
34362306a36Sopenharmony_ci */
34462306a36Sopenharmony_cistruct wl18xx_acx_rx_ba_filter {
34562306a36Sopenharmony_ci	struct acx_header header;
34662306a36Sopenharmony_ci	u32 enable;
34762306a36Sopenharmony_ci};
34862306a36Sopenharmony_ci
34962306a36Sopenharmony_cistruct acx_ap_sleep_cfg {
35062306a36Sopenharmony_ci	struct acx_header header;
35162306a36Sopenharmony_ci	/* Duty Cycle (20-80% of staying Awake) for IDLE AP
35262306a36Sopenharmony_ci	 * (0: disable)
35362306a36Sopenharmony_ci	 */
35462306a36Sopenharmony_ci	u8 idle_duty_cycle;
35562306a36Sopenharmony_ci	/* Duty Cycle (20-80% of staying Awake) for Connected AP
35662306a36Sopenharmony_ci	 * (0: disable)
35762306a36Sopenharmony_ci	 */
35862306a36Sopenharmony_ci	u8 connected_duty_cycle;
35962306a36Sopenharmony_ci	/* Maximum stations that are allowed to be connected to AP
36062306a36Sopenharmony_ci	 *  (255: no limit)
36162306a36Sopenharmony_ci	 */
36262306a36Sopenharmony_ci	u8 max_stations_thresh;
36362306a36Sopenharmony_ci	/* Timeout till enabling the Sleep Mechanism after data stops
36462306a36Sopenharmony_ci	 * [unit: 100 msec]
36562306a36Sopenharmony_ci	 */
36662306a36Sopenharmony_ci	u8 idle_conn_thresh;
36762306a36Sopenharmony_ci} __packed;
36862306a36Sopenharmony_ci
36962306a36Sopenharmony_ci/*
37062306a36Sopenharmony_ci * ACX_DYNAMIC_TRACES_CFG
37162306a36Sopenharmony_ci * configure the FW dynamic traces
37262306a36Sopenharmony_ci */
37362306a36Sopenharmony_cistruct acx_dynamic_fw_traces_cfg {
37462306a36Sopenharmony_ci	struct acx_header header;
37562306a36Sopenharmony_ci	__le32 dynamic_fw_traces;
37662306a36Sopenharmony_ci} __packed;
37762306a36Sopenharmony_ci
37862306a36Sopenharmony_ci/*
37962306a36Sopenharmony_ci * ACX_TIME_SYNC_CFG
38062306a36Sopenharmony_ci * configure the time sync parameters
38162306a36Sopenharmony_ci */
38262306a36Sopenharmony_cistruct acx_time_sync_cfg {
38362306a36Sopenharmony_ci	struct acx_header header;
38462306a36Sopenharmony_ci	u8 sync_mode;
38562306a36Sopenharmony_ci	u8 zone_mac_addr[ETH_ALEN];
38662306a36Sopenharmony_ci	u8 padding[1];
38762306a36Sopenharmony_ci} __packed;
38862306a36Sopenharmony_ci
38962306a36Sopenharmony_ciint wl18xx_acx_host_if_cfg_bitmap(struct wl1271 *wl, u32 host_cfg_bitmap,
39062306a36Sopenharmony_ci				  u32 sdio_blk_size, u32 extra_mem_blks,
39162306a36Sopenharmony_ci				  u32 len_field_size);
39262306a36Sopenharmony_ciint wl18xx_acx_set_checksum_state(struct wl1271 *wl);
39362306a36Sopenharmony_ciint wl18xx_acx_clear_statistics(struct wl1271 *wl);
39462306a36Sopenharmony_ciint wl18xx_acx_peer_ht_operation_mode(struct wl1271 *wl, u8 hlid, bool wide);
39562306a36Sopenharmony_ciint wl18xx_acx_set_peer_cap(struct wl1271 *wl,
39662306a36Sopenharmony_ci			    struct ieee80211_sta_ht_cap *ht_cap,
39762306a36Sopenharmony_ci			    bool allow_ht_operation,
39862306a36Sopenharmony_ci			    u32 rate_set, u8 hlid);
39962306a36Sopenharmony_ciint wl18xx_acx_interrupt_notify_config(struct wl1271 *wl, bool action);
40062306a36Sopenharmony_ciint wl18xx_acx_rx_ba_filter(struct wl1271 *wl, bool action);
40162306a36Sopenharmony_ciint wl18xx_acx_ap_sleep(struct wl1271 *wl);
40262306a36Sopenharmony_ciint wl18xx_acx_dynamic_fw_traces(struct wl1271 *wl);
40362306a36Sopenharmony_ciint wl18xx_acx_time_sync_cfg(struct wl1271 *wl);
40462306a36Sopenharmony_ci
40562306a36Sopenharmony_ci#endif /* __WL18XX_ACX_H__ */
406