qcacld-3.0: enable additional two HTT data services

Enable HTT_DATA2_MSG_SVC and HTT_DATA3_MSG_SVC, using only
rx legs, CE 9 and 10, respectively. Add required CE entries
to the map that gets sent to the FW, and define the latter
service.
Rename htc_endpoint to htc_tx_endpoint in htt_pdev to
represent the role better.

Acked-by: Orhan K AKYILDIZ <oka@qca.qualcomm.com>

Change-Id: I81ae796bdb7e632aa24f15c63a2811791dd29d28
CRs-Fixed: 982728
This commit is contained in:
Houston Hoffman 2016-02-26 12:19:11 -08:00 • committed by Gerrit - the friendly Code Review server
commit 23e76f99ce
6 changed files with 73 additions and 26 deletions

View file

@ -44,6 +44,7 @@
#include <htt_internal.h>
#include <ol_htt_tx_api.h>
#include <cds_api.h>
#include "hif.h"
#define HTT_HTC_PKT_POOL_INIT_SIZE 100 /* enough for a large A-MPDU */
@ -193,10 +194,19 @@ htt_pdev_alloc(ol_txrx_pdev_handle txrx_pdev,
*/
/* AR6004 don't need HTT layer. */
#ifndef AR6004_HW
if (htt_htc_attach(pdev))
if (htt_htc_attach(pdev, HTT_DATA_MSG_SVC))
goto fail2;
if (htt_htc_attach(pdev, HTT_DATA2_MSG_SVC))
;
/* TODO: enable the following line once FW is ready */
/* goto fail2; */
if (htt_htc_attach(pdev, HTT_DATA3_MSG_SVC))
;
/* TODO: enable the following line once FW is ready */
/* goto fail2; */
if (hif_ce_fastpath_cb_register(htt_t2h_msg_handler_fast, pdev))
qdf_print("failed to register fastpath callback\n");
#endif
return pdev;
@ -393,7 +403,43 @@ int htt_pkt_dl_len_get(struct htt_pdev_t *htt_dev)
}
#endif
int htt_htc_attach(struct htt_pdev_t *pdev)
static inline
int htt_update_endpoint(struct htt_pdev_t *pdev,
uint16_t service_id, HTC_ENDPOINT_ID ep)
{
struct hif_opaque_softc *hif_ctx;
uint8_t ul = 0xff, dl = 0xff;
int ul_polled, dl_polled;
int tx_service = 0;
int rc = 0;
hif_ctx = cds_get_context(QDF_MODULE_ID_HIF);
if (qdf_unlikely(NULL == hif_ctx)) {
QDF_ASSERT(NULL != hif_ctx);
qdf_print("%s:%d: assuming non-tx service.",
__func__, __LINE__);
} else {
ul = dl = 0xff;
if (QDF_STATUS_SUCCESS !=
hif_map_service_to_pipe(hif_ctx, service_id,
&ul, &dl,
&ul_polled, &dl_polled))
qdf_print("%s:%d: assuming non-tx srv.",
__func__, __LINE__);
else
tx_service = (ul != 0xff);
}
if (tx_service) {
/* currently we have only one OUT htt tx service */
QDF_BUG(service_id == HTT_DATA_MSG_SVC);
pdev->htc_tx_endpoint = ep;
rc = 1;
}
return rc;
}
int htt_htc_attach(struct htt_pdev_t *pdev, uint16_t service_id)
{
HTC_SERVICE_CONNECT_REQ connect;
HTC_SERVICE_CONNECT_RESP response;
@ -428,14 +474,14 @@ int htt_htc_attach(struct htt_pdev_t *pdev)
#endif
/* connect to control service */
connect.service_id = HTT_DATA_MSG_SVC;
connect.service_id = service_id;
status = htc_connect_service(pdev->htc_pdev, &connect, &response);
if (status != A_OK)
return -EIO; /* failure */
pdev->htc_endpoint = response.Endpoint;
htt_update_endpoint(pdev, service_id, response.Endpoint);
return 0; /* success */
}

View file

