#include <linux/module.h>
#include <linux/mmc/card.h>
#include <linux/mmc/mmc.h>
#include <linux/mmc/host.h>
#include <linux/mmc/sdio_func.h>
#include <linux/mmc/sdio_ids.h>
#include <linux/mmc/sdio.h>
#include <linux/mmc/sd.h>
#include "hif.h"
#include "hif-ops.h"
#include "target.h"
#include "debug.h"
#include "cfg80211.h"
#include "trace.h"
struct ath6kl_sdio { … };
#define CMD53_ARG_READ …
#define CMD53_ARG_WRITE …
#define CMD53_ARG_BLOCK_BASIS …
#define CMD53_ARG_FIXED_ADDRESS …
#define CMD53_ARG_INCR_ADDRESS …
static int ath6kl_sdio_config(struct ath6kl *ar);
static inline struct ath6kl_sdio *ath6kl_sdio_priv(struct ath6kl *ar)
{ … }
static inline bool buf_needs_bounce(u8 *buf)
{ … }
static void ath6kl_sdio_set_mbox_info(struct ath6kl *ar)
{ … }
static inline void ath6kl_sdio_set_cmd53_arg(u32 *arg, u8 rw, u8 func,
u8 mode, u8 opcode, u32 addr,
u16 blksz)
{ … }
static inline void ath6kl_sdio_set_cmd52_arg(u32 *arg, u8 write, u8 raw,
unsigned int address,
unsigned char val)
{ … }
static int ath6kl_sdio_func0_cmd52_wr_byte(struct mmc_card *card,
unsigned int address,
unsigned char byte)
{ … }
static int ath6kl_sdio_io(struct sdio_func *func, u32 request, u32 addr,
u8 *buf, u32 len)
{ … }
static struct bus_request *ath6kl_sdio_alloc_busreq(struct ath6kl_sdio *ar_sdio)
{ … }
static void ath6kl_sdio_free_bus_req(struct ath6kl_sdio *ar_sdio,
struct bus_request *bus_req)
{ … }
static void ath6kl_sdio_setup_scat_data(struct hif_scatter_req *scat_req,
struct mmc_data *data)
{ … }
static int ath6kl_sdio_scat_rw(struct ath6kl_sdio *ar_sdio,
struct bus_request *req)
{ … }
static int ath6kl_sdio_alloc_prep_scat_req(struct ath6kl_sdio *ar_sdio,
int n_scat_entry, int n_scat_req,
bool virt_scat)
{ … }
static int ath6kl_sdio_read_write_sync(struct ath6kl *ar, u32 addr, u8 *buf,
u32 len, u32 request)
{ … }
static void __ath6kl_sdio_write_async(struct ath6kl_sdio *ar_sdio,
struct bus_request *req)
{ … }
static void ath6kl_sdio_write_async_work(struct work_struct *work)
{ … }
static void ath6kl_sdio_irq_handler(struct sdio_func *func)
{ … }
static int ath6kl_sdio_power_on(struct ath6kl *ar)
{ … }
static int ath6kl_sdio_power_off(struct ath6kl *ar)
{ … }
static int ath6kl_sdio_write_async(struct ath6kl *ar, u32 address, u8 *buffer,
u32 length, u32 request,
struct htc_packet *packet)
{ … }
static void ath6kl_sdio_irq_enable(struct ath6kl *ar)
{ … }
static bool ath6kl_sdio_is_on_irq(struct ath6kl *ar)
{ … }
static void ath6kl_sdio_irq_disable(struct ath6kl *ar)
{ … }
static struct hif_scatter_req *ath6kl_sdio_scatter_req_get(struct ath6kl *ar)
{ … }
static void ath6kl_sdio_scatter_req_add(struct ath6kl *ar,
struct hif_scatter_req *s_req)
{ … }
static int ath6kl_sdio_async_rw_scatter(struct ath6kl *ar,
struct hif_scatter_req *scat_req)
{ … }
static void ath6kl_sdio_cleanup_scatter(struct ath6kl *ar)
{ … }
static int ath6kl_sdio_enable_scatter(struct ath6kl *ar)
{ … }
static int ath6kl_sdio_config(struct ath6kl *ar)
{ … }
static int ath6kl_set_sdio_pm_caps(struct ath6kl *ar)
{ … }
static int ath6kl_sdio_suspend(struct ath6kl *ar, struct cfg80211_wowlan *wow)
{ … }
static int ath6kl_sdio_resume(struct ath6kl *ar)
{ … }
static int ath6kl_set_addrwin_reg(struct ath6kl *ar, u32 reg_addr, u32 addr)
{ … }
static int ath6kl_sdio_diag_read32(struct ath6kl *ar, u32 address, u32 *data)
{ … }
static int ath6kl_sdio_diag_write32(struct ath6kl *ar, u32 address,
__le32 data)
{ … }
static int ath6kl_sdio_bmi_credits(struct ath6kl *ar)
{ … }
static int ath6kl_bmi_get_rx_lkahd(struct ath6kl *ar)
{ … }
static int ath6kl_sdio_bmi_write(struct ath6kl *ar, u8 *buf, u32 len)
{ … }
static int ath6kl_sdio_bmi_read(struct ath6kl *ar, u8 *buf, u32 len)
{ … }
static void ath6kl_sdio_stop(struct ath6kl *ar)
{ … }
static const struct ath6kl_hif_ops ath6kl_sdio_ops = …;
#ifdef CONFIG_PM_SLEEP
static int ath6kl_sdio_pm_suspend(struct device *device)
{ … }
static int ath6kl_sdio_pm_resume(struct device *device)
{ … }
static SIMPLE_DEV_PM_OPS(ath6kl_sdio_pm_ops, ath6kl_sdio_pm_suspend,
ath6kl_sdio_pm_resume);
#define ATH6KL_SDIO_PM_OPS …
#else
#define ATH6KL_SDIO_PM_OPS …
#endif
static int ath6kl_sdio_probe(struct sdio_func *func,
const struct sdio_device_id *id)
{ … }
static void ath6kl_sdio_remove(struct sdio_func *func)
{ … }
static const struct sdio_device_id ath6kl_sdio_devices[] = …;
MODULE_DEVICE_TABLE(sdio, ath6kl_sdio_devices);
static struct sdio_driver ath6kl_sdio_driver = …;
module_sdio_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…);
MODULE_FIRMWARE(…);
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…);
MODULE_FIRMWARE(…);
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…);
MODULE_FIRMWARE(…);
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…);
MODULE_FIRMWARE(…);
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…);
MODULE_FIRMWARE(…);
MODULE_FIRMWARE(…) …;
MODULE_FIRMWARE(…);
MODULE_FIRMWARE(…);