97 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef B43_BUS_H_3#define B43_BUS_H_4 5enum b43_bus_type {6#ifdef CONFIG_B43_BCMA7 B43_BUS_BCMA,8#endif9#ifdef CONFIG_B43_SSB10 B43_BUS_SSB,11#endif12};13 14struct b43_bus_dev {15 enum b43_bus_type bus_type;16 union {17 struct bcma_device *bdev;18 struct ssb_device *sdev;19 };20 21 int (*bus_may_powerdown)(struct b43_bus_dev *dev);22 int (*bus_powerup)(struct b43_bus_dev *dev, bool dynamic_pctl);23 int (*device_is_enabled)(struct b43_bus_dev *dev);24 void (*device_enable)(struct b43_bus_dev *dev,25 u32 core_specific_flags);26 void (*device_disable)(struct b43_bus_dev *dev,27 u32 core_specific_flags);28 29 u16 (*read16)(struct b43_bus_dev *dev, u16 offset);30 u32 (*read32)(struct b43_bus_dev *dev, u16 offset);31 void (*write16)(struct b43_bus_dev *dev, u16 offset, u16 value);32 void (*write32)(struct b43_bus_dev *dev, u16 offset, u32 value);33 void (*block_read)(struct b43_bus_dev *dev, void *buffer,34 size_t count, u16 offset, u8 reg_width);35 void (*block_write)(struct b43_bus_dev *dev, const void *buffer,36 size_t count, u16 offset, u8 reg_width);37 bool flush_writes;38 39 struct device *dev;40 struct device *dma_dev;41 unsigned int irq;42 43 u16 board_vendor;44 u16 board_type;45 u16 board_rev;46 47 u16 chip_id;48 u8 chip_rev;49 u8 chip_pkg;50 51 struct ssb_sprom *bus_sprom;52 53 u16 core_id;54 u8 core_rev;55};56 57static inline bool b43_bus_host_is_pcmcia(struct b43_bus_dev *dev)58{59#ifdef CONFIG_B43_SSB60 return (dev->bus_type == B43_BUS_SSB &&61 dev->sdev->bus->bustype == SSB_BUSTYPE_PCMCIA);62#else63 return false;64#endif65};66 67static inline bool b43_bus_host_is_pci(struct b43_bus_dev *dev)68{69#ifdef CONFIG_B43_BCMA70 if (dev->bus_type == B43_BUS_BCMA)71 return (dev->bdev->bus->hosttype == BCMA_HOSTTYPE_PCI);72#endif73#ifdef CONFIG_B43_SSB74 if (dev->bus_type == B43_BUS_SSB)75 return (dev->sdev->bus->bustype == SSB_BUSTYPE_PCI);76#endif77 return false;78}79 80static inline bool b43_bus_host_is_sdio(struct b43_bus_dev *dev)81{82#ifdef CONFIG_B43_SSB83 return (dev->bus_type == B43_BUS_SSB &&84 dev->sdev->bus->bustype == SSB_BUSTYPE_SDIO);85#else86 return false;87#endif88}89 90struct b43_bus_dev *b43_bus_dev_bcma_init(struct bcma_device *core);91struct b43_bus_dev *b43_bus_dev_ssb_init(struct ssb_device *sdev);92 93void *b43_bus_get_wldev(struct b43_bus_dev *dev);94void b43_bus_set_wldev(struct b43_bus_dev *dev, void *data);95 96#endif /* B43_BUS_H_ */97