phy_ac.c 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. * Broadcom B43 wireless driver
  4. * IEEE 802.11ac AC-PHY support
  5. *
  6. * Copyright (c) 2015 Rafał Miłecki <zajec5@gmail.com>
  7. */
  8. #include "b43.h"
  9. #include "phy_ac.h"
  10. /**************************************************
  11. * Basic PHY ops
  12. **************************************************/
  13. static int b43_phy_ac_op_allocate(struct b43_wldev *dev)
  14. {
  15. struct b43_phy_ac *phy_ac;
  16. phy_ac = kzalloc(sizeof(*phy_ac), GFP_KERNEL);
  17. if (!phy_ac)
  18. return -ENOMEM;
  19. dev->phy.ac = phy_ac;
  20. return 0;
  21. }
  22. static void b43_phy_ac_op_free(struct b43_wldev *dev)
  23. {
  24. struct b43_phy *phy = &dev->phy;
  25. struct b43_phy_ac *phy_ac = phy->ac;
  26. kfree(phy_ac);
  27. phy->ac = NULL;
  28. }
  29. static void b43_phy_ac_op_maskset(struct b43_wldev *dev, u16 reg, u16 mask,
  30. u16 set)
  31. {
  32. b43_write16f(dev, B43_MMIO_PHY_CONTROL, reg);
  33. b43_write16(dev, B43_MMIO_PHY_DATA,
  34. (b43_read16(dev, B43_MMIO_PHY_DATA) & mask) | set);
  35. }
  36. static u16 b43_phy_ac_op_radio_read(struct b43_wldev *dev, u16 reg)
  37. {
  38. b43_write16f(dev, B43_MMIO_RADIO24_CONTROL, reg);
  39. return b43_read16(dev, B43_MMIO_RADIO24_DATA);
  40. }
  41. static void b43_phy_ac_op_radio_write(struct b43_wldev *dev, u16 reg,
  42. u16 value)
  43. {
  44. b43_write16f(dev, B43_MMIO_RADIO24_CONTROL, reg);
  45. b43_write16(dev, B43_MMIO_RADIO24_DATA, value);
  46. }
  47. static unsigned int b43_phy_ac_op_get_default_chan(struct b43_wldev *dev)
  48. {
  49. if (b43_current_band(dev->wl) == NL80211_BAND_2GHZ)
  50. return 11;
  51. return 36;
  52. }
  53. static enum b43_txpwr_result
  54. b43_phy_ac_op_recalc_txpower(struct b43_wldev *dev, bool ignore_tssi)
  55. {
  56. return B43_TXPWR_RES_DONE;
  57. }
  58. static void b43_phy_ac_op_adjust_txpower(struct b43_wldev *dev)
  59. {
  60. }
  61. /**************************************************
  62. * PHY ops struct
  63. **************************************************/
  64. const struct b43_phy_operations b43_phyops_ac = {
  65. .allocate = b43_phy_ac_op_allocate,
  66. .free = b43_phy_ac_op_free,
  67. .phy_maskset = b43_phy_ac_op_maskset,
  68. .radio_read = b43_phy_ac_op_radio_read,
  69. .radio_write = b43_phy_ac_op_radio_write,
  70. .get_default_chan = b43_phy_ac_op_get_default_chan,
  71. .recalc_txpower = b43_phy_ac_op_recalc_txpower,
  72. .adjust_txpower = b43_phy_ac_op_adjust_txpower,
  73. };