1*2b27bdccSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 22f01a1f5SKalle Valo /* 380301cdcSKalle Valo * This file is part of wl1251 42f01a1f5SKalle Valo * 52f01a1f5SKalle Valo * Copyright (c) 1998-2007 Texas Instruments Incorporated 62f01a1f5SKalle Valo * Copyright (C) 2008-2009 Nokia Corporation 72f01a1f5SKalle Valo */ 82f01a1f5SKalle Valo 980301cdcSKalle Valo #ifndef __WL1251_H__ 1080301cdcSKalle Valo #define __WL1251_H__ 112f01a1f5SKalle Valo 122f01a1f5SKalle Valo #include <linux/mutex.h> 132f01a1f5SKalle Valo #include <linux/list.h> 142f01a1f5SKalle Valo #include <linux/bitops.h> 152f01a1f5SKalle Valo #include <net/mac80211.h> 162f01a1f5SKalle Valo 1780301cdcSKalle Valo #define DRIVER_NAME "wl1251" 182f01a1f5SKalle Valo #define DRIVER_PREFIX DRIVER_NAME ": " 192f01a1f5SKalle Valo 202f01a1f5SKalle Valo enum { 212f01a1f5SKalle Valo DEBUG_NONE = 0, 222f01a1f5SKalle Valo DEBUG_IRQ = BIT(0), 232f01a1f5SKalle Valo DEBUG_SPI = BIT(1), 242f01a1f5SKalle Valo DEBUG_BOOT = BIT(2), 252f01a1f5SKalle Valo DEBUG_MAILBOX = BIT(3), 262f01a1f5SKalle Valo DEBUG_NETLINK = BIT(4), 272f01a1f5SKalle Valo DEBUG_EVENT = BIT(5), 282f01a1f5SKalle Valo DEBUG_TX = BIT(6), 292f01a1f5SKalle Valo DEBUG_RX = BIT(7), 302f01a1f5SKalle Valo DEBUG_SCAN = BIT(8), 312f01a1f5SKalle Valo DEBUG_CRYPT = BIT(9), 322f01a1f5SKalle Valo DEBUG_PSM = BIT(10), 332f01a1f5SKalle Valo DEBUG_MAC80211 = BIT(11), 342f01a1f5SKalle Valo DEBUG_CMD = BIT(12), 352f01a1f5SKalle Valo DEBUG_ACX = BIT(13), 362f01a1f5SKalle Valo DEBUG_ALL = ~0, 372f01a1f5SKalle Valo }; 382f01a1f5SKalle Valo 392f01a1f5SKalle Valo #define DEBUG_LEVEL (DEBUG_NONE) 402f01a1f5SKalle Valo 412f01a1f5SKalle Valo #define DEBUG_DUMP_LIMIT 1024 422f01a1f5SKalle Valo 4380301cdcSKalle Valo #define wl1251_error(fmt, arg...) \ 442f01a1f5SKalle Valo printk(KERN_ERR DRIVER_PREFIX "ERROR " fmt "\n", ##arg) 452f01a1f5SKalle Valo 4680301cdcSKalle Valo #define wl1251_warning(fmt, arg...) \ 472f01a1f5SKalle Valo printk(KERN_WARNING DRIVER_PREFIX "WARNING " fmt "\n", ##arg) 482f01a1f5SKalle Valo 4980301cdcSKalle Valo #define wl1251_notice(fmt, arg...) \ 502f01a1f5SKalle Valo printk(KERN_INFO DRIVER_PREFIX fmt "\n", ##arg) 512f01a1f5SKalle Valo 5280301cdcSKalle Valo #define wl1251_info(fmt, arg...) \ 532f01a1f5SKalle Valo printk(KERN_DEBUG DRIVER_PREFIX fmt "\n", ##arg) 542f01a1f5SKalle Valo 5580301cdcSKalle Valo #define wl1251_debug(level, fmt, arg...) \ 562f01a1f5SKalle Valo do { \ 572f01a1f5SKalle Valo if (level & DEBUG_LEVEL) \ 582f01a1f5SKalle Valo printk(KERN_DEBUG DRIVER_PREFIX fmt "\n", ##arg); \ 592f01a1f5SKalle Valo } while (0) 602f01a1f5SKalle Valo 6180301cdcSKalle Valo #define wl1251_dump(level, prefix, buf, len) \ 622f01a1f5SKalle Valo do { \ 632f01a1f5SKalle Valo if (level & DEBUG_LEVEL) \ 642f01a1f5SKalle Valo print_hex_dump(KERN_DEBUG, DRIVER_PREFIX prefix, \ 652f01a1f5SKalle Valo DUMP_PREFIX_OFFSET, 16, 1, \ 662f01a1f5SKalle Valo buf, \ 672f01a1f5SKalle Valo min_t(size_t, len, DEBUG_DUMP_LIMIT), \ 682f01a1f5SKalle Valo 0); \ 692f01a1f5SKalle Valo } while (0) 702f01a1f5SKalle Valo 7180301cdcSKalle Valo #define wl1251_dump_ascii(level, prefix, buf, len) \ 722f01a1f5SKalle Valo do { \ 732f01a1f5SKalle Valo if (level & DEBUG_LEVEL) \ 742f01a1f5SKalle Valo print_hex_dump(KERN_DEBUG, DRIVER_PREFIX prefix, \ 752f01a1f5SKalle Valo DUMP_PREFIX_OFFSET, 16, 1, \ 762f01a1f5SKalle Valo buf, \ 772f01a1f5SKalle Valo min_t(size_t, len, DEBUG_DUMP_LIMIT), \ 782f01a1f5SKalle Valo true); \ 792f01a1f5SKalle Valo } while (0) 802f01a1f5SKalle Valo 8180301cdcSKalle Valo #define WL1251_DEFAULT_RX_CONFIG (CFG_UNI_FILTER_EN | \ 829ed74ba0SDavid Gnedt CFG_MC_FILTER_EN | \ 832f01a1f5SKalle Valo CFG_BSSID_FILTER_EN) 842f01a1f5SKalle Valo 8580301cdcSKalle Valo #define WL1251_DEFAULT_RX_FILTER (CFG_RX_PRSP_EN | \ 862f01a1f5SKalle Valo CFG_RX_MGMT_EN | \ 872f01a1f5SKalle Valo CFG_RX_DATA_EN | \ 882f01a1f5SKalle Valo CFG_RX_CTL_EN | \ 892f01a1f5SKalle Valo CFG_RX_BCN_EN | \ 902f01a1f5SKalle Valo CFG_RX_AUTH_EN | \ 912f01a1f5SKalle Valo CFG_RX_ASSOC_EN) 922f01a1f5SKalle Valo 9380301cdcSKalle Valo #define WL1251_BUSY_WORD_LEN 8 942f01a1f5SKalle Valo 952f01a1f5SKalle Valo struct boot_attr { 962f01a1f5SKalle Valo u32 radio_type; 972f01a1f5SKalle Valo u8 mac_clock; 982f01a1f5SKalle Valo u8 arm_clock; 992f01a1f5SKalle Valo int firmware_debug; 1002f01a1f5SKalle Valo u32 minor; 1012f01a1f5SKalle Valo u32 major; 1022f01a1f5SKalle Valo u32 bugfix; 1032f01a1f5SKalle Valo }; 1042f01a1f5SKalle Valo 10580301cdcSKalle Valo enum wl1251_state { 10680301cdcSKalle Valo WL1251_STATE_OFF, 10780301cdcSKalle Valo WL1251_STATE_ON, 10880301cdcSKalle Valo WL1251_STATE_PLT, 1092f01a1f5SKalle Valo }; 1102f01a1f5SKalle Valo 11180301cdcSKalle Valo enum wl1251_partition_type { 1122f01a1f5SKalle Valo PART_DOWN, 1132f01a1f5SKalle Valo PART_WORK, 1142f01a1f5SKalle Valo PART_DRPW, 1152f01a1f5SKalle Valo 1162f01a1f5SKalle Valo PART_TABLE_LEN 1172f01a1f5SKalle Valo }; 1182f01a1f5SKalle Valo 119a0bbb58bSJarkko Nikula enum wl1251_station_mode { 120a0bbb58bSJarkko Nikula STATION_ACTIVE_MODE, 121a0bbb58bSJarkko Nikula STATION_POWER_SAVE_MODE, 1221e5f52deSJarkko Nikula STATION_IDLE, 123a0bbb58bSJarkko Nikula }; 124a0bbb58bSJarkko Nikula 12580301cdcSKalle Valo struct wl1251_partition { 1262f01a1f5SKalle Valo u32 size; 1272f01a1f5SKalle Valo u32 start; 1282f01a1f5SKalle Valo }; 1292f01a1f5SKalle Valo 13080301cdcSKalle Valo struct wl1251_partition_set { 13180301cdcSKalle Valo struct wl1251_partition mem; 13280301cdcSKalle Valo struct wl1251_partition reg; 1332f01a1f5SKalle Valo }; 1342f01a1f5SKalle Valo 13580301cdcSKalle Valo struct wl1251; 1362f01a1f5SKalle Valo 13780301cdcSKalle Valo struct wl1251_stats { 1382f01a1f5SKalle Valo struct acx_statistics *fw_stats; 1392f01a1f5SKalle Valo unsigned long fw_stats_update; 1402f01a1f5SKalle Valo 1412f01a1f5SKalle Valo unsigned int retry_count; 1422f01a1f5SKalle Valo unsigned int excessive_retries; 1432f01a1f5SKalle Valo }; 1442f01a1f5SKalle Valo 14580301cdcSKalle Valo struct wl1251_debugfs { 1462f01a1f5SKalle Valo struct dentry *rootdir; 1472f01a1f5SKalle Valo struct dentry *fw_statistics; 1482f01a1f5SKalle Valo 1492f01a1f5SKalle Valo struct dentry *tx_internal_desc_overflow; 1502f01a1f5SKalle Valo 1512f01a1f5SKalle Valo struct dentry *rx_out_of_mem; 1522f01a1f5SKalle Valo struct dentry *rx_hdr_overflow; 1532f01a1f5SKalle Valo struct dentry *rx_hw_stuck; 1542f01a1f5SKalle Valo struct dentry *rx_dropped; 1552f01a1f5SKalle Valo struct dentry *rx_fcs_err; 1562f01a1f5SKalle Valo struct dentry *rx_xfr_hint_trig; 1572f01a1f5SKalle Valo struct dentry *rx_path_reset; 1582f01a1f5SKalle Valo struct dentry *rx_reset_counter; 1592f01a1f5SKalle Valo 1602f01a1f5SKalle Valo struct dentry *dma_rx_requested; 1612f01a1f5SKalle Valo struct dentry *dma_rx_errors; 1622f01a1f5SKalle Valo struct dentry *dma_tx_requested; 1632f01a1f5SKalle Valo struct dentry *dma_tx_errors; 1642f01a1f5SKalle Valo 1652f01a1f5SKalle Valo struct dentry *isr_cmd_cmplt; 1662f01a1f5SKalle Valo struct dentry *isr_fiqs; 1672f01a1f5SKalle Valo struct dentry *isr_rx_headers; 1682f01a1f5SKalle Valo struct dentry *isr_rx_mem_overflow; 1692f01a1f5SKalle Valo struct dentry *isr_rx_rdys; 1702f01a1f5SKalle Valo struct dentry *isr_irqs; 1712f01a1f5SKalle Valo struct dentry *isr_tx_procs; 1722f01a1f5SKalle Valo struct dentry *isr_decrypt_done; 1732f01a1f5SKalle Valo struct dentry *isr_dma0_done; 1742f01a1f5SKalle Valo struct dentry *isr_dma1_done; 1752f01a1f5SKalle Valo struct dentry *isr_tx_exch_complete; 1762f01a1f5SKalle Valo struct dentry *isr_commands; 1772f01a1f5SKalle Valo struct dentry *isr_rx_procs; 1782f01a1f5SKalle Valo struct dentry *isr_hw_pm_mode_changes; 1792f01a1f5SKalle Valo struct dentry *isr_host_acknowledges; 1802f01a1f5SKalle Valo struct dentry *isr_pci_pm; 1812f01a1f5SKalle Valo struct dentry *isr_wakeups; 1822f01a1f5SKalle Valo struct dentry *isr_low_rssi; 1832f01a1f5SKalle Valo 1842f01a1f5SKalle Valo struct dentry *wep_addr_key_count; 1852f01a1f5SKalle Valo struct dentry *wep_default_key_count; 1862f01a1f5SKalle Valo /* skipping wep.reserved */ 1872f01a1f5SKalle Valo struct dentry *wep_key_not_found; 1882f01a1f5SKalle Valo struct dentry *wep_decrypt_fail; 1892f01a1f5SKalle Valo struct dentry *wep_packets; 1902f01a1f5SKalle Valo struct dentry *wep_interrupt; 1912f01a1f5SKalle Valo 1922f01a1f5SKalle Valo struct dentry *pwr_ps_enter; 1932f01a1f5SKalle Valo struct dentry *pwr_elp_enter; 1942f01a1f5SKalle Valo struct dentry *pwr_missing_bcns; 1952f01a1f5SKalle Valo struct dentry *pwr_wake_on_host; 1962f01a1f5SKalle Valo struct dentry *pwr_wake_on_timer_exp; 1972f01a1f5SKalle Valo struct dentry *pwr_tx_with_ps; 1982f01a1f5SKalle Valo struct dentry *pwr_tx_without_ps; 1992f01a1f5SKalle Valo struct dentry *pwr_rcvd_beacons; 2002f01a1f5SKalle Valo struct dentry *pwr_power_save_off; 2012f01a1f5SKalle Valo struct dentry *pwr_enable_ps; 2022f01a1f5SKalle Valo struct dentry *pwr_disable_ps; 2032f01a1f5SKalle Valo struct dentry *pwr_fix_tsf_ps; 2042f01a1f5SKalle Valo /* skipping cont_miss_bcns_spread for now */ 2052f01a1f5SKalle Valo struct dentry *pwr_rcvd_awake_beacons; 2062f01a1f5SKalle Valo 2072f01a1f5SKalle Valo struct dentry *mic_rx_pkts; 2082f01a1f5SKalle Valo struct dentry *mic_calc_failure; 2092f01a1f5SKalle Valo 2102f01a1f5SKalle Valo struct dentry *aes_encrypt_fail; 2112f01a1f5SKalle Valo struct dentry *aes_decrypt_fail; 2122f01a1f5SKalle Valo struct dentry *aes_encrypt_packets; 2132f01a1f5SKalle Valo struct dentry *aes_decrypt_packets; 2142f01a1f5SKalle Valo struct dentry *aes_encrypt_interrupt; 2152f01a1f5SKalle Valo struct dentry *aes_decrypt_interrupt; 2162f01a1f5SKalle Valo 2172f01a1f5SKalle Valo struct dentry *event_heart_beat; 2182f01a1f5SKalle Valo struct dentry *event_calibration; 2192f01a1f5SKalle Valo struct dentry *event_rx_mismatch; 2202f01a1f5SKalle Valo struct dentry *event_rx_mem_empty; 2212f01a1f5SKalle Valo struct dentry *event_rx_pool; 2222f01a1f5SKalle Valo struct dentry *event_oom_late; 2232f01a1f5SKalle Valo struct dentry *event_phy_transmit_error; 2242f01a1f5SKalle Valo struct dentry *event_tx_stuck; 2252f01a1f5SKalle Valo 2262f01a1f5SKalle Valo struct dentry *ps_pspoll_timeouts; 2272f01a1f5SKalle Valo struct dentry *ps_upsd_timeouts; 2282f01a1f5SKalle Valo struct dentry *ps_upsd_max_sptime; 2292f01a1f5SKalle Valo struct dentry *ps_upsd_max_apturn; 2302f01a1f5SKalle Valo struct dentry *ps_pspoll_max_apturn; 2312f01a1f5SKalle Valo struct dentry *ps_pspoll_utilization; 2322f01a1f5SKalle Valo struct dentry *ps_upsd_utilization; 2332f01a1f5SKalle Valo 2342f01a1f5SKalle Valo struct dentry *rxpipe_rx_prep_beacon_drop; 2352f01a1f5SKalle Valo struct dentry *rxpipe_descr_host_int_trig_rx_data; 2362f01a1f5SKalle Valo struct dentry *rxpipe_beacon_buffer_thres_host_int_trig_rx_data; 2372f01a1f5SKalle Valo struct dentry *rxpipe_missed_beacon_host_int_trig_rx_data; 2382f01a1f5SKalle Valo struct dentry *rxpipe_tx_xfr_host_int_trig_rx_data; 2392f01a1f5SKalle Valo 2402f01a1f5SKalle Valo struct dentry *tx_queue_len; 241b7339b1dSKalle Valo struct dentry *tx_queue_status; 2422f01a1f5SKalle Valo 2432f01a1f5SKalle Valo struct dentry *retry_count; 2442f01a1f5SKalle Valo struct dentry *excessive_retries; 2452f01a1f5SKalle Valo }; 2462f01a1f5SKalle Valo 24708d9f572SBob Copeland struct wl1251_if_operations { 24808d9f572SBob Copeland void (*read)(struct wl1251 *wl, int addr, void *buf, size_t len); 24908d9f572SBob Copeland void (*write)(struct wl1251 *wl, int addr, void *buf, size_t len); 2503f9e750dSGrazvydas Ignotas void (*read_elp)(struct wl1251 *wl, int addr, u32 *val); 2513f9e750dSGrazvydas Ignotas void (*write_elp)(struct wl1251 *wl, int addr, u32 val); 252cb7bbc7aSGrazvydas Ignotas int (*power)(struct wl1251 *wl, bool enable); 25308d9f572SBob Copeland void (*reset)(struct wl1251 *wl); 254b5ed9c1bSBob Copeland void (*enable_irq)(struct wl1251 *wl); 255b5ed9c1bSBob Copeland void (*disable_irq)(struct wl1251 *wl); 25608d9f572SBob Copeland }; 25708d9f572SBob Copeland 25880301cdcSKalle Valo struct wl1251 { 2592f01a1f5SKalle Valo struct ieee80211_hw *hw; 2602f01a1f5SKalle Valo bool mac80211_registered; 2612f01a1f5SKalle Valo 262af8c78ebSBob Copeland void *if_priv; 2638e639c06SBob Copeland const struct wl1251_if_operations *if_ops; 2642f01a1f5SKalle Valo 2652f01a1f5SKalle Valo int irq; 266c95cf3d0SDavid-John Willis bool use_eeprom; 2672f01a1f5SKalle Valo 268e4c2e09eSSebastian Reichel struct regulator *vio; 269e4c2e09eSSebastian Reichel 2709df86e2eSDenis 'GNUtoo' Carikli spinlock_t wl_lock; 2719df86e2eSDenis 'GNUtoo' Carikli 27280301cdcSKalle Valo enum wl1251_state state; 2732f01a1f5SKalle Valo struct mutex mutex; 2742f01a1f5SKalle Valo 2752f01a1f5SKalle Valo int physical_mem_addr; 2762f01a1f5SKalle Valo int physical_reg_addr; 2772f01a1f5SKalle Valo int virtual_mem_addr; 2782f01a1f5SKalle Valo int virtual_reg_addr; 2792f01a1f5SKalle Valo 2802f01a1f5SKalle Valo int cmd_box_addr; 2812f01a1f5SKalle Valo int event_box_addr; 2822f01a1f5SKalle Valo struct boot_attr boot_attr; 2832f01a1f5SKalle Valo 2842f01a1f5SKalle Valo u8 *fw; 2852f01a1f5SKalle Valo size_t fw_len; 2862f01a1f5SKalle Valo u8 *nvs; 2872f01a1f5SKalle Valo size_t nvs_len; 2882f01a1f5SKalle Valo 2892f01a1f5SKalle Valo u8 bssid[ETH_ALEN]; 2902f01a1f5SKalle Valo u8 mac_addr[ETH_ALEN]; 2912f01a1f5SKalle Valo u8 bss_type; 2922f01a1f5SKalle Valo u8 listen_int; 2932f01a1f5SKalle Valo int channel; 2944d09b537SDavid Gnedt bool monitor_present; 295c8909e5aSDavid Gnedt bool joined; 2962f01a1f5SKalle Valo 2972f01a1f5SKalle Valo void *target_mem_map; 2982f01a1f5SKalle Valo struct acx_data_path_params_resp *data_path; 2992f01a1f5SKalle Valo 3002f01a1f5SKalle Valo /* Number of TX packets transferred to the FW, modulo 16 */ 3012f01a1f5SKalle Valo u32 data_in_count; 3022f01a1f5SKalle Valo 3032f01a1f5SKalle Valo /* Frames scheduled for transmission, not handled yet */ 3042f01a1f5SKalle Valo struct sk_buff_head tx_queue; 3052f01a1f5SKalle Valo bool tx_queue_stopped; 3062f01a1f5SKalle Valo 3072f01a1f5SKalle Valo struct work_struct tx_work; 3082f01a1f5SKalle Valo 3092f01a1f5SKalle Valo /* Pending TX frames */ 3102f01a1f5SKalle Valo struct sk_buff *tx_frames[16]; 3112f01a1f5SKalle Valo 3122f01a1f5SKalle Valo /* 3132f01a1f5SKalle Valo * Index pointing to the next TX complete entry 3142f01a1f5SKalle Valo * in the cyclic XT complete array we get from 3152f01a1f5SKalle Valo * the FW. 3162f01a1f5SKalle Valo */ 3172f01a1f5SKalle Valo u32 next_tx_complete; 3182f01a1f5SKalle Valo 3192f01a1f5SKalle Valo /* FW Rx counter */ 3202f01a1f5SKalle Valo u32 rx_counter; 3212f01a1f5SKalle Valo 3222f01a1f5SKalle Valo /* Rx frames handled */ 3232f01a1f5SKalle Valo u32 rx_handled; 3242f01a1f5SKalle Valo 3252f01a1f5SKalle Valo /* Current double buffer */ 3262f01a1f5SKalle Valo u32 rx_current_buffer; 3272f01a1f5SKalle Valo u32 rx_last_id; 3282f01a1f5SKalle Valo 3292f01a1f5SKalle Valo /* The target interrupt mask */ 3302f01a1f5SKalle Valo u32 intr_mask; 3312f01a1f5SKalle Valo struct work_struct irq_work; 3322f01a1f5SKalle Valo 3332f01a1f5SKalle Valo /* The mbox event mask */ 3342f01a1f5SKalle Valo u32 event_mask; 3352f01a1f5SKalle Valo 3362f01a1f5SKalle Valo /* Mailbox pointers */ 3372f01a1f5SKalle Valo u32 mbox_ptr[2]; 3382f01a1f5SKalle Valo 3392f01a1f5SKalle Valo /* Are we currently scanning */ 3402f01a1f5SKalle Valo bool scanning; 3412f01a1f5SKalle Valo 3422f01a1f5SKalle Valo /* Default key (for WEP) */ 3432f01a1f5SKalle Valo u32 default_key; 3442f01a1f5SKalle Valo 3452f01a1f5SKalle Valo unsigned int tx_mgmt_frm_rate; 3462f01a1f5SKalle Valo unsigned int tx_mgmt_frm_mod; 3472f01a1f5SKalle Valo 3482f01a1f5SKalle Valo unsigned int rx_config; 3492f01a1f5SKalle Valo unsigned int rx_filter; 3502f01a1f5SKalle Valo 3512f01a1f5SKalle Valo /* is firmware in elp mode */ 3522f01a1f5SKalle Valo bool elp; 3532f01a1f5SKalle Valo 354d5da79acSJuuso Oikarinen struct delayed_work elp_work; 355d5da79acSJuuso Oikarinen 356a0bbb58bSJarkko Nikula enum wl1251_station_mode station_mode; 3572f01a1f5SKalle Valo 3582f01a1f5SKalle Valo /* PSM mode requested */ 3592f01a1f5SKalle Valo bool psm_requested; 3602f01a1f5SKalle Valo 361f7ad1eedSDavid Gnedt /* retry counter for PSM entries */ 362f7ad1eedSDavid Gnedt u8 psm_entry_retry; 363f7ad1eedSDavid Gnedt 364e2fd4611SKalle Valo u16 beacon_int; 365e2fd4611SKalle Valo u8 dtim_period; 366e2fd4611SKalle Valo 3672f01a1f5SKalle Valo /* in dBm */ 3682f01a1f5SKalle Valo int power_level; 3692f01a1f5SKalle Valo 3708964e492SDavid Gnedt int rssi_thold; 3718964e492SDavid Gnedt 37280301cdcSKalle Valo struct wl1251_stats stats; 37380301cdcSKalle Valo struct wl1251_debugfs debugfs; 3741d3b8130SKalle Valo 375ac9e2d9aSLuciano Coelho __le32 buffer_32; 37656343a3cSKalle Valo u32 buffer_cmd; 37780301cdcSKalle Valo u8 buffer_busyword[WL1251_BUSY_WORD_LEN]; 37880301cdcSKalle Valo struct wl1251_rx_descriptor *rx_descriptor; 3790e71bb08SKalle Valo 380287f6f96SJuuso Oikarinen struct ieee80211_vif *vif; 381287f6f96SJuuso Oikarinen 3820e71bb08SKalle Valo u32 chip_id; 3830e71bb08SKalle Valo char fw_ver[21]; 38419434148SJohn W. Linville 38519434148SJohn W. Linville /* Most recently reported noise in dBm */ 38619434148SJohn W. Linville s8 noise; 3872f01a1f5SKalle Valo }; 3882f01a1f5SKalle Valo 38980301cdcSKalle Valo int wl1251_plt_start(struct wl1251 *wl); 39080301cdcSKalle Valo int wl1251_plt_stop(struct wl1251 *wl); 3912f01a1f5SKalle Valo 3928e639c06SBob Copeland struct ieee80211_hw *wl1251_alloc_hw(void); 3938e639c06SBob Copeland int wl1251_free_hw(struct wl1251 *wl); 3948e639c06SBob Copeland int wl1251_init_ieee80211(struct wl1251 *wl); 395b5ed9c1bSBob Copeland void wl1251_enable_interrupts(struct wl1251 *wl); 396b5ed9c1bSBob Copeland void wl1251_disable_interrupts(struct wl1251 *wl); 3978e639c06SBob Copeland 3982f01a1f5SKalle Valo #define DEFAULT_HW_GEN_MODULATION_TYPE CCK_LONG /* Long Preamble */ 3992f01a1f5SKalle Valo #define DEFAULT_HW_GEN_TX_RATE RATE_2MBPS 4002f01a1f5SKalle Valo #define JOIN_TIMEOUT 5000 /* 5000 milliseconds to join */ 4012f01a1f5SKalle Valo 40280301cdcSKalle Valo #define WL1251_DEFAULT_POWER_LEVEL 20 4032f01a1f5SKalle Valo 4049df86e2eSDenis 'GNUtoo' Carikli #define WL1251_TX_QUEUE_LOW_WATERMARK 10 4059df86e2eSDenis 'GNUtoo' Carikli #define WL1251_TX_QUEUE_HIGH_WATERMARK 25 4062f01a1f5SKalle Valo 407e2fd4611SKalle Valo #define WL1251_DEFAULT_BEACON_INT 100 408e2fd4611SKalle Valo #define WL1251_DEFAULT_DTIM_PERIOD 1 409e2fd4611SKalle Valo 4109780279cSKalle Valo #define WL1251_DEFAULT_CHANNEL 0 4119780279cSKalle Valo 412c3e334d2SDavid Gnedt #define WL1251_DEFAULT_BET_CONSECUTIVE 10 413c3e334d2SDavid Gnedt 4142f01a1f5SKalle Valo #define CHIP_ID_1251_PG10 (0x7010101) 4152f01a1f5SKalle Valo #define CHIP_ID_1251_PG11 (0x7020101) 4162f01a1f5SKalle Valo #define CHIP_ID_1251_PG12 (0x7030101) 4172f01a1f5SKalle Valo #define CHIP_ID_1271_PG10 (0x4030101) 41827797d68SLuciano Coelho #define CHIP_ID_1271_PG20 (0x4030111) 4192f01a1f5SKalle Valo 4209f55c620SFelipe Balbi #define WL1251_FW_NAME "ti-connectivity/wl1251-fw.bin" 4219f55c620SFelipe Balbi #define WL1251_NVS_NAME "ti-connectivity/wl1251-nvs.bin" 4220e71bb08SKalle Valo 423e8a8b252SStefan Weil #define WL1251_POWER_ON_SLEEP 10 /* in milliseconds */ 4240e71bb08SKalle Valo 4250e71bb08SKalle Valo #define WL1251_PART_DOWN_MEM_START 0x0 4260e71bb08SKalle Valo #define WL1251_PART_DOWN_MEM_SIZE 0x16800 4270e71bb08SKalle Valo #define WL1251_PART_DOWN_REG_START REGISTERS_BASE 4280e71bb08SKalle Valo #define WL1251_PART_DOWN_REG_SIZE REGISTERS_DOWN_SIZE 4290e71bb08SKalle Valo 4300e71bb08SKalle Valo #define WL1251_PART_WORK_MEM_START 0x28000 4310e71bb08SKalle Valo #define WL1251_PART_WORK_MEM_SIZE 0x14000 4320e71bb08SKalle Valo #define WL1251_PART_WORK_REG_START REGISTERS_BASE 4330e71bb08SKalle Valo #define WL1251_PART_WORK_REG_SIZE REGISTERS_WORK_SIZE 4340e71bb08SKalle Valo 4358964e492SDavid Gnedt #define WL1251_DEFAULT_LOW_RSSI_WEIGHT 10 4368964e492SDavid Gnedt #define WL1251_DEFAULT_LOW_RSSI_DEPTH 10 4378964e492SDavid Gnedt 4382f01a1f5SKalle Valo #endif 439