| /* SPDX-License-Identifier: GPL-2.0 */ | |
| #ifndef B43_BUS_H_ | |
| #define B43_BUS_H_ | |
| enum b43_bus_type { | |
| #ifdef CONFIG_B43_BCMA | |
| B43_BUS_BCMA, | |
| #endif | |
| #ifdef CONFIG_B43_SSB | |
| B43_BUS_SSB, | |
| #endif | |
| }; | |
| struct b43_bus_dev { | |
| enum b43_bus_type bus_type; | |
| union { | |
| struct bcma_device *bdev; | |
| struct ssb_device *sdev; | |
| }; | |
| int (*bus_may_powerdown)(struct b43_bus_dev *dev); | |
| int (*bus_powerup)(struct b43_bus_dev *dev, bool dynamic_pctl); | |
| int (*device_is_enabled)(struct b43_bus_dev *dev); | |
| void (*device_enable)(struct b43_bus_dev *dev, | |
| u32 core_specific_flags); | |
| void (*device_disable)(struct b43_bus_dev *dev, | |
| u32 core_specific_flags); | |
| u16 (*read16)(struct b43_bus_dev *dev, u16 offset); | |
| u32 (*read32)(struct b43_bus_dev *dev, u16 offset); | |
| void (*write16)(struct b43_bus_dev *dev, u16 offset, u16 value); | |
| void (*write32)(struct b43_bus_dev *dev, u16 offset, u32 value); | |
| void (*block_read)(struct b43_bus_dev *dev, void *buffer, | |
| size_t count, u16 offset, u8 reg_width); | |
| void (*block_write)(struct b43_bus_dev *dev, const void *buffer, | |
| size_t count, u16 offset, u8 reg_width); | |
| bool flush_writes; | |
| struct device *dev; | |
| struct device *dma_dev; | |
| unsigned int irq; | |
| u16 board_vendor; | |
| u16 board_type; | |
| u16 board_rev; | |
| u16 chip_id; | |
| u8 chip_rev; | |
| u8 chip_pkg; | |
| struct ssb_sprom *bus_sprom; | |
| u16 core_id; | |
| u8 core_rev; | |
| }; | |
| static inline bool b43_bus_host_is_pcmcia(struct b43_bus_dev *dev) | |
| { | |
| #ifdef CONFIG_B43_SSB | |
| return (dev->bus_type == B43_BUS_SSB && | |
| dev->sdev->bus->bustype == SSB_BUSTYPE_PCMCIA); | |
| #else | |
| return false; | |
| #endif | |
| }; | |
| static inline bool b43_bus_host_is_pci(struct b43_bus_dev *dev) | |
| { | |
| #ifdef CONFIG_B43_BCMA | |
| if (dev->bus_type == B43_BUS_BCMA) | |
| return (dev->bdev->bus->hosttype == BCMA_HOSTTYPE_PCI); | |
| #endif | |
| #ifdef CONFIG_B43_SSB | |
| if (dev->bus_type == B43_BUS_SSB) | |
| return (dev->sdev->bus->bustype == SSB_BUSTYPE_PCI); | |
| #endif | |
| return false; | |
| } | |
| static inline bool b43_bus_host_is_sdio(struct b43_bus_dev *dev) | |
| { | |
| #ifdef CONFIG_B43_SSB | |
| return (dev->bus_type == B43_BUS_SSB && | |
| dev->sdev->bus->bustype == SSB_BUSTYPE_SDIO); | |
| #else | |
| return false; | |
| #endif | |
| } | |
| struct b43_bus_dev *b43_bus_dev_bcma_init(struct bcma_device *core); | |
| struct b43_bus_dev *b43_bus_dev_ssb_init(struct ssb_device *sdev); | |
| void *b43_bus_get_wldev(struct b43_bus_dev *dev); | |
| void b43_bus_set_wldev(struct b43_bus_dev *dev, void *data); | |
| #endif /* B43_BUS_H_ */ |