18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * This file is part of wl1251 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (c) 1998-2007 Texas Instruments Incorporated 68c2ecf20Sopenharmony_ci * Copyright (C) 2008-2009 Nokia Corporation 78c2ecf20Sopenharmony_ci */ 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#ifndef __WL1251_H__ 108c2ecf20Sopenharmony_ci#define __WL1251_H__ 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci#include <linux/mutex.h> 138c2ecf20Sopenharmony_ci#include <linux/list.h> 148c2ecf20Sopenharmony_ci#include <linux/bitops.h> 158c2ecf20Sopenharmony_ci#include <net/mac80211.h> 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_ci#define DRIVER_NAME "wl1251" 188c2ecf20Sopenharmony_ci#define DRIVER_PREFIX DRIVER_NAME ": " 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_cienum { 218c2ecf20Sopenharmony_ci DEBUG_NONE = 0, 228c2ecf20Sopenharmony_ci DEBUG_IRQ = BIT(0), 238c2ecf20Sopenharmony_ci DEBUG_SPI = BIT(1), 248c2ecf20Sopenharmony_ci DEBUG_BOOT = BIT(2), 258c2ecf20Sopenharmony_ci DEBUG_MAILBOX = BIT(3), 268c2ecf20Sopenharmony_ci DEBUG_NETLINK = BIT(4), 278c2ecf20Sopenharmony_ci DEBUG_EVENT = BIT(5), 288c2ecf20Sopenharmony_ci DEBUG_TX = BIT(6), 298c2ecf20Sopenharmony_ci DEBUG_RX = BIT(7), 308c2ecf20Sopenharmony_ci DEBUG_SCAN = BIT(8), 318c2ecf20Sopenharmony_ci DEBUG_CRYPT = BIT(9), 328c2ecf20Sopenharmony_ci DEBUG_PSM = BIT(10), 338c2ecf20Sopenharmony_ci DEBUG_MAC80211 = BIT(11), 348c2ecf20Sopenharmony_ci DEBUG_CMD = BIT(12), 358c2ecf20Sopenharmony_ci DEBUG_ACX = BIT(13), 368c2ecf20Sopenharmony_ci DEBUG_ALL = ~0, 378c2ecf20Sopenharmony_ci}; 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_ci#define DEBUG_LEVEL (DEBUG_NONE) 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ci#define DEBUG_DUMP_LIMIT 1024 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_ci#define wl1251_error(fmt, arg...) \ 448c2ecf20Sopenharmony_ci printk(KERN_ERR DRIVER_PREFIX "ERROR " fmt "\n", ##arg) 458c2ecf20Sopenharmony_ci 468c2ecf20Sopenharmony_ci#define wl1251_warning(fmt, arg...) \ 478c2ecf20Sopenharmony_ci printk(KERN_WARNING DRIVER_PREFIX "WARNING " fmt "\n", ##arg) 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_ci#define wl1251_notice(fmt, arg...) \ 508c2ecf20Sopenharmony_ci printk(KERN_INFO DRIVER_PREFIX fmt "\n", ##arg) 518c2ecf20Sopenharmony_ci 528c2ecf20Sopenharmony_ci#define wl1251_info(fmt, arg...) \ 538c2ecf20Sopenharmony_ci printk(KERN_DEBUG DRIVER_PREFIX fmt "\n", ##arg) 548c2ecf20Sopenharmony_ci 558c2ecf20Sopenharmony_ci#define wl1251_debug(level, fmt, arg...) \ 568c2ecf20Sopenharmony_ci do { \ 578c2ecf20Sopenharmony_ci if (level & DEBUG_LEVEL) \ 588c2ecf20Sopenharmony_ci printk(KERN_DEBUG DRIVER_PREFIX fmt "\n", ##arg); \ 598c2ecf20Sopenharmony_ci } while (0) 608c2ecf20Sopenharmony_ci 618c2ecf20Sopenharmony_ci#define wl1251_dump(level, prefix, buf, len) \ 628c2ecf20Sopenharmony_ci do { \ 638c2ecf20Sopenharmony_ci if (level & DEBUG_LEVEL) \ 648c2ecf20Sopenharmony_ci print_hex_dump(KERN_DEBUG, DRIVER_PREFIX prefix, \ 658c2ecf20Sopenharmony_ci DUMP_PREFIX_OFFSET, 16, 1, \ 668c2ecf20Sopenharmony_ci buf, \ 678c2ecf20Sopenharmony_ci min_t(size_t, len, DEBUG_DUMP_LIMIT), \ 688c2ecf20Sopenharmony_ci 0); \ 698c2ecf20Sopenharmony_ci } while (0) 708c2ecf20Sopenharmony_ci 718c2ecf20Sopenharmony_ci#define wl1251_dump_ascii(level, prefix, buf, len) \ 728c2ecf20Sopenharmony_ci do { \ 738c2ecf20Sopenharmony_ci if (level & DEBUG_LEVEL) \ 748c2ecf20Sopenharmony_ci print_hex_dump(KERN_DEBUG, DRIVER_PREFIX prefix, \ 758c2ecf20Sopenharmony_ci DUMP_PREFIX_OFFSET, 16, 1, \ 768c2ecf20Sopenharmony_ci buf, \ 778c2ecf20Sopenharmony_ci min_t(size_t, len, DEBUG_DUMP_LIMIT), \ 788c2ecf20Sopenharmony_ci true); \ 798c2ecf20Sopenharmony_ci } while (0) 808c2ecf20Sopenharmony_ci 818c2ecf20Sopenharmony_ci#define WL1251_DEFAULT_RX_CONFIG (CFG_UNI_FILTER_EN | \ 828c2ecf20Sopenharmony_ci CFG_MC_FILTER_EN | \ 838c2ecf20Sopenharmony_ci CFG_BSSID_FILTER_EN) 848c2ecf20Sopenharmony_ci 858c2ecf20Sopenharmony_ci#define WL1251_DEFAULT_RX_FILTER (CFG_RX_PRSP_EN | \ 868c2ecf20Sopenharmony_ci CFG_RX_MGMT_EN | \ 878c2ecf20Sopenharmony_ci CFG_RX_DATA_EN | \ 888c2ecf20Sopenharmony_ci CFG_RX_CTL_EN | \ 898c2ecf20Sopenharmony_ci CFG_RX_BCN_EN | \ 908c2ecf20Sopenharmony_ci CFG_RX_AUTH_EN | \ 918c2ecf20Sopenharmony_ci CFG_RX_ASSOC_EN) 928c2ecf20Sopenharmony_ci 938c2ecf20Sopenharmony_ci#define WL1251_BUSY_WORD_LEN 8 948c2ecf20Sopenharmony_ci 958c2ecf20Sopenharmony_cistruct boot_attr { 968c2ecf20Sopenharmony_ci u32 radio_type; 978c2ecf20Sopenharmony_ci u8 mac_clock; 988c2ecf20Sopenharmony_ci u8 arm_clock; 998c2ecf20Sopenharmony_ci int firmware_debug; 1008c2ecf20Sopenharmony_ci u32 minor; 1018c2ecf20Sopenharmony_ci u32 major; 1028c2ecf20Sopenharmony_ci u32 bugfix; 1038c2ecf20Sopenharmony_ci}; 1048c2ecf20Sopenharmony_ci 1058c2ecf20Sopenharmony_cienum wl1251_state { 1068c2ecf20Sopenharmony_ci WL1251_STATE_OFF, 1078c2ecf20Sopenharmony_ci WL1251_STATE_ON, 1088c2ecf20Sopenharmony_ci WL1251_STATE_PLT, 1098c2ecf20Sopenharmony_ci}; 1108c2ecf20Sopenharmony_ci 1118c2ecf20Sopenharmony_cienum wl1251_partition_type { 1128c2ecf20Sopenharmony_ci PART_DOWN, 1138c2ecf20Sopenharmony_ci PART_WORK, 1148c2ecf20Sopenharmony_ci PART_DRPW, 1158c2ecf20Sopenharmony_ci 1168c2ecf20Sopenharmony_ci PART_TABLE_LEN 1178c2ecf20Sopenharmony_ci}; 1188c2ecf20Sopenharmony_ci 1198c2ecf20Sopenharmony_cienum wl1251_station_mode { 1208c2ecf20Sopenharmony_ci STATION_ACTIVE_MODE, 1218c2ecf20Sopenharmony_ci STATION_POWER_SAVE_MODE, 1228c2ecf20Sopenharmony_ci STATION_IDLE, 1238c2ecf20Sopenharmony_ci}; 1248c2ecf20Sopenharmony_ci 1258c2ecf20Sopenharmony_cistruct wl1251_partition { 1268c2ecf20Sopenharmony_ci u32 size; 1278c2ecf20Sopenharmony_ci u32 start; 1288c2ecf20Sopenharmony_ci}; 1298c2ecf20Sopenharmony_ci 1308c2ecf20Sopenharmony_cistruct wl1251_partition_set { 1318c2ecf20Sopenharmony_ci struct wl1251_partition mem; 1328c2ecf20Sopenharmony_ci struct wl1251_partition reg; 1338c2ecf20Sopenharmony_ci}; 1348c2ecf20Sopenharmony_ci 1358c2ecf20Sopenharmony_cistruct wl1251; 1368c2ecf20Sopenharmony_ci 1378c2ecf20Sopenharmony_cistruct wl1251_stats { 1388c2ecf20Sopenharmony_ci struct acx_statistics *fw_stats; 1398c2ecf20Sopenharmony_ci unsigned long fw_stats_update; 1408c2ecf20Sopenharmony_ci 1418c2ecf20Sopenharmony_ci unsigned int retry_count; 1428c2ecf20Sopenharmony_ci unsigned int excessive_retries; 1438c2ecf20Sopenharmony_ci}; 1448c2ecf20Sopenharmony_ci 1458c2ecf20Sopenharmony_cistruct wl1251_debugfs { 1468c2ecf20Sopenharmony_ci struct dentry *rootdir; 1478c2ecf20Sopenharmony_ci struct dentry *fw_statistics; 1488c2ecf20Sopenharmony_ci 1498c2ecf20Sopenharmony_ci struct dentry *tx_internal_desc_overflow; 1508c2ecf20Sopenharmony_ci 1518c2ecf20Sopenharmony_ci struct dentry *rx_out_of_mem; 1528c2ecf20Sopenharmony_ci struct dentry *rx_hdr_overflow; 1538c2ecf20Sopenharmony_ci struct dentry *rx_hw_stuck; 1548c2ecf20Sopenharmony_ci struct dentry *rx_dropped; 1558c2ecf20Sopenharmony_ci struct dentry *rx_fcs_err; 1568c2ecf20Sopenharmony_ci struct dentry *rx_xfr_hint_trig; 1578c2ecf20Sopenharmony_ci struct dentry *rx_path_reset; 1588c2ecf20Sopenharmony_ci struct dentry *rx_reset_counter; 1598c2ecf20Sopenharmony_ci 1608c2ecf20Sopenharmony_ci struct dentry *dma_rx_requested; 1618c2ecf20Sopenharmony_ci struct dentry *dma_rx_errors; 1628c2ecf20Sopenharmony_ci struct dentry *dma_tx_requested; 1638c2ecf20Sopenharmony_ci struct dentry *dma_tx_errors; 1648c2ecf20Sopenharmony_ci 1658c2ecf20Sopenharmony_ci struct dentry *isr_cmd_cmplt; 1668c2ecf20Sopenharmony_ci struct dentry *isr_fiqs; 1678c2ecf20Sopenharmony_ci struct dentry *isr_rx_headers; 1688c2ecf20Sopenharmony_ci struct dentry *isr_rx_mem_overflow; 1698c2ecf20Sopenharmony_ci struct dentry *isr_rx_rdys; 1708c2ecf20Sopenharmony_ci struct dentry *isr_irqs; 1718c2ecf20Sopenharmony_ci struct dentry *isr_tx_procs; 1728c2ecf20Sopenharmony_ci struct dentry *isr_decrypt_done; 1738c2ecf20Sopenharmony_ci struct dentry *isr_dma0_done; 1748c2ecf20Sopenharmony_ci struct dentry *isr_dma1_done; 1758c2ecf20Sopenharmony_ci struct dentry *isr_tx_exch_complete; 1768c2ecf20Sopenharmony_ci struct dentry *isr_commands; 1778c2ecf20Sopenharmony_ci struct dentry *isr_rx_procs; 1788c2ecf20Sopenharmony_ci struct dentry *isr_hw_pm_mode_changes; 1798c2ecf20Sopenharmony_ci struct dentry *isr_host_acknowledges; 1808c2ecf20Sopenharmony_ci struct dentry *isr_pci_pm; 1818c2ecf20Sopenharmony_ci struct dentry *isr_wakeups; 1828c2ecf20Sopenharmony_ci struct dentry *isr_low_rssi; 1838c2ecf20Sopenharmony_ci 1848c2ecf20Sopenharmony_ci struct dentry *wep_addr_key_count; 1858c2ecf20Sopenharmony_ci struct dentry *wep_default_key_count; 1868c2ecf20Sopenharmony_ci /* skipping wep.reserved */ 1878c2ecf20Sopenharmony_ci struct dentry *wep_key_not_found; 1888c2ecf20Sopenharmony_ci struct dentry *wep_decrypt_fail; 1898c2ecf20Sopenharmony_ci struct dentry *wep_packets; 1908c2ecf20Sopenharmony_ci struct dentry *wep_interrupt; 1918c2ecf20Sopenharmony_ci 1928c2ecf20Sopenharmony_ci struct dentry *pwr_ps_enter; 1938c2ecf20Sopenharmony_ci struct dentry *pwr_elp_enter; 1948c2ecf20Sopenharmony_ci struct dentry *pwr_missing_bcns; 1958c2ecf20Sopenharmony_ci struct dentry *pwr_wake_on_host; 1968c2ecf20Sopenharmony_ci struct dentry *pwr_wake_on_timer_exp; 1978c2ecf20Sopenharmony_ci struct dentry *pwr_tx_with_ps; 1988c2ecf20Sopenharmony_ci struct dentry *pwr_tx_without_ps; 1998c2ecf20Sopenharmony_ci struct dentry *pwr_rcvd_beacons; 2008c2ecf20Sopenharmony_ci struct dentry *pwr_power_save_off; 2018c2ecf20Sopenharmony_ci struct dentry *pwr_enable_ps; 2028c2ecf20Sopenharmony_ci struct dentry *pwr_disable_ps; 2038c2ecf20Sopenharmony_ci struct dentry *pwr_fix_tsf_ps; 2048c2ecf20Sopenharmony_ci /* skipping cont_miss_bcns_spread for now */ 2058c2ecf20Sopenharmony_ci struct dentry *pwr_rcvd_awake_beacons; 2068c2ecf20Sopenharmony_ci 2078c2ecf20Sopenharmony_ci struct dentry *mic_rx_pkts; 2088c2ecf20Sopenharmony_ci struct dentry *mic_calc_failure; 2098c2ecf20Sopenharmony_ci 2108c2ecf20Sopenharmony_ci struct dentry *aes_encrypt_fail; 2118c2ecf20Sopenharmony_ci struct dentry *aes_decrypt_fail; 2128c2ecf20Sopenharmony_ci struct dentry *aes_encrypt_packets; 2138c2ecf20Sopenharmony_ci struct dentry *aes_decrypt_packets; 2148c2ecf20Sopenharmony_ci struct dentry *aes_encrypt_interrupt; 2158c2ecf20Sopenharmony_ci struct dentry *aes_decrypt_interrupt; 2168c2ecf20Sopenharmony_ci 2178c2ecf20Sopenharmony_ci struct dentry *event_heart_beat; 2188c2ecf20Sopenharmony_ci struct dentry *event_calibration; 2198c2ecf20Sopenharmony_ci struct dentry *event_rx_mismatch; 2208c2ecf20Sopenharmony_ci struct dentry *event_rx_mem_empty; 2218c2ecf20Sopenharmony_ci struct dentry *event_rx_pool; 2228c2ecf20Sopenharmony_ci struct dentry *event_oom_late; 2238c2ecf20Sopenharmony_ci struct dentry *event_phy_transmit_error; 2248c2ecf20Sopenharmony_ci struct dentry *event_tx_stuck; 2258c2ecf20Sopenharmony_ci 2268c2ecf20Sopenharmony_ci struct dentry *ps_pspoll_timeouts; 2278c2ecf20Sopenharmony_ci struct dentry *ps_upsd_timeouts; 2288c2ecf20Sopenharmony_ci struct dentry *ps_upsd_max_sptime; 2298c2ecf20Sopenharmony_ci struct dentry *ps_upsd_max_apturn; 2308c2ecf20Sopenharmony_ci struct dentry *ps_pspoll_max_apturn; 2318c2ecf20Sopenharmony_ci struct dentry *ps_pspoll_utilization; 2328c2ecf20Sopenharmony_ci struct dentry *ps_upsd_utilization; 2338c2ecf20Sopenharmony_ci 2348c2ecf20Sopenharmony_ci struct dentry *rxpipe_rx_prep_beacon_drop; 2358c2ecf20Sopenharmony_ci struct dentry *rxpipe_descr_host_int_trig_rx_data; 2368c2ecf20Sopenharmony_ci struct dentry *rxpipe_beacon_buffer_thres_host_int_trig_rx_data; 2378c2ecf20Sopenharmony_ci struct dentry *rxpipe_missed_beacon_host_int_trig_rx_data; 2388c2ecf20Sopenharmony_ci struct dentry *rxpipe_tx_xfr_host_int_trig_rx_data; 2398c2ecf20Sopenharmony_ci 2408c2ecf20Sopenharmony_ci struct dentry *tx_queue_len; 2418c2ecf20Sopenharmony_ci struct dentry *tx_queue_status; 2428c2ecf20Sopenharmony_ci 2438c2ecf20Sopenharmony_ci struct dentry *retry_count; 2448c2ecf20Sopenharmony_ci struct dentry *excessive_retries; 2458c2ecf20Sopenharmony_ci}; 2468c2ecf20Sopenharmony_ci 2478c2ecf20Sopenharmony_cistruct wl1251_if_operations { 2488c2ecf20Sopenharmony_ci void (*read)(struct wl1251 *wl, int addr, void *buf, size_t len); 2498c2ecf20Sopenharmony_ci void (*write)(struct wl1251 *wl, int addr, void *buf, size_t len); 2508c2ecf20Sopenharmony_ci void (*read_elp)(struct wl1251 *wl, int addr, u32 *val); 2518c2ecf20Sopenharmony_ci void (*write_elp)(struct wl1251 *wl, int addr, u32 val); 2528c2ecf20Sopenharmony_ci int (*power)(struct wl1251 *wl, bool enable); 2538c2ecf20Sopenharmony_ci void (*reset)(struct wl1251 *wl); 2548c2ecf20Sopenharmony_ci void (*enable_irq)(struct wl1251 *wl); 2558c2ecf20Sopenharmony_ci void (*disable_irq)(struct wl1251 *wl); 2568c2ecf20Sopenharmony_ci}; 2578c2ecf20Sopenharmony_ci 2588c2ecf20Sopenharmony_cistruct wl1251 { 2598c2ecf20Sopenharmony_ci struct ieee80211_hw *hw; 2608c2ecf20Sopenharmony_ci bool mac80211_registered; 2618c2ecf20Sopenharmony_ci 2628c2ecf20Sopenharmony_ci void *if_priv; 2638c2ecf20Sopenharmony_ci const struct wl1251_if_operations *if_ops; 2648c2ecf20Sopenharmony_ci 2658c2ecf20Sopenharmony_ci int power_gpio; 2668c2ecf20Sopenharmony_ci int irq; 2678c2ecf20Sopenharmony_ci bool use_eeprom; 2688c2ecf20Sopenharmony_ci 2698c2ecf20Sopenharmony_ci struct regulator *vio; 2708c2ecf20Sopenharmony_ci 2718c2ecf20Sopenharmony_ci spinlock_t wl_lock; 2728c2ecf20Sopenharmony_ci 2738c2ecf20Sopenharmony_ci enum wl1251_state state; 2748c2ecf20Sopenharmony_ci struct mutex mutex; 2758c2ecf20Sopenharmony_ci 2768c2ecf20Sopenharmony_ci int physical_mem_addr; 2778c2ecf20Sopenharmony_ci int physical_reg_addr; 2788c2ecf20Sopenharmony_ci int virtual_mem_addr; 2798c2ecf20Sopenharmony_ci int virtual_reg_addr; 2808c2ecf20Sopenharmony_ci 2818c2ecf20Sopenharmony_ci int cmd_box_addr; 2828c2ecf20Sopenharmony_ci int event_box_addr; 2838c2ecf20Sopenharmony_ci struct boot_attr boot_attr; 2848c2ecf20Sopenharmony_ci 2858c2ecf20Sopenharmony_ci u8 *fw; 2868c2ecf20Sopenharmony_ci size_t fw_len; 2878c2ecf20Sopenharmony_ci u8 *nvs; 2888c2ecf20Sopenharmony_ci size_t nvs_len; 2898c2ecf20Sopenharmony_ci 2908c2ecf20Sopenharmony_ci u8 bssid[ETH_ALEN]; 2918c2ecf20Sopenharmony_ci u8 mac_addr[ETH_ALEN]; 2928c2ecf20Sopenharmony_ci u8 bss_type; 2938c2ecf20Sopenharmony_ci u8 listen_int; 2948c2ecf20Sopenharmony_ci int channel; 2958c2ecf20Sopenharmony_ci bool monitor_present; 2968c2ecf20Sopenharmony_ci bool joined; 2978c2ecf20Sopenharmony_ci 2988c2ecf20Sopenharmony_ci void *target_mem_map; 2998c2ecf20Sopenharmony_ci struct acx_data_path_params_resp *data_path; 3008c2ecf20Sopenharmony_ci 3018c2ecf20Sopenharmony_ci /* Number of TX packets transferred to the FW, modulo 16 */ 3028c2ecf20Sopenharmony_ci u32 data_in_count; 3038c2ecf20Sopenharmony_ci 3048c2ecf20Sopenharmony_ci /* Frames scheduled for transmission, not handled yet */ 3058c2ecf20Sopenharmony_ci struct sk_buff_head tx_queue; 3068c2ecf20Sopenharmony_ci bool tx_queue_stopped; 3078c2ecf20Sopenharmony_ci 3088c2ecf20Sopenharmony_ci struct work_struct tx_work; 3098c2ecf20Sopenharmony_ci 3108c2ecf20Sopenharmony_ci /* Pending TX frames */ 3118c2ecf20Sopenharmony_ci struct sk_buff *tx_frames[16]; 3128c2ecf20Sopenharmony_ci 3138c2ecf20Sopenharmony_ci /* 3148c2ecf20Sopenharmony_ci * Index pointing to the next TX complete entry 3158c2ecf20Sopenharmony_ci * in the cyclic XT complete array we get from 3168c2ecf20Sopenharmony_ci * the FW. 3178c2ecf20Sopenharmony_ci */ 3188c2ecf20Sopenharmony_ci u32 next_tx_complete; 3198c2ecf20Sopenharmony_ci 3208c2ecf20Sopenharmony_ci /* FW Rx counter */ 3218c2ecf20Sopenharmony_ci u32 rx_counter; 3228c2ecf20Sopenharmony_ci 3238c2ecf20Sopenharmony_ci /* Rx frames handled */ 3248c2ecf20Sopenharmony_ci u32 rx_handled; 3258c2ecf20Sopenharmony_ci 3268c2ecf20Sopenharmony_ci /* Current double buffer */ 3278c2ecf20Sopenharmony_ci u32 rx_current_buffer; 3288c2ecf20Sopenharmony_ci u32 rx_last_id; 3298c2ecf20Sopenharmony_ci 3308c2ecf20Sopenharmony_ci /* The target interrupt mask */ 3318c2ecf20Sopenharmony_ci u32 intr_mask; 3328c2ecf20Sopenharmony_ci struct work_struct irq_work; 3338c2ecf20Sopenharmony_ci 3348c2ecf20Sopenharmony_ci /* The mbox event mask */ 3358c2ecf20Sopenharmony_ci u32 event_mask; 3368c2ecf20Sopenharmony_ci 3378c2ecf20Sopenharmony_ci /* Mailbox pointers */ 3388c2ecf20Sopenharmony_ci u32 mbox_ptr[2]; 3398c2ecf20Sopenharmony_ci 3408c2ecf20Sopenharmony_ci /* Are we currently scanning */ 3418c2ecf20Sopenharmony_ci bool scanning; 3428c2ecf20Sopenharmony_ci 3438c2ecf20Sopenharmony_ci /* Default key (for WEP) */ 3448c2ecf20Sopenharmony_ci u32 default_key; 3458c2ecf20Sopenharmony_ci 3468c2ecf20Sopenharmony_ci unsigned int tx_mgmt_frm_rate; 3478c2ecf20Sopenharmony_ci unsigned int tx_mgmt_frm_mod; 3488c2ecf20Sopenharmony_ci 3498c2ecf20Sopenharmony_ci unsigned int rx_config; 3508c2ecf20Sopenharmony_ci unsigned int rx_filter; 3518c2ecf20Sopenharmony_ci 3528c2ecf20Sopenharmony_ci /* is firmware in elp mode */ 3538c2ecf20Sopenharmony_ci bool elp; 3548c2ecf20Sopenharmony_ci 3558c2ecf20Sopenharmony_ci struct delayed_work elp_work; 3568c2ecf20Sopenharmony_ci 3578c2ecf20Sopenharmony_ci enum wl1251_station_mode station_mode; 3588c2ecf20Sopenharmony_ci 3598c2ecf20Sopenharmony_ci /* PSM mode requested */ 3608c2ecf20Sopenharmony_ci bool psm_requested; 3618c2ecf20Sopenharmony_ci 3628c2ecf20Sopenharmony_ci /* retry counter for PSM entries */ 3638c2ecf20Sopenharmony_ci u8 psm_entry_retry; 3648c2ecf20Sopenharmony_ci 3658c2ecf20Sopenharmony_ci u16 beacon_int; 3668c2ecf20Sopenharmony_ci u8 dtim_period; 3678c2ecf20Sopenharmony_ci 3688c2ecf20Sopenharmony_ci /* in dBm */ 3698c2ecf20Sopenharmony_ci int power_level; 3708c2ecf20Sopenharmony_ci 3718c2ecf20Sopenharmony_ci int rssi_thold; 3728c2ecf20Sopenharmony_ci 3738c2ecf20Sopenharmony_ci struct wl1251_stats stats; 3748c2ecf20Sopenharmony_ci struct wl1251_debugfs debugfs; 3758c2ecf20Sopenharmony_ci 3768c2ecf20Sopenharmony_ci __le32 buffer_32; 3778c2ecf20Sopenharmony_ci u32 buffer_cmd; 3788c2ecf20Sopenharmony_ci u8 buffer_busyword[WL1251_BUSY_WORD_LEN]; 3798c2ecf20Sopenharmony_ci struct wl1251_rx_descriptor *rx_descriptor; 3808c2ecf20Sopenharmony_ci 3818c2ecf20Sopenharmony_ci struct ieee80211_vif *vif; 3828c2ecf20Sopenharmony_ci 3838c2ecf20Sopenharmony_ci u32 chip_id; 3848c2ecf20Sopenharmony_ci char fw_ver[21]; 3858c2ecf20Sopenharmony_ci 3868c2ecf20Sopenharmony_ci /* Most recently reported noise in dBm */ 3878c2ecf20Sopenharmony_ci s8 noise; 3888c2ecf20Sopenharmony_ci}; 3898c2ecf20Sopenharmony_ci 3908c2ecf20Sopenharmony_ciint wl1251_plt_start(struct wl1251 *wl); 3918c2ecf20Sopenharmony_ciint wl1251_plt_stop(struct wl1251 *wl); 3928c2ecf20Sopenharmony_ci 3938c2ecf20Sopenharmony_cistruct ieee80211_hw *wl1251_alloc_hw(void); 3948c2ecf20Sopenharmony_ciint wl1251_free_hw(struct wl1251 *wl); 3958c2ecf20Sopenharmony_ciint wl1251_init_ieee80211(struct wl1251 *wl); 3968c2ecf20Sopenharmony_civoid wl1251_enable_interrupts(struct wl1251 *wl); 3978c2ecf20Sopenharmony_civoid wl1251_disable_interrupts(struct wl1251 *wl); 3988c2ecf20Sopenharmony_ci 3998c2ecf20Sopenharmony_ci#define DEFAULT_HW_GEN_MODULATION_TYPE CCK_LONG /* Long Preamble */ 4008c2ecf20Sopenharmony_ci#define DEFAULT_HW_GEN_TX_RATE RATE_2MBPS 4018c2ecf20Sopenharmony_ci#define JOIN_TIMEOUT 5000 /* 5000 milliseconds to join */ 4028c2ecf20Sopenharmony_ci 4038c2ecf20Sopenharmony_ci#define WL1251_DEFAULT_POWER_LEVEL 20 4048c2ecf20Sopenharmony_ci 4058c2ecf20Sopenharmony_ci#define WL1251_TX_QUEUE_LOW_WATERMARK 10 4068c2ecf20Sopenharmony_ci#define WL1251_TX_QUEUE_HIGH_WATERMARK 25 4078c2ecf20Sopenharmony_ci 4088c2ecf20Sopenharmony_ci#define WL1251_DEFAULT_BEACON_INT 100 4098c2ecf20Sopenharmony_ci#define WL1251_DEFAULT_DTIM_PERIOD 1 4108c2ecf20Sopenharmony_ci 4118c2ecf20Sopenharmony_ci#define WL1251_DEFAULT_CHANNEL 0 4128c2ecf20Sopenharmony_ci 4138c2ecf20Sopenharmony_ci#define WL1251_DEFAULT_BET_CONSECUTIVE 10 4148c2ecf20Sopenharmony_ci 4158c2ecf20Sopenharmony_ci#define CHIP_ID_1251_PG10 (0x7010101) 4168c2ecf20Sopenharmony_ci#define CHIP_ID_1251_PG11 (0x7020101) 4178c2ecf20Sopenharmony_ci#define CHIP_ID_1251_PG12 (0x7030101) 4188c2ecf20Sopenharmony_ci#define CHIP_ID_1271_PG10 (0x4030101) 4198c2ecf20Sopenharmony_ci#define CHIP_ID_1271_PG20 (0x4030111) 4208c2ecf20Sopenharmony_ci 4218c2ecf20Sopenharmony_ci#define WL1251_FW_NAME "ti-connectivity/wl1251-fw.bin" 4228c2ecf20Sopenharmony_ci#define WL1251_NVS_NAME "ti-connectivity/wl1251-nvs.bin" 4238c2ecf20Sopenharmony_ci 4248c2ecf20Sopenharmony_ci#define WL1251_POWER_ON_SLEEP 10 /* in milliseconds */ 4258c2ecf20Sopenharmony_ci 4268c2ecf20Sopenharmony_ci#define WL1251_PART_DOWN_MEM_START 0x0 4278c2ecf20Sopenharmony_ci#define WL1251_PART_DOWN_MEM_SIZE 0x16800 4288c2ecf20Sopenharmony_ci#define WL1251_PART_DOWN_REG_START REGISTERS_BASE 4298c2ecf20Sopenharmony_ci#define WL1251_PART_DOWN_REG_SIZE REGISTERS_DOWN_SIZE 4308c2ecf20Sopenharmony_ci 4318c2ecf20Sopenharmony_ci#define WL1251_PART_WORK_MEM_START 0x28000 4328c2ecf20Sopenharmony_ci#define WL1251_PART_WORK_MEM_SIZE 0x14000 4338c2ecf20Sopenharmony_ci#define WL1251_PART_WORK_REG_START REGISTERS_BASE 4348c2ecf20Sopenharmony_ci#define WL1251_PART_WORK_REG_SIZE REGISTERS_WORK_SIZE 4358c2ecf20Sopenharmony_ci 4368c2ecf20Sopenharmony_ci#define WL1251_DEFAULT_LOW_RSSI_WEIGHT 10 4378c2ecf20Sopenharmony_ci#define WL1251_DEFAULT_LOW_RSSI_DEPTH 10 4388c2ecf20Sopenharmony_ci 4398c2ecf20Sopenharmony_ci#endif 440