@ -136,7 +136,7 @@ A_STATUS htt_h2t_frag_desc_bank_cfg_msg(struct htt_pdev_t *pdev)
/* fill in the message contents */
msg_word = (u_int32_t *) qdf_nbuf_data(msg);
memset(msg_word, 0 , sizeof(struct htt_tx_frag_desc_bank_cfg_t));
memset(msg_word, 0, sizeof(struct htt_tx_frag_desc_bank_cfg_t));
/* rewind beyond alignment pad to get to the HTC header reserved area */
qdf_nbuf_push_head(msg, HTC_HDR_ALIGNMENT_PADDING);
@ -172,7 +172,7 @@ A_STATUS htt_h2t_frag_desc_bank_cfg_msg(struct htt_pdev_t *pdev)
htt_h2t_send_complete_free_netbuf,
qdf_nbuf_data(msg),
qdf_nbuf_len(msg),
pdev->htc_endpoint,
pdev->htc_tx_endpoint,
1); /* tag - not relevant here */
SET_HTC_PACKET_NET_BUF_CONTEXT(&pkt->htc_pkt, msg);
@ -229,7 +229,7 @@ A_STATUS htt_h2t_ver_req_msg(struct htt_pdev_t *pdev)
SET_HTC_PACKET_INFO_TX(&pkt->htc_pkt,
htt_h2t_send_complete_free_netbuf,
qdf_nbuf_data(msg), qdf_nbuf_len(msg),
pdev->htc_endpoint,
pdev->htc_tx_endpoint,
1); /* tag - not relevant here */
SET_HTC_PACKET_NET_BUF_CONTEXT(&pkt->htc_pkt, msg);
@ -414,7 +414,7 @@ A_STATUS htt_h2t_rx_ring_cfg_msg_ll(struct htt_pdev_t *pdev)
htt_h2t_send_complete_free_netbuf,
qdf_nbuf_data(msg),
qdf_nbuf_len(msg),
pdev->htc_endpoint,
pdev->htc_tx_endpoint,
HTC_TX_PACKET_TAG_RUNTIME_PUT);
SET_HTC_PACKET_NET_BUF_CONTEXT(&pkt->htc_pkt, msg);
@ -504,7 +504,7 @@ htt_h2t_dbg_stats_get(struct htt_pdev_t *pdev,
htt_h2t_send_complete_free_netbuf,
qdf_nbuf_data(msg),
qdf_nbuf_len(msg),
pdev->htc_endpoint,
pdev->htc_tx_endpoint,
htc_tag); /* tag - not relevant here */
SET_HTC_PACKET_NET_BUF_CONTEXT(&pkt->htc_pkt, msg);
@ -560,7 +560,7 @@ A_STATUS htt_h2t_sync_msg(struct htt_pdev_t *pdev, uint8_t sync_cnt)
htt_h2t_send_complete_free_netbuf,
qdf_nbuf_data(msg),
qdf_nbuf_len(msg),
pdev->htc_endpoint,
pdev->htc_tx_endpoint,
HTC_TX_PACKET_TAG_RUNTIME_PUT);
SET_HTC_PACKET_NET_BUF_CONTEXT(&pkt->htc_pkt, msg);
@ -627,7 +627,7 @@ htt_h2t_aggr_cfg_msg(struct htt_pdev_t *pdev,
htt_h2t_send_complete_free_netbuf,
qdf_nbuf_data(msg),
qdf_nbuf_len(msg),
pdev->htc_endpoint,
pdev->htc_tx_endpoint,
HTC_TX_PACKET_TAG_RUNTIME_PUT);
SET_HTC_PACKET_NET_BUF_CONTEXT(&pkt->htc_pkt, msg);
@ -785,8 +785,8 @@ int htt_h2t_ipa_uc_rsc_cfg_msg(struct htt_pdev_t *pdev)
htt_h2t_send_complete_free_netbuf,
qdf_nbuf_data(msg),
qdf_nbuf_len(msg),
pdev->htc_endpoint,
1); /* tag - not relevant here */
pdev->htc_tx_endpoint,
HTC_TX_PACKET_TAG_RUNTIME_PUT);
SET_HTC_PACKET_NET_BUF_CONTEXT(&pkt->htc_pkt, msg);
@ -841,7 +841,8 @@ int htt_h2t_ipa_uc_rsc_cfg_msg(struct htt_pdev_t *pdev)
msg_word++;
*msg_word = 0;
HTT_WDI_IPA_CFG_TX_COMP_RING_SIZE_SET(*msg_word,
HTT_WDI_IPA_CFG_TX_COMP_RING_SIZE_SET(
*msg_word,
(unsigned int)ol_cfg_ipa_uc_tx_max_buf_cnt(pdev->ctrl_pdev));
msg_word++;
@ -878,7 +879,7 @@ int htt_h2t_ipa_uc_rsc_cfg_msg(struct htt_pdev_t *pdev)
htt_h2t_send_complete_free_netbuf,
qdf_nbuf_data(msg),
qdf_nbuf_len(msg),
pdev->htc_endpoint,
pdev->htc_tx_endpoint,
HTC_TX_PACKET_TAG_RUNTIME_PUT);
SET_HTC_PACKET_NET_BUF_CONTEXT(&pkt->htc_pkt, msg);
@ -951,7 +952,7 @@ int htt_h2t_ipa_uc_set_active(struct htt_pdev_t *pdev,
htt_h2t_send_complete_free_netbuf,
qdf_nbuf_data(msg),
qdf_nbuf_len(msg),
pdev->htc_endpoint,
pdev->htc_tx_endpoint,
1); /* tag - not relevant here */
SET_HTC_PACKET_NET_BUF_CONTEXT(&pkt->htc_pkt, msg);
@ -1011,7 +1012,7 @@ int htt_h2t_ipa_uc_get_stats(struct htt_pdev_t *pdev)
htt_h2t_send_complete_free_netbuf,
qdf_nbuf_data(msg),
qdf_nbuf_len(msg),
pdev->htc_endpoint,
pdev->htc_tx_endpoint,
1); /* tag - not relevant here */
SET_HTC_PACKET_NET_BUF_CONTEXT(&pkt->htc_pkt, msg);

