|
@@ -979,6 +979,125 @@ CDF_STATUS wma_get_link_speed(WMA_HANDLE handle, tSirLinkSpeedInfo *pLinkSpeed)
|
|
|
|
|
|
#ifdef FEATURE_GREEN_AP
|
|
|
|
|
|
+/**
|
|
|
+ * wma_egap_info_status_event() - egap info status event
|
|
|
+ * @handle: pointer to wma handler
|
|
|
+ * @event: pointer to event
|
|
|
+ * @len: len of the event
|
|
|
+ *
|
|
|
+ * Return: 0 for success, otherwise appropriate error code
|
|
|
+ */
|
|
|
+static int wma_egap_info_status_event(void *handle, u_int8_t *event,
|
|
|
+ uint32_t len)
|
|
|
+{
|
|
|
+ WMI_TX_PAUSE_EVENTID_param_tlvs *param_buf;
|
|
|
+ wmi_ap_ps_egap_info_event_fixed_param *egap_info_event;
|
|
|
+ wmi_ap_ps_egap_info_chainmask_list *chainmask_event;
|
|
|
+ u_int8_t *buf_ptr;
|
|
|
+
|
|
|
+ param_buf = (WMI_TX_PAUSE_EVENTID_param_tlvs *)event;
|
|
|
+ if (!param_buf) {
|
|
|
+ WMA_LOGE("Invalid EGAP Info status event buffer");
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ egap_info_event = (wmi_ap_ps_egap_info_event_fixed_param *)
|
|
|
+ param_buf->fixed_param;
|
|
|
+ buf_ptr = (uint8_t *)egap_info_event;
|
|
|
+ buf_ptr += sizeof(wmi_ap_ps_egap_info_event_fixed_param);
|
|
|
+ chainmask_event = (wmi_ap_ps_egap_info_chainmask_list *)buf_ptr;
|
|
|
+
|
|
|
+ WMA_LOGI("mac_id: %d, status: %d, tx_mask: %x, rx_mask: %d",
|
|
|
+ chainmask_event->mac_id,
|
|
|
+ egap_info_event->status,
|
|
|
+ chainmask_event->tx_chainmask,
|
|
|
+ chainmask_event->rx_chainmask);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * wma_send_egap_conf_params() - send wmi cmd of egap configuration params
|
|
|
+ * @wma_handle: wma handler
|
|
|
+ * @egap_params: pointer to egap_params
|
|
|
+ *
|
|
|
+ * Return: 0 for success, otherwise appropriate error code
|
|
|
+ */
|
|
|
+CDF_STATUS wma_send_egap_conf_params(WMA_HANDLE handle,
|
|
|
+ struct egap_conf_params *egap_params)
|
|
|
+{
|
|
|
+ tp_wma_handle wma_handle = (tp_wma_handle) handle;
|
|
|
+ wmi_ap_ps_egap_param_cmd_fixed_param *cmd;
|
|
|
+ wmi_buf_t buf;
|
|
|
+ int32_t err;
|
|
|
+
|
|
|
+ buf = wmi_buf_alloc(wma_handle->wmi_handle, sizeof(*cmd));
|
|
|
+ if (!buf) {
|
|
|
+ WMA_LOGE("Failed to allocate buffer to send ap_ps_egap cmd");
|
|
|
+ return CDF_STATUS_E_NOMEM;
|
|
|
+ }
|
|
|
+ cmd = (wmi_ap_ps_egap_param_cmd_fixed_param *) wmi_buf_data(buf);
|
|
|
+ WMITLV_SET_HDR(&cmd->tlv_header,
|
|
|
+ WMITLV_TAG_STRUC_wmi_ap_ps_egap_param_cmd_fixed_param,
|
|
|
+ WMITLV_GET_STRUCT_TLVLEN(
|
|
|
+ wmi_ap_ps_egap_param_cmd_fixed_param));
|
|
|
+
|
|
|
+ cmd->enable = egap_params->enable;
|
|
|
+ cmd->inactivity_time = egap_params->inactivity_time;
|
|
|
+ cmd->wait_time = egap_params->wait_time;
|
|
|
+ cmd->flags = egap_params->flags;
|
|
|
+ err = wmi_unified_cmd_send(wma_handle->wmi_handle, buf,
|
|
|
+ sizeof(*cmd), WMI_AP_PS_EGAP_PARAM_CMDID);
|
|
|
+ if (err) {
|
|
|
+ WMA_LOGE("Failed to send ap_ps_egap cmd");
|
|
|
+ wmi_buf_free(buf);
|
|
|
+ return CDF_STATUS_E_FAILURE;
|
|
|
+ }
|
|
|
+ return CDF_STATUS_SUCCESS;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * wma_setup_egap_support() - setup the EGAP support flag
|
|
|
+ * @tgt_cfg: pointer to hdd target configuration
|
|
|
+ * @egap_support: EGAP support flag
|
|
|
+ *
|
|
|
+ * Return: None
|
|
|
+ */
|
|
|
+void wma_setup_egap_support(struct wma_tgt_cfg *tgt_cfg, WMA_HANDLE handle)
|
|
|
+{
|
|
|
+ tp_wma_handle wma_handle = (tp_wma_handle) handle;
|
|
|
+
|
|
|
+ if (tgt_cfg && wma_handle)
|
|
|
+ tgt_cfg->egap_support = wma_handle->egap_support;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * wma_register_egap_event_handle() - register the EGAP event handle
|
|
|
+ * @wma_handle: wma handler
|
|
|
+ *
|
|
|
+ * Return: None
|
|
|
+ */
|
|
|
+void wma_register_egap_event_handle(WMA_HANDLE handle)
|
|
|
+{
|
|
|
+ tp_wma_handle wma_handle = (tp_wma_handle) handle;
|
|
|
+ int status;
|
|
|
+
|
|
|
+ if (WMI_SERVICE_IS_ENABLED(wma_handle->wmi_service_bitmap,
|
|
|
+ WMI_SERVICE_EGAP)) {
|
|
|
+ status = wmi_unified_register_event_handler(
|
|
|
+ wma_handle->wmi_handle,
|
|
|
+ WMI_AP_PS_EGAP_INFO_EVENTID,
|
|
|
+ wma_egap_info_status_event);
|
|
|
+ if (status) {
|
|
|
+ WMA_LOGE("Failed to register Enhance Green AP event");
|
|
|
+ wma_handle->egap_support = false;
|
|
|
+ } else {
|
|
|
+ WMA_LOGI("Set the Enhance Green AP event handler");
|
|
|
+ wma_handle->egap_support = true;
|
|
|
+ }
|
|
|
+ } else
|
|
|
+ wma_handle->egap_support = false;
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* wmi_unified_pdev_green_ap_ps_enable_cmd() - enable green ap powersave command
|
|
|
* @wmi_handle: wmi handle
|