59645f5a6f3d2b916adc6b0debddb63629a03288
[librecmc/librecmc.git] / target / linux / brcm47xx-2.6 / files / drivers / ssb / ssb_private.h
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 <asm/io.h>
7
8
9 #define PFX     "ssb: "
10
11 #ifdef CONFIG_SSB_SILENT
12 # define ssb_printk(fmt, x...)  do { /* nothing */ } while (0)
13 #else
14 # define ssb_printk             printk
15 #endif /* CONFIG_SSB_SILENT */
16
17 /* dprintk: Debugging printk; vanishes for non-debug compilation */
18 #ifdef CONFIG_SSB_DEBUG
19 # define ssb_dprintk(fmt, x...) ssb_printk(fmt ,##x)
20 #else
21 # define ssb_dprintk(fmt, x...) do { /* nothing */ } while (0)
22 #endif
23
24 /* printkl: Rate limited printk */
25 #define ssb_printkl(fmt, x...)  do {            \
26         if (printk_ratelimit())                 \
27                 ssb_printk(fmt ,##x);           \
28                                 } while (0)
29
30 /* dprintkl: Rate limited debugging printk */
31 #ifdef CONFIG_SSB_DEBUG
32 # define ssb_dprintkl                   ssb_printkl
33 #else
34 # define ssb_dprintkl(fmt, x...)        do { /* nothing */ } while (0)
35 #endif
36
37 #define assert(cond)    do {                                            \
38         if (unlikely(!(cond))) {                                        \
39                 ssb_dprintk(KERN_ERR PFX "BUG: Assertion failed (%s) "  \
40                             "at: %s:%d:%s()\n",                         \
41                             #cond, __FILE__, __LINE__, __func__);       \
42         }                                                               \
43                        } while (0)
44
45
46 /* pci.c */
47 #ifdef CONFIG_SSB_PCIHOST
48 extern int ssb_pci_switch_core(struct ssb_bus *bus,
49                                struct ssb_device *dev);
50 extern int ssb_pci_switch_coreidx(struct ssb_bus *bus,
51                                   u8 coreidx);
52 extern int ssb_pci_xtal(struct ssb_bus *bus, u32 what,
53                         int turn_on);
54 extern int ssb_pci_sprom_get(struct ssb_bus *bus);
55 extern void ssb_pci_get_boardtype(struct ssb_bus *bus);
56 extern int ssb_pci_init(struct ssb_bus *bus);
57 extern const struct ssb_bus_ops ssb_pci_ops;
58
59 #else /* CONFIG_SSB_PCIHOST */
60
61 static inline int ssb_pci_switch_core(struct ssb_bus *bus,
62                                       struct ssb_device *dev)
63 {
64         return 0;
65 }
66 static inline int ssb_pci_switch_coreidx(struct ssb_bus *bus,
67                                          u8 coreidx)
68 {
69         return 0;
70 }
71 static inline int ssb_pci_xtal(struct ssb_bus *bus, u32 what,
72                                int turn_on)
73 {
74         return 0;
75 }
76 static inline int ssb_pci_sprom_get(struct ssb_bus *bus)
77 {
78         return 0;
79 }
80 static inline void ssb_pci_get_boardtype(struct ssb_bus *bus)
81 {
82 }
83 static inline int ssb_pci_init(struct ssb_bus *bus)
84 {
85         return 0;
86 }
87 #endif /* CONFIG_SSB_PCIHOST */
88
89
90 /* pcmcia.c */
91 #ifdef CONFIG_SSB_PCMCIAHOST
92 extern int ssb_pcmcia_switch_core(struct ssb_bus *bus,
93                                   struct ssb_device *dev);
94 extern int ssb_pcmcia_switch_coreidx(struct ssb_bus *bus,
95                                      u8 coreidx);
96 extern int ssb_pcmcia_switch_segment(struct ssb_bus *bus,
97                                      u8 seg);
98 extern int ssb_pcmcia_init(struct ssb_bus *bus);
99 extern const struct ssb_bus_ops ssb_pcmcia_ops;
100 #else /* CONFIG_SSB_PCMCIAHOST */
101 static inline int ssb_pcmcia_switch_core(struct ssb_bus *bus,
102                                          struct ssb_device *dev)
103 {
104         return 0;
105 }
106 static inline int ssb_pcmcia_switch_coreidx(struct ssb_bus *bus,
107                                             u8 coreidx)
108 {
109         return 0;
110 }
111 static inline int ssb_pcmcia_switch_segment(struct ssb_bus *bus,
112                                             u8 seg)
113 {
114         return 0;
115 }
116 static inline int ssb_pcmcia_init(struct ssb_bus *bus)
117 {
118         return 0;
119 }
120 #endif /* CONFIG_SSB_PCMCIAHOST */
121
122
123 /* scan.c */
124 extern const char * ssb_core_name(u16 coreid);
125 extern int ssb_bus_scan(struct ssb_bus *bus,
126                         unsigned long baseaddr);
127 extern void ssb_iounmap(struct ssb_bus *ssb);
128
129
130 /* core.c */
131 extern struct bus_type ssb_bustype;
132 extern u32 ssb_calc_clock_rate(u32 plltype, u32 n, u32 m);
133
134
135 /* Ceiling division helper. Divides x by y. */
136 static inline
137 unsigned long ceildiv(unsigned long x, unsigned long y)
138 {
139         return ((x + (y - 1)) / y);
140 }
141
142
143 #endif /* LINUX_SSB_PRIVATE_H_ */