wlan_pmo_tgt_wow.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. /*
  2. * Copyright (c) 2017 The Linux Foundation. All rights reserved.
  3. *
  4. * Permission to use, copy, modify, and/or distribute this software for
  5. * any purpose with or without fee is hereby granted, provided that the
  6. * above copyright notice and this permission notice appear in all
  7. * copies.
  8. *
  9. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
  10. * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
  11. * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
  12. * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
  13. * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
  14. * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
  15. * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  16. * PERFORMANCE OF THIS SOFTWARE.
  17. */
  18. /**
  19. * DOC: Implements public API for pmo to interact with target/WMI
  20. */
  21. #include "wlan_pmo_tgt_api.h"
  22. #include "wlan_pmo_wow.h"
  23. #include "wlan_pmo_obj_mgmt_public_struct.h"
  24. #include "wlan_pmo_main.h"
  25. QDF_STATUS pmo_tgt_enable_wow_wakeup_event(
  26. struct wlan_objmgr_vdev *vdev,
  27. uint32_t *bitmap)
  28. {
  29. QDF_STATUS status;
  30. struct wlan_objmgr_psoc *psoc;
  31. struct wlan_pmo_tx_ops pmo_tx_ops;
  32. PMO_ENTER();
  33. psoc = pmo_vdev_get_psoc(vdev);
  34. pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc);
  35. if (!pmo_tx_ops.send_enable_wow_wakeup_event_req) {
  36. pmo_err("send_enable_wow_wakeup_event_req is null");
  37. status = QDF_STATUS_E_NULL_VALUE;
  38. goto out;
  39. }
  40. status = pmo_tx_ops.send_enable_wow_wakeup_event_req(vdev, bitmap);
  41. if (status != QDF_STATUS_SUCCESS)
  42. pmo_err("Failed to enable wow wakeup event");
  43. out:
  44. PMO_EXIT();
  45. return status;
  46. }
  47. QDF_STATUS pmo_tgt_disable_wow_wakeup_event(
  48. struct wlan_objmgr_vdev *vdev,
  49. uint32_t *bitmap)
  50. {
  51. QDF_STATUS status;
  52. struct wlan_objmgr_psoc *psoc;
  53. struct wlan_pmo_tx_ops pmo_tx_ops;
  54. PMO_ENTER();
  55. psoc = pmo_vdev_get_psoc(vdev);
  56. pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc);
  57. if (!pmo_tx_ops.send_disable_wow_wakeup_event_req) {
  58. pmo_err("send_disable_wow_wakeup_event_req is null");
  59. status = QDF_STATUS_E_NULL_VALUE;
  60. goto out;
  61. }
  62. status = pmo_tx_ops.send_disable_wow_wakeup_event_req(vdev, bitmap);
  63. if (status != QDF_STATUS_SUCCESS)
  64. pmo_err("Failed to disable wow wakeup event");
  65. out:
  66. PMO_EXIT();
  67. return status;
  68. }
  69. QDF_STATUS pmo_tgt_send_wow_patterns_to_fw(
  70. struct wlan_objmgr_vdev *vdev, uint8_t ptrn_id,
  71. const uint8_t *ptrn, uint8_t ptrn_len,
  72. uint8_t ptrn_offset, const uint8_t *mask,
  73. uint8_t mask_len, bool user)
  74. {
  75. QDF_STATUS status;
  76. struct pmo_vdev_priv_obj *vdev_ctx;
  77. struct wlan_objmgr_psoc *psoc;
  78. struct wlan_pmo_tx_ops pmo_tx_ops;
  79. PMO_ENTER();
  80. psoc = pmo_vdev_get_psoc(vdev);
  81. vdev_ctx = pmo_vdev_get_priv(vdev);
  82. pmo_tx_ops = GET_PMO_TX_OPS_FROM_PSOC(psoc);
  83. if (!pmo_tx_ops.send_add_wow_pattern) {
  84. pmo_err("send_add_wow_pattern is null");
  85. status = QDF_STATUS_E_NULL_VALUE;
  86. goto out;
  87. }
  88. status = pmo_tx_ops.send_add_wow_pattern(
  89. vdev, ptrn_id, ptrn,
  90. ptrn_len, ptrn_offset, mask,
  91. mask_len, user);
  92. if (status != QDF_STATUS_SUCCESS) {
  93. if (!user)
  94. pmo_decrement_wow_default_ptrn(vdev_ctx);
  95. pmo_err("Failed to sen wow pattern event");
  96. goto out;
  97. }
  98. if (user)
  99. pmo_increment_wow_user_ptrn(vdev_ctx);
  100. out:
  101. PMO_EXIT();
  102. return status;
  103. }