From e34fbde3bd97e5fff6893b40829ad7a8caebfbb0 Mon Sep 17 00:00:00 2001 From: Leo Chang Date: Wed, 28 Sep 2016 13:43:36 -0700 Subject: [PATCH] qcacmn: add lithium rx queue setup wmi messages WMI changes for rx reorder queue setup. Change-Id: I4c8b1a5b8fd50cceaf754bdfdecada695871fe96 CRs-fixed: 1080338 --- wmi/inc/wmi_unified_api.h | 4 ++ wmi/inc/wmi_unified_param.h | 30 ++++++++++++ wmi/inc/wmi_unified_priv.h | 6 +++ wmi/src/wmi_unified_api.c | 40 ++++++++++++++++ wmi/src/wmi_unified_tlv.c | 92 +++++++++++++++++++++++++++++++++++++ 5 files changed, 172 insertions(+) diff --git a/wmi/inc/wmi_unified_api.h b/wmi/inc/wmi_unified_api.h index 5bfb1c979e..defd9ab8d8 100644 --- a/wmi/inc/wmi_unified_api.h +++ b/wmi/inc/wmi_unified_api.h @@ -1266,4 +1266,8 @@ QDF_STATUS wmi_unified_send_adapt_dwelltime_params_cmd(void *wmi_hdl, QDF_STATUS wmi_unified_fw_test_cmd(void *wmi_hdl, struct set_fwtest_params *wmi_fwtest); +QDF_STATUS wmi_unified_peer_rx_reorder_queue_setup_send(void *wmi_hdl, + struct rx_reorder_queue_setup_params *param); +QDF_STATUS wmi_unified_peer_rx_reorder_queue_remove_send(void *wmi_hdl, + struct rx_reorder_queue_remove_params *param); #endif /* _WMI_UNIFIED_API_H_ */ diff --git a/wmi/inc/wmi_unified_param.h b/wmi/inc/wmi_unified_param.h index 5b1c85e347..e53324b41f 100644 --- a/wmi/inc/wmi_unified_param.h +++ b/wmi/inc/wmi_unified_param.h @@ -4256,6 +4256,36 @@ struct rtt_keepalive_req_params { bool stop; }; +/** + * struct rx_reorder_queue_setup_params - Reorder queue setup params + * @peer_mac_addr: Peer mac address + * @tid: TID + * @vdev_id: vdev id + * @hw_qdesc_paddr_lo: lower 32 bits of queue desc adddress + * @hw_qdesc_paddr_hi: upper 32 bits of queue desc adddress + * @queue_no: 16-bit number assigned by host for queue + */ +struct rx_reorder_queue_setup_params { + uint8_t *peer_macaddr; + uint16_t tid; + uint16_t vdev_id; + uint32_t hw_qdesc_paddr_lo; + uint32_t hw_qdesc_paddr_hi; + uint16_t queue_no; +}; + +/** + * struct rx_reorder_queue_remove_params - Reorder queue setup params + * @peer_mac_addr: Peer mac address + * @vdev_id: vdev id + * @peer_tid_bitmap: peer tid bitmap + */ +struct rx_reorder_queue_remove_params { + uint8_t *peer_macaddr; + uint16_t vdev_id; + uint32_t peer_tid_bitmap; +}; + /** * struct wmi_host_stats_event - Stats event params * @stats_id: stats id of type wmi_host_stats_event diff --git a/wmi/inc/wmi_unified_priv.h b/wmi/inc/wmi_unified_priv.h index c7efe6bafe..8eab1b2639 100644 --- a/wmi/inc/wmi_unified_priv.h +++ b/wmi/inc/wmi_unified_priv.h @@ -1132,6 +1132,12 @@ QDF_STATUS (*send_fw_test_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_encrypt_decrypt_send_cmd)(wmi_unified_t wmi_handle, struct encrypt_decrypt_req_params *params); + +QDF_STATUS (*send_peer_rx_reorder_queue_setup_cmd)(wmi_unified_t wmi_handle, + struct rx_reorder_queue_setup_params *param); + +QDF_STATUS (*send_peer_rx_reorder_queue_remove_cmd)(wmi_unified_t wmi_handle, + struct rx_reorder_queue_remove_params *param); }; struct target_abi_version { diff --git a/wmi/src/wmi_unified_api.c b/wmi/src/wmi_unified_api.c index 8778598a80..56974e6355 100644 --- a/wmi/src/wmi_unified_api.c +++ b/wmi/src/wmi_unified_api.c @@ -251,6 +251,46 @@ QDF_STATUS wmi_unified_peer_create_send(void *wmi_hdl, return QDF_STATUS_E_FAILURE; } +/** + * wmi_unified_peer_rx_reorder_queue_setup_send() - send rx reorder queue + * setup command to fw + * @wmi: wmi handle + * @rx_reorder_queue_setup_params: Rx reorder queue setup parameters + * + * Return: QDF_STATUS for success and QDF_STATUS_E_FAILURE for failure + */ +QDF_STATUS wmi_unified_peer_rx_reorder_queue_setup_send(void *wmi_hdl, + struct rx_reorder_queue_setup_params *param) +{ + wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; + + if (wmi_handle->ops->send_peer_rx_reorder_queue_setup_cmd) + return wmi_handle->ops->send_peer_rx_reorder_queue_setup_cmd( + wmi_handle, param); + + return QDF_STATUS_E_FAILURE; +} + +/** + * wmi_unified_peer_rx_reorder_queue_remove_send() - send rx reorder queue + * remove command to fw + * @wmi: wmi handle + * @rx_reorder_queue_remove_params: Rx reorder queue remove parameters + * + * Return: QDF_STATUS for success and QDF_STATUS_E_FAILURE for failure + */ +QDF_STATUS wmi_unified_peer_rx_reorder_queue_remove_send(void *wmi_hdl, + struct rx_reorder_queue_remove_params *param) +{ + wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; + + if (wmi_handle->ops->send_peer_rx_reorder_queue_remove_cmd) + return wmi_handle->ops->send_peer_rx_reorder_queue_remove_cmd( + wmi_handle, param); + + return QDF_STATUS_E_FAILURE; +} + #if defined(FEATURE_GREEN_AP) || defined(ATH_SUPPORT_GREEN_AP) /** * wmi_unified_green_ap_ps_send() - enable green ap powersave command diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index 12ac00b0e9..3ad2d51a68 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -721,6 +721,94 @@ QDF_STATUS send_peer_create_cmd_tlv(wmi_unified_t wmi, return 0; } +/** + * send_peer_rx_reorder_queue_setup_cmd_tlv() - send rx reorder setup + * command to fw + * @wmi: wmi handle + * @rx_reorder_queue_setup_params: Rx reorder queue setup parameters + * + * Return: 0 for success or error code + */ +QDF_STATUS send_peer_rx_reorder_queue_setup_cmd_tlv(wmi_unified_t wmi, + struct rx_reorder_queue_setup_params *param) +{ + wmi_peer_reorder_queue_setup_cmd_fixed_param *cmd; + wmi_buf_t buf; + int32_t len = sizeof(*cmd); + + buf = wmi_buf_alloc(wmi, len); + if (!buf) { + WMI_LOGP("%s: wmi_buf_alloc failed", __func__); + return QDF_STATUS_E_NOMEM; + } + cmd = (wmi_peer_reorder_queue_setup_cmd_fixed_param *)wmi_buf_data(buf); + WMITLV_SET_HDR(&cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_peer_reorder_queue_setup_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN + (wmi_peer_reorder_queue_setup_cmd_fixed_param)); + WMI_CHAR_ARRAY_TO_MAC_ADDR(param->peer_macaddr, &cmd->peer_macaddr); + cmd->vdev_id = param->vdev_id; + cmd->tid = param->tid; + cmd->queue_ptr_lo = param->hw_qdesc_paddr_lo; + cmd->queue_ptr_hi = param->hw_qdesc_paddr_hi; + cmd->queue_no = param->queue_no; + + if (wmi_unified_cmd_send(wmi, buf, len, + WMI_PEER_REORDER_QUEUE_SETUP_CMDID)) { + WMI_LOGP("%s: fail to send WMI_PEER_REORDER_QUEUE_SETUP_CMDID", + __func__); + qdf_nbuf_free(buf); + return QDF_STATUS_E_FAILURE; + } + WMI_LOGD("%s: peer_macaddr %pM vdev_id %d, tid %d\n", __func__, + param->peer_macaddr, param->vdev_id, param->tid); + + return QDF_STATUS_SUCCESS; +} + +/** + * send_peer_rx_reorder_queue_remove_cmd_tlv() - send rx reorder remove + * command to fw + * @wmi: wmi handle + * @rx_reorder_queue_remove_params: Rx reorder queue remove parameters + * + * Return: 0 for success or error code + */ +QDF_STATUS send_peer_rx_reorder_queue_remove_cmd_tlv(wmi_unified_t wmi, + struct rx_reorder_queue_remove_params *param) +{ + wmi_peer_reorder_queue_remove_cmd_fixed_param *cmd; + wmi_buf_t buf; + int32_t len = sizeof(*cmd); + + buf = wmi_buf_alloc(wmi, len); + if (!buf) { + WMI_LOGP("%s: wmi_buf_alloc failed", __func__); + return QDF_STATUS_E_NOMEM; + } + cmd = (wmi_peer_reorder_queue_remove_cmd_fixed_param *) + wmi_buf_data(buf); + WMITLV_SET_HDR(&cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_peer_reorder_queue_remove_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN + (wmi_peer_reorder_queue_remove_cmd_fixed_param)); + WMI_CHAR_ARRAY_TO_MAC_ADDR(param->peer_macaddr, &cmd->peer_macaddr); + cmd->vdev_id = param->vdev_id; + cmd->tid_mask = param->peer_tid_bitmap; + + if (wmi_unified_cmd_send(wmi, buf, len, + WMI_PEER_REORDER_QUEUE_REMOVE_CMDID)) { + WMI_LOGP("%s: fail to send WMI_PEER_REORDER_QUEUE_REMOVE_CMDID", + __func__); + qdf_nbuf_free(buf); + return QDF_STATUS_E_FAILURE; + } + WMI_LOGD("%s: peer_macaddr %pM vdev_id %d, tid_map %d", __func__, + param->peer_macaddr, param->vdev_id, param->peer_tid_bitmap); + + return QDF_STATUS_SUCCESS; +} + /** * send_green_ap_ps_cmd_tlv() - enable green ap powersave command * @wmi_handle: wmi handle @@ -12437,6 +12525,10 @@ struct wmi_ops tlv_ops = { .send_vdev_stop_cmd = send_vdev_stop_cmd_tlv, .send_peer_create_cmd = send_peer_create_cmd_tlv, .send_peer_delete_cmd = send_peer_delete_cmd_tlv, + .send_peer_rx_reorder_queue_setup_cmd = + send_peer_rx_reorder_queue_setup_cmd_tlv, + .send_peer_rx_reorder_queue_remove_cmd = + send_peer_rx_reorder_queue_remove_cmd_tlv, .send_green_ap_ps_cmd = send_green_ap_ps_cmd_tlv, .send_pdev_utf_cmd = send_pdev_utf_cmd_tlv, .send_pdev_param_cmd = send_pdev_param_cmd_tlv,