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-2009 Nokia Corporation 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#ifndef __WL1251_H__ 1062306a36Sopenharmony_ci#define __WL1251_H__ 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include <linux/mutex.h> 1362306a36Sopenharmony_ci#include <linux/list.h> 1462306a36Sopenharmony_ci#include <linux/bitops.h> 1562306a36Sopenharmony_ci#include <net/mac80211.h> 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#define DRIVER_NAME "wl1251" 1862306a36Sopenharmony_ci#define DRIVER_PREFIX DRIVER_NAME ": " 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_cienum { 2162306a36Sopenharmony_ci DEBUG_NONE = 0, 2262306a36Sopenharmony_ci DEBUG_IRQ = BIT(0), 2362306a36Sopenharmony_ci DEBUG_SPI = BIT(1), 2462306a36Sopenharmony_ci DEBUG_BOOT = BIT(2), 2562306a36Sopenharmony_ci DEBUG_MAILBOX = BIT(3), 2662306a36Sopenharmony_ci DEBUG_NETLINK = BIT(4), 2762306a36Sopenharmony_ci DEBUG_EVENT = BIT(5), 2862306a36Sopenharmony_ci DEBUG_TX = BIT(6), 2962306a36Sopenharmony_ci DEBUG_RX = BIT(7), 3062306a36Sopenharmony_ci DEBUG_SCAN = BIT(8), 3162306a36Sopenharmony_ci DEBUG_CRYPT = BIT(9), 3262306a36Sopenharmony_ci DEBUG_PSM = BIT(10), 3362306a36Sopenharmony_ci DEBUG_MAC80211 = BIT(11), 3462306a36Sopenharmony_ci DEBUG_CMD = BIT(12), 3562306a36Sopenharmony_ci DEBUG_ACX = BIT(13), 3662306a36Sopenharmony_ci DEBUG_ALL = ~0, 3762306a36Sopenharmony_ci}; 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci#define DEBUG_LEVEL (DEBUG_NONE) 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci#define DEBUG_DUMP_LIMIT 1024 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci#define wl1251_error(fmt, arg...) \ 4462306a36Sopenharmony_ci printk(KERN_ERR DRIVER_PREFIX "ERROR " fmt "\n", ##arg) 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci#define wl1251_warning(fmt, arg...) \ 4762306a36Sopenharmony_ci printk(KERN_WARNING DRIVER_PREFIX "WARNING " fmt "\n", ##arg) 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci#define wl1251_notice(fmt, arg...) \ 5062306a36Sopenharmony_ci printk(KERN_INFO DRIVER_PREFIX fmt "\n", ##arg) 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci#define wl1251_info(fmt, arg...) \ 5362306a36Sopenharmony_ci printk(KERN_DEBUG DRIVER_PREFIX fmt "\n", ##arg) 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci#define wl1251_debug(level, fmt, arg...) \ 5662306a36Sopenharmony_ci do { \ 5762306a36Sopenharmony_ci if (level & DEBUG_LEVEL) \ 5862306a36Sopenharmony_ci printk(KERN_DEBUG DRIVER_PREFIX fmt "\n", ##arg); \ 5962306a36Sopenharmony_ci } while (0) 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci#define wl1251_dump(level, prefix, buf, len) \ 6262306a36Sopenharmony_ci do { \ 6362306a36Sopenharmony_ci if (level & DEBUG_LEVEL) \ 6462306a36Sopenharmony_ci print_hex_dump(KERN_DEBUG, DRIVER_PREFIX prefix, \ 6562306a36Sopenharmony_ci DUMP_PREFIX_OFFSET, 16, 1, \ 6662306a36Sopenharmony_ci buf, \ 6762306a36Sopenharmony_ci min_t(size_t, len, DEBUG_DUMP_LIMIT), \ 6862306a36Sopenharmony_ci 0); \ 6962306a36Sopenharmony_ci } while (0) 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ci#define wl1251_dump_ascii(level, prefix, buf, len) \ 7262306a36Sopenharmony_ci do { \ 7362306a36Sopenharmony_ci if (level & DEBUG_LEVEL) \ 7462306a36Sopenharmony_ci print_hex_dump(KERN_DEBUG, DRIVER_PREFIX prefix, \ 7562306a36Sopenharmony_ci DUMP_PREFIX_OFFSET, 16, 1, \ 7662306a36Sopenharmony_ci buf, \ 7762306a36Sopenharmony_ci min_t(size_t, len, DEBUG_DUMP_LIMIT), \ 7862306a36Sopenharmony_ci true); \ 7962306a36Sopenharmony_ci } while (0) 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci#define WL1251_DEFAULT_RX_CONFIG (CFG_UNI_FILTER_EN | \ 8262306a36Sopenharmony_ci CFG_MC_FILTER_EN | \ 8362306a36Sopenharmony_ci CFG_BSSID_FILTER_EN) 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ci#define WL1251_DEFAULT_RX_FILTER (CFG_RX_PRSP_EN | \ 8662306a36Sopenharmony_ci CFG_RX_MGMT_EN | \ 8762306a36Sopenharmony_ci CFG_RX_DATA_EN | \ 8862306a36Sopenharmony_ci CFG_RX_CTL_EN | \ 8962306a36Sopenharmony_ci CFG_RX_BCN_EN | \ 9062306a36Sopenharmony_ci CFG_RX_AUTH_EN | \ 9162306a36Sopenharmony_ci CFG_RX_ASSOC_EN) 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ci#define WL1251_BUSY_WORD_LEN 8 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_cistruct boot_attr { 9662306a36Sopenharmony_ci u32 radio_type; 9762306a36Sopenharmony_ci u8 mac_clock; 9862306a36Sopenharmony_ci u8 arm_clock; 9962306a36Sopenharmony_ci int firmware_debug; 10062306a36Sopenharmony_ci u32 minor; 10162306a36Sopenharmony_ci u32 major; 10262306a36Sopenharmony_ci u32 bugfix; 10362306a36Sopenharmony_ci}; 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_cienum wl1251_state { 10662306a36Sopenharmony_ci WL1251_STATE_OFF, 10762306a36Sopenharmony_ci WL1251_STATE_ON, 10862306a36Sopenharmony_ci WL1251_STATE_PLT, 10962306a36Sopenharmony_ci}; 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_cienum wl1251_partition_type { 11262306a36Sopenharmony_ci PART_DOWN, 11362306a36Sopenharmony_ci PART_WORK, 11462306a36Sopenharmony_ci PART_DRPW, 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_ci PART_TABLE_LEN 11762306a36Sopenharmony_ci}; 11862306a36Sopenharmony_ci 11962306a36Sopenharmony_cienum wl1251_station_mode { 12062306a36Sopenharmony_ci STATION_ACTIVE_MODE, 12162306a36Sopenharmony_ci STATION_POWER_SAVE_MODE, 12262306a36Sopenharmony_ci STATION_IDLE, 12362306a36Sopenharmony_ci}; 12462306a36Sopenharmony_ci 12562306a36Sopenharmony_cistruct wl1251_partition { 12662306a36Sopenharmony_ci u32 size; 12762306a36Sopenharmony_ci u32 start; 12862306a36Sopenharmony_ci}; 12962306a36Sopenharmony_ci 13062306a36Sopenharmony_cistruct wl1251_partition_set { 13162306a36Sopenharmony_ci struct wl1251_partition mem; 13262306a36Sopenharmony_ci struct wl1251_partition reg; 13362306a36Sopenharmony_ci}; 13462306a36Sopenharmony_ci 13562306a36Sopenharmony_cistruct wl1251; 13662306a36Sopenharmony_ci 13762306a36Sopenharmony_cistruct wl1251_stats { 13862306a36Sopenharmony_ci struct acx_statistics *fw_stats; 13962306a36Sopenharmony_ci unsigned long fw_stats_update; 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_ci unsigned int retry_count; 14262306a36Sopenharmony_ci unsigned int excessive_retries; 14362306a36Sopenharmony_ci}; 14462306a36Sopenharmony_ci 14562306a36Sopenharmony_cistruct wl1251_debugfs { 14662306a36Sopenharmony_ci struct dentry *rootdir; 14762306a36Sopenharmony_ci struct dentry *fw_statistics; 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci struct dentry *tx_internal_desc_overflow; 15062306a36Sopenharmony_ci 15162306a36Sopenharmony_ci struct dentry *rx_out_of_mem; 15262306a36Sopenharmony_ci struct dentry *rx_hdr_overflow; 15362306a36Sopenharmony_ci struct dentry *rx_hw_stuck; 15462306a36Sopenharmony_ci struct dentry *rx_dropped; 15562306a36Sopenharmony_ci struct dentry *rx_fcs_err; 15662306a36Sopenharmony_ci struct dentry *rx_xfr_hint_trig; 15762306a36Sopenharmony_ci struct dentry *rx_path_reset; 15862306a36Sopenharmony_ci struct dentry *rx_reset_counter; 15962306a36Sopenharmony_ci 16062306a36Sopenharmony_ci struct dentry *dma_rx_requested; 16162306a36Sopenharmony_ci struct dentry *dma_rx_errors; 16262306a36Sopenharmony_ci struct dentry *dma_tx_requested; 16362306a36Sopenharmony_ci struct dentry *dma_tx_errors; 16462306a36Sopenharmony_ci 16562306a36Sopenharmony_ci struct dentry *isr_cmd_cmplt; 16662306a36Sopenharmony_ci struct dentry *isr_fiqs; 16762306a36Sopenharmony_ci struct dentry *isr_rx_headers; 16862306a36Sopenharmony_ci struct dentry *isr_rx_mem_overflow; 16962306a36Sopenharmony_ci struct dentry *isr_rx_rdys; 17062306a36Sopenharmony_ci struct dentry *isr_irqs; 17162306a36Sopenharmony_ci struct dentry *isr_tx_procs; 17262306a36Sopenharmony_ci struct dentry *isr_decrypt_done; 17362306a36Sopenharmony_ci struct dentry *isr_dma0_done; 17462306a36Sopenharmony_ci struct dentry *isr_dma1_done; 17562306a36Sopenharmony_ci struct dentry *isr_tx_exch_complete; 17662306a36Sopenharmony_ci struct dentry *isr_commands; 17762306a36Sopenharmony_ci struct dentry *isr_rx_procs; 17862306a36Sopenharmony_ci struct dentry *isr_hw_pm_mode_changes; 17962306a36Sopenharmony_ci struct dentry *isr_host_acknowledges; 18062306a36Sopenharmony_ci struct dentry *isr_pci_pm; 18162306a36Sopenharmony_ci struct dentry *isr_wakeups; 18262306a36Sopenharmony_ci struct dentry *isr_low_rssi; 18362306a36Sopenharmony_ci 18462306a36Sopenharmony_ci struct dentry *wep_addr_key_count; 18562306a36Sopenharmony_ci struct dentry *wep_default_key_count; 18662306a36Sopenharmony_ci /* skipping wep.reserved */ 18762306a36Sopenharmony_ci struct dentry *wep_key_not_found; 18862306a36Sopenharmony_ci struct dentry *wep_decrypt_fail; 18962306a36Sopenharmony_ci struct dentry *wep_packets; 19062306a36Sopenharmony_ci struct dentry *wep_interrupt; 19162306a36Sopenharmony_ci 19262306a36Sopenharmony_ci struct dentry *pwr_ps_enter; 19362306a36Sopenharmony_ci struct dentry *pwr_elp_enter; 19462306a36Sopenharmony_ci struct dentry *pwr_missing_bcns; 19562306a36Sopenharmony_ci struct dentry *pwr_wake_on_host; 19662306a36Sopenharmony_ci struct dentry *pwr_wake_on_timer_exp; 19762306a36Sopenharmony_ci struct dentry *pwr_tx_with_ps; 19862306a36Sopenharmony_ci struct dentry *pwr_tx_without_ps; 19962306a36Sopenharmony_ci struct dentry *pwr_rcvd_beacons; 20062306a36Sopenharmony_ci struct dentry *pwr_power_save_off; 20162306a36Sopenharmony_ci struct dentry *pwr_enable_ps; 20262306a36Sopenharmony_ci struct dentry *pwr_disable_ps; 20362306a36Sopenharmony_ci struct dentry *pwr_fix_tsf_ps; 20462306a36Sopenharmony_ci /* skipping cont_miss_bcns_spread for now */ 20562306a36Sopenharmony_ci struct dentry *pwr_rcvd_awake_beacons; 20662306a36Sopenharmony_ci 20762306a36Sopenharmony_ci struct dentry *mic_rx_pkts; 20862306a36Sopenharmony_ci struct dentry *mic_calc_failure; 20962306a36Sopenharmony_ci 21062306a36Sopenharmony_ci struct dentry *aes_encrypt_fail; 21162306a36Sopenharmony_ci struct dentry *aes_decrypt_fail; 21262306a36Sopenharmony_ci struct dentry *aes_encrypt_packets; 21362306a36Sopenharmony_ci struct dentry *aes_decrypt_packets; 21462306a36Sopenharmony_ci struct dentry *aes_encrypt_interrupt; 21562306a36Sopenharmony_ci struct dentry *aes_decrypt_interrupt; 21662306a36Sopenharmony_ci 21762306a36Sopenharmony_ci struct dentry *event_heart_beat; 21862306a36Sopenharmony_ci struct dentry *event_calibration; 21962306a36Sopenharmony_ci struct dentry *event_rx_mismatch; 22062306a36Sopenharmony_ci struct dentry *event_rx_mem_empty; 22162306a36Sopenharmony_ci struct dentry *event_rx_pool; 22262306a36Sopenharmony_ci struct dentry *event_oom_late; 22362306a36Sopenharmony_ci struct dentry *event_phy_transmit_error; 22462306a36Sopenharmony_ci struct dentry *event_tx_stuck; 22562306a36Sopenharmony_ci 22662306a36Sopenharmony_ci struct dentry *ps_pspoll_timeouts; 22762306a36Sopenharmony_ci struct dentry *ps_upsd_timeouts; 22862306a36Sopenharmony_ci struct dentry *ps_upsd_max_sptime; 22962306a36Sopenharmony_ci struct dentry *ps_upsd_max_apturn; 23062306a36Sopenharmony_ci struct dentry *ps_pspoll_max_apturn; 23162306a36Sopenharmony_ci struct dentry *ps_pspoll_utilization; 23262306a36Sopenharmony_ci struct dentry *ps_upsd_utilization; 23362306a36Sopenharmony_ci 23462306a36Sopenharmony_ci struct dentry *rxpipe_rx_prep_beacon_drop; 23562306a36Sopenharmony_ci struct dentry *rxpipe_descr_host_int_trig_rx_data; 23662306a36Sopenharmony_ci struct dentry *rxpipe_beacon_buffer_thres_host_int_trig_rx_data; 23762306a36Sopenharmony_ci struct dentry *rxpipe_missed_beacon_host_int_trig_rx_data; 23862306a36Sopenharmony_ci struct dentry *rxpipe_tx_xfr_host_int_trig_rx_data; 23962306a36Sopenharmony_ci 24062306a36Sopenharmony_ci struct dentry *tx_queue_len; 24162306a36Sopenharmony_ci struct dentry *tx_queue_status; 24262306a36Sopenharmony_ci 24362306a36Sopenharmony_ci struct dentry *retry_count; 24462306a36Sopenharmony_ci struct dentry *excessive_retries; 24562306a36Sopenharmony_ci}; 24662306a36Sopenharmony_ci 24762306a36Sopenharmony_cistruct wl1251_if_operations { 24862306a36Sopenharmony_ci void (*read)(struct wl1251 *wl, int addr, void *buf, size_t len); 24962306a36Sopenharmony_ci void (*write)(struct wl1251 *wl, int addr, void *buf, size_t len); 25062306a36Sopenharmony_ci void (*read_elp)(struct wl1251 *wl, int addr, u32 *val); 25162306a36Sopenharmony_ci void (*write_elp)(struct wl1251 *wl, int addr, u32 val); 25262306a36Sopenharmony_ci int (*power)(struct wl1251 *wl, bool enable); 25362306a36Sopenharmony_ci void (*reset)(struct wl1251 *wl); 25462306a36Sopenharmony_ci void (*enable_irq)(struct wl1251 *wl); 25562306a36Sopenharmony_ci void (*disable_irq)(struct wl1251 *wl); 25662306a36Sopenharmony_ci}; 25762306a36Sopenharmony_ci 25862306a36Sopenharmony_cistruct wl1251 { 25962306a36Sopenharmony_ci struct ieee80211_hw *hw; 26062306a36Sopenharmony_ci bool mac80211_registered; 26162306a36Sopenharmony_ci 26262306a36Sopenharmony_ci void *if_priv; 26362306a36Sopenharmony_ci const struct wl1251_if_operations *if_ops; 26462306a36Sopenharmony_ci 26562306a36Sopenharmony_ci int irq; 26662306a36Sopenharmony_ci bool use_eeprom; 26762306a36Sopenharmony_ci 26862306a36Sopenharmony_ci struct regulator *vio; 26962306a36Sopenharmony_ci 27062306a36Sopenharmony_ci spinlock_t wl_lock; 27162306a36Sopenharmony_ci 27262306a36Sopenharmony_ci enum wl1251_state state; 27362306a36Sopenharmony_ci struct mutex mutex; 27462306a36Sopenharmony_ci 27562306a36Sopenharmony_ci int physical_mem_addr; 27662306a36Sopenharmony_ci int physical_reg_addr; 27762306a36Sopenharmony_ci int virtual_mem_addr; 27862306a36Sopenharmony_ci int virtual_reg_addr; 27962306a36Sopenharmony_ci 28062306a36Sopenharmony_ci int cmd_box_addr; 28162306a36Sopenharmony_ci int event_box_addr; 28262306a36Sopenharmony_ci struct boot_attr boot_attr; 28362306a36Sopenharmony_ci 28462306a36Sopenharmony_ci u8 *fw; 28562306a36Sopenharmony_ci size_t fw_len; 28662306a36Sopenharmony_ci u8 *nvs; 28762306a36Sopenharmony_ci size_t nvs_len; 28862306a36Sopenharmony_ci 28962306a36Sopenharmony_ci u8 bssid[ETH_ALEN]; 29062306a36Sopenharmony_ci u8 mac_addr[ETH_ALEN]; 29162306a36Sopenharmony_ci u8 bss_type; 29262306a36Sopenharmony_ci u8 listen_int; 29362306a36Sopenharmony_ci int channel; 29462306a36Sopenharmony_ci bool monitor_present; 29562306a36Sopenharmony_ci bool joined; 29662306a36Sopenharmony_ci 29762306a36Sopenharmony_ci void *target_mem_map; 29862306a36Sopenharmony_ci struct acx_data_path_params_resp *data_path; 29962306a36Sopenharmony_ci 30062306a36Sopenharmony_ci /* Number of TX packets transferred to the FW, modulo 16 */ 30162306a36Sopenharmony_ci u32 data_in_count; 30262306a36Sopenharmony_ci 30362306a36Sopenharmony_ci /* Frames scheduled for transmission, not handled yet */ 30462306a36Sopenharmony_ci struct sk_buff_head tx_queue; 30562306a36Sopenharmony_ci bool tx_queue_stopped; 30662306a36Sopenharmony_ci 30762306a36Sopenharmony_ci struct work_struct tx_work; 30862306a36Sopenharmony_ci 30962306a36Sopenharmony_ci /* Pending TX frames */ 31062306a36Sopenharmony_ci struct sk_buff *tx_frames[16]; 31162306a36Sopenharmony_ci 31262306a36Sopenharmony_ci /* 31362306a36Sopenharmony_ci * Index pointing to the next TX complete entry 31462306a36Sopenharmony_ci * in the cyclic XT complete array we get from 31562306a36Sopenharmony_ci * the FW. 31662306a36Sopenharmony_ci */ 31762306a36Sopenharmony_ci u32 next_tx_complete; 31862306a36Sopenharmony_ci 31962306a36Sopenharmony_ci /* FW Rx counter */ 32062306a36Sopenharmony_ci u32 rx_counter; 32162306a36Sopenharmony_ci 32262306a36Sopenharmony_ci /* Rx frames handled */ 32362306a36Sopenharmony_ci u32 rx_handled; 32462306a36Sopenharmony_ci 32562306a36Sopenharmony_ci /* Current double buffer */ 32662306a36Sopenharmony_ci u32 rx_current_buffer; 32762306a36Sopenharmony_ci u32 rx_last_id; 32862306a36Sopenharmony_ci 32962306a36Sopenharmony_ci /* The target interrupt mask */ 33062306a36Sopenharmony_ci u32 intr_mask; 33162306a36Sopenharmony_ci struct work_struct irq_work; 33262306a36Sopenharmony_ci 33362306a36Sopenharmony_ci /* The mbox event mask */ 33462306a36Sopenharmony_ci u32 event_mask; 33562306a36Sopenharmony_ci 33662306a36Sopenharmony_ci /* Mailbox pointers */ 33762306a36Sopenharmony_ci u32 mbox_ptr[2]; 33862306a36Sopenharmony_ci 33962306a36Sopenharmony_ci /* Are we currently scanning */ 34062306a36Sopenharmony_ci bool scanning; 34162306a36Sopenharmony_ci 34262306a36Sopenharmony_ci /* Default key (for WEP) */ 34362306a36Sopenharmony_ci u32 default_key; 34462306a36Sopenharmony_ci 34562306a36Sopenharmony_ci unsigned int tx_mgmt_frm_rate; 34662306a36Sopenharmony_ci unsigned int tx_mgmt_frm_mod; 34762306a36Sopenharmony_ci 34862306a36Sopenharmony_ci unsigned int rx_config; 34962306a36Sopenharmony_ci unsigned int rx_filter; 35062306a36Sopenharmony_ci 35162306a36Sopenharmony_ci /* is firmware in elp mode */ 35262306a36Sopenharmony_ci bool elp; 35362306a36Sopenharmony_ci 35462306a36Sopenharmony_ci struct delayed_work elp_work; 35562306a36Sopenharmony_ci 35662306a36Sopenharmony_ci enum wl1251_station_mode station_mode; 35762306a36Sopenharmony_ci 35862306a36Sopenharmony_ci /* PSM mode requested */ 35962306a36Sopenharmony_ci bool psm_requested; 36062306a36Sopenharmony_ci 36162306a36Sopenharmony_ci /* retry counter for PSM entries */ 36262306a36Sopenharmony_ci u8 psm_entry_retry; 36362306a36Sopenharmony_ci 36462306a36Sopenharmony_ci u16 beacon_int; 36562306a36Sopenharmony_ci u8 dtim_period; 36662306a36Sopenharmony_ci 36762306a36Sopenharmony_ci /* in dBm */ 36862306a36Sopenharmony_ci int power_level; 36962306a36Sopenharmony_ci 37062306a36Sopenharmony_ci int rssi_thold; 37162306a36Sopenharmony_ci 37262306a36Sopenharmony_ci struct wl1251_stats stats; 37362306a36Sopenharmony_ci struct wl1251_debugfs debugfs; 37462306a36Sopenharmony_ci 37562306a36Sopenharmony_ci __le32 buffer_32; 37662306a36Sopenharmony_ci u32 buffer_cmd; 37762306a36Sopenharmony_ci u8 buffer_busyword[WL1251_BUSY_WORD_LEN]; 37862306a36Sopenharmony_ci struct wl1251_rx_descriptor *rx_descriptor; 37962306a36Sopenharmony_ci 38062306a36Sopenharmony_ci struct ieee80211_vif *vif; 38162306a36Sopenharmony_ci 38262306a36Sopenharmony_ci u32 chip_id; 38362306a36Sopenharmony_ci char fw_ver[21]; 38462306a36Sopenharmony_ci 38562306a36Sopenharmony_ci /* Most recently reported noise in dBm */ 38662306a36Sopenharmony_ci s8 noise; 38762306a36Sopenharmony_ci}; 38862306a36Sopenharmony_ci 38962306a36Sopenharmony_ciint wl1251_plt_start(struct wl1251 *wl); 39062306a36Sopenharmony_ciint wl1251_plt_stop(struct wl1251 *wl); 39162306a36Sopenharmony_ci 39262306a36Sopenharmony_cistruct ieee80211_hw *wl1251_alloc_hw(void); 39362306a36Sopenharmony_ciint wl1251_free_hw(struct wl1251 *wl); 39462306a36Sopenharmony_ciint wl1251_init_ieee80211(struct wl1251 *wl); 39562306a36Sopenharmony_civoid wl1251_enable_interrupts(struct wl1251 *wl); 39662306a36Sopenharmony_civoid wl1251_disable_interrupts(struct wl1251 *wl); 39762306a36Sopenharmony_ci 39862306a36Sopenharmony_ci#define DEFAULT_HW_GEN_MODULATION_TYPE CCK_LONG /* Long Preamble */ 39962306a36Sopenharmony_ci#define DEFAULT_HW_GEN_TX_RATE RATE_2MBPS 40062306a36Sopenharmony_ci#define JOIN_TIMEOUT 5000 /* 5000 milliseconds to join */ 40162306a36Sopenharmony_ci 40262306a36Sopenharmony_ci#define WL1251_DEFAULT_POWER_LEVEL 20 40362306a36Sopenharmony_ci 40462306a36Sopenharmony_ci#define WL1251_TX_QUEUE_LOW_WATERMARK 10 40562306a36Sopenharmony_ci#define WL1251_TX_QUEUE_HIGH_WATERMARK 25 40662306a36Sopenharmony_ci 40762306a36Sopenharmony_ci#define WL1251_DEFAULT_BEACON_INT 100 40862306a36Sopenharmony_ci#define WL1251_DEFAULT_DTIM_PERIOD 1 40962306a36Sopenharmony_ci 41062306a36Sopenharmony_ci#define WL1251_DEFAULT_CHANNEL 0 41162306a36Sopenharmony_ci 41262306a36Sopenharmony_ci#define WL1251_DEFAULT_BET_CONSECUTIVE 10 41362306a36Sopenharmony_ci 41462306a36Sopenharmony_ci#define CHIP_ID_1251_PG10 (0x7010101) 41562306a36Sopenharmony_ci#define CHIP_ID_1251_PG11 (0x7020101) 41662306a36Sopenharmony_ci#define CHIP_ID_1251_PG12 (0x7030101) 41762306a36Sopenharmony_ci#define CHIP_ID_1271_PG10 (0x4030101) 41862306a36Sopenharmony_ci#define CHIP_ID_1271_PG20 (0x4030111) 41962306a36Sopenharmony_ci 42062306a36Sopenharmony_ci#define WL1251_FW_NAME "ti-connectivity/wl1251-fw.bin" 42162306a36Sopenharmony_ci#define WL1251_NVS_NAME "ti-connectivity/wl1251-nvs.bin" 42262306a36Sopenharmony_ci 42362306a36Sopenharmony_ci#define WL1251_POWER_ON_SLEEP 10 /* in milliseconds */ 42462306a36Sopenharmony_ci 42562306a36Sopenharmony_ci#define WL1251_PART_DOWN_MEM_START 0x0 42662306a36Sopenharmony_ci#define WL1251_PART_DOWN_MEM_SIZE 0x16800 42762306a36Sopenharmony_ci#define WL1251_PART_DOWN_REG_START REGISTERS_BASE 42862306a36Sopenharmony_ci#define WL1251_PART_DOWN_REG_SIZE REGISTERS_DOWN_SIZE 42962306a36Sopenharmony_ci 43062306a36Sopenharmony_ci#define WL1251_PART_WORK_MEM_START 0x28000 43162306a36Sopenharmony_ci#define WL1251_PART_WORK_MEM_SIZE 0x14000 43262306a36Sopenharmony_ci#define WL1251_PART_WORK_REG_START REGISTERS_BASE 43362306a36Sopenharmony_ci#define WL1251_PART_WORK_REG_SIZE REGISTERS_WORK_SIZE 43462306a36Sopenharmony_ci 43562306a36Sopenharmony_ci#define WL1251_DEFAULT_LOW_RSSI_WEIGHT 10 43662306a36Sopenharmony_ci#define WL1251_DEFAULT_LOW_RSSI_DEPTH 10 43762306a36Sopenharmony_ci 43862306a36Sopenharmony_ci#endif 439