162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * This file is part of wl1251 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (c) 1998-2007 Texas Instruments Incorporated 662306a36Sopenharmony_ci * Copyright (C) 2008 Nokia Corporation 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#ifndef __WL1251_ACX_H__ 1062306a36Sopenharmony_ci#define __WL1251_ACX_H__ 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include "wl1251.h" 1362306a36Sopenharmony_ci#include "cmd.h" 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci/* Target's information element */ 1662306a36Sopenharmony_cistruct acx_header { 1762306a36Sopenharmony_ci struct wl1251_cmd_header cmd; 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci /* acx (or information element) header */ 2062306a36Sopenharmony_ci u16 id; 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci /* payload length (not including headers */ 2362306a36Sopenharmony_ci u16 len; 2462306a36Sopenharmony_ci} __packed; 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_cistruct acx_error_counter { 2762306a36Sopenharmony_ci struct acx_header header; 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci /* The number of PLCP errors since the last time this */ 3062306a36Sopenharmony_ci /* information element was interrogated. This field is */ 3162306a36Sopenharmony_ci /* automatically cleared when it is interrogated.*/ 3262306a36Sopenharmony_ci u32 PLCP_error; 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci /* The number of FCS errors since the last time this */ 3562306a36Sopenharmony_ci /* information element was interrogated. This field is */ 3662306a36Sopenharmony_ci /* automatically cleared when it is interrogated.*/ 3762306a36Sopenharmony_ci u32 FCS_error; 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci /* The number of MPDUs without PLCP header errors received*/ 4062306a36Sopenharmony_ci /* since the last time this information element was interrogated. */ 4162306a36Sopenharmony_ci /* This field is automatically cleared when it is interrogated.*/ 4262306a36Sopenharmony_ci u32 valid_frame; 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci /* the number of missed sequence numbers in the squentially */ 4562306a36Sopenharmony_ci /* values of frames seq numbers */ 4662306a36Sopenharmony_ci u32 seq_num_miss; 4762306a36Sopenharmony_ci} __packed; 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_cistruct acx_revision { 5062306a36Sopenharmony_ci struct acx_header header; 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci /* 5362306a36Sopenharmony_ci * The WiLink firmware version, an ASCII string x.x.x.x, 5462306a36Sopenharmony_ci * that uniquely identifies the current firmware. 5562306a36Sopenharmony_ci * The left most digit is incremented each time a 5662306a36Sopenharmony_ci * significant change is made to the firmware, such as 5762306a36Sopenharmony_ci * code redesign or new platform support. 5862306a36Sopenharmony_ci * The second digit is incremented when major enhancements 5962306a36Sopenharmony_ci * are added or major fixes are made. 6062306a36Sopenharmony_ci * The third digit is incremented for each GA release. 6162306a36Sopenharmony_ci * The fourth digit is incremented for each build. 6262306a36Sopenharmony_ci * The first two digits identify a firmware release version, 6362306a36Sopenharmony_ci * in other words, a unique set of features. 6462306a36Sopenharmony_ci * The first three digits identify a GA release. 6562306a36Sopenharmony_ci */ 6662306a36Sopenharmony_ci char fw_version[20]; 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci /* 6962306a36Sopenharmony_ci * This 4 byte field specifies the WiLink hardware version. 7062306a36Sopenharmony_ci * bits 0 - 15: Reserved. 7162306a36Sopenharmony_ci * bits 16 - 23: Version ID - The WiLink version ID 7262306a36Sopenharmony_ci * (1 = first spin, 2 = second spin, and so on). 7362306a36Sopenharmony_ci * bits 24 - 31: Chip ID - The WiLink chip ID. 7462306a36Sopenharmony_ci */ 7562306a36Sopenharmony_ci u32 hw_version; 7662306a36Sopenharmony_ci} __packed; 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_cienum wl1251_psm_mode { 7962306a36Sopenharmony_ci /* Active mode */ 8062306a36Sopenharmony_ci WL1251_PSM_CAM = 0, 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci /* Power save mode */ 8362306a36Sopenharmony_ci WL1251_PSM_PS = 1, 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ci /* Extreme low power */ 8662306a36Sopenharmony_ci WL1251_PSM_ELP = 2, 8762306a36Sopenharmony_ci}; 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_cistruct acx_sleep_auth { 9062306a36Sopenharmony_ci struct acx_header header; 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ci /* The sleep level authorization of the device. */ 9362306a36Sopenharmony_ci /* 0 - Always active*/ 9462306a36Sopenharmony_ci /* 1 - Power down mode: light / fast sleep*/ 9562306a36Sopenharmony_ci /* 2 - ELP mode: Deep / Max sleep*/ 9662306a36Sopenharmony_ci u8 sleep_auth; 9762306a36Sopenharmony_ci u8 padding[3]; 9862306a36Sopenharmony_ci} __packed; 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_cienum { 10162306a36Sopenharmony_ci HOSTIF_PCI_MASTER_HOST_INDIRECT, 10262306a36Sopenharmony_ci HOSTIF_PCI_MASTER_HOST_DIRECT, 10362306a36Sopenharmony_ci HOSTIF_SLAVE, 10462306a36Sopenharmony_ci HOSTIF_PKT_RING, 10562306a36Sopenharmony_ci HOSTIF_DONTCARE = 0xFF 10662306a36Sopenharmony_ci}; 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ci#define DEFAULT_UCAST_PRIORITY 0 10962306a36Sopenharmony_ci#define DEFAULT_RX_Q_PRIORITY 0 11062306a36Sopenharmony_ci#define DEFAULT_NUM_STATIONS 1 11162306a36Sopenharmony_ci#define DEFAULT_RXQ_PRIORITY 0 /* low 0 .. 15 high */ 11262306a36Sopenharmony_ci#define DEFAULT_RXQ_TYPE 0x07 /* All frames, Data/Ctrl/Mgmt */ 11362306a36Sopenharmony_ci#define TRACE_BUFFER_MAX_SIZE 256 11462306a36Sopenharmony_ci 11562306a36Sopenharmony_ci#define DP_RX_PACKET_RING_CHUNK_SIZE 1600 11662306a36Sopenharmony_ci#define DP_TX_PACKET_RING_CHUNK_SIZE 1600 11762306a36Sopenharmony_ci#define DP_RX_PACKET_RING_CHUNK_NUM 2 11862306a36Sopenharmony_ci#define DP_TX_PACKET_RING_CHUNK_NUM 2 11962306a36Sopenharmony_ci#define DP_TX_COMPLETE_TIME_OUT 20 12062306a36Sopenharmony_ci#define FW_TX_CMPLT_BLOCK_SIZE 16 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_cistruct acx_data_path_params { 12362306a36Sopenharmony_ci struct acx_header header; 12462306a36Sopenharmony_ci 12562306a36Sopenharmony_ci u16 rx_packet_ring_chunk_size; 12662306a36Sopenharmony_ci u16 tx_packet_ring_chunk_size; 12762306a36Sopenharmony_ci 12862306a36Sopenharmony_ci u8 rx_packet_ring_chunk_num; 12962306a36Sopenharmony_ci u8 tx_packet_ring_chunk_num; 13062306a36Sopenharmony_ci 13162306a36Sopenharmony_ci /* 13262306a36Sopenharmony_ci * Maximum number of packets that can be gathered 13362306a36Sopenharmony_ci * in the TX complete ring before an interrupt 13462306a36Sopenharmony_ci * is generated. 13562306a36Sopenharmony_ci */ 13662306a36Sopenharmony_ci u8 tx_complete_threshold; 13762306a36Sopenharmony_ci 13862306a36Sopenharmony_ci /* Number of pending TX complete entries in cyclic ring.*/ 13962306a36Sopenharmony_ci u8 tx_complete_ring_depth; 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_ci /* 14262306a36Sopenharmony_ci * Max num microseconds since a packet enters the TX 14362306a36Sopenharmony_ci * complete ring until an interrupt is generated. 14462306a36Sopenharmony_ci */ 14562306a36Sopenharmony_ci u32 tx_complete_timeout; 14662306a36Sopenharmony_ci} __packed; 14762306a36Sopenharmony_ci 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_cistruct acx_data_path_params_resp { 15062306a36Sopenharmony_ci struct acx_header header; 15162306a36Sopenharmony_ci 15262306a36Sopenharmony_ci u16 rx_packet_ring_chunk_size; 15362306a36Sopenharmony_ci u16 tx_packet_ring_chunk_size; 15462306a36Sopenharmony_ci 15562306a36Sopenharmony_ci u8 rx_packet_ring_chunk_num; 15662306a36Sopenharmony_ci u8 tx_packet_ring_chunk_num; 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_ci u8 pad[2]; 15962306a36Sopenharmony_ci 16062306a36Sopenharmony_ci u32 rx_packet_ring_addr; 16162306a36Sopenharmony_ci u32 tx_packet_ring_addr; 16262306a36Sopenharmony_ci 16362306a36Sopenharmony_ci u32 rx_control_addr; 16462306a36Sopenharmony_ci u32 tx_control_addr; 16562306a36Sopenharmony_ci 16662306a36Sopenharmony_ci u32 tx_complete_addr; 16762306a36Sopenharmony_ci} __packed; 16862306a36Sopenharmony_ci 16962306a36Sopenharmony_ci#define TX_MSDU_LIFETIME_MIN 0 17062306a36Sopenharmony_ci#define TX_MSDU_LIFETIME_MAX 3000 17162306a36Sopenharmony_ci#define TX_MSDU_LIFETIME_DEF 512 17262306a36Sopenharmony_ci#define RX_MSDU_LIFETIME_MIN 0 17362306a36Sopenharmony_ci#define RX_MSDU_LIFETIME_MAX 0xFFFFFFFF 17462306a36Sopenharmony_ci#define RX_MSDU_LIFETIME_DEF 512000 17562306a36Sopenharmony_ci 17662306a36Sopenharmony_cistruct acx_rx_msdu_lifetime { 17762306a36Sopenharmony_ci struct acx_header header; 17862306a36Sopenharmony_ci 17962306a36Sopenharmony_ci /* 18062306a36Sopenharmony_ci * The maximum amount of time, in TU, before the 18162306a36Sopenharmony_ci * firmware discards the MSDU. 18262306a36Sopenharmony_ci */ 18362306a36Sopenharmony_ci u32 lifetime; 18462306a36Sopenharmony_ci} __packed; 18562306a36Sopenharmony_ci 18662306a36Sopenharmony_ci/* 18762306a36Sopenharmony_ci * RX Config Options Table 18862306a36Sopenharmony_ci * Bit Definition 18962306a36Sopenharmony_ci * === ========== 19062306a36Sopenharmony_ci * 31:14 Reserved 19162306a36Sopenharmony_ci * 13 Copy RX Status - when set, write three receive status words 19262306a36Sopenharmony_ci * to top of rx'd MPDUs. 19362306a36Sopenharmony_ci * When cleared, do not write three status words (added rev 1.5) 19462306a36Sopenharmony_ci * 12 Reserved 19562306a36Sopenharmony_ci * 11 RX Complete upon FCS error - when set, give rx complete 19662306a36Sopenharmony_ci * interrupt for FCS errors, after the rx filtering, e.g. unicast 19762306a36Sopenharmony_ci * frames not to us with FCS error will not generate an interrupt. 19862306a36Sopenharmony_ci * 10 SSID Filter Enable - When set, the WiLink discards all beacon, 19962306a36Sopenharmony_ci * probe request, and probe response frames with an SSID that does 20062306a36Sopenharmony_ci * not match the SSID specified by the host in the START/JOIN 20162306a36Sopenharmony_ci * command. 20262306a36Sopenharmony_ci * When clear, the WiLink receives frames with any SSID. 20362306a36Sopenharmony_ci * 9 Broadcast Filter Enable - When set, the WiLink discards all 20462306a36Sopenharmony_ci * broadcast frames. When clear, the WiLink receives all received 20562306a36Sopenharmony_ci * broadcast frames. 20662306a36Sopenharmony_ci * 8:6 Reserved 20762306a36Sopenharmony_ci * 5 BSSID Filter Enable - When set, the WiLink discards any frames 20862306a36Sopenharmony_ci * with a BSSID that does not match the BSSID specified by the 20962306a36Sopenharmony_ci * host. 21062306a36Sopenharmony_ci * When clear, the WiLink receives frames from any BSSID. 21162306a36Sopenharmony_ci * 4 MAC Addr Filter - When set, the WiLink discards any frames 21262306a36Sopenharmony_ci * with a destination address that does not match the MAC address 21362306a36Sopenharmony_ci * of the adaptor. 21462306a36Sopenharmony_ci * When clear, the WiLink receives frames destined to any MAC 21562306a36Sopenharmony_ci * address. 21662306a36Sopenharmony_ci * 3 Promiscuous - When set, the WiLink receives all valid frames 21762306a36Sopenharmony_ci * (i.e., all frames that pass the FCS check). 21862306a36Sopenharmony_ci * When clear, only frames that pass the other filters specified 21962306a36Sopenharmony_ci * are received. 22062306a36Sopenharmony_ci * 2 FCS - When set, the WiLink includes the FCS with the received 22162306a36Sopenharmony_ci * frame. 22262306a36Sopenharmony_ci * When cleared, the FCS is discarded. 22362306a36Sopenharmony_ci * 1 PLCP header - When set, write all data from baseband to frame 22462306a36Sopenharmony_ci * buffer including PHY header. 22562306a36Sopenharmony_ci * 0 Reserved - Always equal to 0. 22662306a36Sopenharmony_ci * 22762306a36Sopenharmony_ci * RX Filter Options Table 22862306a36Sopenharmony_ci * Bit Definition 22962306a36Sopenharmony_ci * === ========== 23062306a36Sopenharmony_ci * 31:12 Reserved - Always equal to 0. 23162306a36Sopenharmony_ci * 11 Association - When set, the WiLink receives all association 23262306a36Sopenharmony_ci * related frames (association request/response, reassocation 23362306a36Sopenharmony_ci * request/response, and disassociation). When clear, these frames 23462306a36Sopenharmony_ci * are discarded. 23562306a36Sopenharmony_ci * 10 Auth/De auth - When set, the WiLink receives all authentication 23662306a36Sopenharmony_ci * and de-authentication frames. When clear, these frames are 23762306a36Sopenharmony_ci * discarded. 23862306a36Sopenharmony_ci * 9 Beacon - When set, the WiLink receives all beacon frames. 23962306a36Sopenharmony_ci * When clear, these frames are discarded. 24062306a36Sopenharmony_ci * 8 Contention Free - When set, the WiLink receives all contention 24162306a36Sopenharmony_ci * free frames. 24262306a36Sopenharmony_ci * When clear, these frames are discarded. 24362306a36Sopenharmony_ci * 7 Control - When set, the WiLink receives all control frames. 24462306a36Sopenharmony_ci * When clear, these frames are discarded. 24562306a36Sopenharmony_ci * 6 Data - When set, the WiLink receives all data frames. 24662306a36Sopenharmony_ci * When clear, these frames are discarded. 24762306a36Sopenharmony_ci * 5 FCS Error - When set, the WiLink receives frames that have FCS 24862306a36Sopenharmony_ci * errors. 24962306a36Sopenharmony_ci * When clear, these frames are discarded. 25062306a36Sopenharmony_ci * 4 Management - When set, the WiLink receives all management 25162306a36Sopenharmony_ci * frames. 25262306a36Sopenharmony_ci * When clear, these frames are discarded. 25362306a36Sopenharmony_ci * 3 Probe Request - When set, the WiLink receives all probe request 25462306a36Sopenharmony_ci * frames. 25562306a36Sopenharmony_ci * When clear, these frames are discarded. 25662306a36Sopenharmony_ci * 2 Probe Response - When set, the WiLink receives all probe 25762306a36Sopenharmony_ci * response frames. 25862306a36Sopenharmony_ci * When clear, these frames are discarded. 25962306a36Sopenharmony_ci * 1 RTS/CTS/ACK - When set, the WiLink receives all RTS, CTS and ACK 26062306a36Sopenharmony_ci * frames. 26162306a36Sopenharmony_ci * When clear, these frames are discarded. 26262306a36Sopenharmony_ci * 0 Rsvd Type/Sub Type - When set, the WiLink receives all frames 26362306a36Sopenharmony_ci * that have reserved frame types and sub types as defined by the 26462306a36Sopenharmony_ci * 802.11 specification. 26562306a36Sopenharmony_ci * When clear, these frames are discarded. 26662306a36Sopenharmony_ci */ 26762306a36Sopenharmony_cistruct acx_rx_config { 26862306a36Sopenharmony_ci struct acx_header header; 26962306a36Sopenharmony_ci 27062306a36Sopenharmony_ci u32 config_options; 27162306a36Sopenharmony_ci u32 filter_options; 27262306a36Sopenharmony_ci} __packed; 27362306a36Sopenharmony_ci 27462306a36Sopenharmony_cienum { 27562306a36Sopenharmony_ci QOS_AC_BE = 0, 27662306a36Sopenharmony_ci QOS_AC_BK, 27762306a36Sopenharmony_ci QOS_AC_VI, 27862306a36Sopenharmony_ci QOS_AC_VO, 27962306a36Sopenharmony_ci QOS_HIGHEST_AC_INDEX = QOS_AC_VO, 28062306a36Sopenharmony_ci}; 28162306a36Sopenharmony_ci 28262306a36Sopenharmony_ci#define MAX_NUM_OF_AC (QOS_HIGHEST_AC_INDEX+1) 28362306a36Sopenharmony_ci#define FIRST_AC_INDEX QOS_AC_BE 28462306a36Sopenharmony_ci#define MAX_NUM_OF_802_1d_TAGS 8 28562306a36Sopenharmony_ci#define AC_PARAMS_MAX_TSID 15 28662306a36Sopenharmony_ci#define MAX_APSD_CONF 0xffff 28762306a36Sopenharmony_ci 28862306a36Sopenharmony_ci#define QOS_TX_HIGH_MIN (0) 28962306a36Sopenharmony_ci#define QOS_TX_HIGH_MAX (100) 29062306a36Sopenharmony_ci 29162306a36Sopenharmony_ci#define QOS_TX_HIGH_BK_DEF (25) 29262306a36Sopenharmony_ci#define QOS_TX_HIGH_BE_DEF (35) 29362306a36Sopenharmony_ci#define QOS_TX_HIGH_VI_DEF (35) 29462306a36Sopenharmony_ci#define QOS_TX_HIGH_VO_DEF (35) 29562306a36Sopenharmony_ci 29662306a36Sopenharmony_ci#define QOS_TX_LOW_BK_DEF (15) 29762306a36Sopenharmony_ci#define QOS_TX_LOW_BE_DEF (25) 29862306a36Sopenharmony_ci#define QOS_TX_LOW_VI_DEF (25) 29962306a36Sopenharmony_ci#define QOS_TX_LOW_VO_DEF (25) 30062306a36Sopenharmony_ci 30162306a36Sopenharmony_cistruct acx_tx_queue_qos_config { 30262306a36Sopenharmony_ci struct acx_header header; 30362306a36Sopenharmony_ci 30462306a36Sopenharmony_ci u8 qid; 30562306a36Sopenharmony_ci u8 pad[3]; 30662306a36Sopenharmony_ci 30762306a36Sopenharmony_ci /* Max number of blocks allowd in the queue */ 30862306a36Sopenharmony_ci u16 high_threshold; 30962306a36Sopenharmony_ci 31062306a36Sopenharmony_ci /* Lowest memory blocks guaranteed for this queue */ 31162306a36Sopenharmony_ci u16 low_threshold; 31262306a36Sopenharmony_ci} __packed; 31362306a36Sopenharmony_ci 31462306a36Sopenharmony_cistruct acx_packet_detection { 31562306a36Sopenharmony_ci struct acx_header header; 31662306a36Sopenharmony_ci 31762306a36Sopenharmony_ci u32 threshold; 31862306a36Sopenharmony_ci} __packed; 31962306a36Sopenharmony_ci 32062306a36Sopenharmony_ci 32162306a36Sopenharmony_cienum acx_slot_type { 32262306a36Sopenharmony_ci SLOT_TIME_LONG = 0, 32362306a36Sopenharmony_ci SLOT_TIME_SHORT = 1, 32462306a36Sopenharmony_ci DEFAULT_SLOT_TIME = SLOT_TIME_SHORT, 32562306a36Sopenharmony_ci MAX_SLOT_TIMES = 0xFF 32662306a36Sopenharmony_ci}; 32762306a36Sopenharmony_ci 32862306a36Sopenharmony_ci#define STATION_WONE_INDEX 0 32962306a36Sopenharmony_ci 33062306a36Sopenharmony_cistruct acx_slot { 33162306a36Sopenharmony_ci struct acx_header header; 33262306a36Sopenharmony_ci 33362306a36Sopenharmony_ci u8 wone_index; /* Reserved */ 33462306a36Sopenharmony_ci u8 slot_time; 33562306a36Sopenharmony_ci u8 reserved[6]; 33662306a36Sopenharmony_ci} __packed; 33762306a36Sopenharmony_ci 33862306a36Sopenharmony_ci 33962306a36Sopenharmony_ci#define ACX_MC_ADDRESS_GROUP_MAX (8) 34062306a36Sopenharmony_ci#define ACX_MC_ADDRESS_GROUP_MAX_LEN (ETH_ALEN * ACX_MC_ADDRESS_GROUP_MAX) 34162306a36Sopenharmony_ci 34262306a36Sopenharmony_cistruct acx_dot11_grp_addr_tbl { 34362306a36Sopenharmony_ci struct acx_header header; 34462306a36Sopenharmony_ci 34562306a36Sopenharmony_ci u8 enabled; 34662306a36Sopenharmony_ci u8 num_groups; 34762306a36Sopenharmony_ci u8 pad[2]; 34862306a36Sopenharmony_ci u8 mac_table[ACX_MC_ADDRESS_GROUP_MAX_LEN]; 34962306a36Sopenharmony_ci} __packed; 35062306a36Sopenharmony_ci 35162306a36Sopenharmony_ci 35262306a36Sopenharmony_ci#define RX_TIMEOUT_PS_POLL_MIN 0 35362306a36Sopenharmony_ci#define RX_TIMEOUT_PS_POLL_MAX (200000) 35462306a36Sopenharmony_ci#define RX_TIMEOUT_PS_POLL_DEF (15) 35562306a36Sopenharmony_ci#define RX_TIMEOUT_UPSD_MIN 0 35662306a36Sopenharmony_ci#define RX_TIMEOUT_UPSD_MAX (200000) 35762306a36Sopenharmony_ci#define RX_TIMEOUT_UPSD_DEF (15) 35862306a36Sopenharmony_ci 35962306a36Sopenharmony_cistruct acx_rx_timeout { 36062306a36Sopenharmony_ci struct acx_header header; 36162306a36Sopenharmony_ci 36262306a36Sopenharmony_ci /* 36362306a36Sopenharmony_ci * The longest time the STA will wait to receive 36462306a36Sopenharmony_ci * traffic from the AP after a PS-poll has been 36562306a36Sopenharmony_ci * transmitted. 36662306a36Sopenharmony_ci */ 36762306a36Sopenharmony_ci u16 ps_poll_timeout; 36862306a36Sopenharmony_ci 36962306a36Sopenharmony_ci /* 37062306a36Sopenharmony_ci * The longest time the STA will wait to receive 37162306a36Sopenharmony_ci * traffic from the AP after a frame has been sent 37262306a36Sopenharmony_ci * from an UPSD enabled queue. 37362306a36Sopenharmony_ci */ 37462306a36Sopenharmony_ci u16 upsd_timeout; 37562306a36Sopenharmony_ci} __packed; 37662306a36Sopenharmony_ci 37762306a36Sopenharmony_ci#define RTS_THRESHOLD_MIN 0 37862306a36Sopenharmony_ci#define RTS_THRESHOLD_MAX 4096 37962306a36Sopenharmony_ci#define RTS_THRESHOLD_DEF 2347 38062306a36Sopenharmony_ci 38162306a36Sopenharmony_cistruct acx_rts_threshold { 38262306a36Sopenharmony_ci struct acx_header header; 38362306a36Sopenharmony_ci 38462306a36Sopenharmony_ci u16 threshold; 38562306a36Sopenharmony_ci u8 pad[2]; 38662306a36Sopenharmony_ci} __packed; 38762306a36Sopenharmony_ci 38862306a36Sopenharmony_cienum wl1251_acx_low_rssi_type { 38962306a36Sopenharmony_ci /* 39062306a36Sopenharmony_ci * The event is a "Level" indication which keeps triggering 39162306a36Sopenharmony_ci * as long as the average RSSI is below the threshold. 39262306a36Sopenharmony_ci */ 39362306a36Sopenharmony_ci WL1251_ACX_LOW_RSSI_TYPE_LEVEL = 0, 39462306a36Sopenharmony_ci 39562306a36Sopenharmony_ci /* 39662306a36Sopenharmony_ci * The event is an "Edge" indication which triggers 39762306a36Sopenharmony_ci * only when the RSSI threshold is crossed from above. 39862306a36Sopenharmony_ci */ 39962306a36Sopenharmony_ci WL1251_ACX_LOW_RSSI_TYPE_EDGE = 1, 40062306a36Sopenharmony_ci}; 40162306a36Sopenharmony_ci 40262306a36Sopenharmony_cistruct acx_low_rssi { 40362306a36Sopenharmony_ci struct acx_header header; 40462306a36Sopenharmony_ci 40562306a36Sopenharmony_ci /* 40662306a36Sopenharmony_ci * The threshold (in dBm) below (or above after low rssi 40762306a36Sopenharmony_ci * indication) which the firmware generates an interrupt to the 40862306a36Sopenharmony_ci * host. This parameter is signed. 40962306a36Sopenharmony_ci */ 41062306a36Sopenharmony_ci s8 threshold; 41162306a36Sopenharmony_ci 41262306a36Sopenharmony_ci /* 41362306a36Sopenharmony_ci * The weight of the current RSSI sample, before adding the new 41462306a36Sopenharmony_ci * sample, that is used to calculate the average RSSI. 41562306a36Sopenharmony_ci */ 41662306a36Sopenharmony_ci u8 weight; 41762306a36Sopenharmony_ci 41862306a36Sopenharmony_ci /* 41962306a36Sopenharmony_ci * The number of Beacons/Probe response frames that will be 42062306a36Sopenharmony_ci * received before issuing the Low or Regained RSSI event. 42162306a36Sopenharmony_ci */ 42262306a36Sopenharmony_ci u8 depth; 42362306a36Sopenharmony_ci 42462306a36Sopenharmony_ci /* 42562306a36Sopenharmony_ci * Configures how the Low RSSI Event is triggered. Refer to 42662306a36Sopenharmony_ci * enum wl1251_acx_low_rssi_type for more. 42762306a36Sopenharmony_ci */ 42862306a36Sopenharmony_ci u8 type; 42962306a36Sopenharmony_ci} __packed; 43062306a36Sopenharmony_ci 43162306a36Sopenharmony_cistruct acx_beacon_filter_option { 43262306a36Sopenharmony_ci struct acx_header header; 43362306a36Sopenharmony_ci 43462306a36Sopenharmony_ci u8 enable; 43562306a36Sopenharmony_ci 43662306a36Sopenharmony_ci /* 43762306a36Sopenharmony_ci * The number of beacons without the unicast TIM 43862306a36Sopenharmony_ci * bit set that the firmware buffers before 43962306a36Sopenharmony_ci * signaling the host about ready frames. 44062306a36Sopenharmony_ci * When set to 0 and the filter is enabled, beacons 44162306a36Sopenharmony_ci * without the unicast TIM bit set are dropped. 44262306a36Sopenharmony_ci */ 44362306a36Sopenharmony_ci u8 max_num_beacons; 44462306a36Sopenharmony_ci u8 pad[2]; 44562306a36Sopenharmony_ci} __packed; 44662306a36Sopenharmony_ci 44762306a36Sopenharmony_ci/* 44862306a36Sopenharmony_ci * ACXBeaconFilterEntry (not 221) 44962306a36Sopenharmony_ci * Byte Offset Size (Bytes) Definition 45062306a36Sopenharmony_ci * =========== ============ ========== 45162306a36Sopenharmony_ci * 0 1 IE identifier 45262306a36Sopenharmony_ci * 1 1 Treatment bit mask 45362306a36Sopenharmony_ci * 45462306a36Sopenharmony_ci * ACXBeaconFilterEntry (221) 45562306a36Sopenharmony_ci * Byte Offset Size (Bytes) Definition 45662306a36Sopenharmony_ci * =========== ============ ========== 45762306a36Sopenharmony_ci * 0 1 IE identifier 45862306a36Sopenharmony_ci * 1 1 Treatment bit mask 45962306a36Sopenharmony_ci * 2 3 OUI 46062306a36Sopenharmony_ci * 5 1 Type 46162306a36Sopenharmony_ci * 6 2 Version 46262306a36Sopenharmony_ci * 46362306a36Sopenharmony_ci * 46462306a36Sopenharmony_ci * Treatment bit mask - The information element handling: 46562306a36Sopenharmony_ci * bit 0 - The information element is compared and transferred 46662306a36Sopenharmony_ci * in case of change. 46762306a36Sopenharmony_ci * bit 1 - The information element is transferred to the host 46862306a36Sopenharmony_ci * with each appearance or disappearance. 46962306a36Sopenharmony_ci * Note that both bits can be set at the same time. 47062306a36Sopenharmony_ci */ 47162306a36Sopenharmony_ci#define BEACON_FILTER_TABLE_MAX_IE_NUM (32) 47262306a36Sopenharmony_ci#define BEACON_FILTER_TABLE_MAX_VENDOR_SPECIFIC_IE_NUM (6) 47362306a36Sopenharmony_ci#define BEACON_FILTER_TABLE_IE_ENTRY_SIZE (2) 47462306a36Sopenharmony_ci#define BEACON_FILTER_TABLE_EXTRA_VENDOR_SPECIFIC_IE_SIZE (6) 47562306a36Sopenharmony_ci#define BEACON_FILTER_TABLE_MAX_SIZE ((BEACON_FILTER_TABLE_MAX_IE_NUM * \ 47662306a36Sopenharmony_ci BEACON_FILTER_TABLE_IE_ENTRY_SIZE) + \ 47762306a36Sopenharmony_ci (BEACON_FILTER_TABLE_MAX_VENDOR_SPECIFIC_IE_NUM * \ 47862306a36Sopenharmony_ci BEACON_FILTER_TABLE_EXTRA_VENDOR_SPECIFIC_IE_SIZE)) 47962306a36Sopenharmony_ci 48062306a36Sopenharmony_ci#define BEACON_RULE_PASS_ON_CHANGE BIT(0) 48162306a36Sopenharmony_ci#define BEACON_RULE_PASS_ON_APPEARANCE BIT(1) 48262306a36Sopenharmony_ci 48362306a36Sopenharmony_ci#define BEACON_FILTER_IE_ID_CHANNEL_SWITCH_ANN (37) 48462306a36Sopenharmony_ci 48562306a36Sopenharmony_cistruct acx_beacon_filter_ie_table { 48662306a36Sopenharmony_ci struct acx_header header; 48762306a36Sopenharmony_ci 48862306a36Sopenharmony_ci u8 num_ie; 48962306a36Sopenharmony_ci u8 pad[3]; 49062306a36Sopenharmony_ci u8 table[BEACON_FILTER_TABLE_MAX_SIZE]; 49162306a36Sopenharmony_ci} __packed; 49262306a36Sopenharmony_ci 49362306a36Sopenharmony_ci#define SYNCH_FAIL_DEFAULT_THRESHOLD 10 /* number of beacons */ 49462306a36Sopenharmony_ci#define NO_BEACON_DEFAULT_TIMEOUT (500) /* in microseconds */ 49562306a36Sopenharmony_ci 49662306a36Sopenharmony_cistruct acx_conn_monit_params { 49762306a36Sopenharmony_ci struct acx_header header; 49862306a36Sopenharmony_ci 49962306a36Sopenharmony_ci u32 synch_fail_thold; /* number of beacons missed */ 50062306a36Sopenharmony_ci u32 bss_lose_timeout; /* number of TU's from synch fail */ 50162306a36Sopenharmony_ci} __packed; 50262306a36Sopenharmony_ci 50362306a36Sopenharmony_cienum { 50462306a36Sopenharmony_ci SG_ENABLE = 0, 50562306a36Sopenharmony_ci SG_DISABLE, 50662306a36Sopenharmony_ci SG_SENSE_NO_ACTIVITY, 50762306a36Sopenharmony_ci SG_SENSE_ACTIVE 50862306a36Sopenharmony_ci}; 50962306a36Sopenharmony_ci 51062306a36Sopenharmony_cistruct acx_bt_wlan_coex { 51162306a36Sopenharmony_ci struct acx_header header; 51262306a36Sopenharmony_ci 51362306a36Sopenharmony_ci /* 51462306a36Sopenharmony_ci * 0 -> PTA enabled 51562306a36Sopenharmony_ci * 1 -> PTA disabled 51662306a36Sopenharmony_ci * 2 -> sense no active mode, i.e. 51762306a36Sopenharmony_ci * an interrupt is sent upon 51862306a36Sopenharmony_ci * BT activity. 51962306a36Sopenharmony_ci * 3 -> PTA is switched on in response 52062306a36Sopenharmony_ci * to the interrupt sending. 52162306a36Sopenharmony_ci */ 52262306a36Sopenharmony_ci u8 enable; 52362306a36Sopenharmony_ci u8 pad[3]; 52462306a36Sopenharmony_ci} __packed; 52562306a36Sopenharmony_ci 52662306a36Sopenharmony_ci#define PTA_ANTENNA_TYPE_DEF (0) 52762306a36Sopenharmony_ci#define PTA_BT_HP_MAXTIME_DEF (2000) 52862306a36Sopenharmony_ci#define PTA_WLAN_HP_MAX_TIME_DEF (5000) 52962306a36Sopenharmony_ci#define PTA_SENSE_DISABLE_TIMER_DEF (1350) 53062306a36Sopenharmony_ci#define PTA_PROTECTIVE_RX_TIME_DEF (1500) 53162306a36Sopenharmony_ci#define PTA_PROTECTIVE_TX_TIME_DEF (1500) 53262306a36Sopenharmony_ci#define PTA_TIMEOUT_NEXT_BT_LP_PACKET_DEF (3000) 53362306a36Sopenharmony_ci#define PTA_SIGNALING_TYPE_DEF (1) 53462306a36Sopenharmony_ci#define PTA_AFH_LEVERAGE_ON_DEF (0) 53562306a36Sopenharmony_ci#define PTA_NUMBER_QUIET_CYCLE_DEF (0) 53662306a36Sopenharmony_ci#define PTA_MAX_NUM_CTS_DEF (3) 53762306a36Sopenharmony_ci#define PTA_NUMBER_OF_WLAN_PACKETS_DEF (2) 53862306a36Sopenharmony_ci#define PTA_NUMBER_OF_BT_PACKETS_DEF (2) 53962306a36Sopenharmony_ci#define PTA_PROTECTIVE_RX_TIME_FAST_DEF (1500) 54062306a36Sopenharmony_ci#define PTA_PROTECTIVE_TX_TIME_FAST_DEF (3000) 54162306a36Sopenharmony_ci#define PTA_CYCLE_TIME_FAST_DEF (8700) 54262306a36Sopenharmony_ci#define PTA_RX_FOR_AVALANCHE_DEF (5) 54362306a36Sopenharmony_ci#define PTA_ELP_HP_DEF (0) 54462306a36Sopenharmony_ci#define PTA_ANTI_STARVE_PERIOD_DEF (500) 54562306a36Sopenharmony_ci#define PTA_ANTI_STARVE_NUM_CYCLE_DEF (4) 54662306a36Sopenharmony_ci#define PTA_ALLOW_PA_SD_DEF (1) 54762306a36Sopenharmony_ci#define PTA_TIME_BEFORE_BEACON_DEF (6300) 54862306a36Sopenharmony_ci#define PTA_HPDM_MAX_TIME_DEF (1600) 54962306a36Sopenharmony_ci#define PTA_TIME_OUT_NEXT_WLAN_DEF (2550) 55062306a36Sopenharmony_ci#define PTA_AUTO_MODE_NO_CTS_DEF (0) 55162306a36Sopenharmony_ci#define PTA_BT_HP_RESPECTED_DEF (3) 55262306a36Sopenharmony_ci#define PTA_WLAN_RX_MIN_RATE_DEF (24) 55362306a36Sopenharmony_ci#define PTA_ACK_MODE_DEF (1) 55462306a36Sopenharmony_ci 55562306a36Sopenharmony_cistruct acx_bt_wlan_coex_param { 55662306a36Sopenharmony_ci struct acx_header header; 55762306a36Sopenharmony_ci 55862306a36Sopenharmony_ci /* 55962306a36Sopenharmony_ci * The minimum rate of a received WLAN packet in the STA, 56062306a36Sopenharmony_ci * during protective mode, of which a new BT-HP request 56162306a36Sopenharmony_ci * during this Rx will always be respected and gain the antenna. 56262306a36Sopenharmony_ci */ 56362306a36Sopenharmony_ci u32 min_rate; 56462306a36Sopenharmony_ci 56562306a36Sopenharmony_ci /* Max time the BT HP will be respected. */ 56662306a36Sopenharmony_ci u16 bt_hp_max_time; 56762306a36Sopenharmony_ci 56862306a36Sopenharmony_ci /* Max time the WLAN HP will be respected. */ 56962306a36Sopenharmony_ci u16 wlan_hp_max_time; 57062306a36Sopenharmony_ci 57162306a36Sopenharmony_ci /* 57262306a36Sopenharmony_ci * The time between the last BT activity 57362306a36Sopenharmony_ci * and the moment when the sense mode returns 57462306a36Sopenharmony_ci * to SENSE_INACTIVE. 57562306a36Sopenharmony_ci */ 57662306a36Sopenharmony_ci u16 sense_disable_timer; 57762306a36Sopenharmony_ci 57862306a36Sopenharmony_ci /* Time before the next BT HP instance */ 57962306a36Sopenharmony_ci u16 rx_time_bt_hp; 58062306a36Sopenharmony_ci u16 tx_time_bt_hp; 58162306a36Sopenharmony_ci 58262306a36Sopenharmony_ci /* range: 10-20000 default: 1500 */ 58362306a36Sopenharmony_ci u16 rx_time_bt_hp_fast; 58462306a36Sopenharmony_ci u16 tx_time_bt_hp_fast; 58562306a36Sopenharmony_ci 58662306a36Sopenharmony_ci /* range: 2000-65535 default: 8700 */ 58762306a36Sopenharmony_ci u16 wlan_cycle_fast; 58862306a36Sopenharmony_ci 58962306a36Sopenharmony_ci /* range: 0 - 15000 (Msec) default: 1000 */ 59062306a36Sopenharmony_ci u16 bt_anti_starvation_period; 59162306a36Sopenharmony_ci 59262306a36Sopenharmony_ci /* range 400-10000(Usec) default: 3000 */ 59362306a36Sopenharmony_ci u16 next_bt_lp_packet; 59462306a36Sopenharmony_ci 59562306a36Sopenharmony_ci /* Deafult: worst case for BT DH5 traffic */ 59662306a36Sopenharmony_ci u16 wake_up_beacon; 59762306a36Sopenharmony_ci 59862306a36Sopenharmony_ci /* range: 0-50000(Usec) default: 1050 */ 59962306a36Sopenharmony_ci u16 hp_dm_max_guard_time; 60062306a36Sopenharmony_ci 60162306a36Sopenharmony_ci /* 60262306a36Sopenharmony_ci * This is to prevent both BT & WLAN antenna 60362306a36Sopenharmony_ci * starvation. 60462306a36Sopenharmony_ci * Range: 100-50000(Usec) default:2550 60562306a36Sopenharmony_ci */ 60662306a36Sopenharmony_ci u16 next_wlan_packet; 60762306a36Sopenharmony_ci 60862306a36Sopenharmony_ci /* 0 -> shared antenna */ 60962306a36Sopenharmony_ci u8 antenna_type; 61062306a36Sopenharmony_ci 61162306a36Sopenharmony_ci /* 61262306a36Sopenharmony_ci * 0 -> TI legacy 61362306a36Sopenharmony_ci * 1 -> Palau 61462306a36Sopenharmony_ci */ 61562306a36Sopenharmony_ci u8 signal_type; 61662306a36Sopenharmony_ci 61762306a36Sopenharmony_ci /* 61862306a36Sopenharmony_ci * BT AFH status 61962306a36Sopenharmony_ci * 0 -> no AFH 62062306a36Sopenharmony_ci * 1 -> from dedicated GPIO 62162306a36Sopenharmony_ci * 2 -> AFH on (from host) 62262306a36Sopenharmony_ci */ 62362306a36Sopenharmony_ci u8 afh_leverage_on; 62462306a36Sopenharmony_ci 62562306a36Sopenharmony_ci /* 62662306a36Sopenharmony_ci * The number of cycles during which no 62762306a36Sopenharmony_ci * TX will be sent after 1 cycle of RX 62862306a36Sopenharmony_ci * transaction in protective mode 62962306a36Sopenharmony_ci */ 63062306a36Sopenharmony_ci u8 quiet_cycle_num; 63162306a36Sopenharmony_ci 63262306a36Sopenharmony_ci /* 63362306a36Sopenharmony_ci * The maximum number of CTSs that will 63462306a36Sopenharmony_ci * be sent for receiving RX packet in 63562306a36Sopenharmony_ci * protective mode 63662306a36Sopenharmony_ci */ 63762306a36Sopenharmony_ci u8 max_cts; 63862306a36Sopenharmony_ci 63962306a36Sopenharmony_ci /* 64062306a36Sopenharmony_ci * The number of WLAN packets 64162306a36Sopenharmony_ci * transferred in common mode before 64262306a36Sopenharmony_ci * switching to BT. 64362306a36Sopenharmony_ci */ 64462306a36Sopenharmony_ci u8 wlan_packets_num; 64562306a36Sopenharmony_ci 64662306a36Sopenharmony_ci /* 64762306a36Sopenharmony_ci * The number of BT packets 64862306a36Sopenharmony_ci * transferred in common mode before 64962306a36Sopenharmony_ci * switching to WLAN. 65062306a36Sopenharmony_ci */ 65162306a36Sopenharmony_ci u8 bt_packets_num; 65262306a36Sopenharmony_ci 65362306a36Sopenharmony_ci /* range: 1-255 default: 5 */ 65462306a36Sopenharmony_ci u8 missed_rx_avalanche; 65562306a36Sopenharmony_ci 65662306a36Sopenharmony_ci /* range: 0-1 default: 1 */ 65762306a36Sopenharmony_ci u8 wlan_elp_hp; 65862306a36Sopenharmony_ci 65962306a36Sopenharmony_ci /* range: 0 - 15 default: 4 */ 66062306a36Sopenharmony_ci u8 bt_anti_starvation_cycles; 66162306a36Sopenharmony_ci 66262306a36Sopenharmony_ci u8 ack_mode_dual_ant; 66362306a36Sopenharmony_ci 66462306a36Sopenharmony_ci /* 66562306a36Sopenharmony_ci * Allow PA_SD assertion/de-assertion 66662306a36Sopenharmony_ci * during enabled BT activity. 66762306a36Sopenharmony_ci */ 66862306a36Sopenharmony_ci u8 pa_sd_enable; 66962306a36Sopenharmony_ci 67062306a36Sopenharmony_ci /* 67162306a36Sopenharmony_ci * Enable/Disable PTA in auto mode: 67262306a36Sopenharmony_ci * Support Both Active & P.S modes 67362306a36Sopenharmony_ci */ 67462306a36Sopenharmony_ci u8 pta_auto_mode_enable; 67562306a36Sopenharmony_ci 67662306a36Sopenharmony_ci /* range: 0 - 20 default: 1 */ 67762306a36Sopenharmony_ci u8 bt_hp_respected_num; 67862306a36Sopenharmony_ci} __packed; 67962306a36Sopenharmony_ci 68062306a36Sopenharmony_ci#define CCA_THRSH_ENABLE_ENERGY_D 0x140A 68162306a36Sopenharmony_ci#define CCA_THRSH_DISABLE_ENERGY_D 0xFFEF 68262306a36Sopenharmony_ci 68362306a36Sopenharmony_cistruct acx_energy_detection { 68462306a36Sopenharmony_ci struct acx_header header; 68562306a36Sopenharmony_ci 68662306a36Sopenharmony_ci /* The RX Clear Channel Assessment threshold in the PHY */ 68762306a36Sopenharmony_ci u16 rx_cca_threshold; 68862306a36Sopenharmony_ci u8 tx_energy_detection; 68962306a36Sopenharmony_ci u8 pad; 69062306a36Sopenharmony_ci} __packed; 69162306a36Sopenharmony_ci 69262306a36Sopenharmony_ci#define BCN_RX_TIMEOUT_DEF_VALUE 10000 69362306a36Sopenharmony_ci#define BROADCAST_RX_TIMEOUT_DEF_VALUE 20000 69462306a36Sopenharmony_ci#define RX_BROADCAST_IN_PS_DEF_VALUE 1 69562306a36Sopenharmony_ci#define CONSECUTIVE_PS_POLL_FAILURE_DEF 4 69662306a36Sopenharmony_ci 69762306a36Sopenharmony_cistruct acx_beacon_broadcast { 69862306a36Sopenharmony_ci struct acx_header header; 69962306a36Sopenharmony_ci 70062306a36Sopenharmony_ci u16 beacon_rx_timeout; 70162306a36Sopenharmony_ci u16 broadcast_timeout; 70262306a36Sopenharmony_ci 70362306a36Sopenharmony_ci /* Enables receiving of broadcast packets in PS mode */ 70462306a36Sopenharmony_ci u8 rx_broadcast_in_ps; 70562306a36Sopenharmony_ci 70662306a36Sopenharmony_ci /* Consecutive PS Poll failures before updating the host */ 70762306a36Sopenharmony_ci u8 ps_poll_threshold; 70862306a36Sopenharmony_ci u8 pad[2]; 70962306a36Sopenharmony_ci} __packed; 71062306a36Sopenharmony_ci 71162306a36Sopenharmony_cistruct acx_event_mask { 71262306a36Sopenharmony_ci struct acx_header header; 71362306a36Sopenharmony_ci 71462306a36Sopenharmony_ci u32 event_mask; 71562306a36Sopenharmony_ci u32 high_event_mask; /* Unused */ 71662306a36Sopenharmony_ci} __packed; 71762306a36Sopenharmony_ci 71862306a36Sopenharmony_ci#define CFG_RX_FCS BIT(2) 71962306a36Sopenharmony_ci#define CFG_RX_ALL_GOOD BIT(3) 72062306a36Sopenharmony_ci#define CFG_UNI_FILTER_EN BIT(4) 72162306a36Sopenharmony_ci#define CFG_BSSID_FILTER_EN BIT(5) 72262306a36Sopenharmony_ci#define CFG_MC_FILTER_EN BIT(6) 72362306a36Sopenharmony_ci#define CFG_MC_ADDR0_EN BIT(7) 72462306a36Sopenharmony_ci#define CFG_MC_ADDR1_EN BIT(8) 72562306a36Sopenharmony_ci#define CFG_BC_REJECT_EN BIT(9) 72662306a36Sopenharmony_ci#define CFG_SSID_FILTER_EN BIT(10) 72762306a36Sopenharmony_ci#define CFG_RX_INT_FCS_ERROR BIT(11) 72862306a36Sopenharmony_ci#define CFG_RX_INT_ENCRYPTED BIT(12) 72962306a36Sopenharmony_ci#define CFG_RX_WR_RX_STATUS BIT(13) 73062306a36Sopenharmony_ci#define CFG_RX_FILTER_NULTI BIT(14) 73162306a36Sopenharmony_ci#define CFG_RX_RESERVE BIT(15) 73262306a36Sopenharmony_ci#define CFG_RX_TIMESTAMP_TSF BIT(16) 73362306a36Sopenharmony_ci 73462306a36Sopenharmony_ci#define CFG_RX_RSV_EN BIT(0) 73562306a36Sopenharmony_ci#define CFG_RX_RCTS_ACK BIT(1) 73662306a36Sopenharmony_ci#define CFG_RX_PRSP_EN BIT(2) 73762306a36Sopenharmony_ci#define CFG_RX_PREQ_EN BIT(3) 73862306a36Sopenharmony_ci#define CFG_RX_MGMT_EN BIT(4) 73962306a36Sopenharmony_ci#define CFG_RX_FCS_ERROR BIT(5) 74062306a36Sopenharmony_ci#define CFG_RX_DATA_EN BIT(6) 74162306a36Sopenharmony_ci#define CFG_RX_CTL_EN BIT(7) 74262306a36Sopenharmony_ci#define CFG_RX_CF_EN BIT(8) 74362306a36Sopenharmony_ci#define CFG_RX_BCN_EN BIT(9) 74462306a36Sopenharmony_ci#define CFG_RX_AUTH_EN BIT(10) 74562306a36Sopenharmony_ci#define CFG_RX_ASSOC_EN BIT(11) 74662306a36Sopenharmony_ci 74762306a36Sopenharmony_ci#define SCAN_PASSIVE BIT(0) 74862306a36Sopenharmony_ci#define SCAN_5GHZ_BAND BIT(1) 74962306a36Sopenharmony_ci#define SCAN_TRIGGERED BIT(2) 75062306a36Sopenharmony_ci#define SCAN_PRIORITY_HIGH BIT(3) 75162306a36Sopenharmony_ci 75262306a36Sopenharmony_cistruct acx_fw_gen_frame_rates { 75362306a36Sopenharmony_ci struct acx_header header; 75462306a36Sopenharmony_ci 75562306a36Sopenharmony_ci u8 tx_ctrl_frame_rate; /* RATE_* */ 75662306a36Sopenharmony_ci u8 tx_ctrl_frame_mod; /* CCK_* or PBCC_* */ 75762306a36Sopenharmony_ci u8 tx_mgt_frame_rate; 75862306a36Sopenharmony_ci u8 tx_mgt_frame_mod; 75962306a36Sopenharmony_ci} __packed; 76062306a36Sopenharmony_ci 76162306a36Sopenharmony_ci/* STA MAC */ 76262306a36Sopenharmony_cistruct acx_dot11_station_id { 76362306a36Sopenharmony_ci struct acx_header header; 76462306a36Sopenharmony_ci 76562306a36Sopenharmony_ci u8 mac[ETH_ALEN]; 76662306a36Sopenharmony_ci u8 pad[2]; 76762306a36Sopenharmony_ci} __packed; 76862306a36Sopenharmony_ci 76962306a36Sopenharmony_cistruct acx_feature_config { 77062306a36Sopenharmony_ci struct acx_header header; 77162306a36Sopenharmony_ci 77262306a36Sopenharmony_ci u32 options; 77362306a36Sopenharmony_ci u32 data_flow_options; 77462306a36Sopenharmony_ci} __packed; 77562306a36Sopenharmony_ci 77662306a36Sopenharmony_cistruct acx_current_tx_power { 77762306a36Sopenharmony_ci struct acx_header header; 77862306a36Sopenharmony_ci 77962306a36Sopenharmony_ci u8 current_tx_power; 78062306a36Sopenharmony_ci u8 padding[3]; 78162306a36Sopenharmony_ci} __packed; 78262306a36Sopenharmony_ci 78362306a36Sopenharmony_cistruct acx_dot11_default_key { 78462306a36Sopenharmony_ci struct acx_header header; 78562306a36Sopenharmony_ci 78662306a36Sopenharmony_ci u8 id; 78762306a36Sopenharmony_ci u8 pad[3]; 78862306a36Sopenharmony_ci} __packed; 78962306a36Sopenharmony_ci 79062306a36Sopenharmony_cistruct acx_tsf_info { 79162306a36Sopenharmony_ci struct acx_header header; 79262306a36Sopenharmony_ci 79362306a36Sopenharmony_ci u32 current_tsf_msb; 79462306a36Sopenharmony_ci u32 current_tsf_lsb; 79562306a36Sopenharmony_ci u32 last_TBTT_msb; 79662306a36Sopenharmony_ci u32 last_TBTT_lsb; 79762306a36Sopenharmony_ci u8 last_dtim_count; 79862306a36Sopenharmony_ci u8 pad[3]; 79962306a36Sopenharmony_ci} __packed; 80062306a36Sopenharmony_ci 80162306a36Sopenharmony_cienum acx_wake_up_event { 80262306a36Sopenharmony_ci WAKE_UP_EVENT_BEACON_BITMAP = 0x01, /* Wake on every Beacon*/ 80362306a36Sopenharmony_ci WAKE_UP_EVENT_DTIM_BITMAP = 0x02, /* Wake on every DTIM*/ 80462306a36Sopenharmony_ci WAKE_UP_EVENT_N_DTIM_BITMAP = 0x04, /* Wake on every Nth DTIM */ 80562306a36Sopenharmony_ci WAKE_UP_EVENT_N_BEACONS_BITMAP = 0x08, /* Wake on every Nth Beacon */ 80662306a36Sopenharmony_ci WAKE_UP_EVENT_BITS_MASK = 0x0F 80762306a36Sopenharmony_ci}; 80862306a36Sopenharmony_ci 80962306a36Sopenharmony_cistruct acx_wake_up_condition { 81062306a36Sopenharmony_ci struct acx_header header; 81162306a36Sopenharmony_ci 81262306a36Sopenharmony_ci u8 wake_up_event; /* Only one bit can be set */ 81362306a36Sopenharmony_ci u8 listen_interval; 81462306a36Sopenharmony_ci u8 pad[2]; 81562306a36Sopenharmony_ci} __packed; 81662306a36Sopenharmony_ci 81762306a36Sopenharmony_cistruct acx_aid { 81862306a36Sopenharmony_ci struct acx_header header; 81962306a36Sopenharmony_ci 82062306a36Sopenharmony_ci /* 82162306a36Sopenharmony_ci * To be set when associated with an AP. 82262306a36Sopenharmony_ci */ 82362306a36Sopenharmony_ci u16 aid; 82462306a36Sopenharmony_ci u8 pad[2]; 82562306a36Sopenharmony_ci} __packed; 82662306a36Sopenharmony_ci 82762306a36Sopenharmony_cienum acx_preamble_type { 82862306a36Sopenharmony_ci ACX_PREAMBLE_LONG = 0, 82962306a36Sopenharmony_ci ACX_PREAMBLE_SHORT = 1 83062306a36Sopenharmony_ci}; 83162306a36Sopenharmony_ci 83262306a36Sopenharmony_cistruct acx_preamble { 83362306a36Sopenharmony_ci struct acx_header header; 83462306a36Sopenharmony_ci 83562306a36Sopenharmony_ci /* 83662306a36Sopenharmony_ci * When set, the WiLink transmits the frames with a short preamble and 83762306a36Sopenharmony_ci * when cleared, the WiLink transmits the frames with a long preamble. 83862306a36Sopenharmony_ci */ 83962306a36Sopenharmony_ci u8 preamble; 84062306a36Sopenharmony_ci u8 padding[3]; 84162306a36Sopenharmony_ci} __packed; 84262306a36Sopenharmony_ci 84362306a36Sopenharmony_cienum acx_ctsprotect_type { 84462306a36Sopenharmony_ci CTSPROTECT_DISABLE = 0, 84562306a36Sopenharmony_ci CTSPROTECT_ENABLE = 1 84662306a36Sopenharmony_ci}; 84762306a36Sopenharmony_ci 84862306a36Sopenharmony_cistruct acx_ctsprotect { 84962306a36Sopenharmony_ci struct acx_header header; 85062306a36Sopenharmony_ci u8 ctsprotect; 85162306a36Sopenharmony_ci u8 padding[3]; 85262306a36Sopenharmony_ci} __packed; 85362306a36Sopenharmony_ci 85462306a36Sopenharmony_cistruct acx_tx_statistics { 85562306a36Sopenharmony_ci u32 internal_desc_overflow; 85662306a36Sopenharmony_ci} __packed; 85762306a36Sopenharmony_ci 85862306a36Sopenharmony_cistruct acx_rx_statistics { 85962306a36Sopenharmony_ci u32 out_of_mem; 86062306a36Sopenharmony_ci u32 hdr_overflow; 86162306a36Sopenharmony_ci u32 hw_stuck; 86262306a36Sopenharmony_ci u32 dropped; 86362306a36Sopenharmony_ci u32 fcs_err; 86462306a36Sopenharmony_ci u32 xfr_hint_trig; 86562306a36Sopenharmony_ci u32 path_reset; 86662306a36Sopenharmony_ci u32 reset_counter; 86762306a36Sopenharmony_ci} __packed; 86862306a36Sopenharmony_ci 86962306a36Sopenharmony_cistruct acx_dma_statistics { 87062306a36Sopenharmony_ci u32 rx_requested; 87162306a36Sopenharmony_ci u32 rx_errors; 87262306a36Sopenharmony_ci u32 tx_requested; 87362306a36Sopenharmony_ci u32 tx_errors; 87462306a36Sopenharmony_ci} __packed; 87562306a36Sopenharmony_ci 87662306a36Sopenharmony_cistruct acx_isr_statistics { 87762306a36Sopenharmony_ci /* host command complete */ 87862306a36Sopenharmony_ci u32 cmd_cmplt; 87962306a36Sopenharmony_ci 88062306a36Sopenharmony_ci /* fiqisr() */ 88162306a36Sopenharmony_ci u32 fiqs; 88262306a36Sopenharmony_ci 88362306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_RX_HEADER) */ 88462306a36Sopenharmony_ci u32 rx_headers; 88562306a36Sopenharmony_ci 88662306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_RX_CMPLT) */ 88762306a36Sopenharmony_ci u32 rx_completes; 88862306a36Sopenharmony_ci 88962306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_NO_RX_BUF) */ 89062306a36Sopenharmony_ci u32 rx_mem_overflow; 89162306a36Sopenharmony_ci 89262306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_S_RX_RDY) */ 89362306a36Sopenharmony_ci u32 rx_rdys; 89462306a36Sopenharmony_ci 89562306a36Sopenharmony_ci /* irqisr() */ 89662306a36Sopenharmony_ci u32 irqs; 89762306a36Sopenharmony_ci 89862306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_TX_PROC) */ 89962306a36Sopenharmony_ci u32 tx_procs; 90062306a36Sopenharmony_ci 90162306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_DECRYPT_DONE) */ 90262306a36Sopenharmony_ci u32 decrypt_done; 90362306a36Sopenharmony_ci 90462306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_DMA0) */ 90562306a36Sopenharmony_ci u32 dma0_done; 90662306a36Sopenharmony_ci 90762306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_DMA1) */ 90862306a36Sopenharmony_ci u32 dma1_done; 90962306a36Sopenharmony_ci 91062306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_TX_EXC_CMPLT) */ 91162306a36Sopenharmony_ci u32 tx_exch_complete; 91262306a36Sopenharmony_ci 91362306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_COMMAND) */ 91462306a36Sopenharmony_ci u32 commands; 91562306a36Sopenharmony_ci 91662306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_RX_PROC) */ 91762306a36Sopenharmony_ci u32 rx_procs; 91862306a36Sopenharmony_ci 91962306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_PM_802) */ 92062306a36Sopenharmony_ci u32 hw_pm_mode_changes; 92162306a36Sopenharmony_ci 92262306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_ACKNOWLEDGE) */ 92362306a36Sopenharmony_ci u32 host_acknowledges; 92462306a36Sopenharmony_ci 92562306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_PM_PCI) */ 92662306a36Sopenharmony_ci u32 pci_pm; 92762306a36Sopenharmony_ci 92862306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_ACM_WAKEUP) */ 92962306a36Sopenharmony_ci u32 wakeups; 93062306a36Sopenharmony_ci 93162306a36Sopenharmony_ci /* (INT_STS_ND & INT_TRIG_LOW_RSSI) */ 93262306a36Sopenharmony_ci u32 low_rssi; 93362306a36Sopenharmony_ci} __packed; 93462306a36Sopenharmony_ci 93562306a36Sopenharmony_cistruct acx_wep_statistics { 93662306a36Sopenharmony_ci /* WEP address keys configured */ 93762306a36Sopenharmony_ci u32 addr_key_count; 93862306a36Sopenharmony_ci 93962306a36Sopenharmony_ci /* default keys configured */ 94062306a36Sopenharmony_ci u32 default_key_count; 94162306a36Sopenharmony_ci 94262306a36Sopenharmony_ci u32 reserved; 94362306a36Sopenharmony_ci 94462306a36Sopenharmony_ci /* number of times that WEP key not found on lookup */ 94562306a36Sopenharmony_ci u32 key_not_found; 94662306a36Sopenharmony_ci 94762306a36Sopenharmony_ci /* number of times that WEP key decryption failed */ 94862306a36Sopenharmony_ci u32 decrypt_fail; 94962306a36Sopenharmony_ci 95062306a36Sopenharmony_ci /* WEP packets decrypted */ 95162306a36Sopenharmony_ci u32 packets; 95262306a36Sopenharmony_ci 95362306a36Sopenharmony_ci /* WEP decrypt interrupts */ 95462306a36Sopenharmony_ci u32 interrupt; 95562306a36Sopenharmony_ci} __packed; 95662306a36Sopenharmony_ci 95762306a36Sopenharmony_ci#define ACX_MISSED_BEACONS_SPREAD 10 95862306a36Sopenharmony_ci 95962306a36Sopenharmony_cistruct acx_pwr_statistics { 96062306a36Sopenharmony_ci /* the amount of enters into power save mode (both PD & ELP) */ 96162306a36Sopenharmony_ci u32 ps_enter; 96262306a36Sopenharmony_ci 96362306a36Sopenharmony_ci /* the amount of enters into ELP mode */ 96462306a36Sopenharmony_ci u32 elp_enter; 96562306a36Sopenharmony_ci 96662306a36Sopenharmony_ci /* the amount of missing beacon interrupts to the host */ 96762306a36Sopenharmony_ci u32 missing_bcns; 96862306a36Sopenharmony_ci 96962306a36Sopenharmony_ci /* the amount of wake on host-access times */ 97062306a36Sopenharmony_ci u32 wake_on_host; 97162306a36Sopenharmony_ci 97262306a36Sopenharmony_ci /* the amount of wake on timer-expire */ 97362306a36Sopenharmony_ci u32 wake_on_timer_exp; 97462306a36Sopenharmony_ci 97562306a36Sopenharmony_ci /* the number of packets that were transmitted with PS bit set */ 97662306a36Sopenharmony_ci u32 tx_with_ps; 97762306a36Sopenharmony_ci 97862306a36Sopenharmony_ci /* the number of packets that were transmitted with PS bit clear */ 97962306a36Sopenharmony_ci u32 tx_without_ps; 98062306a36Sopenharmony_ci 98162306a36Sopenharmony_ci /* the number of received beacons */ 98262306a36Sopenharmony_ci u32 rcvd_beacons; 98362306a36Sopenharmony_ci 98462306a36Sopenharmony_ci /* the number of entering into PowerOn (power save off) */ 98562306a36Sopenharmony_ci u32 power_save_off; 98662306a36Sopenharmony_ci 98762306a36Sopenharmony_ci /* the number of entries into power save mode */ 98862306a36Sopenharmony_ci u16 enable_ps; 98962306a36Sopenharmony_ci 99062306a36Sopenharmony_ci /* 99162306a36Sopenharmony_ci * the number of exits from power save, not including failed PS 99262306a36Sopenharmony_ci * transitions 99362306a36Sopenharmony_ci */ 99462306a36Sopenharmony_ci u16 disable_ps; 99562306a36Sopenharmony_ci 99662306a36Sopenharmony_ci /* 99762306a36Sopenharmony_ci * the number of times the TSF counter was adjusted because 99862306a36Sopenharmony_ci * of drift 99962306a36Sopenharmony_ci */ 100062306a36Sopenharmony_ci u32 fix_tsf_ps; 100162306a36Sopenharmony_ci 100262306a36Sopenharmony_ci /* Gives statistics about the spread continuous missed beacons. 100362306a36Sopenharmony_ci * The 16 LSB are dedicated for the PS mode. 100462306a36Sopenharmony_ci * The 16 MSB are dedicated for the PS mode. 100562306a36Sopenharmony_ci * cont_miss_bcns_spread[0] - single missed beacon. 100662306a36Sopenharmony_ci * cont_miss_bcns_spread[1] - two continuous missed beacons. 100762306a36Sopenharmony_ci * cont_miss_bcns_spread[2] - three continuous missed beacons. 100862306a36Sopenharmony_ci * ... 100962306a36Sopenharmony_ci * cont_miss_bcns_spread[9] - ten and more continuous missed beacons. 101062306a36Sopenharmony_ci */ 101162306a36Sopenharmony_ci u32 cont_miss_bcns_spread[ACX_MISSED_BEACONS_SPREAD]; 101262306a36Sopenharmony_ci 101362306a36Sopenharmony_ci /* the number of beacons in awake mode */ 101462306a36Sopenharmony_ci u32 rcvd_awake_beacons; 101562306a36Sopenharmony_ci} __packed; 101662306a36Sopenharmony_ci 101762306a36Sopenharmony_cistruct acx_mic_statistics { 101862306a36Sopenharmony_ci u32 rx_pkts; 101962306a36Sopenharmony_ci u32 calc_failure; 102062306a36Sopenharmony_ci} __packed; 102162306a36Sopenharmony_ci 102262306a36Sopenharmony_cistruct acx_aes_statistics { 102362306a36Sopenharmony_ci u32 encrypt_fail; 102462306a36Sopenharmony_ci u32 decrypt_fail; 102562306a36Sopenharmony_ci u32 encrypt_packets; 102662306a36Sopenharmony_ci u32 decrypt_packets; 102762306a36Sopenharmony_ci u32 encrypt_interrupt; 102862306a36Sopenharmony_ci u32 decrypt_interrupt; 102962306a36Sopenharmony_ci} __packed; 103062306a36Sopenharmony_ci 103162306a36Sopenharmony_cistruct acx_event_statistics { 103262306a36Sopenharmony_ci u32 heart_beat; 103362306a36Sopenharmony_ci u32 calibration; 103462306a36Sopenharmony_ci u32 rx_mismatch; 103562306a36Sopenharmony_ci u32 rx_mem_empty; 103662306a36Sopenharmony_ci u32 rx_pool; 103762306a36Sopenharmony_ci u32 oom_late; 103862306a36Sopenharmony_ci u32 phy_transmit_error; 103962306a36Sopenharmony_ci u32 tx_stuck; 104062306a36Sopenharmony_ci} __packed; 104162306a36Sopenharmony_ci 104262306a36Sopenharmony_cistruct acx_ps_statistics { 104362306a36Sopenharmony_ci u32 pspoll_timeouts; 104462306a36Sopenharmony_ci u32 upsd_timeouts; 104562306a36Sopenharmony_ci u32 upsd_max_sptime; 104662306a36Sopenharmony_ci u32 upsd_max_apturn; 104762306a36Sopenharmony_ci u32 pspoll_max_apturn; 104862306a36Sopenharmony_ci u32 pspoll_utilization; 104962306a36Sopenharmony_ci u32 upsd_utilization; 105062306a36Sopenharmony_ci} __packed; 105162306a36Sopenharmony_ci 105262306a36Sopenharmony_cistruct acx_rxpipe_statistics { 105362306a36Sopenharmony_ci u32 rx_prep_beacon_drop; 105462306a36Sopenharmony_ci u32 descr_host_int_trig_rx_data; 105562306a36Sopenharmony_ci u32 beacon_buffer_thres_host_int_trig_rx_data; 105662306a36Sopenharmony_ci u32 missed_beacon_host_int_trig_rx_data; 105762306a36Sopenharmony_ci u32 tx_xfr_host_int_trig_rx_data; 105862306a36Sopenharmony_ci} __packed; 105962306a36Sopenharmony_ci 106062306a36Sopenharmony_cistruct acx_statistics { 106162306a36Sopenharmony_ci struct acx_header header; 106262306a36Sopenharmony_ci 106362306a36Sopenharmony_ci struct acx_tx_statistics tx; 106462306a36Sopenharmony_ci struct acx_rx_statistics rx; 106562306a36Sopenharmony_ci struct acx_dma_statistics dma; 106662306a36Sopenharmony_ci struct acx_isr_statistics isr; 106762306a36Sopenharmony_ci struct acx_wep_statistics wep; 106862306a36Sopenharmony_ci struct acx_pwr_statistics pwr; 106962306a36Sopenharmony_ci struct acx_aes_statistics aes; 107062306a36Sopenharmony_ci struct acx_mic_statistics mic; 107162306a36Sopenharmony_ci struct acx_event_statistics event; 107262306a36Sopenharmony_ci struct acx_ps_statistics ps; 107362306a36Sopenharmony_ci struct acx_rxpipe_statistics rxpipe; 107462306a36Sopenharmony_ci} __packed; 107562306a36Sopenharmony_ci 107662306a36Sopenharmony_ci#define ACX_MAX_RATE_CLASSES 8 107762306a36Sopenharmony_ci#define ACX_RATE_MASK_UNSPECIFIED 0 107862306a36Sopenharmony_ci#define ACX_RATE_RETRY_LIMIT 10 107962306a36Sopenharmony_ci 108062306a36Sopenharmony_cistruct acx_rate_class { 108162306a36Sopenharmony_ci u32 enabled_rates; 108262306a36Sopenharmony_ci u8 short_retry_limit; 108362306a36Sopenharmony_ci u8 long_retry_limit; 108462306a36Sopenharmony_ci u8 aflags; 108562306a36Sopenharmony_ci u8 reserved; 108662306a36Sopenharmony_ci} __packed; 108762306a36Sopenharmony_ci 108862306a36Sopenharmony_cistruct acx_rate_policy { 108962306a36Sopenharmony_ci struct acx_header header; 109062306a36Sopenharmony_ci 109162306a36Sopenharmony_ci u32 rate_class_cnt; 109262306a36Sopenharmony_ci struct acx_rate_class rate_class[ACX_MAX_RATE_CLASSES]; 109362306a36Sopenharmony_ci} __packed; 109462306a36Sopenharmony_ci 109562306a36Sopenharmony_cistruct wl1251_acx_memory { 109662306a36Sopenharmony_ci __le16 num_stations; /* number of STAs to be supported. */ 109762306a36Sopenharmony_ci u16 reserved_1; 109862306a36Sopenharmony_ci 109962306a36Sopenharmony_ci /* 110062306a36Sopenharmony_ci * Nmber of memory buffers for the RX mem pool. 110162306a36Sopenharmony_ci * The actual number may be less if there are 110262306a36Sopenharmony_ci * not enough blocks left for the minimum num 110362306a36Sopenharmony_ci * of TX ones. 110462306a36Sopenharmony_ci */ 110562306a36Sopenharmony_ci u8 rx_mem_block_num; 110662306a36Sopenharmony_ci u8 reserved_2; 110762306a36Sopenharmony_ci u8 num_tx_queues; /* From 1 to 16 */ 110862306a36Sopenharmony_ci u8 host_if_options; /* HOST_IF* */ 110962306a36Sopenharmony_ci u8 tx_min_mem_block_num; 111062306a36Sopenharmony_ci u8 num_ssid_profiles; 111162306a36Sopenharmony_ci __le16 debug_buffer_size; 111262306a36Sopenharmony_ci} __packed; 111362306a36Sopenharmony_ci 111462306a36Sopenharmony_ci 111562306a36Sopenharmony_ci#define ACX_RX_DESC_MIN 1 111662306a36Sopenharmony_ci#define ACX_RX_DESC_MAX 127 111762306a36Sopenharmony_ci#define ACX_RX_DESC_DEF 32 111862306a36Sopenharmony_cistruct wl1251_acx_rx_queue_config { 111962306a36Sopenharmony_ci u8 num_descs; 112062306a36Sopenharmony_ci u8 pad; 112162306a36Sopenharmony_ci u8 type; 112262306a36Sopenharmony_ci u8 priority; 112362306a36Sopenharmony_ci __le32 dma_address; 112462306a36Sopenharmony_ci} __packed; 112562306a36Sopenharmony_ci 112662306a36Sopenharmony_ci#define ACX_TX_DESC_MIN 1 112762306a36Sopenharmony_ci#define ACX_TX_DESC_MAX 127 112862306a36Sopenharmony_ci#define ACX_TX_DESC_DEF 16 112962306a36Sopenharmony_cistruct wl1251_acx_tx_queue_config { 113062306a36Sopenharmony_ci u8 num_descs; 113162306a36Sopenharmony_ci u8 pad[2]; 113262306a36Sopenharmony_ci u8 attributes; 113362306a36Sopenharmony_ci} __packed; 113462306a36Sopenharmony_ci 113562306a36Sopenharmony_ci#define MAX_TX_QUEUE_CONFIGS 5 113662306a36Sopenharmony_ci#define MAX_TX_QUEUES 4 113762306a36Sopenharmony_cistruct wl1251_acx_config_memory { 113862306a36Sopenharmony_ci struct acx_header header; 113962306a36Sopenharmony_ci 114062306a36Sopenharmony_ci struct wl1251_acx_memory mem_config; 114162306a36Sopenharmony_ci struct wl1251_acx_rx_queue_config rx_queue_config; 114262306a36Sopenharmony_ci struct wl1251_acx_tx_queue_config tx_queue_config[MAX_TX_QUEUE_CONFIGS]; 114362306a36Sopenharmony_ci} __packed; 114462306a36Sopenharmony_ci 114562306a36Sopenharmony_cistruct wl1251_acx_mem_map { 114662306a36Sopenharmony_ci struct acx_header header; 114762306a36Sopenharmony_ci 114862306a36Sopenharmony_ci void *code_start; 114962306a36Sopenharmony_ci void *code_end; 115062306a36Sopenharmony_ci 115162306a36Sopenharmony_ci void *wep_defkey_start; 115262306a36Sopenharmony_ci void *wep_defkey_end; 115362306a36Sopenharmony_ci 115462306a36Sopenharmony_ci void *sta_table_start; 115562306a36Sopenharmony_ci void *sta_table_end; 115662306a36Sopenharmony_ci 115762306a36Sopenharmony_ci void *packet_template_start; 115862306a36Sopenharmony_ci void *packet_template_end; 115962306a36Sopenharmony_ci 116062306a36Sopenharmony_ci void *queue_memory_start; 116162306a36Sopenharmony_ci void *queue_memory_end; 116262306a36Sopenharmony_ci 116362306a36Sopenharmony_ci void *packet_memory_pool_start; 116462306a36Sopenharmony_ci void *packet_memory_pool_end; 116562306a36Sopenharmony_ci 116662306a36Sopenharmony_ci void *debug_buffer1_start; 116762306a36Sopenharmony_ci void *debug_buffer1_end; 116862306a36Sopenharmony_ci 116962306a36Sopenharmony_ci void *debug_buffer2_start; 117062306a36Sopenharmony_ci void *debug_buffer2_end; 117162306a36Sopenharmony_ci 117262306a36Sopenharmony_ci /* Number of blocks FW allocated for TX packets */ 117362306a36Sopenharmony_ci u32 num_tx_mem_blocks; 117462306a36Sopenharmony_ci 117562306a36Sopenharmony_ci /* Number of blocks FW allocated for RX packets */ 117662306a36Sopenharmony_ci u32 num_rx_mem_blocks; 117762306a36Sopenharmony_ci} __packed; 117862306a36Sopenharmony_ci 117962306a36Sopenharmony_ci 118062306a36Sopenharmony_cistruct wl1251_acx_wr_tbtt_and_dtim { 118162306a36Sopenharmony_ci 118262306a36Sopenharmony_ci struct acx_header header; 118362306a36Sopenharmony_ci 118462306a36Sopenharmony_ci /* Time in TUs between two consecutive beacons */ 118562306a36Sopenharmony_ci u16 tbtt; 118662306a36Sopenharmony_ci 118762306a36Sopenharmony_ci /* 118862306a36Sopenharmony_ci * DTIM period 118962306a36Sopenharmony_ci * For BSS: Number of TBTTs in a DTIM period (range: 1-10) 119062306a36Sopenharmony_ci * For IBSS: value shall be set to 1 119162306a36Sopenharmony_ci */ 119262306a36Sopenharmony_ci u8 dtim; 119362306a36Sopenharmony_ci u8 padding; 119462306a36Sopenharmony_ci} __packed; 119562306a36Sopenharmony_ci 119662306a36Sopenharmony_cienum wl1251_acx_bet_mode { 119762306a36Sopenharmony_ci WL1251_ACX_BET_DISABLE = 0, 119862306a36Sopenharmony_ci WL1251_ACX_BET_ENABLE = 1, 119962306a36Sopenharmony_ci}; 120062306a36Sopenharmony_ci 120162306a36Sopenharmony_cistruct wl1251_acx_bet_enable { 120262306a36Sopenharmony_ci struct acx_header header; 120362306a36Sopenharmony_ci 120462306a36Sopenharmony_ci /* 120562306a36Sopenharmony_ci * Specifies if beacon early termination procedure is enabled or 120662306a36Sopenharmony_ci * disabled, see enum wl1251_acx_bet_mode. 120762306a36Sopenharmony_ci */ 120862306a36Sopenharmony_ci u8 enable; 120962306a36Sopenharmony_ci 121062306a36Sopenharmony_ci /* 121162306a36Sopenharmony_ci * Specifies the maximum number of consecutive beacons that may be 121262306a36Sopenharmony_ci * early terminated. After this number is reached at least one full 121362306a36Sopenharmony_ci * beacon must be correctly received in FW before beacon ET 121462306a36Sopenharmony_ci * resumes. Range 0 - 255. 121562306a36Sopenharmony_ci */ 121662306a36Sopenharmony_ci u8 max_consecutive; 121762306a36Sopenharmony_ci 121862306a36Sopenharmony_ci u8 padding[2]; 121962306a36Sopenharmony_ci} __packed; 122062306a36Sopenharmony_ci 122162306a36Sopenharmony_ci#define ACX_IPV4_VERSION 4 122262306a36Sopenharmony_ci#define ACX_IPV6_VERSION 6 122362306a36Sopenharmony_ci#define ACX_IPV4_ADDR_SIZE 4 122462306a36Sopenharmony_cistruct wl1251_acx_arp_filter { 122562306a36Sopenharmony_ci struct acx_header header; 122662306a36Sopenharmony_ci u8 version; /* The IP version: 4 - IPv4, 6 - IPv6.*/ 122762306a36Sopenharmony_ci u8 enable; /* 1 - ARP filtering is enabled, 0 - disabled */ 122862306a36Sopenharmony_ci u8 padding[2]; 122962306a36Sopenharmony_ci u8 address[16]; /* The IP address used to filter ARP packets. 123062306a36Sopenharmony_ci ARP packets that do not match this address are 123162306a36Sopenharmony_ci dropped. When the IP Version is 4, the last 12 123262306a36Sopenharmony_ci bytes of the address are ignored. */ 123362306a36Sopenharmony_ci} __attribute__((packed)); 123462306a36Sopenharmony_ci 123562306a36Sopenharmony_cistruct wl1251_acx_ac_cfg { 123662306a36Sopenharmony_ci struct acx_header header; 123762306a36Sopenharmony_ci 123862306a36Sopenharmony_ci /* 123962306a36Sopenharmony_ci * Access Category - The TX queue's access category 124062306a36Sopenharmony_ci * (refer to AccessCategory_enum) 124162306a36Sopenharmony_ci */ 124262306a36Sopenharmony_ci u8 ac; 124362306a36Sopenharmony_ci 124462306a36Sopenharmony_ci /* 124562306a36Sopenharmony_ci * The contention window minimum size (in slots) for 124662306a36Sopenharmony_ci * the access class. 124762306a36Sopenharmony_ci */ 124862306a36Sopenharmony_ci u8 cw_min; 124962306a36Sopenharmony_ci 125062306a36Sopenharmony_ci /* 125162306a36Sopenharmony_ci * The contention window maximum size (in slots) for 125262306a36Sopenharmony_ci * the access class. 125362306a36Sopenharmony_ci */ 125462306a36Sopenharmony_ci u16 cw_max; 125562306a36Sopenharmony_ci 125662306a36Sopenharmony_ci /* The AIF value (in slots) for the access class. */ 125762306a36Sopenharmony_ci u8 aifsn; 125862306a36Sopenharmony_ci 125962306a36Sopenharmony_ci u8 reserved; 126062306a36Sopenharmony_ci 126162306a36Sopenharmony_ci /* The TX Op Limit (in microseconds) for the access class. */ 126262306a36Sopenharmony_ci u16 txop_limit; 126362306a36Sopenharmony_ci} __packed; 126462306a36Sopenharmony_ci 126562306a36Sopenharmony_ci 126662306a36Sopenharmony_cienum wl1251_acx_channel_type { 126762306a36Sopenharmony_ci CHANNEL_TYPE_DCF = 0, 126862306a36Sopenharmony_ci CHANNEL_TYPE_EDCF = 1, 126962306a36Sopenharmony_ci CHANNEL_TYPE_HCCA = 2, 127062306a36Sopenharmony_ci}; 127162306a36Sopenharmony_ci 127262306a36Sopenharmony_cienum wl1251_acx_ps_scheme { 127362306a36Sopenharmony_ci /* regular ps: simple sending of packets */ 127462306a36Sopenharmony_ci WL1251_ACX_PS_SCHEME_LEGACY = 0, 127562306a36Sopenharmony_ci 127662306a36Sopenharmony_ci /* sending a packet triggers a unscheduled apsd downstream */ 127762306a36Sopenharmony_ci WL1251_ACX_PS_SCHEME_UPSD_TRIGGER = 1, 127862306a36Sopenharmony_ci 127962306a36Sopenharmony_ci /* a pspoll packet will be sent before every data packet */ 128062306a36Sopenharmony_ci WL1251_ACX_PS_SCHEME_LEGACY_PSPOLL = 2, 128162306a36Sopenharmony_ci 128262306a36Sopenharmony_ci /* scheduled apsd mode */ 128362306a36Sopenharmony_ci WL1251_ACX_PS_SCHEME_SAPSD = 3, 128462306a36Sopenharmony_ci}; 128562306a36Sopenharmony_ci 128662306a36Sopenharmony_cienum wl1251_acx_ack_policy { 128762306a36Sopenharmony_ci WL1251_ACX_ACK_POLICY_LEGACY = 0, 128862306a36Sopenharmony_ci WL1251_ACX_ACK_POLICY_NO_ACK = 1, 128962306a36Sopenharmony_ci WL1251_ACX_ACK_POLICY_BLOCK = 2, 129062306a36Sopenharmony_ci}; 129162306a36Sopenharmony_ci 129262306a36Sopenharmony_cistruct wl1251_acx_tid_cfg { 129362306a36Sopenharmony_ci struct acx_header header; 129462306a36Sopenharmony_ci 129562306a36Sopenharmony_ci /* tx queue id number (0-7) */ 129662306a36Sopenharmony_ci u8 queue; 129762306a36Sopenharmony_ci 129862306a36Sopenharmony_ci /* channel access type for the queue, enum wl1251_acx_channel_type */ 129962306a36Sopenharmony_ci u8 type; 130062306a36Sopenharmony_ci 130162306a36Sopenharmony_ci /* EDCA: ac index (0-3), HCCA: traffic stream id (8-15) */ 130262306a36Sopenharmony_ci u8 tsid; 130362306a36Sopenharmony_ci 130462306a36Sopenharmony_ci /* ps scheme of the specified queue, enum wl1251_acx_ps_scheme */ 130562306a36Sopenharmony_ci u8 ps_scheme; 130662306a36Sopenharmony_ci 130762306a36Sopenharmony_ci /* the tx queue ack policy, enum wl1251_acx_ack_policy */ 130862306a36Sopenharmony_ci u8 ack_policy; 130962306a36Sopenharmony_ci 131062306a36Sopenharmony_ci u8 padding[3]; 131162306a36Sopenharmony_ci 131262306a36Sopenharmony_ci /* not supported */ 131362306a36Sopenharmony_ci u32 apsdconf[2]; 131462306a36Sopenharmony_ci} __packed; 131562306a36Sopenharmony_ci 131662306a36Sopenharmony_ci/************************************************************************* 131762306a36Sopenharmony_ci 131862306a36Sopenharmony_ci Host Interrupt Register (WiLink -> Host) 131962306a36Sopenharmony_ci 132062306a36Sopenharmony_ci**************************************************************************/ 132162306a36Sopenharmony_ci 132262306a36Sopenharmony_ci/* RX packet is ready in Xfer buffer #0 */ 132362306a36Sopenharmony_ci#define WL1251_ACX_INTR_RX0_DATA BIT(0) 132462306a36Sopenharmony_ci 132562306a36Sopenharmony_ci/* TX result(s) are in the TX complete buffer */ 132662306a36Sopenharmony_ci#define WL1251_ACX_INTR_TX_RESULT BIT(1) 132762306a36Sopenharmony_ci 132862306a36Sopenharmony_ci/* OBSOLETE */ 132962306a36Sopenharmony_ci#define WL1251_ACX_INTR_TX_XFR BIT(2) 133062306a36Sopenharmony_ci 133162306a36Sopenharmony_ci/* RX packet is ready in Xfer buffer #1 */ 133262306a36Sopenharmony_ci#define WL1251_ACX_INTR_RX1_DATA BIT(3) 133362306a36Sopenharmony_ci 133462306a36Sopenharmony_ci/* Event was entered to Event MBOX #A */ 133562306a36Sopenharmony_ci#define WL1251_ACX_INTR_EVENT_A BIT(4) 133662306a36Sopenharmony_ci 133762306a36Sopenharmony_ci/* Event was entered to Event MBOX #B */ 133862306a36Sopenharmony_ci#define WL1251_ACX_INTR_EVENT_B BIT(5) 133962306a36Sopenharmony_ci 134062306a36Sopenharmony_ci/* OBSOLETE */ 134162306a36Sopenharmony_ci#define WL1251_ACX_INTR_WAKE_ON_HOST BIT(6) 134262306a36Sopenharmony_ci 134362306a36Sopenharmony_ci/* Trace message on MBOX #A */ 134462306a36Sopenharmony_ci#define WL1251_ACX_INTR_TRACE_A BIT(7) 134562306a36Sopenharmony_ci 134662306a36Sopenharmony_ci/* Trace message on MBOX #B */ 134762306a36Sopenharmony_ci#define WL1251_ACX_INTR_TRACE_B BIT(8) 134862306a36Sopenharmony_ci 134962306a36Sopenharmony_ci/* Command processing completion */ 135062306a36Sopenharmony_ci#define WL1251_ACX_INTR_CMD_COMPLETE BIT(9) 135162306a36Sopenharmony_ci 135262306a36Sopenharmony_ci/* Init sequence is done */ 135362306a36Sopenharmony_ci#define WL1251_ACX_INTR_INIT_COMPLETE BIT(14) 135462306a36Sopenharmony_ci 135562306a36Sopenharmony_ci#define WL1251_ACX_INTR_ALL 0xFFFFFFFF 135662306a36Sopenharmony_ci 135762306a36Sopenharmony_cienum { 135862306a36Sopenharmony_ci ACX_WAKE_UP_CONDITIONS = 0x0002, 135962306a36Sopenharmony_ci ACX_MEM_CFG = 0x0003, 136062306a36Sopenharmony_ci ACX_SLOT = 0x0004, 136162306a36Sopenharmony_ci ACX_QUEUE_HEAD = 0x0005, /* for MASTER mode only */ 136262306a36Sopenharmony_ci ACX_AC_CFG = 0x0007, 136362306a36Sopenharmony_ci ACX_MEM_MAP = 0x0008, 136462306a36Sopenharmony_ci ACX_AID = 0x000A, 136562306a36Sopenharmony_ci ACX_RADIO_PARAM = 0x000B, /* Not used */ 136662306a36Sopenharmony_ci ACX_CFG = 0x000C, /* Not used */ 136762306a36Sopenharmony_ci ACX_FW_REV = 0x000D, 136862306a36Sopenharmony_ci ACX_MEDIUM_USAGE = 0x000F, 136962306a36Sopenharmony_ci ACX_RX_CFG = 0x0010, 137062306a36Sopenharmony_ci ACX_TX_QUEUE_CFG = 0x0011, /* FIXME: only used by wl1251 */ 137162306a36Sopenharmony_ci ACX_BSS_IN_PS = 0x0012, /* for AP only */ 137262306a36Sopenharmony_ci ACX_STATISTICS = 0x0013, /* Debug API */ 137362306a36Sopenharmony_ci ACX_FEATURE_CFG = 0x0015, 137462306a36Sopenharmony_ci ACX_MISC_CFG = 0x0017, /* Not used */ 137562306a36Sopenharmony_ci ACX_TID_CFG = 0x001A, 137662306a36Sopenharmony_ci ACX_BEACON_FILTER_OPT = 0x001F, 137762306a36Sopenharmony_ci ACX_LOW_RSSI = 0x0020, 137862306a36Sopenharmony_ci ACX_NOISE_HIST = 0x0021, 137962306a36Sopenharmony_ci ACX_HDK_VERSION = 0x0022, /* ??? */ 138062306a36Sopenharmony_ci ACX_PD_THRESHOLD = 0x0023, 138162306a36Sopenharmony_ci ACX_DATA_PATH_PARAMS = 0x0024, /* WO */ 138262306a36Sopenharmony_ci ACX_DATA_PATH_RESP_PARAMS = 0x0024, /* RO */ 138362306a36Sopenharmony_ci ACX_CCA_THRESHOLD = 0x0025, 138462306a36Sopenharmony_ci ACX_EVENT_MBOX_MASK = 0x0026, 138562306a36Sopenharmony_ci#ifdef FW_RUNNING_AS_AP 138662306a36Sopenharmony_ci ACX_DTIM_PERIOD = 0x0027, /* for AP only */ 138762306a36Sopenharmony_ci#else 138862306a36Sopenharmony_ci ACX_WR_TBTT_AND_DTIM = 0x0027, /* STA only */ 138962306a36Sopenharmony_ci#endif 139062306a36Sopenharmony_ci ACX_ACI_OPTION_CFG = 0x0029, /* OBSOLETE (for 1251)*/ 139162306a36Sopenharmony_ci ACX_GPIO_CFG = 0x002A, /* Not used */ 139262306a36Sopenharmony_ci ACX_GPIO_SET = 0x002B, /* Not used */ 139362306a36Sopenharmony_ci ACX_PM_CFG = 0x002C, /* To Be Documented */ 139462306a36Sopenharmony_ci ACX_CONN_MONIT_PARAMS = 0x002D, 139562306a36Sopenharmony_ci ACX_AVERAGE_RSSI = 0x002E, /* Not used */ 139662306a36Sopenharmony_ci ACX_CONS_TX_FAILURE = 0x002F, 139762306a36Sopenharmony_ci ACX_BCN_DTIM_OPTIONS = 0x0031, 139862306a36Sopenharmony_ci ACX_SG_ENABLE = 0x0032, 139962306a36Sopenharmony_ci ACX_SG_CFG = 0x0033, 140062306a36Sopenharmony_ci ACX_ANTENNA_DIVERSITY_CFG = 0x0035, /* To Be Documented */ 140162306a36Sopenharmony_ci ACX_LOW_SNR = 0x0037, /* To Be Documented */ 140262306a36Sopenharmony_ci ACX_BEACON_FILTER_TABLE = 0x0038, 140362306a36Sopenharmony_ci ACX_ARP_IP_FILTER = 0x0039, 140462306a36Sopenharmony_ci ACX_ROAMING_STATISTICS_TBL = 0x003B, 140562306a36Sopenharmony_ci ACX_RATE_POLICY = 0x003D, 140662306a36Sopenharmony_ci ACX_CTS_PROTECTION = 0x003E, 140762306a36Sopenharmony_ci ACX_SLEEP_AUTH = 0x003F, 140862306a36Sopenharmony_ci ACX_PREAMBLE_TYPE = 0x0040, 140962306a36Sopenharmony_ci ACX_ERROR_CNT = 0x0041, 141062306a36Sopenharmony_ci ACX_FW_GEN_FRAME_RATES = 0x0042, 141162306a36Sopenharmony_ci ACX_IBSS_FILTER = 0x0044, 141262306a36Sopenharmony_ci ACX_SERVICE_PERIOD_TIMEOUT = 0x0045, 141362306a36Sopenharmony_ci ACX_TSF_INFO = 0x0046, 141462306a36Sopenharmony_ci ACX_CONFIG_PS_WMM = 0x0049, 141562306a36Sopenharmony_ci ACX_ENABLE_RX_DATA_FILTER = 0x004A, 141662306a36Sopenharmony_ci ACX_SET_RX_DATA_FILTER = 0x004B, 141762306a36Sopenharmony_ci ACX_GET_DATA_FILTER_STATISTICS = 0x004C, 141862306a36Sopenharmony_ci ACX_POWER_LEVEL_TABLE = 0x004D, 141962306a36Sopenharmony_ci ACX_BET_ENABLE = 0x0050, 142062306a36Sopenharmony_ci DOT11_STATION_ID = 0x1001, 142162306a36Sopenharmony_ci DOT11_RX_MSDU_LIFE_TIME = 0x1004, 142262306a36Sopenharmony_ci DOT11_CUR_TX_PWR = 0x100D, 142362306a36Sopenharmony_ci DOT11_DEFAULT_KEY = 0x1010, 142462306a36Sopenharmony_ci DOT11_RX_DOT11_MODE = 0x1012, 142562306a36Sopenharmony_ci DOT11_RTS_THRESHOLD = 0x1013, 142662306a36Sopenharmony_ci DOT11_GROUP_ADDRESS_TBL = 0x1014, 142762306a36Sopenharmony_ci 142862306a36Sopenharmony_ci MAX_DOT11_IE = DOT11_GROUP_ADDRESS_TBL, 142962306a36Sopenharmony_ci 143062306a36Sopenharmony_ci MAX_IE = 0xFFFF 143162306a36Sopenharmony_ci}; 143262306a36Sopenharmony_ci 143362306a36Sopenharmony_ci 143462306a36Sopenharmony_ciint wl1251_acx_frame_rates(struct wl1251 *wl, u8 ctrl_rate, u8 ctrl_mod, 143562306a36Sopenharmony_ci u8 mgt_rate, u8 mgt_mod); 143662306a36Sopenharmony_ciint wl1251_acx_station_id(struct wl1251 *wl); 143762306a36Sopenharmony_ciint wl1251_acx_default_key(struct wl1251 *wl, u8 key_id); 143862306a36Sopenharmony_ciint wl1251_acx_wake_up_conditions(struct wl1251 *wl, u8 wake_up_event, 143962306a36Sopenharmony_ci u8 listen_interval); 144062306a36Sopenharmony_ciint wl1251_acx_sleep_auth(struct wl1251 *wl, u8 sleep_auth); 144162306a36Sopenharmony_ciint wl1251_acx_fw_version(struct wl1251 *wl, char *buf, size_t len); 144262306a36Sopenharmony_ciint wl1251_acx_tx_power(struct wl1251 *wl, int power); 144362306a36Sopenharmony_ciint wl1251_acx_feature_cfg(struct wl1251 *wl, u32 data_flow_options); 144462306a36Sopenharmony_ciint wl1251_acx_mem_map(struct wl1251 *wl, 144562306a36Sopenharmony_ci struct acx_header *mem_map, size_t len); 144662306a36Sopenharmony_ciint wl1251_acx_data_path_params(struct wl1251 *wl, 144762306a36Sopenharmony_ci struct acx_data_path_params_resp *data_path); 144862306a36Sopenharmony_ciint wl1251_acx_rx_msdu_life_time(struct wl1251 *wl, u32 life_time); 144962306a36Sopenharmony_ciint wl1251_acx_rx_config(struct wl1251 *wl, u32 config, u32 filter); 145062306a36Sopenharmony_ciint wl1251_acx_pd_threshold(struct wl1251 *wl); 145162306a36Sopenharmony_ciint wl1251_acx_slot(struct wl1251 *wl, enum acx_slot_type slot_time); 145262306a36Sopenharmony_ciint wl1251_acx_group_address_tbl(struct wl1251 *wl, bool enable, 145362306a36Sopenharmony_ci void *mc_list, u32 mc_list_len); 145462306a36Sopenharmony_ciint wl1251_acx_service_period_timeout(struct wl1251 *wl); 145562306a36Sopenharmony_ciint wl1251_acx_rts_threshold(struct wl1251 *wl, u16 rts_threshold); 145662306a36Sopenharmony_ciint wl1251_acx_beacon_filter_opt(struct wl1251 *wl, bool enable_filter); 145762306a36Sopenharmony_ciint wl1251_acx_beacon_filter_table(struct wl1251 *wl); 145862306a36Sopenharmony_ciint wl1251_acx_conn_monit_params(struct wl1251 *wl); 145962306a36Sopenharmony_ciint wl1251_acx_sg_enable(struct wl1251 *wl); 146062306a36Sopenharmony_ciint wl1251_acx_sg_cfg(struct wl1251 *wl); 146162306a36Sopenharmony_ciint wl1251_acx_cca_threshold(struct wl1251 *wl); 146262306a36Sopenharmony_ciint wl1251_acx_bcn_dtim_options(struct wl1251 *wl); 146362306a36Sopenharmony_ciint wl1251_acx_aid(struct wl1251 *wl, u16 aid); 146462306a36Sopenharmony_ciint wl1251_acx_event_mbox_mask(struct wl1251 *wl, u32 event_mask); 146562306a36Sopenharmony_ciint wl1251_acx_low_rssi(struct wl1251 *wl, s8 threshold, u8 weight, 146662306a36Sopenharmony_ci u8 depth, enum wl1251_acx_low_rssi_type type); 146762306a36Sopenharmony_ciint wl1251_acx_set_preamble(struct wl1251 *wl, enum acx_preamble_type preamble); 146862306a36Sopenharmony_ciint wl1251_acx_cts_protect(struct wl1251 *wl, 146962306a36Sopenharmony_ci enum acx_ctsprotect_type ctsprotect); 147062306a36Sopenharmony_ciint wl1251_acx_statistics(struct wl1251 *wl, struct acx_statistics *stats); 147162306a36Sopenharmony_ciint wl1251_acx_tsf_info(struct wl1251 *wl, u64 *mactime); 147262306a36Sopenharmony_ciint wl1251_acx_rate_policies(struct wl1251 *wl); 147362306a36Sopenharmony_ciint wl1251_acx_mem_cfg(struct wl1251 *wl); 147462306a36Sopenharmony_ciint wl1251_acx_wr_tbtt_and_dtim(struct wl1251 *wl, u16 tbtt, u8 dtim); 147562306a36Sopenharmony_ciint wl1251_acx_bet_enable(struct wl1251 *wl, enum wl1251_acx_bet_mode mode, 147662306a36Sopenharmony_ci u8 max_consecutive); 147762306a36Sopenharmony_ciint wl1251_acx_arp_ip_filter(struct wl1251 *wl, bool enable, __be32 address); 147862306a36Sopenharmony_ciint wl1251_acx_ac_cfg(struct wl1251 *wl, u8 ac, u8 cw_min, u16 cw_max, 147962306a36Sopenharmony_ci u8 aifs, u16 txop); 148062306a36Sopenharmony_ciint wl1251_acx_tid_cfg(struct wl1251 *wl, u8 queue, 148162306a36Sopenharmony_ci enum wl1251_acx_channel_type type, 148262306a36Sopenharmony_ci u8 tsid, enum wl1251_acx_ps_scheme ps_scheme, 148362306a36Sopenharmony_ci enum wl1251_acx_ack_policy ack_policy); 148462306a36Sopenharmony_ci 148562306a36Sopenharmony_ci#endif /* __WL1251_ACX_H__ */ 1486