162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * This file is part of wl12xx 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 1998-2009, 2011 Texas Instruments. All rights reserved. 662306a36Sopenharmony_ci * Copyright (C) 2008-2010 Nokia Corporation 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#ifndef __WL12XX_ACX_H__ 1062306a36Sopenharmony_ci#define __WL12XX_ACX_H__ 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include "../wlcore/wlcore.h" 1362306a36Sopenharmony_ci#include "../wlcore/acx.h" 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci#define WL12XX_ACX_ALL_EVENTS_VECTOR (WL1271_ACX_INTR_WATCHDOG | \ 1662306a36Sopenharmony_ci WL1271_ACX_INTR_INIT_COMPLETE | \ 1762306a36Sopenharmony_ci WL1271_ACX_INTR_EVENT_A | \ 1862306a36Sopenharmony_ci WL1271_ACX_INTR_EVENT_B | \ 1962306a36Sopenharmony_ci WL1271_ACX_INTR_CMD_COMPLETE | \ 2062306a36Sopenharmony_ci WL1271_ACX_INTR_HW_AVAILABLE | \ 2162306a36Sopenharmony_ci WL1271_ACX_INTR_DATA) 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci#define WL12XX_INTR_MASK (WL1271_ACX_INTR_WATCHDOG | \ 2462306a36Sopenharmony_ci WL1271_ACX_INTR_EVENT_A | \ 2562306a36Sopenharmony_ci WL1271_ACX_INTR_EVENT_B | \ 2662306a36Sopenharmony_ci WL1271_ACX_INTR_HW_AVAILABLE | \ 2762306a36Sopenharmony_ci WL1271_ACX_INTR_DATA) 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_cistruct wl1271_acx_host_config_bitmap { 3062306a36Sopenharmony_ci struct acx_header header; 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci __le32 host_cfg_bitmap; 3362306a36Sopenharmony_ci} __packed; 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_cistruct wl12xx_acx_tx_statistics { 3662306a36Sopenharmony_ci __le32 internal_desc_overflow; 3762306a36Sopenharmony_ci} __packed; 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_cistruct wl12xx_acx_rx_statistics { 4062306a36Sopenharmony_ci __le32 out_of_mem; 4162306a36Sopenharmony_ci __le32 hdr_overflow; 4262306a36Sopenharmony_ci __le32 hw_stuck; 4362306a36Sopenharmony_ci __le32 dropped; 4462306a36Sopenharmony_ci __le32 fcs_err; 4562306a36Sopenharmony_ci __le32 xfr_hint_trig; 4662306a36Sopenharmony_ci __le32 path_reset; 4762306a36Sopenharmony_ci __le32 reset_counter; 4862306a36Sopenharmony_ci} __packed; 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_cistruct wl12xx_acx_dma_statistics { 5162306a36Sopenharmony_ci __le32 rx_requested; 5262306a36Sopenharmony_ci __le32 rx_errors; 5362306a36Sopenharmony_ci __le32 tx_requested; 5462306a36Sopenharmony_ci __le32 tx_errors; 5562306a36Sopenharmony_ci} __packed; 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_cistruct wl12xx_acx_isr_statistics { 5862306a36Sopenharmony_ci /* host command complete */ 5962306a36Sopenharmony_ci __le32 cmd_cmplt; 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci /* fiqisr() */ 6262306a36Sopenharmony_ci __le32 fiqs; 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_RX_HEADER) */ 6562306a36Sopenharmony_ci __le32 rx_headers; 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_RX_CMPLT) */ 6862306a36Sopenharmony_ci __le32 rx_completes; 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_NO_RX_BUF) */ 7162306a36Sopenharmony_ci __le32 rx_mem_overflow; 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_S_RX_RDY) */ 7462306a36Sopenharmony_ci __le32 rx_rdys; 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ci /* irqisr() */ 7762306a36Sopenharmony_ci __le32 irqs; 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_TX_PROC) */ 8062306a36Sopenharmony_ci __le32 tx_procs; 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_DECRYPT_DONE) */ 8362306a36Sopenharmony_ci __le32 decrypt_done; 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_DMA0) */ 8662306a36Sopenharmony_ci __le32 dma0_done; 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_DMA1) */ 8962306a36Sopenharmony_ci __le32 dma1_done; 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_TX_EXC_CMPLT) */ 9262306a36Sopenharmony_ci __le32 tx_exch_complete; 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_COMMAND) */ 9562306a36Sopenharmony_ci __le32 commands; 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_RX_PROC) */ 9862306a36Sopenharmony_ci __le32 rx_procs; 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_PM_802) */ 10162306a36Sopenharmony_ci __le32 hw_pm_mode_changes; 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_ACKNOWLEDGE) */ 10462306a36Sopenharmony_ci __le32 host_acknowledges; 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_PM_PCI) */ 10762306a36Sopenharmony_ci __le32 pci_pm; 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_ACM_WAKEUP) */ 11062306a36Sopenharmony_ci __le32 wakeups; 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_LOW_RSSI) */ 11362306a36Sopenharmony_ci __le32 low_rssi; 11462306a36Sopenharmony_ci} __packed; 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_cistruct wl12xx_acx_wep_statistics { 11762306a36Sopenharmony_ci /* WEP address keys configured */ 11862306a36Sopenharmony_ci __le32 addr_key_count; 11962306a36Sopenharmony_ci 12062306a36Sopenharmony_ci /* default keys configured */ 12162306a36Sopenharmony_ci __le32 default_key_count; 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ci __le32 reserved; 12462306a36Sopenharmony_ci 12562306a36Sopenharmony_ci /* number of times that WEP key not found on lookup */ 12662306a36Sopenharmony_ci __le32 key_not_found; 12762306a36Sopenharmony_ci 12862306a36Sopenharmony_ci /* number of times that WEP key decryption failed */ 12962306a36Sopenharmony_ci __le32 decrypt_fail; 13062306a36Sopenharmony_ci 13162306a36Sopenharmony_ci /* WEP packets decrypted */ 13262306a36Sopenharmony_ci __le32 packets; 13362306a36Sopenharmony_ci 13462306a36Sopenharmony_ci /* WEP decrypt interrupts */ 13562306a36Sopenharmony_ci __le32 interrupt; 13662306a36Sopenharmony_ci} __packed; 13762306a36Sopenharmony_ci 13862306a36Sopenharmony_ci#define ACX_MISSED_BEACONS_SPREAD 10 13962306a36Sopenharmony_ci 14062306a36Sopenharmony_cistruct wl12xx_acx_pwr_statistics { 14162306a36Sopenharmony_ci /* the amount of enters into power save mode (both PD & ELP) */ 14262306a36Sopenharmony_ci __le32 ps_enter; 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_ci /* the amount of enters into ELP mode */ 14562306a36Sopenharmony_ci __le32 elp_enter; 14662306a36Sopenharmony_ci 14762306a36Sopenharmony_ci /* the amount of missing beacon interrupts to the host */ 14862306a36Sopenharmony_ci __le32 missing_bcns; 14962306a36Sopenharmony_ci 15062306a36Sopenharmony_ci /* the amount of wake on host-access times */ 15162306a36Sopenharmony_ci __le32 wake_on_host; 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_ci /* the amount of wake on timer-expire */ 15462306a36Sopenharmony_ci __le32 wake_on_timer_exp; 15562306a36Sopenharmony_ci 15662306a36Sopenharmony_ci /* the number of packets that were transmitted with PS bit set */ 15762306a36Sopenharmony_ci __le32 tx_with_ps; 15862306a36Sopenharmony_ci 15962306a36Sopenharmony_ci /* the number of packets that were transmitted with PS bit clear */ 16062306a36Sopenharmony_ci __le32 tx_without_ps; 16162306a36Sopenharmony_ci 16262306a36Sopenharmony_ci /* the number of received beacons */ 16362306a36Sopenharmony_ci __le32 rcvd_beacons; 16462306a36Sopenharmony_ci 16562306a36Sopenharmony_ci /* the number of entering into PowerOn (power save off) */ 16662306a36Sopenharmony_ci __le32 power_save_off; 16762306a36Sopenharmony_ci 16862306a36Sopenharmony_ci /* the number of entries into power save mode */ 16962306a36Sopenharmony_ci __le16 enable_ps; 17062306a36Sopenharmony_ci 17162306a36Sopenharmony_ci /* 17262306a36Sopenharmony_ci * the number of exits from power save, not including failed PS 17362306a36Sopenharmony_ci * transitions 17462306a36Sopenharmony_ci */ 17562306a36Sopenharmony_ci __le16 disable_ps; 17662306a36Sopenharmony_ci 17762306a36Sopenharmony_ci /* 17862306a36Sopenharmony_ci * the number of times the TSF counter was adjusted because 17962306a36Sopenharmony_ci * of drift 18062306a36Sopenharmony_ci */ 18162306a36Sopenharmony_ci __le32 fix_tsf_ps; 18262306a36Sopenharmony_ci 18362306a36Sopenharmony_ci /* Gives statistics about the spread continuous missed beacons. 18462306a36Sopenharmony_ci * The 16 LSB are dedicated for the PS mode. 18562306a36Sopenharmony_ci * The 16 MSB are dedicated for the PS mode. 18662306a36Sopenharmony_ci * cont_miss_bcns_spread[0] - single missed beacon. 18762306a36Sopenharmony_ci * cont_miss_bcns_spread[1] - two continuous missed beacons. 18862306a36Sopenharmony_ci * cont_miss_bcns_spread[2] - three continuous missed beacons. 18962306a36Sopenharmony_ci * ... 19062306a36Sopenharmony_ci * cont_miss_bcns_spread[9] - ten and more continuous missed beacons. 19162306a36Sopenharmony_ci */ 19262306a36Sopenharmony_ci __le32 cont_miss_bcns_spread[ACX_MISSED_BEACONS_SPREAD]; 19362306a36Sopenharmony_ci 19462306a36Sopenharmony_ci /* the number of beacons in awake mode */ 19562306a36Sopenharmony_ci __le32 rcvd_awake_beacons; 19662306a36Sopenharmony_ci} __packed; 19762306a36Sopenharmony_ci 19862306a36Sopenharmony_cistruct wl12xx_acx_mic_statistics { 19962306a36Sopenharmony_ci __le32 rx_pkts; 20062306a36Sopenharmony_ci __le32 calc_failure; 20162306a36Sopenharmony_ci} __packed; 20262306a36Sopenharmony_ci 20362306a36Sopenharmony_cistruct wl12xx_acx_aes_statistics { 20462306a36Sopenharmony_ci __le32 encrypt_fail; 20562306a36Sopenharmony_ci __le32 decrypt_fail; 20662306a36Sopenharmony_ci __le32 encrypt_packets; 20762306a36Sopenharmony_ci __le32 decrypt_packets; 20862306a36Sopenharmony_ci __le32 encrypt_interrupt; 20962306a36Sopenharmony_ci __le32 decrypt_interrupt; 21062306a36Sopenharmony_ci} __packed; 21162306a36Sopenharmony_ci 21262306a36Sopenharmony_cistruct wl12xx_acx_event_statistics { 21362306a36Sopenharmony_ci __le32 heart_beat; 21462306a36Sopenharmony_ci __le32 calibration; 21562306a36Sopenharmony_ci __le32 rx_mismatch; 21662306a36Sopenharmony_ci __le32 rx_mem_empty; 21762306a36Sopenharmony_ci __le32 rx_pool; 21862306a36Sopenharmony_ci __le32 oom_late; 21962306a36Sopenharmony_ci __le32 phy_transmit_error; 22062306a36Sopenharmony_ci __le32 tx_stuck; 22162306a36Sopenharmony_ci} __packed; 22262306a36Sopenharmony_ci 22362306a36Sopenharmony_cistruct wl12xx_acx_ps_statistics { 22462306a36Sopenharmony_ci __le32 pspoll_timeouts; 22562306a36Sopenharmony_ci __le32 upsd_timeouts; 22662306a36Sopenharmony_ci __le32 upsd_max_sptime; 22762306a36Sopenharmony_ci __le32 upsd_max_apturn; 22862306a36Sopenharmony_ci __le32 pspoll_max_apturn; 22962306a36Sopenharmony_ci __le32 pspoll_utilization; 23062306a36Sopenharmony_ci __le32 upsd_utilization; 23162306a36Sopenharmony_ci} __packed; 23262306a36Sopenharmony_ci 23362306a36Sopenharmony_cistruct wl12xx_acx_rxpipe_statistics { 23462306a36Sopenharmony_ci __le32 rx_prep_beacon_drop; 23562306a36Sopenharmony_ci __le32 descr_host_int_trig_rx_data; 23662306a36Sopenharmony_ci __le32 beacon_buffer_thres_host_int_trig_rx_data; 23762306a36Sopenharmony_ci __le32 missed_beacon_host_int_trig_rx_data; 23862306a36Sopenharmony_ci __le32 tx_xfr_host_int_trig_rx_data; 23962306a36Sopenharmony_ci} __packed; 24062306a36Sopenharmony_ci 24162306a36Sopenharmony_cistruct wl12xx_acx_statistics { 24262306a36Sopenharmony_ci struct acx_header header; 24362306a36Sopenharmony_ci 24462306a36Sopenharmony_ci struct wl12xx_acx_tx_statistics tx; 24562306a36Sopenharmony_ci struct wl12xx_acx_rx_statistics rx; 24662306a36Sopenharmony_ci struct wl12xx_acx_dma_statistics dma; 24762306a36Sopenharmony_ci struct wl12xx_acx_isr_statistics isr; 24862306a36Sopenharmony_ci struct wl12xx_acx_wep_statistics wep; 24962306a36Sopenharmony_ci struct wl12xx_acx_pwr_statistics pwr; 25062306a36Sopenharmony_ci struct wl12xx_acx_aes_statistics aes; 25162306a36Sopenharmony_ci struct wl12xx_acx_mic_statistics mic; 25262306a36Sopenharmony_ci struct wl12xx_acx_event_statistics event; 25362306a36Sopenharmony_ci struct wl12xx_acx_ps_statistics ps; 25462306a36Sopenharmony_ci struct wl12xx_acx_rxpipe_statistics rxpipe; 25562306a36Sopenharmony_ci} __packed; 25662306a36Sopenharmony_ci 25762306a36Sopenharmony_ciint wl1271_acx_host_if_cfg_bitmap(struct wl1271 *wl, u32 host_cfg_bitmap); 25862306a36Sopenharmony_ci 25962306a36Sopenharmony_ci#endif /* __WL12XX_ACX_H__ */ 260