1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun #ifndef LINUX_BCMA_PRIVATE_H_
3*4882a593Smuzhiyun #define LINUX_BCMA_PRIVATE_H_
4*4882a593Smuzhiyun
5*4882a593Smuzhiyun #ifndef pr_fmt
6*4882a593Smuzhiyun #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
7*4882a593Smuzhiyun #endif
8*4882a593Smuzhiyun
9*4882a593Smuzhiyun #include <linux/bcma/bcma.h>
10*4882a593Smuzhiyun #include <linux/delay.h>
11*4882a593Smuzhiyun
12*4882a593Smuzhiyun #define bcma_err(bus, fmt, ...) \
13*4882a593Smuzhiyun dev_err((bus)->dev, "bus%d: " fmt, (bus)->num, ##__VA_ARGS__)
14*4882a593Smuzhiyun #define bcma_warn(bus, fmt, ...) \
15*4882a593Smuzhiyun dev_warn((bus)->dev, "bus%d: " fmt, (bus)->num, ##__VA_ARGS__)
16*4882a593Smuzhiyun #define bcma_info(bus, fmt, ...) \
17*4882a593Smuzhiyun dev_info((bus)->dev, "bus%d: " fmt, (bus)->num, ##__VA_ARGS__)
18*4882a593Smuzhiyun #define bcma_debug(bus, fmt, ...) \
19*4882a593Smuzhiyun dev_dbg((bus)->dev, "bus%d: " fmt, (bus)->num, ##__VA_ARGS__)
20*4882a593Smuzhiyun
21*4882a593Smuzhiyun struct bcma_bus;
22*4882a593Smuzhiyun
23*4882a593Smuzhiyun /* main.c */
24*4882a593Smuzhiyun bool bcma_wait_value(struct bcma_device *core, u16 reg, u32 mask, u32 value,
25*4882a593Smuzhiyun int timeout);
26*4882a593Smuzhiyun void bcma_prepare_core(struct bcma_bus *bus, struct bcma_device *core);
27*4882a593Smuzhiyun void bcma_init_bus(struct bcma_bus *bus);
28*4882a593Smuzhiyun void bcma_unregister_cores(struct bcma_bus *bus);
29*4882a593Smuzhiyun int bcma_bus_register(struct bcma_bus *bus);
30*4882a593Smuzhiyun void bcma_bus_unregister(struct bcma_bus *bus);
31*4882a593Smuzhiyun int __init bcma_bus_early_register(struct bcma_bus *bus);
32*4882a593Smuzhiyun #ifdef CONFIG_PM
33*4882a593Smuzhiyun int bcma_bus_suspend(struct bcma_bus *bus);
34*4882a593Smuzhiyun int bcma_bus_resume(struct bcma_bus *bus);
35*4882a593Smuzhiyun #endif
36*4882a593Smuzhiyun
37*4882a593Smuzhiyun /* scan.c */
38*4882a593Smuzhiyun void bcma_detect_chip(struct bcma_bus *bus);
39*4882a593Smuzhiyun int bcma_bus_scan(struct bcma_bus *bus);
40*4882a593Smuzhiyun
41*4882a593Smuzhiyun /* sprom.c */
42*4882a593Smuzhiyun int bcma_sprom_get(struct bcma_bus *bus);
43*4882a593Smuzhiyun
44*4882a593Smuzhiyun /* driver_chipcommon.c */
45*4882a593Smuzhiyun void bcma_core_chipcommon_early_init(struct bcma_drv_cc *cc);
46*4882a593Smuzhiyun void bcma_core_chipcommon_init(struct bcma_drv_cc *cc);
47*4882a593Smuzhiyun void bcma_chipco_bcm4331_ext_pa_lines_ctl(struct bcma_drv_cc *cc, bool enable);
48*4882a593Smuzhiyun #ifdef CONFIG_BCMA_DRIVER_MIPS
49*4882a593Smuzhiyun void bcma_chipco_serial_init(struct bcma_drv_cc *cc);
50*4882a593Smuzhiyun #endif /* CONFIG_BCMA_DRIVER_MIPS */
51*4882a593Smuzhiyun
52*4882a593Smuzhiyun /* driver_chipcommon_b.c */
53*4882a593Smuzhiyun int bcma_core_chipcommon_b_init(struct bcma_drv_cc_b *ccb);
54*4882a593Smuzhiyun void bcma_core_chipcommon_b_free(struct bcma_drv_cc_b *ccb);
55*4882a593Smuzhiyun
56*4882a593Smuzhiyun /* driver_chipcommon_pmu.c */
57*4882a593Smuzhiyun void bcma_pmu_early_init(struct bcma_drv_cc *cc);
58*4882a593Smuzhiyun void bcma_pmu_init(struct bcma_drv_cc *cc);
59*4882a593Smuzhiyun u32 bcma_pmu_get_alp_clock(struct bcma_drv_cc *cc);
60*4882a593Smuzhiyun u32 bcma_pmu_get_cpu_clock(struct bcma_drv_cc *cc);
61*4882a593Smuzhiyun
62*4882a593Smuzhiyun /**************************************************
63*4882a593Smuzhiyun * driver_chipcommon_sflash.c
64*4882a593Smuzhiyun **************************************************/
65*4882a593Smuzhiyun
66*4882a593Smuzhiyun #ifdef CONFIG_BCMA_PFLASH
67*4882a593Smuzhiyun extern struct platform_device bcma_pflash_dev;
68*4882a593Smuzhiyun int bcma_pflash_init(struct bcma_drv_cc *cc);
69*4882a593Smuzhiyun #else
bcma_pflash_init(struct bcma_drv_cc * cc)70*4882a593Smuzhiyun static inline int bcma_pflash_init(struct bcma_drv_cc *cc)
71*4882a593Smuzhiyun {
72*4882a593Smuzhiyun bcma_err(cc->core->bus, "Parallel flash not supported\n");
73*4882a593Smuzhiyun return 0;
74*4882a593Smuzhiyun }
75*4882a593Smuzhiyun #endif /* CONFIG_BCMA_PFLASH */
76*4882a593Smuzhiyun
77*4882a593Smuzhiyun #ifdef CONFIG_BCMA_SFLASH
78*4882a593Smuzhiyun /* driver_chipcommon_sflash.c */
79*4882a593Smuzhiyun int bcma_sflash_init(struct bcma_drv_cc *cc);
80*4882a593Smuzhiyun extern struct platform_device bcma_sflash_dev;
81*4882a593Smuzhiyun #else
bcma_sflash_init(struct bcma_drv_cc * cc)82*4882a593Smuzhiyun static inline int bcma_sflash_init(struct bcma_drv_cc *cc)
83*4882a593Smuzhiyun {
84*4882a593Smuzhiyun bcma_err(cc->core->bus, "Serial flash not supported\n");
85*4882a593Smuzhiyun return 0;
86*4882a593Smuzhiyun }
87*4882a593Smuzhiyun #endif /* CONFIG_BCMA_SFLASH */
88*4882a593Smuzhiyun
89*4882a593Smuzhiyun #ifdef CONFIG_BCMA_NFLASH
90*4882a593Smuzhiyun /* driver_chipcommon_nflash.c */
91*4882a593Smuzhiyun int bcma_nflash_init(struct bcma_drv_cc *cc);
92*4882a593Smuzhiyun extern struct platform_device bcma_nflash_dev;
93*4882a593Smuzhiyun #else
bcma_nflash_init(struct bcma_drv_cc * cc)94*4882a593Smuzhiyun static inline int bcma_nflash_init(struct bcma_drv_cc *cc)
95*4882a593Smuzhiyun {
96*4882a593Smuzhiyun bcma_err(cc->core->bus, "NAND flash not supported\n");
97*4882a593Smuzhiyun return 0;
98*4882a593Smuzhiyun }
99*4882a593Smuzhiyun #endif /* CONFIG_BCMA_NFLASH */
100*4882a593Smuzhiyun
101*4882a593Smuzhiyun #ifdef CONFIG_BCMA_HOST_PCI
102*4882a593Smuzhiyun /* host_pci.c */
103*4882a593Smuzhiyun extern int __init bcma_host_pci_init(void);
104*4882a593Smuzhiyun extern void __exit bcma_host_pci_exit(void);
105*4882a593Smuzhiyun #endif /* CONFIG_BCMA_HOST_PCI */
106*4882a593Smuzhiyun
107*4882a593Smuzhiyun /* host_soc.c */
108*4882a593Smuzhiyun #if defined(CONFIG_BCMA_HOST_SOC) && defined(CONFIG_OF)
109*4882a593Smuzhiyun extern int __init bcma_host_soc_register_driver(void);
110*4882a593Smuzhiyun extern void __exit bcma_host_soc_unregister_driver(void);
111*4882a593Smuzhiyun #else
bcma_host_soc_register_driver(void)112*4882a593Smuzhiyun static inline int __init bcma_host_soc_register_driver(void)
113*4882a593Smuzhiyun {
114*4882a593Smuzhiyun return 0;
115*4882a593Smuzhiyun }
bcma_host_soc_unregister_driver(void)116*4882a593Smuzhiyun static inline void __exit bcma_host_soc_unregister_driver(void)
117*4882a593Smuzhiyun {
118*4882a593Smuzhiyun }
119*4882a593Smuzhiyun #endif /* CONFIG_BCMA_HOST_SOC && CONFIG_OF */
120*4882a593Smuzhiyun
121*4882a593Smuzhiyun /* driver_pci.c */
122*4882a593Smuzhiyun #ifdef CONFIG_BCMA_DRIVER_PCI
123*4882a593Smuzhiyun u32 bcma_pcie_read(struct bcma_drv_pci *pc, u32 address);
124*4882a593Smuzhiyun void bcma_core_pci_early_init(struct bcma_drv_pci *pc);
125*4882a593Smuzhiyun void bcma_core_pci_init(struct bcma_drv_pci *pc);
126*4882a593Smuzhiyun void bcma_core_pci_up(struct bcma_drv_pci *pc);
127*4882a593Smuzhiyun void bcma_core_pci_down(struct bcma_drv_pci *pc);
128*4882a593Smuzhiyun #else
bcma_core_pci_early_init(struct bcma_drv_pci * pc)129*4882a593Smuzhiyun static inline void bcma_core_pci_early_init(struct bcma_drv_pci *pc)
130*4882a593Smuzhiyun {
131*4882a593Smuzhiyun WARN_ON(pc->core->bus->hosttype == BCMA_HOSTTYPE_PCI);
132*4882a593Smuzhiyun }
bcma_core_pci_init(struct bcma_drv_pci * pc)133*4882a593Smuzhiyun static inline void bcma_core_pci_init(struct bcma_drv_pci *pc)
134*4882a593Smuzhiyun {
135*4882a593Smuzhiyun /* Initialization is required for PCI hosted bus */
136*4882a593Smuzhiyun WARN_ON(pc->core->bus->hosttype == BCMA_HOSTTYPE_PCI);
137*4882a593Smuzhiyun }
138*4882a593Smuzhiyun #endif
139*4882a593Smuzhiyun
140*4882a593Smuzhiyun /* driver_pcie2.c */
141*4882a593Smuzhiyun #ifdef CONFIG_BCMA_DRIVER_PCI
142*4882a593Smuzhiyun void bcma_core_pcie2_init(struct bcma_drv_pcie2 *pcie2);
143*4882a593Smuzhiyun void bcma_core_pcie2_up(struct bcma_drv_pcie2 *pcie2);
144*4882a593Smuzhiyun #else
bcma_core_pcie2_init(struct bcma_drv_pcie2 * pcie2)145*4882a593Smuzhiyun static inline void bcma_core_pcie2_init(struct bcma_drv_pcie2 *pcie2)
146*4882a593Smuzhiyun {
147*4882a593Smuzhiyun /* Initialization is required for PCI hosted bus */
148*4882a593Smuzhiyun WARN_ON(pcie2->core->bus->hosttype == BCMA_HOSTTYPE_PCI);
149*4882a593Smuzhiyun }
150*4882a593Smuzhiyun #endif
151*4882a593Smuzhiyun
152*4882a593Smuzhiyun extern int bcma_chipco_watchdog_register(struct bcma_drv_cc *cc);
153*4882a593Smuzhiyun
154*4882a593Smuzhiyun #ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE
155*4882a593Smuzhiyun bool bcma_core_pci_is_in_hostmode(struct bcma_drv_pci *pc);
156*4882a593Smuzhiyun void bcma_core_pci_hostmode_init(struct bcma_drv_pci *pc);
157*4882a593Smuzhiyun #else
bcma_core_pci_is_in_hostmode(struct bcma_drv_pci * pc)158*4882a593Smuzhiyun static inline bool bcma_core_pci_is_in_hostmode(struct bcma_drv_pci *pc)
159*4882a593Smuzhiyun {
160*4882a593Smuzhiyun return false;
161*4882a593Smuzhiyun }
bcma_core_pci_hostmode_init(struct bcma_drv_pci * pc)162*4882a593Smuzhiyun static inline void bcma_core_pci_hostmode_init(struct bcma_drv_pci *pc)
163*4882a593Smuzhiyun {
164*4882a593Smuzhiyun }
165*4882a593Smuzhiyun #endif /* CONFIG_BCMA_DRIVER_PCI_HOSTMODE */
166*4882a593Smuzhiyun
167*4882a593Smuzhiyun /**************************************************
168*4882a593Smuzhiyun * driver_mips.c
169*4882a593Smuzhiyun **************************************************/
170*4882a593Smuzhiyun
171*4882a593Smuzhiyun #ifdef CONFIG_BCMA_DRIVER_MIPS
172*4882a593Smuzhiyun unsigned int bcma_core_mips_irq(struct bcma_device *dev);
173*4882a593Smuzhiyun void bcma_core_mips_early_init(struct bcma_drv_mips *mcore);
174*4882a593Smuzhiyun void bcma_core_mips_init(struct bcma_drv_mips *mcore);
175*4882a593Smuzhiyun #else
bcma_core_mips_irq(struct bcma_device * dev)176*4882a593Smuzhiyun static inline unsigned int bcma_core_mips_irq(struct bcma_device *dev)
177*4882a593Smuzhiyun {
178*4882a593Smuzhiyun return 0;
179*4882a593Smuzhiyun }
bcma_core_mips_early_init(struct bcma_drv_mips * mcore)180*4882a593Smuzhiyun static inline void bcma_core_mips_early_init(struct bcma_drv_mips *mcore)
181*4882a593Smuzhiyun {
182*4882a593Smuzhiyun }
bcma_core_mips_init(struct bcma_drv_mips * mcore)183*4882a593Smuzhiyun static inline void bcma_core_mips_init(struct bcma_drv_mips *mcore)
184*4882a593Smuzhiyun {
185*4882a593Smuzhiyun }
186*4882a593Smuzhiyun #endif
187*4882a593Smuzhiyun
188*4882a593Smuzhiyun /**************************************************
189*4882a593Smuzhiyun * driver_gmac_cmn.c
190*4882a593Smuzhiyun **************************************************/
191*4882a593Smuzhiyun
192*4882a593Smuzhiyun #ifdef CONFIG_BCMA_DRIVER_GMAC_CMN
193*4882a593Smuzhiyun void bcma_core_gmac_cmn_init(struct bcma_drv_gmac_cmn *gc);
194*4882a593Smuzhiyun #else
bcma_core_gmac_cmn_init(struct bcma_drv_gmac_cmn * gc)195*4882a593Smuzhiyun static inline void bcma_core_gmac_cmn_init(struct bcma_drv_gmac_cmn *gc)
196*4882a593Smuzhiyun {
197*4882a593Smuzhiyun }
198*4882a593Smuzhiyun #endif
199*4882a593Smuzhiyun
200*4882a593Smuzhiyun #ifdef CONFIG_BCMA_DRIVER_GPIO
201*4882a593Smuzhiyun /* driver_gpio.c */
202*4882a593Smuzhiyun int bcma_gpio_init(struct bcma_drv_cc *cc);
203*4882a593Smuzhiyun int bcma_gpio_unregister(struct bcma_drv_cc *cc);
204*4882a593Smuzhiyun #else
bcma_gpio_init(struct bcma_drv_cc * cc)205*4882a593Smuzhiyun static inline int bcma_gpio_init(struct bcma_drv_cc *cc)
206*4882a593Smuzhiyun {
207*4882a593Smuzhiyun return -ENOTSUPP;
208*4882a593Smuzhiyun }
bcma_gpio_unregister(struct bcma_drv_cc * cc)209*4882a593Smuzhiyun static inline int bcma_gpio_unregister(struct bcma_drv_cc *cc)
210*4882a593Smuzhiyun {
211*4882a593Smuzhiyun return 0;
212*4882a593Smuzhiyun }
213*4882a593Smuzhiyun #endif /* CONFIG_BCMA_DRIVER_GPIO */
214*4882a593Smuzhiyun
215*4882a593Smuzhiyun #endif
216