#include <linux/module.h>
#include <linux/mod_devicetable.h>
#include <linux/platform_device.h>
#include <linux/err.h>
#include "../wlcore/wlcore.h"
#include "../wlcore/debug.h"
#include "../wlcore/io.h"
#include "../wlcore/acx.h"
#include "../wlcore/tx.h"
#include "../wlcore/rx.h"
#include "../wlcore/boot.h"
#include "wl12xx.h"
#include "reg.h"
#include "cmd.h"
#include "acx.h"
#include "scan.h"
#include "event.h"
#include "debugfs.h"
#include "conf.h"
static char *fref_param;
static char *tcxo_param;
static struct wlcore_conf wl12xx_conf = …;
static struct wl12xx_priv_conf wl12xx_default_priv_conf = …;
#define WL12XX_TX_HW_BLOCK_SPARE_DEFAULT …
#define WL12XX_TX_HW_BLOCK_GEM_SPARE …
#define WL12XX_TX_HW_BLOCK_SIZE …
static const u8 wl12xx_rate_to_idx_2ghz[] = …;
static const u8 wl12xx_rate_to_idx_5ghz[] = …;
static const u8 *wl12xx_band_rate_to_idx[] = …;
enum wl12xx_hw_rates { … };
static struct wlcore_partition_set wl12xx_ptable[PART_TABLE_LEN] = …;
static const int wl12xx_rtable[REG_TABLE_LEN] = …;
#define WL127X_FW_NAME_MULTI …
#define WL127X_FW_NAME_SINGLE …
#define WL127X_PLT_FW_NAME …
#define WL128X_FW_NAME_MULTI …
#define WL128X_FW_NAME_SINGLE …
#define WL128X_PLT_FW_NAME …
static int wl127x_prepare_read(struct wl1271 *wl, u32 rx_desc, u32 len)
{ … }
static int wl12xx_identify_chip(struct wl1271 *wl)
{ … }
static int __must_check wl12xx_top_reg_write(struct wl1271 *wl, int addr,
u16 val)
{ … }
static int __must_check wl12xx_top_reg_read(struct wl1271 *wl, int addr,
u16 *out)
{ … }
static int wl128x_switch_tcxo_to_fref(struct wl1271 *wl)
{ … }
static bool wl128x_is_tcxo_valid(struct wl1271 *wl)
{ … }
static bool wl128x_is_fref_valid(struct wl1271 *wl)
{ … }
static int wl128x_manually_configure_mcs_pll(struct wl1271 *wl)
{ … }
static int wl128x_configure_mcs_pll(struct wl1271 *wl, int clk)
{ … }
static int wl128x_boot_clk(struct wl1271 *wl, int *selected_clock)
{ … }
static int wl127x_boot_clk(struct wl1271 *wl)
{ … }
static int wl1271_boot_soft_reset(struct wl1271 *wl)
{ … }
static int wl12xx_pre_boot(struct wl1271 *wl)
{ … }
static int wl12xx_pre_upload(struct wl1271 *wl)
{ … }
static int wl12xx_enable_interrupts(struct wl1271 *wl)
{ … }
static int wl12xx_boot(struct wl1271 *wl)
{ … }
static int wl12xx_trigger_cmd(struct wl1271 *wl, int cmd_box_addr,
void *buf, size_t len)
{ … }
static int wl12xx_ack_event(struct wl1271 *wl)
{ … }
static u32 wl12xx_calc_tx_blocks(struct wl1271 *wl, u32 len, u32 spare_blks)
{ … }
static void
wl12xx_set_tx_desc_blocks(struct wl1271 *wl, struct wl1271_tx_hw_descr *desc,
u32 blks, u32 spare_blks)
{ … }
static void
wl12xx_set_tx_desc_data_len(struct wl1271 *wl, struct wl1271_tx_hw_descr *desc,
struct sk_buff *skb)
{ … }
static enum wl_rx_buf_align
wl12xx_get_rx_buf_align(struct wl1271 *wl, u32 rx_desc)
{ … }
static u32 wl12xx_get_rx_packet_len(struct wl1271 *wl, void *rx_data,
u32 data_len)
{ … }
static int wl12xx_tx_delayed_compl(struct wl1271 *wl)
{ … }
static int wl12xx_hw_init(struct wl1271 *wl)
{ … }
static void wl12xx_convert_fw_status(struct wl1271 *wl, void *raw_fw_status,
struct wl_fw_status *fw_status)
{ … }
static u32 wl12xx_sta_get_ap_rate_mask(struct wl1271 *wl,
struct wl12xx_vif *wlvif)
{ … }
static void wl12xx_conf_init(struct wl1271 *wl)
{ … }
static bool wl12xx_mac_in_fuse(struct wl1271 *wl)
{ … }
static int wl12xx_get_fuse_mac(struct wl1271 *wl)
{ … }
static int wl12xx_get_pg_ver(struct wl1271 *wl, s8 *ver)
{ … }
static int wl12xx_get_mac(struct wl1271 *wl)
{ … }
static void wl12xx_set_tx_desc_csum(struct wl1271 *wl,
struct wl1271_tx_hw_descr *desc,
struct sk_buff *skb)
{ … }
static int wl12xx_plt_init(struct wl1271 *wl)
{ … }
static int wl12xx_get_spare_blocks(struct wl1271 *wl, bool is_gem)
{ … }
static int wl12xx_set_key(struct wl1271 *wl, enum set_key_cmd cmd,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
struct ieee80211_key_conf *key_conf)
{ … }
static int wl12xx_set_peer_cap(struct wl1271 *wl,
struct ieee80211_sta_ht_cap *ht_cap,
bool allow_ht_operation,
u32 rate_set, u8 hlid)
{ … }
static bool wl12xx_lnk_high_prio(struct wl1271 *wl, u8 hlid,
struct wl1271_link *lnk)
{ … }
static bool wl12xx_lnk_low_prio(struct wl1271 *wl, u8 hlid,
struct wl1271_link *lnk)
{ … }
static u32 wl12xx_convert_hwaddr(struct wl1271 *wl, u32 hwaddr)
{ … }
static int wl12xx_setup(struct wl1271 *wl);
static struct wlcore_ops wl12xx_ops = …;
static struct ieee80211_sta_ht_cap wl12xx_ht_cap = …;
static const struct ieee80211_iface_limit wl12xx_iface_limits[] = …;
static const struct ieee80211_iface_combination
wl12xx_iface_combinations[] = …;
static const struct wl12xx_clock wl12xx_refclock_table[] = …;
static const struct wl12xx_clock wl12xx_tcxoclock_table[] = …;
static int wl12xx_get_clock_idx(const struct wl12xx_clock *table,
u32 freq, bool xtal)
{ … }
static int wl12xx_setup(struct wl1271 *wl)
{ … }
static int wl12xx_probe(struct platform_device *pdev)
{ … }
static void wl12xx_remove(struct platform_device *pdev)
{ … }
static const struct platform_device_id wl12xx_id_table[] = …;
MODULE_DEVICE_TABLE(platform, wl12xx_id_table);
static struct platform_driver wl12xx_driver = …;
module_platform_driver(…) …;
module_param_named(fref, fref_param, charp, 0);
MODULE_PARM_DESC(…) …;
module_param_named(tcxo, tcxo_param, charp, 0);
MODULE_PARM_DESC(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
MODULE_FIRMWARE(…);
MODULE_FIRMWARE(…);
MODULE_FIRMWARE(…);
MODULE_FIRMWARE(…);
MODULE_FIRMWARE(…);
MODULE_FIRMWARE(…);