linux/drivers/net/wireless/broadcom/b43/bus.h
<<
>>
Prefs
   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_ */
  97