2007-09-18 23:12:50 +04:00
# ifndef LINUX_SSB_PRIVATE_H_
# define LINUX_SSB_PRIVATE_H_
# include <linux/ssb/ssb.h>
# include <linux/types.h>
2012-12-05 21:46:05 +04:00
# include <linux/bcm47xx_wdt.h>
2007-09-18 23:12:50 +04:00
# define PFX "ssb: "
# ifdef CONFIG_SSB_SILENT
2013-02-21 00:16:13 +04:00
# define ssb_printk(fmt, ...) \
do { if ( 0 ) printk ( fmt , # # __VA_ARGS__ ) ; } while ( 0 )
2007-09-18 23:12:50 +04:00
# else
2013-02-21 00:16:13 +04:00
# define ssb_printk(fmt, ...) \
printk ( fmt , # # __VA_ARGS__ )
2007-09-18 23:12:50 +04:00
# endif /* CONFIG_SSB_SILENT */
2013-02-21 00:16:13 +04:00
# define ssb_emerg(fmt, ...) ssb_printk(KERN_EMERG PFX fmt, ##__VA_ARGS__)
# define ssb_err(fmt, ...) ssb_printk(KERN_ERR PFX fmt, ##__VA_ARGS__)
# define ssb_warn(fmt, ...) ssb_printk(KERN_WARNING PFX fmt, ##__VA_ARGS__)
# define ssb_notice(fmt, ...) ssb_printk(KERN_NOTICE PFX fmt, ##__VA_ARGS__)
# define ssb_info(fmt, ...) ssb_printk(KERN_INFO PFX fmt, ##__VA_ARGS__)
# define ssb_cont(fmt, ...) ssb_printk(KERN_CONT fmt, ##__VA_ARGS__)
2007-09-18 23:12:50 +04:00
/* dprintk: Debugging printk; vanishes for non-debug compilation */
# ifdef CONFIG_SSB_DEBUG
2013-02-21 00:16:13 +04:00
# define ssb_dbg(fmt, ...) \
ssb_printk ( KERN_DEBUG PFX fmt , # # __VA_ARGS__ )
2007-09-18 23:12:50 +04:00
# else
2013-02-21 00:16:13 +04:00
# define ssb_dbg(fmt, ...) \
do { if ( 0 ) printk ( KERN_DEBUG PFX fmt , # # __VA_ARGS__ ) ; } while ( 0 )
2007-09-18 23:12:50 +04:00
# endif
# ifdef CONFIG_SSB_DEBUG
# define SSB_WARN_ON(x) WARN_ON(x)
# define SSB_BUG_ON(x) BUG_ON(x)
# else
static inline int __ssb_do_nothing ( int x ) { return x ; }
# define SSB_WARN_ON(x) __ssb_do_nothing(unlikely(!!(x)))
# define SSB_BUG_ON(x) __ssb_do_nothing(unlikely(!!(x)))
# endif
/* pci.c */
# ifdef CONFIG_SSB_PCIHOST
extern int ssb_pci_switch_core ( struct ssb_bus * bus ,
struct ssb_device * dev ) ;
extern int ssb_pci_switch_coreidx ( struct ssb_bus * bus ,
u8 coreidx ) ;
extern int ssb_pci_xtal ( struct ssb_bus * bus , u32 what ,
int turn_on ) ;
extern int ssb_pci_get_invariants ( struct ssb_bus * bus ,
struct ssb_init_invariants * iv ) ;
extern void ssb_pci_exit ( struct ssb_bus * bus ) ;
extern int ssb_pci_init ( struct ssb_bus * bus ) ;
extern const struct ssb_bus_ops ssb_pci_ops ;
# else /* CONFIG_SSB_PCIHOST */
static inline int ssb_pci_switch_core ( struct ssb_bus * bus ,
struct ssb_device * dev )
{
return 0 ;
}
static inline int ssb_pci_switch_coreidx ( struct ssb_bus * bus ,
u8 coreidx )
{
return 0 ;
}
static inline int ssb_pci_xtal ( struct ssb_bus * bus , u32 what ,
int turn_on )
{
return 0 ;
}
static inline void ssb_pci_exit ( struct ssb_bus * bus )
{
}
static inline int ssb_pci_init ( struct ssb_bus * bus )
{
return 0 ;
}
# endif /* CONFIG_SSB_PCIHOST */
/* pcmcia.c */
# ifdef CONFIG_SSB_PCMCIAHOST
extern int ssb_pcmcia_switch_coreidx ( struct ssb_bus * bus ,
u8 coreidx ) ;
extern int ssb_pcmcia_switch_segment ( struct ssb_bus * bus ,
u8 seg ) ;
extern int ssb_pcmcia_get_invariants ( struct ssb_bus * bus ,
struct ssb_init_invariants * iv ) ;
2008-03-30 03:10:50 +04:00
extern int ssb_pcmcia_hardware_setup ( struct ssb_bus * bus ) ;
2008-03-10 19:26:32 +03:00
extern void ssb_pcmcia_exit ( struct ssb_bus * bus ) ;
2007-09-18 23:12:50 +04:00
extern int ssb_pcmcia_init ( struct ssb_bus * bus ) ;
2015-10-15 08:23:25 +03:00
extern int ssb_host_pcmcia_init ( void ) ;
extern void ssb_host_pcmcia_exit ( void ) ;
2007-09-18 23:12:50 +04:00
extern const struct ssb_bus_ops ssb_pcmcia_ops ;
# else /* CONFIG_SSB_PCMCIAHOST */
static inline int ssb_pcmcia_switch_coreidx ( struct ssb_bus * bus ,
u8 coreidx )
{
return 0 ;
}
static inline int ssb_pcmcia_switch_segment ( struct ssb_bus * bus ,
u8 seg )
{
return 0 ;
}
2008-03-30 03:10:50 +04:00
static inline int ssb_pcmcia_hardware_setup ( struct ssb_bus * bus )
{
return 0 ;
}
2008-03-10 19:26:32 +03:00
static inline void ssb_pcmcia_exit ( struct ssb_bus * bus )
{
}
2007-09-18 23:12:50 +04:00
static inline int ssb_pcmcia_init ( struct ssb_bus * bus )
{
return 0 ;
}
2015-10-15 08:23:25 +03:00
static inline int ssb_host_pcmcia_init ( void )
{
return 0 ;
}
static inline void ssb_host_pcmcia_exit ( void )
{
}
2007-09-18 23:12:50 +04:00
# endif /* CONFIG_SSB_PCMCIAHOST */
2009-09-08 21:30:12 +04:00
/* sdio.c */
# ifdef CONFIG_SSB_SDIOHOST
extern int ssb_sdio_get_invariants ( struct ssb_bus * bus ,
struct ssb_init_invariants * iv ) ;
extern u32 ssb_sdio_scan_read32 ( struct ssb_bus * bus , u16 offset ) ;
extern int ssb_sdio_scan_switch_coreidx ( struct ssb_bus * bus , u8 coreidx ) ;
extern void ssb_sdio_exit ( struct ssb_bus * bus ) ;
extern int ssb_sdio_init ( struct ssb_bus * bus ) ;
extern const struct ssb_bus_ops ssb_sdio_ops ;
# else /* CONFIG_SSB_SDIOHOST */
static inline u32 ssb_sdio_scan_read32 ( struct ssb_bus * bus , u16 offset )
{
return 0 ;
}
static inline int ssb_sdio_scan_switch_coreidx ( struct ssb_bus * bus , u8 coreidx )
{
return 0 ;
}
static inline void ssb_sdio_exit ( struct ssb_bus * bus )
{
}
static inline int ssb_sdio_init ( struct ssb_bus * bus )
{
return 0 ;
}
# endif /* CONFIG_SSB_SDIOHOST */
2015-10-25 21:32:42 +03:00
/**************************************************
* host_soc . c
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2015-10-25 21:32:43 +03:00
# ifdef CONFIG_SSB_HOST_SOC
2015-10-25 21:32:42 +03:00
extern const struct ssb_bus_ops ssb_host_soc_ops ;
2015-12-10 01:36:51 +03:00
extern int ssb_host_soc_get_invariants ( struct ssb_bus * bus ,
struct ssb_init_invariants * iv ) ;
2015-10-25 21:32:43 +03:00
# endif
2007-09-18 23:12:50 +04:00
/* scan.c */
extern const char * ssb_core_name ( u16 coreid ) ;
extern int ssb_bus_scan ( struct ssb_bus * bus ,
unsigned long baseaddr ) ;
extern void ssb_iounmap ( struct ssb_bus * ssb ) ;
2008-03-10 19:26:32 +03:00
/* sprom.c */
extern
ssize_t ssb_attr_sprom_show ( struct ssb_bus * bus , char * buf ,
int ( * sprom_read ) ( struct ssb_bus * bus , u16 * sprom ) ) ;
extern
ssize_t ssb_attr_sprom_store ( struct ssb_bus * bus ,
const char * buf , size_t count ,
int ( * sprom_check_crc ) ( const u16 * sprom , size_t size ) ,
int ( * sprom_write ) ( struct ssb_bus * bus , const u16 * sprom ) ) ;
2011-05-11 01:31:30 +04:00
extern int ssb_fill_sprom_with_fallback ( struct ssb_bus * bus ,
struct ssb_sprom * out ) ;
2008-03-10 19:26:32 +03:00
2007-09-18 23:12:50 +04:00
/* core.c */
extern u32 ssb_calc_clock_rate ( u32 plltype , u32 n , u32 m ) ;
extern struct ssb_bus * ssb_pci_dev_to_bus ( struct pci_dev * pdev ) ;
2008-02-29 13:36:12 +03:00
int ssb_for_each_bus_call ( unsigned long data ,
int ( * func ) ( struct ssb_bus * bus , unsigned long data ) ) ;
2008-03-10 19:26:32 +03:00
extern struct ssb_bus * ssb_pcmcia_dev_to_bus ( struct pcmcia_device * pdev ) ;
2009-11-23 22:12:13 +03:00
struct ssb_freeze_context {
/* Pointer to the bus */
struct ssb_bus * bus ;
/* Boolean list to indicate whether a device is frozen on this bus. */
bool device_frozen [ SSB_MAX_NR_CORES ] ;
} ;
extern int ssb_devices_freeze ( struct ssb_bus * bus , struct ssb_freeze_context * ctx ) ;
extern int ssb_devices_thaw ( struct ssb_freeze_context * ctx ) ;
2007-09-18 23:12:50 +04:00
/* b43_pci_bridge.c */
2008-02-23 12:59:26 +03:00
# ifdef CONFIG_SSB_B43_PCI_BRIDGE
2007-09-18 23:12:50 +04:00
extern int __init b43_pci_ssb_bridge_init ( void ) ;
extern void __exit b43_pci_ssb_bridge_exit ( void ) ;
2010-02-13 20:10:54 +03:00
# else /* CONFIG_SSB_B43_PCI_BRIDGE */
2007-09-18 23:12:50 +04:00
static inline int b43_pci_ssb_bridge_init ( void )
{
return 0 ;
}
static inline void b43_pci_ssb_bridge_exit ( void )
{
}
2010-02-13 20:10:54 +03:00
# endif /* CONFIG_SSB_B43_PCI_BRIDGE */
2007-09-18 23:12:50 +04:00
2012-02-01 03:13:56 +04:00
/* driver_chipcommon_pmu.c */
extern u32 ssb_pmu_get_cpu_clock ( struct ssb_chipcommon * cc ) ;
extern u32 ssb_pmu_get_controlclock ( struct ssb_chipcommon * cc ) ;
2012-12-05 21:46:03 +04:00
extern u32 ssb_pmu_get_alp_clock ( struct ssb_chipcommon * cc ) ;
2012-02-01 03:13:56 +04:00
2012-12-05 21:46:05 +04:00
extern u32 ssb_chipco_watchdog_timer_set_wdt ( struct bcm47xx_wdt * wdt ,
u32 ticks ) ;
extern u32 ssb_chipco_watchdog_timer_set_ms ( struct bcm47xx_wdt * wdt , u32 ms ) ;
2013-01-07 00:48:50 +04:00
/* driver_chipcommon_sflash.c */
# ifdef CONFIG_SSB_SFLASH
int ssb_sflash_init ( struct ssb_chipcommon * cc ) ;
# else
static inline int ssb_sflash_init ( struct ssb_chipcommon * cc )
{
pr_err ( " Serial flash not supported \n " ) ;
return 0 ;
}
# endif /* CONFIG_SSB_SFLASH */
2013-01-25 14:36:26 +04:00
# ifdef CONFIG_SSB_DRIVER_MIPS
extern struct platform_device ssb_pflash_dev ;
# endif
2013-06-18 09:33:40 +04:00
# ifdef CONFIG_SSB_SFLASH
extern struct platform_device ssb_sflash_dev ;
# endif
2012-12-05 21:46:07 +04:00
# ifdef CONFIG_SSB_DRIVER_EXTIF
extern u32 ssb_extif_watchdog_timer_set_wdt ( struct bcm47xx_wdt * wdt , u32 ticks ) ;
extern u32 ssb_extif_watchdog_timer_set_ms ( struct bcm47xx_wdt * wdt , u32 ms ) ;
# else
static inline u32 ssb_extif_watchdog_timer_set_wdt ( struct bcm47xx_wdt * wdt ,
u32 ticks )
{
return 0 ;
}
static inline u32 ssb_extif_watchdog_timer_set_ms ( struct bcm47xx_wdt * wdt ,
u32 ms )
{
return 0 ;
}
# endif
2012-12-05 21:46:08 +04:00
# ifdef CONFIG_SSB_EMBEDDED
extern int ssb_watchdog_register ( struct ssb_bus * bus ) ;
# else /* CONFIG_SSB_EMBEDDED */
static inline int ssb_watchdog_register ( struct ssb_bus * bus )
{
return 0 ;
}
# endif /* CONFIG_SSB_EMBEDDED */
2012-11-21 02:24:32 +04:00
# ifdef CONFIG_SSB_DRIVER_EXTIF
extern void ssb_extif_init ( struct ssb_extif * extif ) ;
# else
static inline void ssb_extif_init ( struct ssb_extif * extif )
{
}
# endif
2012-11-21 02:24:33 +04:00
# ifdef CONFIG_SSB_DRIVER_GPIO
extern int ssb_gpio_init ( struct ssb_bus * bus ) ;
2013-02-04 02:25:34 +04:00
extern int ssb_gpio_unregister ( struct ssb_bus * bus ) ;
2012-11-21 02:24:33 +04:00
# else /* CONFIG_SSB_DRIVER_GPIO */
static inline int ssb_gpio_init ( struct ssb_bus * bus )
{
return - ENOTSUPP ;
}
2013-02-04 02:25:34 +04:00
static inline int ssb_gpio_unregister ( struct ssb_bus * bus )
{
return 0 ;
}
2012-11-21 02:24:33 +04:00
# endif /* CONFIG_SSB_DRIVER_GPIO */
2007-09-18 23:12:50 +04:00
# endif /* LINUX_SSB_PRIVATE_H_ */