18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * This file is part of wl12xx 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (C) 1998-2009, 2011 Texas Instruments. All rights reserved. 68c2ecf20Sopenharmony_ci * Copyright (C) 2008-2010 Nokia Corporation 78c2ecf20Sopenharmony_ci */ 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#ifndef __WL12XX_ACX_H__ 108c2ecf20Sopenharmony_ci#define __WL12XX_ACX_H__ 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci#include "../wlcore/wlcore.h" 138c2ecf20Sopenharmony_ci#include "../wlcore/acx.h" 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci#define WL12XX_ACX_ALL_EVENTS_VECTOR (WL1271_ACX_INTR_WATCHDOG | \ 168c2ecf20Sopenharmony_ci WL1271_ACX_INTR_INIT_COMPLETE | \ 178c2ecf20Sopenharmony_ci WL1271_ACX_INTR_EVENT_A | \ 188c2ecf20Sopenharmony_ci WL1271_ACX_INTR_EVENT_B | \ 198c2ecf20Sopenharmony_ci WL1271_ACX_INTR_CMD_COMPLETE | \ 208c2ecf20Sopenharmony_ci WL1271_ACX_INTR_HW_AVAILABLE | \ 218c2ecf20Sopenharmony_ci WL1271_ACX_INTR_DATA) 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_ci#define WL12XX_INTR_MASK (WL1271_ACX_INTR_WATCHDOG | \ 248c2ecf20Sopenharmony_ci WL1271_ACX_INTR_EVENT_A | \ 258c2ecf20Sopenharmony_ci WL1271_ACX_INTR_EVENT_B | \ 268c2ecf20Sopenharmony_ci WL1271_ACX_INTR_HW_AVAILABLE | \ 278c2ecf20Sopenharmony_ci WL1271_ACX_INTR_DATA) 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_cistruct wl1271_acx_host_config_bitmap { 308c2ecf20Sopenharmony_ci struct acx_header header; 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_ci __le32 host_cfg_bitmap; 338c2ecf20Sopenharmony_ci} __packed; 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_cistruct wl12xx_acx_tx_statistics { 368c2ecf20Sopenharmony_ci __le32 internal_desc_overflow; 378c2ecf20Sopenharmony_ci} __packed; 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_cistruct wl12xx_acx_rx_statistics { 408c2ecf20Sopenharmony_ci __le32 out_of_mem; 418c2ecf20Sopenharmony_ci __le32 hdr_overflow; 428c2ecf20Sopenharmony_ci __le32 hw_stuck; 438c2ecf20Sopenharmony_ci __le32 dropped; 448c2ecf20Sopenharmony_ci __le32 fcs_err; 458c2ecf20Sopenharmony_ci __le32 xfr_hint_trig; 468c2ecf20Sopenharmony_ci __le32 path_reset; 478c2ecf20Sopenharmony_ci __le32 reset_counter; 488c2ecf20Sopenharmony_ci} __packed; 498c2ecf20Sopenharmony_ci 508c2ecf20Sopenharmony_cistruct wl12xx_acx_dma_statistics { 518c2ecf20Sopenharmony_ci __le32 rx_requested; 528c2ecf20Sopenharmony_ci __le32 rx_errors; 538c2ecf20Sopenharmony_ci __le32 tx_requested; 548c2ecf20Sopenharmony_ci __le32 tx_errors; 558c2ecf20Sopenharmony_ci} __packed; 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_cistruct wl12xx_acx_isr_statistics { 588c2ecf20Sopenharmony_ci /* host command complete */ 598c2ecf20Sopenharmony_ci __le32 cmd_cmplt; 608c2ecf20Sopenharmony_ci 618c2ecf20Sopenharmony_ci /* fiqisr() */ 628c2ecf20Sopenharmony_ci __le32 fiqs; 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_RX_HEADER) */ 658c2ecf20Sopenharmony_ci __le32 rx_headers; 668c2ecf20Sopenharmony_ci 678c2ecf20Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_RX_CMPLT) */ 688c2ecf20Sopenharmony_ci __le32 rx_completes; 698c2ecf20Sopenharmony_ci 708c2ecf20Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_NO_RX_BUF) */ 718c2ecf20Sopenharmony_ci __le32 rx_mem_overflow; 728c2ecf20Sopenharmony_ci 738c2ecf20Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_S_RX_RDY) */ 748c2ecf20Sopenharmony_ci __le32 rx_rdys; 758c2ecf20Sopenharmony_ci 768c2ecf20Sopenharmony_ci /* irqisr() */ 778c2ecf20Sopenharmony_ci __le32 irqs; 788c2ecf20Sopenharmony_ci 798c2ecf20Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_TX_PROC) */ 808c2ecf20Sopenharmony_ci __le32 tx_procs; 818c2ecf20Sopenharmony_ci 828c2ecf20Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_DECRYPT_DONE) */ 838c2ecf20Sopenharmony_ci __le32 decrypt_done; 848c2ecf20Sopenharmony_ci 858c2ecf20Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_DMA0) */ 868c2ecf20Sopenharmony_ci __le32 dma0_done; 878c2ecf20Sopenharmony_ci 888c2ecf20Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_DMA1) */ 898c2ecf20Sopenharmony_ci __le32 dma1_done; 908c2ecf20Sopenharmony_ci 918c2ecf20Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_TX_EXC_CMPLT) */ 928c2ecf20Sopenharmony_ci __le32 tx_exch_complete; 938c2ecf20Sopenharmony_ci 948c2ecf20Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_COMMAND) */ 958c2ecf20Sopenharmony_ci __le32 commands; 968c2ecf20Sopenharmony_ci 978c2ecf20Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_RX_PROC) */ 988c2ecf20Sopenharmony_ci __le32 rx_procs; 998c2ecf20Sopenharmony_ci 1008c2ecf20Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_PM_802) */ 1018c2ecf20Sopenharmony_ci __le32 hw_pm_mode_changes; 1028c2ecf20Sopenharmony_ci 1038c2ecf20Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_ACKNOWLEDGE) */ 1048c2ecf20Sopenharmony_ci __le32 host_acknowledges; 1058c2ecf20Sopenharmony_ci 1068c2ecf20Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_PM_PCI) */ 1078c2ecf20Sopenharmony_ci __le32 pci_pm; 1088c2ecf20Sopenharmony_ci 1098c2ecf20Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_ACM_WAKEUP) */ 1108c2ecf20Sopenharmony_ci __le32 wakeups; 1118c2ecf20Sopenharmony_ci 1128c2ecf20Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_LOW_RSSI) */ 1138c2ecf20Sopenharmony_ci __le32 low_rssi; 1148c2ecf20Sopenharmony_ci} __packed; 1158c2ecf20Sopenharmony_ci 1168c2ecf20Sopenharmony_cistruct wl12xx_acx_wep_statistics { 1178c2ecf20Sopenharmony_ci /* WEP address keys configured */ 1188c2ecf20Sopenharmony_ci __le32 addr_key_count; 1198c2ecf20Sopenharmony_ci 1208c2ecf20Sopenharmony_ci /* default keys configured */ 1218c2ecf20Sopenharmony_ci __le32 default_key_count; 1228c2ecf20Sopenharmony_ci 1238c2ecf20Sopenharmony_ci __le32 reserved; 1248c2ecf20Sopenharmony_ci 1258c2ecf20Sopenharmony_ci /* number of times that WEP key not found on lookup */ 1268c2ecf20Sopenharmony_ci __le32 key_not_found; 1278c2ecf20Sopenharmony_ci 1288c2ecf20Sopenharmony_ci /* number of times that WEP key decryption failed */ 1298c2ecf20Sopenharmony_ci __le32 decrypt_fail; 1308c2ecf20Sopenharmony_ci 1318c2ecf20Sopenharmony_ci /* WEP packets decrypted */ 1328c2ecf20Sopenharmony_ci __le32 packets; 1338c2ecf20Sopenharmony_ci 1348c2ecf20Sopenharmony_ci /* WEP decrypt interrupts */ 1358c2ecf20Sopenharmony_ci __le32 interrupt; 1368c2ecf20Sopenharmony_ci} __packed; 1378c2ecf20Sopenharmony_ci 1388c2ecf20Sopenharmony_ci#define ACX_MISSED_BEACONS_SPREAD 10 1398c2ecf20Sopenharmony_ci 1408c2ecf20Sopenharmony_cistruct wl12xx_acx_pwr_statistics { 1418c2ecf20Sopenharmony_ci /* the amount of enters into power save mode (both PD & ELP) */ 1428c2ecf20Sopenharmony_ci __le32 ps_enter; 1438c2ecf20Sopenharmony_ci 1448c2ecf20Sopenharmony_ci /* the amount of enters into ELP mode */ 1458c2ecf20Sopenharmony_ci __le32 elp_enter; 1468c2ecf20Sopenharmony_ci 1478c2ecf20Sopenharmony_ci /* the amount of missing beacon interrupts to the host */ 1488c2ecf20Sopenharmony_ci __le32 missing_bcns; 1498c2ecf20Sopenharmony_ci 1508c2ecf20Sopenharmony_ci /* the amount of wake on host-access times */ 1518c2ecf20Sopenharmony_ci __le32 wake_on_host; 1528c2ecf20Sopenharmony_ci 1538c2ecf20Sopenharmony_ci /* the amount of wake on timer-expire */ 1548c2ecf20Sopenharmony_ci __le32 wake_on_timer_exp; 1558c2ecf20Sopenharmony_ci 1568c2ecf20Sopenharmony_ci /* the number of packets that were transmitted with PS bit set */ 1578c2ecf20Sopenharmony_ci __le32 tx_with_ps; 1588c2ecf20Sopenharmony_ci 1598c2ecf20Sopenharmony_ci /* the number of packets that were transmitted with PS bit clear */ 1608c2ecf20Sopenharmony_ci __le32 tx_without_ps; 1618c2ecf20Sopenharmony_ci 1628c2ecf20Sopenharmony_ci /* the number of received beacons */ 1638c2ecf20Sopenharmony_ci __le32 rcvd_beacons; 1648c2ecf20Sopenharmony_ci 1658c2ecf20Sopenharmony_ci /* the number of entering into PowerOn (power save off) */ 1668c2ecf20Sopenharmony_ci __le32 power_save_off; 1678c2ecf20Sopenharmony_ci 1688c2ecf20Sopenharmony_ci /* the number of entries into power save mode */ 1698c2ecf20Sopenharmony_ci __le16 enable_ps; 1708c2ecf20Sopenharmony_ci 1718c2ecf20Sopenharmony_ci /* 1728c2ecf20Sopenharmony_ci * the number of exits from power save, not including failed PS 1738c2ecf20Sopenharmony_ci * transitions 1748c2ecf20Sopenharmony_ci */ 1758c2ecf20Sopenharmony_ci __le16 disable_ps; 1768c2ecf20Sopenharmony_ci 1778c2ecf20Sopenharmony_ci /* 1788c2ecf20Sopenharmony_ci * the number of times the TSF counter was adjusted because 1798c2ecf20Sopenharmony_ci * of drift 1808c2ecf20Sopenharmony_ci */ 1818c2ecf20Sopenharmony_ci __le32 fix_tsf_ps; 1828c2ecf20Sopenharmony_ci 1838c2ecf20Sopenharmony_ci /* Gives statistics about the spread continuous missed beacons. 1848c2ecf20Sopenharmony_ci * The 16 LSB are dedicated for the PS mode. 1858c2ecf20Sopenharmony_ci * The 16 MSB are dedicated for the PS mode. 1868c2ecf20Sopenharmony_ci * cont_miss_bcns_spread[0] - single missed beacon. 1878c2ecf20Sopenharmony_ci * cont_miss_bcns_spread[1] - two continuous missed beacons. 1888c2ecf20Sopenharmony_ci * cont_miss_bcns_spread[2] - three continuous missed beacons. 1898c2ecf20Sopenharmony_ci * ... 1908c2ecf20Sopenharmony_ci * cont_miss_bcns_spread[9] - ten and more continuous missed beacons. 1918c2ecf20Sopenharmony_ci */ 1928c2ecf20Sopenharmony_ci __le32 cont_miss_bcns_spread[ACX_MISSED_BEACONS_SPREAD]; 1938c2ecf20Sopenharmony_ci 1948c2ecf20Sopenharmony_ci /* the number of beacons in awake mode */ 1958c2ecf20Sopenharmony_ci __le32 rcvd_awake_beacons; 1968c2ecf20Sopenharmony_ci} __packed; 1978c2ecf20Sopenharmony_ci 1988c2ecf20Sopenharmony_cistruct wl12xx_acx_mic_statistics { 1998c2ecf20Sopenharmony_ci __le32 rx_pkts; 2008c2ecf20Sopenharmony_ci __le32 calc_failure; 2018c2ecf20Sopenharmony_ci} __packed; 2028c2ecf20Sopenharmony_ci 2038c2ecf20Sopenharmony_cistruct wl12xx_acx_aes_statistics { 2048c2ecf20Sopenharmony_ci __le32 encrypt_fail; 2058c2ecf20Sopenharmony_ci __le32 decrypt_fail; 2068c2ecf20Sopenharmony_ci __le32 encrypt_packets; 2078c2ecf20Sopenharmony_ci __le32 decrypt_packets; 2088c2ecf20Sopenharmony_ci __le32 encrypt_interrupt; 2098c2ecf20Sopenharmony_ci __le32 decrypt_interrupt; 2108c2ecf20Sopenharmony_ci} __packed; 2118c2ecf20Sopenharmony_ci 2128c2ecf20Sopenharmony_cistruct wl12xx_acx_event_statistics { 2138c2ecf20Sopenharmony_ci __le32 heart_beat; 2148c2ecf20Sopenharmony_ci __le32 calibration; 2158c2ecf20Sopenharmony_ci __le32 rx_mismatch; 2168c2ecf20Sopenharmony_ci __le32 rx_mem_empty; 2178c2ecf20Sopenharmony_ci __le32 rx_pool; 2188c2ecf20Sopenharmony_ci __le32 oom_late; 2198c2ecf20Sopenharmony_ci __le32 phy_transmit_error; 2208c2ecf20Sopenharmony_ci __le32 tx_stuck; 2218c2ecf20Sopenharmony_ci} __packed; 2228c2ecf20Sopenharmony_ci 2238c2ecf20Sopenharmony_cistruct wl12xx_acx_ps_statistics { 2248c2ecf20Sopenharmony_ci __le32 pspoll_timeouts; 2258c2ecf20Sopenharmony_ci __le32 upsd_timeouts; 2268c2ecf20Sopenharmony_ci __le32 upsd_max_sptime; 2278c2ecf20Sopenharmony_ci __le32 upsd_max_apturn; 2288c2ecf20Sopenharmony_ci __le32 pspoll_max_apturn; 2298c2ecf20Sopenharmony_ci __le32 pspoll_utilization; 2308c2ecf20Sopenharmony_ci __le32 upsd_utilization; 2318c2ecf20Sopenharmony_ci} __packed; 2328c2ecf20Sopenharmony_ci 2338c2ecf20Sopenharmony_cistruct wl12xx_acx_rxpipe_statistics { 2348c2ecf20Sopenharmony_ci __le32 rx_prep_beacon_drop; 2358c2ecf20Sopenharmony_ci __le32 descr_host_int_trig_rx_data; 2368c2ecf20Sopenharmony_ci __le32 beacon_buffer_thres_host_int_trig_rx_data; 2378c2ecf20Sopenharmony_ci __le32 missed_beacon_host_int_trig_rx_data; 2388c2ecf20Sopenharmony_ci __le32 tx_xfr_host_int_trig_rx_data; 2398c2ecf20Sopenharmony_ci} __packed; 2408c2ecf20Sopenharmony_ci 2418c2ecf20Sopenharmony_cistruct wl12xx_acx_statistics { 2428c2ecf20Sopenharmony_ci struct acx_header header; 2438c2ecf20Sopenharmony_ci 2448c2ecf20Sopenharmony_ci struct wl12xx_acx_tx_statistics tx; 2458c2ecf20Sopenharmony_ci struct wl12xx_acx_rx_statistics rx; 2468c2ecf20Sopenharmony_ci struct wl12xx_acx_dma_statistics dma; 2478c2ecf20Sopenharmony_ci struct wl12xx_acx_isr_statistics isr; 2488c2ecf20Sopenharmony_ci struct wl12xx_acx_wep_statistics wep; 2498c2ecf20Sopenharmony_ci struct wl12xx_acx_pwr_statistics pwr; 2508c2ecf20Sopenharmony_ci struct wl12xx_acx_aes_statistics aes; 2518c2ecf20Sopenharmony_ci struct wl12xx_acx_mic_statistics mic; 2528c2ecf20Sopenharmony_ci struct wl12xx_acx_event_statistics event; 2538c2ecf20Sopenharmony_ci struct wl12xx_acx_ps_statistics ps; 2548c2ecf20Sopenharmony_ci struct wl12xx_acx_rxpipe_statistics rxpipe; 2558c2ecf20Sopenharmony_ci} __packed; 2568c2ecf20Sopenharmony_ci 2578c2ecf20Sopenharmony_ciint wl1271_acx_host_if_cfg_bitmap(struct wl1271 *wl, u32 host_cfg_bitmap); 2588c2ecf20Sopenharmony_ci 2598c2ecf20Sopenharmony_ci#endif /* __WL12XX_ACX_H__ */ 260