ath10k: map HTC services to tx/rx pipes for wcn3990
Add mapping of HTC endpoint services supported by wcn3990 target to tx/rx pipe. Signed-off-by: Govind Singh <govinds@codeaurora.org> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
b8c27e8621
commit
84efe7f6eb
@ -154,6 +154,116 @@ static struct ce_attr host_ce_config_wlan[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct service_to_pipe target_service_to_ce_map_wlan[] = {
|
||||
{
|
||||
__cpu_to_le32(ATH10K_HTC_SVC_ID_WMI_DATA_VO),
|
||||
__cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
||||
__cpu_to_le32(3),
|
||||
},
|
||||
{
|
||||
__cpu_to_le32(ATH10K_HTC_SVC_ID_WMI_DATA_VO),
|
||||
__cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
||||
__cpu_to_le32(2),
|
||||
},
|
||||
{
|
||||
__cpu_to_le32(ATH10K_HTC_SVC_ID_WMI_DATA_BK),
|
||||
__cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
||||
__cpu_to_le32(3),
|
||||
},
|
||||
{
|
||||
__cpu_to_le32(ATH10K_HTC_SVC_ID_WMI_DATA_BK),
|
||||
__cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
||||
__cpu_to_le32(2),
|
||||
},
|
||||
{
|
||||
__cpu_to_le32(ATH10K_HTC_SVC_ID_WMI_DATA_BE),
|
||||
__cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
||||
__cpu_to_le32(3),
|
||||
},
|
||||
{
|
||||
__cpu_to_le32(ATH10K_HTC_SVC_ID_WMI_DATA_BE),
|
||||
__cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
||||
__cpu_to_le32(2),
|
||||
},
|
||||
{
|
||||
__cpu_to_le32(ATH10K_HTC_SVC_ID_WMI_DATA_VI),
|
||||
__cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
||||
__cpu_to_le32(3),
|
||||
},
|
||||
{
|
||||
__cpu_to_le32(ATH10K_HTC_SVC_ID_WMI_DATA_VI),
|
||||
__cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
||||
__cpu_to_le32(2),
|
||||
},
|
||||
{
|
||||
__cpu_to_le32(ATH10K_HTC_SVC_ID_WMI_CONTROL),
|
||||
__cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
||||
__cpu_to_le32(3),
|
||||
},
|
||||
{
|
||||
__cpu_to_le32(ATH10K_HTC_SVC_ID_WMI_CONTROL),
|
||||
__cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
||||
__cpu_to_le32(2),
|
||||
},
|
||||
{
|
||||
__cpu_to_le32(ATH10K_HTC_SVC_ID_RSVD_CTRL),
|
||||
__cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
||||
__cpu_to_le32(0),
|
||||
},
|
||||
{
|
||||
__cpu_to_le32(ATH10K_HTC_SVC_ID_RSVD_CTRL),
|
||||
__cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
||||
__cpu_to_le32(2),
|
||||
},
|
||||
{ /* not used */
|
||||
__cpu_to_le32(ATH10K_HTC_SVC_ID_TEST_RAW_STREAMS),
|
||||
__cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
||||
__cpu_to_le32(0),
|
||||
},
|
||||
{ /* not used */
|
||||
__cpu_to_le32(ATH10K_HTC_SVC_ID_TEST_RAW_STREAMS),
|
||||
__cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
||||
__cpu_to_le32(2),
|
||||
},
|
||||
{
|
||||
__cpu_to_le32(ATH10K_HTC_SVC_ID_HTT_DATA_MSG),
|
||||
__cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
||||
__cpu_to_le32(4),
|
||||
},
|
||||
{
|
||||
__cpu_to_le32(ATH10K_HTC_SVC_ID_HTT_DATA_MSG),
|
||||
__cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
||||
__cpu_to_le32(1),
|
||||
},
|
||||
{ /* not used */
|
||||
__cpu_to_le32(ATH10K_HTC_SVC_ID_TEST_RAW_STREAMS),
|
||||
__cpu_to_le32(PIPEDIR_OUT),
|
||||
__cpu_to_le32(5),
|
||||
},
|
||||
{ /* in = DL = target -> host */
|
||||
__cpu_to_le32(ATH10K_HTC_SVC_ID_HTT_DATA2_MSG),
|
||||
__cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
||||
__cpu_to_le32(9),
|
||||
},
|
||||
{ /* in = DL = target -> host */
|
||||
__cpu_to_le32(ATH10K_HTC_SVC_ID_HTT_DATA3_MSG),
|
||||
__cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
||||
__cpu_to_le32(10),
|
||||
},
|
||||
{ /* in = DL = target -> host pktlog */
|
||||
__cpu_to_le32(ATH10K_HTC_SVC_ID_HTT_LOG_MSG),
|
||||
__cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
||||
__cpu_to_le32(11),
|
||||
},
|
||||
/* (Additions here) */
|
||||
|
||||
{ /* must be last */
|
||||
__cpu_to_le32(0),
|
||||
__cpu_to_le32(0),
|
||||
__cpu_to_le32(0),
|
||||
},
|
||||
};
|
||||
|
||||
void ath10k_snoc_write32(struct ath10k *ar, u32 offset, u32 value)
|
||||
{
|
||||
struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
|
||||
@ -249,6 +359,62 @@ static void ath10k_snoc_rx_post(struct ath10k *ar)
|
||||
ath10k_snoc_rx_post_pipe(&ar_snoc->pipe_info[i]);
|
||||
}
|
||||
|
||||
static int ath10k_snoc_hif_map_service_to_pipe(struct ath10k *ar,
|
||||
u16 service_id,
|
||||
u8 *ul_pipe, u8 *dl_pipe)
|
||||
{
|
||||
const struct service_to_pipe *entry;
|
||||
bool ul_set = false, dl_set = false;
|
||||
int i;
|
||||
|
||||
ath10k_dbg(ar, ATH10K_DBG_SNOC, "snoc hif map service\n");
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(target_service_to_ce_map_wlan); i++) {
|
||||
entry = &target_service_to_ce_map_wlan[i];
|
||||
|
||||
if (__le32_to_cpu(entry->service_id) != service_id)
|
||||
continue;
|
||||
|
||||
switch (__le32_to_cpu(entry->pipedir)) {
|
||||
case PIPEDIR_NONE:
|
||||
break;
|
||||
case PIPEDIR_IN:
|
||||
WARN_ON(dl_set);
|
||||
*dl_pipe = __le32_to_cpu(entry->pipenum);
|
||||
dl_set = true;
|
||||
break;
|
||||
case PIPEDIR_OUT:
|
||||
WARN_ON(ul_set);
|
||||
*ul_pipe = __le32_to_cpu(entry->pipenum);
|
||||
ul_set = true;
|
||||
break;
|
||||
case PIPEDIR_INOUT:
|
||||
WARN_ON(dl_set);
|
||||
WARN_ON(ul_set);
|
||||
*dl_pipe = __le32_to_cpu(entry->pipenum);
|
||||
*ul_pipe = __le32_to_cpu(entry->pipenum);
|
||||
dl_set = true;
|
||||
ul_set = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (WARN_ON(!ul_set || !dl_set))
|
||||
return -ENOENT;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ath10k_snoc_hif_get_default_pipe(struct ath10k *ar,
|
||||
u8 *ul_pipe, u8 *dl_pipe)
|
||||
{
|
||||
ath10k_dbg(ar, ATH10K_DBG_SNOC, "snoc hif get default pipe\n");
|
||||
|
||||
(void)ath10k_snoc_hif_map_service_to_pipe(ar,
|
||||
ATH10K_HTC_SVC_ID_RSVD_CTRL,
|
||||
ul_pipe, dl_pipe);
|
||||
}
|
||||
|
||||
static inline void ath10k_snoc_irq_disable(struct ath10k *ar)
|
||||
{
|
||||
ath10k_ce_disable_interrupts(ar);
|
||||
@ -358,6 +524,8 @@ static const struct ath10k_hif_ops ath10k_snoc_hif_ops = {
|
||||
.write32 = ath10k_snoc_write32,
|
||||
.start = ath10k_snoc_hif_start,
|
||||
.stop = ath10k_snoc_hif_stop,
|
||||
.map_service_to_pipe = ath10k_snoc_hif_map_service_to_pipe,
|
||||
.get_default_pipe = ath10k_snoc_hif_get_default_pipe,
|
||||
};
|
||||
|
||||
static const struct ath10k_bus_ops ath10k_snoc_bus_ops = {
|
||||
|
Loading…
Reference in New Issue
Block a user