bus.h (2374B)
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_BCMA 7 B43_BUS_BCMA, 8#endif 9#ifdef CONFIG_B43_SSB 10 B43_BUS_SSB, 11#endif 12}; 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_SSB 60 return (dev->bus_type == B43_BUS_SSB && 61 dev->sdev->bus->bustype == SSB_BUSTYPE_PCMCIA); 62#else 63 return false; 64#endif 65}; 66 67static inline bool b43_bus_host_is_pci(struct b43_bus_dev *dev) 68{ 69#ifdef CONFIG_B43_BCMA 70 if (dev->bus_type == B43_BUS_BCMA) 71 return (dev->bdev->bus->hosttype == BCMA_HOSTTYPE_PCI); 72#endif 73#ifdef CONFIG_B43_SSB 74 if (dev->bus_type == B43_BUS_SSB) 75 return (dev->sdev->bus->bustype == SSB_BUSTYPE_PCI); 76#endif 77 return false; 78} 79 80static inline bool b43_bus_host_is_sdio(struct b43_bus_dev *dev) 81{ 82#ifdef CONFIG_B43_SSB 83 return (dev->bus_type == B43_BUS_SSB && 84 dev->sdev->bus->bustype == SSB_BUSTYPE_SDIO); 85#else 86 return false; 87#endif 88} 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_ */