Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #ifndef B43_BUS_H_
0003 #define B43_BUS_H_
0004 
0005 enum b43_bus_type {
0006 #ifdef CONFIG_B43_BCMA
0007     B43_BUS_BCMA,
0008 #endif
0009 #ifdef CONFIG_B43_SSB
0010     B43_BUS_SSB,
0011 #endif
0012 };
0013 
0014 struct b43_bus_dev {
0015     enum b43_bus_type bus_type;
0016     union {
0017         struct bcma_device *bdev;
0018         struct ssb_device *sdev;
0019     };
0020 
0021     int (*bus_may_powerdown)(struct b43_bus_dev *dev);
0022     int (*bus_powerup)(struct b43_bus_dev *dev, bool dynamic_pctl);
0023     int (*device_is_enabled)(struct b43_bus_dev *dev);
0024     void (*device_enable)(struct b43_bus_dev *dev,
0025                   u32 core_specific_flags);
0026     void (*device_disable)(struct b43_bus_dev *dev,
0027                    u32 core_specific_flags);
0028 
0029     u16 (*read16)(struct b43_bus_dev *dev, u16 offset);
0030     u32 (*read32)(struct b43_bus_dev *dev, u16 offset);
0031     void (*write16)(struct b43_bus_dev *dev, u16 offset, u16 value);
0032     void (*write32)(struct b43_bus_dev *dev, u16 offset, u32 value);
0033     void (*block_read)(struct b43_bus_dev *dev, void *buffer,
0034                size_t count, u16 offset, u8 reg_width);
0035     void (*block_write)(struct b43_bus_dev *dev, const void *buffer,
0036                 size_t count, u16 offset, u8 reg_width);
0037     bool flush_writes;
0038 
0039     struct device *dev;
0040     struct device *dma_dev;
0041     unsigned int irq;
0042 
0043     u16 board_vendor;
0044     u16 board_type;
0045     u16 board_rev;
0046 
0047     u16 chip_id;
0048     u8 chip_rev;
0049     u8 chip_pkg;
0050 
0051     struct ssb_sprom *bus_sprom;
0052 
0053     u16 core_id;
0054     u8 core_rev;
0055 };
0056 
0057 static inline bool b43_bus_host_is_pcmcia(struct b43_bus_dev *dev)
0058 {
0059 #ifdef CONFIG_B43_SSB
0060     return (dev->bus_type == B43_BUS_SSB &&
0061         dev->sdev->bus->bustype == SSB_BUSTYPE_PCMCIA);
0062 #else
0063     return false;
0064 #endif
0065 };
0066 
0067 static inline bool b43_bus_host_is_pci(struct b43_bus_dev *dev)
0068 {
0069 #ifdef CONFIG_B43_BCMA
0070     if (dev->bus_type == B43_BUS_BCMA)
0071         return (dev->bdev->bus->hosttype == BCMA_HOSTTYPE_PCI);
0072 #endif
0073 #ifdef CONFIG_B43_SSB
0074     if (dev->bus_type == B43_BUS_SSB)
0075         return (dev->sdev->bus->bustype == SSB_BUSTYPE_PCI);
0076 #endif
0077     return false;
0078 }
0079 
0080 static inline bool b43_bus_host_is_sdio(struct b43_bus_dev *dev)
0081 {
0082 #ifdef CONFIG_B43_SSB
0083     return (dev->bus_type == B43_BUS_SSB &&
0084         dev->sdev->bus->bustype == SSB_BUSTYPE_SDIO);
0085 #else
0086     return false;
0087 #endif
0088 }
0089 
0090 struct b43_bus_dev *b43_bus_dev_bcma_init(struct bcma_device *core);
0091 struct b43_bus_dev *b43_bus_dev_ssb_init(struct ssb_device *sdev);
0092 
0093 void *b43_bus_get_wldev(struct b43_bus_dev *dev);
0094 void b43_bus_set_wldev(struct b43_bus_dev *dev, void *data);
0095 
0096 #endif /* B43_BUS_H_ */