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