View file

@ -428,7 +428,7 @@ int htt_rx_attach(struct htt_pdev_t *pdev);
void htt_rx_detach(struct htt_pdev_t *pdev);
int htt_htc_attach(struct htt_pdev_t *pdev);
int htt_htc_attach(struct htt_pdev_t *pdev, uint16_t service_id);
void htt_t2h_msg_handler(void *context, HTC_PACKET *pkt);
#ifdef WLAN_FEATURE_FASTPATH

View file

@ -573,7 +573,7 @@ void htt_tx_sched(htt_pdev_handle pdev)
not_accepted =
htc_send_data_pkt(pdev->htc_pdev, msdu,
pdev->htc_endpoint,
pdev->htc_tx_endpoint,
download_len);
if (not_accepted) {
HTT_TX_NBUF_QUEUE_INSERT_HEAD(pdev, msdu);
@ -616,8 +616,8 @@ int htt_tx_send_std(htt_pdev_handle pdev, qdf_nbuf_t msdu, uint16_t msdu_id)
}
qdf_nbuf_trace_update(msdu, "HT:T:");
if (htc_send_data_pkt
(pdev->htc_pdev, msdu, pdev->htc_endpoint, download_len)) {
if (htc_send_data_pkt(pdev->htc_pdev, msdu,
pdev->htc_tx_endpoint, download_len)) {
HTT_TX_NBUF_QUEUE_ADD(pdev, msdu);
}
@ -689,10 +689,10 @@ htt_tx_htt2_get_ep_id(htt_pdev_handle pdev, qdf_nbuf_t msdu)
(qdf_nbuf_len(msdu) < pdev->htc_tx_htt2_max_size))
return pdev->htc_tx_htt2_endpoint;
else
return pdev->htc_endpoint;
return pdev->htc_tx_endpoint;
}
#else
#define htt_tx_htt2_get_ep_id(pdev, msdu) (pdev->htc_endpoint)
#define htt_tx_htt2_get_ep_id(pdev, msdu) (pdev->htc_tx_endpoint)
#endif /* QCA_TX_HTT2_SUPPORT */
static inline int

View file

@ -217,7 +217,7 @@ struct htt_pdev_t {
HTC_HANDLE htc_pdev;
qdf_device_t osdev;
HTC_ENDPOINT_ID htc_endpoint;
HTC_ENDPOINT_ID htc_tx_endpoint;
#ifdef QCA_TX_HTT2_SUPPORT
HTC_ENDPOINT_ID htc_tx_htt2_endpoint;
@ -388,7 +388,7 @@ struct htt_pdev_t {
};
#define HTT_EPID_GET(_htt_pdev_hdl) \
(((struct htt_pdev_t *)(_htt_pdev_hdl))->htc_endpoint)
(((struct htt_pdev_t *)(_htt_pdev_hdl))->htc_tx_endpoint)
#if defined(HELIUMPLUS_PADDR64)
#define HTT_WIFI_IP(pdev, x, y) (((pdev)->wifi_ip_ver.major == (x)) && \

View file

@ -451,7 +451,7 @@ struct hdd_ipa_priv {
};
/**
* FIXME: The following conversion routines will are just stubs.
* FIXME: The following conversion routines are just stubs.
* They will be implemented fully by another update.
* The stubs will let the compile go ahead, and functionality
* is broken.