linux/drivers/ssb/ssb_private.h
<<
>>
Prefs
   1#ifndef LINUX_SSB_PRIVATE_H_
   2#define LINUX_SSB_PRIVATE_H_
   3
   4#include <linux/ssb/ssb.h>
   5#include <linux/types.h>
   6#include <linux/bcm47xx_wdt.h>
   7
   8
   9#define PFX     "ssb: "
  10
  11#ifdef CONFIG_SSB_SILENT
  12# define ssb_printk(fmt, ...)                                   \
  13        do { if (0) printk(fmt, ##__VA_ARGS__); } while (0)
  14#else
  15# define ssb_printk(fmt, ...)                                   \
  16        printk(fmt, ##__VA_ARGS__)
  17#endif /* CONFIG_SSB_SILENT */
  18
  19#define ssb_emerg(fmt, ...)     ssb_printk(KERN_EMERG PFX fmt, ##__VA_ARGS__)
  20#define ssb_err(fmt, ...)       ssb_printk(KERN_ERR PFX fmt, ##__VA_ARGS__)
  21#define ssb_warn(fmt, ...)      ssb_printk(KERN_WARNING PFX fmt, ##__VA_ARGS__)
  22#define ssb_notice(fmt, ...)    ssb_printk(KERN_NOTICE PFX fmt, ##__VA_ARGS__)
  23#define ssb_info(fmt, ...)      ssb_printk(KERN_INFO PFX fmt, ##__VA_ARGS__)
  24#define ssb_cont(fmt, ...)      ssb_printk(KERN_CONT fmt, ##__VA_ARGS__)
  25
  26/* dprintk: Debugging printk; vanishes for non-debug compilation */
  27#ifdef CONFIG_SSB_DEBUG
  28# define ssb_dbg(fmt, ...)                                      \
  29        ssb_printk(KERN_DEBUG PFX fmt, ##__VA_ARGS__)
  30#else
  31# define ssb_dbg(fmt, ...)                                      \
  32        do { if (0) printk(KERN_DEBUG PFX fmt, ##__VA_ARGS__); } while (0)
  33#endif
  34
  35#ifdef CONFIG_SSB_DEBUG
  36# define SSB_WARN_ON(x)         WARN_ON(x)
  37# define SSB_BUG_ON(x)          BUG_ON(x)
  38#else
  39static inline int __ssb_do_nothing(int x) { return x; }
  40# define SSB_WARN_ON(x)         __ssb_do_nothing(unlikely(!!(x)))
  41# define SSB_BUG_ON(x)          __ssb_do_nothing(unlikely(!!(x)))
  42#endif
  43
  44
  45/* pci.c */
  46#ifdef CONFIG_SSB_PCIHOST
  47extern int ssb_pci_switch_core(struct ssb_bus *bus,
  48                               struct ssb_device *dev);
  49extern int ssb_pci_switch_coreidx(struct ssb_bus *bus,
  50                                  u8 coreidx);
  51extern int ssb_pci_xtal(struct ssb_bus *bus, u32 what,
  52                        int turn_on);
  53extern int ssb_pci_get_invariants(struct ssb_bus *bus,
  54                                  struct ssb_init_invariants *iv);
  55extern void ssb_pci_exit(struct ssb_bus *bus);
  56extern int ssb_pci_init(struct ssb_bus *bus);
  57extern const struct ssb_bus_ops ssb_pci_ops;
  58
  59#else /* CONFIG_SSB_PCIHOST */
  60
  61static inline int ssb_pci_switch_core(struct ssb_bus *bus,
  62                                      struct ssb_device *dev)
  63{
  64        return 0;
  65}
  66static inline int ssb_pci_switch_coreidx(struct ssb_bus *bus,
  67                                         u8 coreidx)
  68{
  69        return 0;
  70}
  71static inline int ssb_pci_xtal(struct ssb_bus *bus, u32 what,
  72                               int turn_on)
  73{
  74        return 0;
  75}
  76static inline void ssb_pci_exit(struct ssb_bus *bus)
  77{
  78}
  79static inline int ssb_pci_init(struct ssb_bus *bus)
  80{
  81        return 0;
  82}
  83#endif /* CONFIG_SSB_PCIHOST */
  84
  85
  86/* pcmcia.c */
  87#ifdef CONFIG_SSB_PCMCIAHOST
  88extern int ssb_pcmcia_switch_core(struct ssb_bus *bus,
  89                                  struct ssb_device *dev);
  90extern int ssb_pcmcia_switch_coreidx(struct ssb_bus *bus,
  91                                     u8 coreidx);
  92extern int ssb_pcmcia_switch_segment(struct ssb_bus *bus,
  93                                     u8 seg);
  94extern int ssb_pcmcia_get_invariants(struct ssb_bus *bus,
  95                                     struct ssb_init_invariants *iv);
  96extern int ssb_pcmcia_hardware_setup(struct ssb_bus *bus);
  97extern void ssb_pcmcia_exit(struct ssb_bus *bus);
  98extern int ssb_pcmcia_init(struct ssb_bus *bus);
  99extern const struct ssb_bus_ops ssb_pcmcia_ops;
 100#else /* CONFIG_SSB_PCMCIAHOST */
 101static inline int ssb_pcmcia_switch_core(struct ssb_bus *bus,
 102                                         struct ssb_device *dev)
 103{
 104        return 0;
 105}
 106static inline int ssb_pcmcia_switch_coreidx(struct ssb_bus *bus,
 107                                            u8 coreidx)
 108{
 109        return 0;
 110}
 111static inline int ssb_pcmcia_switch_segment(struct ssb_bus *bus,
 112                                            u8 seg)
 113{
 114        return 0;
 115}
 116static inline int ssb_pcmcia_hardware_setup(struct ssb_bus *bus)
 117{
 118        return 0;
 119}
 120static inline void ssb_pcmcia_exit(struct ssb_bus *bus)
 121{
 122}
 123static inline int ssb_pcmcia_init(struct ssb_bus *bus)
 124{
 125        return 0;
 126}
 127#endif /* CONFIG_SSB_PCMCIAHOST */
 128
 129/* sdio.c */
 130#ifdef CONFIG_SSB_SDIOHOST
 131extern int ssb_sdio_get_invariants(struct ssb_bus *bus,
 132                                     struct ssb_init_invariants *iv);
 133
 134extern u32 ssb_sdio_scan_read32(struct ssb_bus *bus, u16 offset);
 135extern int ssb_sdio_switch_core(struct ssb_bus *bus, struct ssb_device *dev);
 136extern int ssb_sdio_scan_switch_coreidx(struct ssb_bus *bus, u8 coreidx);
 137extern int ssb_sdio_hardware_setup(struct ssb_bus *bus);
 138extern void ssb_sdio_exit(struct ssb_bus *bus);
 139extern int ssb_sdio_init(struct ssb_bus *bus);
 140
 141extern const struct ssb_bus_ops ssb_sdio_ops;
 142#else /* CONFIG_SSB_SDIOHOST */
 143static inline u32 ssb_sdio_scan_read32(struct ssb_bus *bus, u16 offset)
 144{
 145        return 0;
 146}
 147static inline int ssb_sdio_switch_core(struct ssb_bus *bus,
 148                                         struct ssb_device *dev)
 149{
 150        return 0;
 151}
 152static inline int ssb_sdio_scan_switch_coreidx(struct ssb_bus *bus, u8 coreidx)
 153{
 154        return 0;
 155}
 156static inline int ssb_sdio_hardware_setup(struct ssb_bus *bus)
 157{
 158        return 0;
 159}
 160static inline void ssb_sdio_exit(struct ssb_bus *bus)
 161{
 162}
 163static inline int ssb_sdio_init(struct ssb_bus *bus)
 164{
 165        return 0;
 166}
 167#endif /* CONFIG_SSB_SDIOHOST */
 168
 169
 170/* scan.c */
 171extern const char *ssb_core_name(u16 coreid);
 172extern int ssb_bus_scan(struct ssb_bus *bus,
 173                        unsigned long baseaddr);
 174extern void ssb_iounmap(struct ssb_bus *ssb);
 175
 176
 177/* sprom.c */
 178extern
 179ssize_t ssb_attr_sprom_show(struct ssb_bus *bus, char *buf,
 180                            int (*sprom_read)(struct ssb_bus *bus, u16 *sprom));
 181extern
 182ssize_t ssb_attr_sprom_store(struct ssb_bus *bus,
 183                             const char *buf, size_t count,
 184                             int (*sprom_check_crc)(const u16 *sprom, size_t size),
 185                             int (*sprom_write)(struct ssb_bus *bus, const u16 *sprom));
 186extern int ssb_fill_sprom_with_fallback(struct ssb_bus *bus,
 187                                        struct ssb_sprom *out);
 188
 189
 190/* core.c */
 191extern u32 ssb_calc_clock_rate(u32 plltype, u32 n, u32 m);
 192extern struct ssb_bus *ssb_pci_dev_to_bus(struct pci_dev *pdev);
 193int ssb_for_each_bus_call(unsigned long data,
 194                          int (*func)(struct ssb_bus *bus, unsigned long data));
 195extern struct ssb_bus *ssb_pcmcia_dev_to_bus(struct pcmcia_device *pdev);
 196
 197struct ssb_freeze_context {
 198        /* Pointer to the bus */
 199        struct ssb_bus *bus;
 200        /* Boolean list to indicate whether a device is frozen on this bus. */
 201        bool device_frozen[SSB_MAX_NR_CORES];
 202};
 203extern int ssb_devices_freeze(struct ssb_bus *bus, struct ssb_freeze_context *ctx);
 204extern int ssb_devices_thaw(struct ssb_freeze_context *ctx);
 205
 206
 207
 208/* b43_pci_bridge.c */
 209#ifdef CONFIG_SSB_B43_PCI_BRIDGE
 210extern int __init b43_pci_ssb_bridge_init(void);
 211extern void __exit b43_pci_ssb_bridge_exit(void);
 212#else /* CONFIG_SSB_B43_PCI_BRIDGE */
 213static inline int b43_pci_ssb_bridge_init(void)
 214{
 215        return 0;
 216}
 217static inline void b43_pci_ssb_bridge_exit(void)
 218{
 219}
 220#endif /* CONFIG_SSB_B43_PCI_BRIDGE */
 221
 222/* driver_chipcommon_pmu.c */
 223extern u32 ssb_pmu_get_cpu_clock(struct ssb_chipcommon *cc);
 224extern u32 ssb_pmu_get_controlclock(struct ssb_chipcommon *cc);
 225extern u32 ssb_pmu_get_alp_clock(struct ssb_chipcommon *cc);
 226
 227extern u32 ssb_chipco_watchdog_timer_set_wdt(struct bcm47xx_wdt *wdt,
 228                                             u32 ticks);
 229extern u32 ssb_chipco_watchdog_timer_set_ms(struct bcm47xx_wdt *wdt, u32 ms);
 230
 231/* driver_chipcommon_sflash.c */
 232#ifdef CONFIG_SSB_SFLASH
 233int ssb_sflash_init(struct ssb_chipcommon *cc);
 234#else
 235static inline int ssb_sflash_init(struct ssb_chipcommon *cc)
 236{
 237        pr_err("Serial flash not supported\n");
 238        return 0;
 239}
 240#endif /* CONFIG_SSB_SFLASH */
 241
 242#ifdef CONFIG_SSB_DRIVER_MIPS
 243extern struct platform_device ssb_pflash_dev;
 244#endif
 245
 246#ifdef CONFIG_SSB_SFLASH
 247extern struct platform_device ssb_sflash_dev;
 248#endif
 249
 250#ifdef CONFIG_SSB_DRIVER_EXTIF
 251extern u32 ssb_extif_watchdog_timer_set_wdt(struct bcm47xx_wdt *wdt, u32 ticks);
 252extern u32 ssb_extif_watchdog_timer_set_ms(struct bcm47xx_wdt *wdt, u32 ms);
 253#else
 254static inline u32 ssb_extif_watchdog_timer_set_wdt(struct bcm47xx_wdt *wdt,
 255                                                   u32 ticks)
 256{
 257        return 0;
 258}
 259static inline u32 ssb_extif_watchdog_timer_set_ms(struct bcm47xx_wdt *wdt,
 260                                                  u32 ms)
 261{
 262        return 0;
 263}
 264#endif
 265
 266#ifdef CONFIG_SSB_EMBEDDED
 267extern int ssb_watchdog_register(struct ssb_bus *bus);
 268#else /* CONFIG_SSB_EMBEDDED */
 269static inline int ssb_watchdog_register(struct ssb_bus *bus)
 270{
 271        return 0;
 272}
 273#endif /* CONFIG_SSB_EMBEDDED */
 274
 275#ifdef CONFIG_SSB_DRIVER_EXTIF
 276extern void ssb_extif_init(struct ssb_extif *extif);
 277#else
 278static inline void ssb_extif_init(struct ssb_extif *extif)
 279{
 280}
 281#endif
 282
 283#ifdef CONFIG_SSB_DRIVER_GPIO
 284extern int ssb_gpio_init(struct ssb_bus *bus);
 285extern int ssb_gpio_unregister(struct ssb_bus *bus);
 286#else /* CONFIG_SSB_DRIVER_GPIO */
 287static inline int ssb_gpio_init(struct ssb_bus *bus)
 288{
 289        return -ENOTSUPP;
 290}
 291static inline int ssb_gpio_unregister(struct ssb_bus *bus)
 292{
 293        return 0;
 294}
 295#endif /* CONFIG_SSB_DRIVER_GPIO */
 296
 297#endif /* LINUX_SSB_PRIVATE_H_ */
 298