1*b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2482f0538SRafał Miłecki #ifndef B43_BUS_H_
3482f0538SRafał Miłecki #define B43_BUS_H_
4482f0538SRafał Miłecki
5482f0538SRafał Miłecki enum b43_bus_type {
66cbab0d9SRafał Miłecki #ifdef CONFIG_B43_BCMA
7397915c3SRafał Miłecki B43_BUS_BCMA,
86cbab0d9SRafał Miłecki #endif
9bd7c8a59SRafał Miłecki #ifdef CONFIG_B43_SSB
10482f0538SRafał Miłecki B43_BUS_SSB,
11bd7c8a59SRafał Miłecki #endif
12482f0538SRafał Miłecki };
13482f0538SRafał Miłecki
14482f0538SRafał Miłecki struct b43_bus_dev {
15482f0538SRafał Miłecki enum b43_bus_type bus_type;
16482f0538SRafał Miłecki union {
17397915c3SRafał Miłecki struct bcma_device *bdev;
18482f0538SRafał Miłecki struct ssb_device *sdev;
19482f0538SRafał Miłecki };
20c0b4c009SRafał Miłecki
2124ca39d6SRafał Miłecki int (*bus_may_powerdown)(struct b43_bus_dev *dev);
2224ca39d6SRafał Miłecki int (*bus_powerup)(struct b43_bus_dev *dev, bool dynamic_pctl);
2324ca39d6SRafał Miłecki int (*device_is_enabled)(struct b43_bus_dev *dev);
2424ca39d6SRafał Miłecki void (*device_enable)(struct b43_bus_dev *dev,
2524ca39d6SRafał Miłecki u32 core_specific_flags);
2624ca39d6SRafał Miłecki void (*device_disable)(struct b43_bus_dev *dev,
2724ca39d6SRafał Miłecki u32 core_specific_flags);
2824ca39d6SRafał Miłecki
29c0b4c009SRafał Miłecki u16 (*read16)(struct b43_bus_dev *dev, u16 offset);
30c0b4c009SRafał Miłecki u32 (*read32)(struct b43_bus_dev *dev, u16 offset);
31c0b4c009SRafał Miłecki void (*write16)(struct b43_bus_dev *dev, u16 offset, u16 value);
32c0b4c009SRafał Miłecki void (*write32)(struct b43_bus_dev *dev, u16 offset, u32 value);
33c0b4c009SRafał Miłecki void (*block_read)(struct b43_bus_dev *dev, void *buffer,
34c0b4c009SRafał Miłecki size_t count, u16 offset, u8 reg_width);
35c0b4c009SRafał Miłecki void (*block_write)(struct b43_bus_dev *dev, const void *buffer,
36c0b4c009SRafał Miłecki size_t count, u16 offset, u8 reg_width);
3725c15566SRafał Miłecki bool flush_writes;
3821d889d4SRafał Miłecki
39a18c715eSRafał Miłecki struct device *dev;
40a18c715eSRafał Miłecki struct device *dma_dev;
41a18c715eSRafał Miłecki unsigned int irq;
42a18c715eSRafał Miłecki
4379d2232fSRafał Miłecki u16 board_vendor;
4479d2232fSRafał Miłecki u16 board_type;
4579d2232fSRafał Miłecki u16 board_rev;
4679d2232fSRafał Miłecki
47c244e08cSRafał Miłecki u16 chip_id;
48c244e08cSRafał Miłecki u8 chip_rev;
49c244e08cSRafał Miłecki u8 chip_pkg;
50c244e08cSRafał Miłecki
510581483aSRafał Miłecki struct ssb_sprom *bus_sprom;
520581483aSRafał Miłecki
5321d889d4SRafał Miłecki u16 core_id;
5421d889d4SRafał Miłecki u8 core_rev;
55482f0538SRafał Miłecki };
56482f0538SRafał Miłecki
b43_bus_host_is_pcmcia(struct b43_bus_dev * dev)57505fb019SRafał Miłecki static inline bool b43_bus_host_is_pcmcia(struct b43_bus_dev *dev)
58505fb019SRafał Miłecki {
59bd7c8a59SRafał Miłecki #ifdef CONFIG_B43_SSB
60505fb019SRafał Miłecki return (dev->bus_type == B43_BUS_SSB &&
61505fb019SRafał Miłecki dev->sdev->bus->bustype == SSB_BUSTYPE_PCMCIA);
62bd7c8a59SRafał Miłecki #else
63bd7c8a59SRafał Miłecki return false;
64bd7c8a59SRafał Miłecki #endif
656247d2aaSRafał Miłecki };
666247d2aaSRafał Miłecki
b43_bus_host_is_pci(struct b43_bus_dev * dev)676247d2aaSRafał Miłecki static inline bool b43_bus_host_is_pci(struct b43_bus_dev *dev)
686247d2aaSRafał Miłecki {
696247d2aaSRafał Miłecki #ifdef CONFIG_B43_BCMA
706247d2aaSRafał Miłecki if (dev->bus_type == B43_BUS_BCMA)
716247d2aaSRafał Miłecki return (dev->bdev->bus->hosttype == BCMA_HOSTTYPE_PCI);
726247d2aaSRafał Miłecki #endif
736247d2aaSRafał Miłecki #ifdef CONFIG_B43_SSB
746247d2aaSRafał Miłecki if (dev->bus_type == B43_BUS_SSB)
756247d2aaSRafał Miłecki return (dev->sdev->bus->bustype == SSB_BUSTYPE_PCI);
766247d2aaSRafał Miłecki #endif
776247d2aaSRafał Miłecki return false;
78505fb019SRafał Miłecki }
796247d2aaSRafał Miłecki
b43_bus_host_is_sdio(struct b43_bus_dev * dev)80505fb019SRafał Miłecki static inline bool b43_bus_host_is_sdio(struct b43_bus_dev *dev)
81505fb019SRafał Miłecki {
82bd7c8a59SRafał Miłecki #ifdef CONFIG_B43_SSB
83505fb019SRafał Miłecki return (dev->bus_type == B43_BUS_SSB &&
84505fb019SRafał Miłecki dev->sdev->bus->bustype == SSB_BUSTYPE_SDIO);
85bd7c8a59SRafał Miłecki #else
86bd7c8a59SRafał Miłecki return false;
87bd7c8a59SRafał Miłecki #endif
88505fb019SRafał Miłecki }
89505fb019SRafał Miłecki
90397915c3SRafał Miłecki struct b43_bus_dev *b43_bus_dev_bcma_init(struct bcma_device *core);
91482f0538SRafał Miłecki struct b43_bus_dev *b43_bus_dev_ssb_init(struct ssb_device *sdev);
92482f0538SRafał Miłecki
9374abacb6SRafał Miłecki void *b43_bus_get_wldev(struct b43_bus_dev *dev);
9474abacb6SRafał Miłecki void b43_bus_set_wldev(struct b43_bus_dev *dev, void *data);
9574abacb6SRafał Miłecki
96482f0538SRafał Miłecki #endif /* B43_BUS_H_ */
97