bus.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #ifndef B43_BUS_H_
  2. #define B43_BUS_H_
  3. enum b43_bus_type {
  4. #ifdef CONFIG_B43_BCMA
  5. B43_BUS_BCMA,
  6. #endif
  7. B43_BUS_SSB,
  8. };
  9. struct b43_bus_dev {
  10. enum b43_bus_type bus_type;
  11. union {
  12. struct bcma_device *bdev;
  13. struct ssb_device *sdev;
  14. };
  15. int (*bus_may_powerdown)(struct b43_bus_dev *dev);
  16. int (*bus_powerup)(struct b43_bus_dev *dev, bool dynamic_pctl);
  17. int (*device_is_enabled)(struct b43_bus_dev *dev);
  18. void (*device_enable)(struct b43_bus_dev *dev,
  19. u32 core_specific_flags);
  20. void (*device_disable)(struct b43_bus_dev *dev,
  21. u32 core_specific_flags);
  22. u16 (*read16)(struct b43_bus_dev *dev, u16 offset);
  23. u32 (*read32)(struct b43_bus_dev *dev, u16 offset);
  24. void (*write16)(struct b43_bus_dev *dev, u16 offset, u16 value);
  25. void (*write32)(struct b43_bus_dev *dev, u16 offset, u32 value);
  26. void (*block_read)(struct b43_bus_dev *dev, void *buffer,
  27. size_t count, u16 offset, u8 reg_width);
  28. void (*block_write)(struct b43_bus_dev *dev, const void *buffer,
  29. size_t count, u16 offset, u8 reg_width);
  30. struct device *dev;
  31. struct device *dma_dev;
  32. unsigned int irq;
  33. u16 board_vendor;
  34. u16 board_type;
  35. u16 board_rev;
  36. u16 chip_id;
  37. u8 chip_rev;
  38. u8 chip_pkg;
  39. struct ssb_sprom *bus_sprom;
  40. u16 core_id;
  41. u8 core_rev;
  42. };
  43. static inline bool b43_bus_host_is_pcmcia(struct b43_bus_dev *dev)
  44. {
  45. return (dev->bus_type == B43_BUS_SSB &&
  46. dev->sdev->bus->bustype == SSB_BUSTYPE_PCMCIA);
  47. }
  48. static inline bool b43_bus_host_is_sdio(struct b43_bus_dev *dev)
  49. {
  50. return (dev->bus_type == B43_BUS_SSB &&
  51. dev->sdev->bus->bustype == SSB_BUSTYPE_SDIO);
  52. }
  53. struct b43_bus_dev *b43_bus_dev_bcma_init(struct bcma_device *core);
  54. struct b43_bus_dev *b43_bus_dev_ssb_init(struct ssb_device *sdev);
  55. void *b43_bus_get_wldev(struct b43_bus_dev *dev);
  56. void b43_bus_set_wldev(struct b43_bus_dev *dev, void *data);
  57. #endif /* B43_BUS_H_ */