#include "ssb_private.h"
#include <linux/delay.h>
#include <linux/io.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/ssb/ssb.h>
#include <linux/ssb/ssb_regs.h>
#include <linux/ssb/ssb_driver_gige.h>
#include <linux/dma-mapping.h>
#include <linux/pci.h>
#include <linux/mmc/sdio_func.h>
#include <linux/slab.h>
#include <pcmcia/cistpl.h>
#include <pcmcia/ds.h>
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
static LIST_HEAD(attach_queue);
static LIST_HEAD(buses);
static unsigned int next_busnumber;
static DEFINE_MUTEX(buses_mutex);
static bool ssb_is_early_boot = …;
static void ssb_buses_lock(void);
static void ssb_buses_unlock(void);
#ifdef CONFIG_SSB_PCIHOST
struct ssb_bus *ssb_pci_dev_to_bus(struct pci_dev *pdev)
{ … }
#endif
#ifdef CONFIG_SSB_PCMCIAHOST
struct ssb_bus *ssb_pcmcia_dev_to_bus(struct pcmcia_device *pdev)
{ … }
#endif
int ssb_for_each_bus_call(unsigned long data,
int (*func)(struct ssb_bus *bus, unsigned long data))
{ … }
static struct ssb_device *ssb_device_get(struct ssb_device *dev)
{ … }
static void ssb_device_put(struct ssb_device *dev)
{ … }
static int ssb_device_resume(struct device *dev)
{ … }
static int ssb_device_suspend(struct device *dev, pm_message_t state)
{ … }
int ssb_bus_resume(struct ssb_bus *bus)
{ … }
EXPORT_SYMBOL(…);
int ssb_bus_suspend(struct ssb_bus *bus)
{ … }
EXPORT_SYMBOL(…);
#ifdef CONFIG_SSB_SPROM
int ssb_devices_freeze(struct ssb_bus *bus, struct ssb_freeze_context *ctx)
{ … }
int ssb_devices_thaw(struct ssb_freeze_context *ctx)
{ … }
#endif
static void ssb_device_shutdown(struct device *dev)
{ … }
static void ssb_device_remove(struct device *dev)
{ … }
static int ssb_device_probe(struct device *dev)
{ … }
static int ssb_match_devid(const struct ssb_device_id *tabid,
const struct ssb_device_id *devid)
{ … }
static int ssb_bus_match(struct device *dev, const struct device_driver *drv)
{ … }
static int ssb_device_uevent(const struct device *dev, struct kobj_uevent_env *env)
{ … }
#define ssb_config_attr(attrib, field, format_string) …
ssb_config_attr(…) …
ssb_config_attr(…) …
ssb_config_attr(…) …
ssb_config_attr(…) …
ssb_config_attr(…) …
static ssize_t
name_show(struct device *dev, struct device_attribute *attr, char *buf)
{ … }
static DEVICE_ATTR_RO(name);
static struct attribute *ssb_device_attrs[] = …;
ATTRIBUTE_GROUPS(…);
static const struct bus_type ssb_bustype = …;
static void ssb_buses_lock(void)
{ … }
static void ssb_buses_unlock(void)
{ … }
static void ssb_devices_unregister(struct ssb_bus *bus)
{ … }
void ssb_bus_unregister(struct ssb_bus *bus)
{ … }
EXPORT_SYMBOL(…);
static void ssb_release_dev(struct device *dev)
{ … }
static int ssb_devices_register(struct ssb_bus *bus)
{ … }
static int ssb_attach_queued_buses(void)
{ … }
static int ssb_fetch_invariants(struct ssb_bus *bus,
ssb_invariants_func_t get_invariants)
{ … }
static int __maybe_unused
ssb_bus_register(struct ssb_bus *bus,
ssb_invariants_func_t get_invariants,
unsigned long baseaddr)
{ … }
#ifdef CONFIG_SSB_PCIHOST
int ssb_bus_pcibus_register(struct ssb_bus *bus, struct pci_dev *host_pci)
{ … }
#endif
#ifdef CONFIG_SSB_PCMCIAHOST
int ssb_bus_pcmciabus_register(struct ssb_bus *bus,
struct pcmcia_device *pcmcia_dev,
unsigned long baseaddr)
{ … }
#endif
#ifdef CONFIG_SSB_SDIOHOST
int ssb_bus_sdiobus_register(struct ssb_bus *bus, struct sdio_func *func,
unsigned int quirks)
{ … }
EXPORT_SYMBOL(…);
#endif
#ifdef CONFIG_SSB_HOST_SOC
int ssb_bus_host_soc_register(struct ssb_bus *bus, unsigned long baseaddr)
{ … }
#endif
int __ssb_driver_register(struct ssb_driver *drv, struct module *owner)
{ … }
EXPORT_SYMBOL(…);
void ssb_driver_unregister(struct ssb_driver *drv)
{ … }
EXPORT_SYMBOL(…);
void ssb_set_devtypedata(struct ssb_device *dev, void *data)
{ … }
EXPORT_SYMBOL(…);
static u32 clkfactor_f6_resolve(u32 v)
{ … }
u32 ssb_calc_clock_rate(u32 plltype, u32 n, u32 m)
{ … }
u32 ssb_clockspeed(struct ssb_bus *bus)
{ … }
EXPORT_SYMBOL(…);
static u32 ssb_tmslow_reject_bitmask(struct ssb_device *dev)
{ … }
int ssb_device_is_enabled(struct ssb_device *dev)
{ … }
EXPORT_SYMBOL(…);
static void ssb_flush_tmslow(struct ssb_device *dev)
{ … }
void ssb_device_enable(struct ssb_device *dev, u32 core_specific_flags)
{ … }
EXPORT_SYMBOL(…);
static int ssb_wait_bits(struct ssb_device *dev, u16 reg, u32 bitmask,
int timeout, int set)
{ … }
void ssb_device_disable(struct ssb_device *dev, u32 core_specific_flags)
{ … }
EXPORT_SYMBOL(…);
static bool ssb_dma_translation_special_bit(struct ssb_device *dev)
{ … }
u32 ssb_dma_translation(struct ssb_device *dev)
{ … }
EXPORT_SYMBOL(…);
int ssb_bus_may_powerdown(struct ssb_bus *bus)
{ … }
EXPORT_SYMBOL(…);
int ssb_bus_powerup(struct ssb_bus *bus, bool dynamic_pctl)
{ … }
EXPORT_SYMBOL(…);
static void ssb_broadcast_value(struct ssb_device *dev,
u32 address, u32 data)
{ … }
void ssb_commit_settings(struct ssb_bus *bus)
{ … }
EXPORT_SYMBOL(…);
u32 ssb_admatch_base(u32 adm)
{ … }
EXPORT_SYMBOL(…);
u32 ssb_admatch_size(u32 adm)
{ … }
EXPORT_SYMBOL(…);
static int __init ssb_modinit(void)
{ … }
fs_initcall(ssb_modinit);
static void __exit ssb_modexit(void)
{ … }
module_exit(…)