wmi_unified_apf_tlv.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /*
  2. * Copyright (c) 2016-2018 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. #include "wmi_unified_apf_tlv.h"
  19. QDF_STATUS send_set_active_apf_mode_cmd_tlv(wmi_unified_t wmi_handle,
  20. uint8_t vdev_id,
  21. enum wmi_host_active_apf_mode
  22. ucast_mode,
  23. enum wmi_host_active_apf_mode
  24. mcast_bcast_mode)
  25. {
  26. const WMITLV_TAG_ID tag_id =
  27. WMITLV_TAG_STRUC_wmi_bpf_set_vdev_active_mode_cmd_fixed_param;
  28. const uint32_t tlv_len = WMITLV_GET_STRUCT_TLVLEN(
  29. wmi_bpf_set_vdev_active_mode_cmd_fixed_param);
  30. QDF_STATUS status;
  31. wmi_bpf_set_vdev_active_mode_cmd_fixed_param *cmd;
  32. wmi_buf_t buf;
  33. WMI_LOGD("Sending WMI_APF_SET_VDEV_ACTIVE_MODE_CMDID(%u, %d, %d)",
  34. vdev_id, ucast_mode, mcast_bcast_mode);
  35. /* allocate command buffer */
  36. buf = wmi_buf_alloc(wmi_handle, sizeof(*cmd));
  37. if (!buf) {
  38. WMI_LOGE("%s: wmi_buf_alloc failed", __func__);
  39. return QDF_STATUS_E_NOMEM;
  40. }
  41. /* set TLV header */
  42. cmd = (wmi_bpf_set_vdev_active_mode_cmd_fixed_param *)wmi_buf_data(buf);
  43. WMITLV_SET_HDR(&cmd->tlv_header, tag_id, tlv_len);
  44. /* populate data */
  45. cmd->vdev_id = vdev_id;
  46. cmd->uc_mode = ucast_mode;
  47. cmd->mcbc_mode = mcast_bcast_mode;
  48. /* send to FW */
  49. status = wmi_unified_cmd_send(wmi_handle, buf, sizeof(*cmd),
  50. WMI_BPF_SET_VDEV_ACTIVE_MODE_CMDID);
  51. if (QDF_IS_STATUS_ERROR(status)) {
  52. WMI_LOGE("Failed to send WMI_APF_SET_VDEV_ACTIVE_MODE_CMDID:%d",
  53. status);
  54. wmi_buf_free(buf);
  55. return status;
  56. }
  57. WMI_LOGD("Sent WMI_APF_SET_VDEV_ACTIVE_MODE_CMDID successfully");
  58. return QDF_STATUS_SUCCESS;
  59. }