Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8a6b39ff authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: ipa: Support hardware accelerated DIAG over qdss"

parents 29ffcd8e 6b989191
Loading
Loading
Loading
Loading
+100 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (c) 2020, The Linux Foundation. All rights reserved.
 */

#ifndef _IPA_QDSS_H_
#define _IPA_QDSS_H_

#include <linux/ipa.h>

/**
 * enum ipa_qdss_notify - these are the only return items
 * @IPA_QDSS_SUCCESS: will be returned as it is for both conn
 *						and disconn
 * @IPA_QDSS_PIPE_CONN_FAILURE: will be returned as negative value
 * @IPA_QDSS_PIPE_DISCONN_FAILURE: will be returned as negative value
 */
enum ipa_qdss_notify {
	IPA_QDSS_SUCCESS,
	IPA_QDSS_PIPE_CONN_FAILURE,
	IPA_QDSS_PIPE_DISCONN_FAILURE,
};

/**
 * struct  ipa_qdss_conn_in_params - QDSS -> IPA TX configuration
 * @data_fifo_base_addr: Base address of the data FIFO used by BAM
 * @data_fifo_size: Size of the data FIFO
 * @desc_fifo_base_addr: Base address of the descriptor FIFO by BAM
 * @desc_fifo_size: Should be configured to 1 by QDSS
 * @bam_p_evt_dest_addr: equivalent to event_ring_doorbell_pa
 *			physical address of the doorbell that IPA uC
 *			will update the headpointer of the event ring.
 *			QDSS should send BAM_P_EVNT_REG address in this var
 *			Configured with the GSI Doorbell Address.
 *			GSI sends Update RP by doing a write to this address
 * @bam_p_evt_threshold: Threshold level of how many bytes consumed
 * @override_eot: if override EOT==1, it doesn't check the EOT bit in
 *			the descriptor
 */
struct ipa_qdss_conn_in_params {
	phys_addr_t  data_fifo_base_addr;
	u32  data_fifo_size;
	phys_addr_t desc_fifo_base_addr;
	u32 desc_fifo_size;
	phys_addr_t  bam_p_evt_dest_addr;
	u32 bam_p_evt_threshold;
	u32 override_eot;
};

/**
 * struct  ipa_qdss_conn_out_params - information provided
 *				to QDSS driver
 * @rx_db_pa: physical address of IPA doorbell for RX (QDSS->IPA transactions)
 *		QDSS to take this address and assign it to BAM_P_EVENT_DEST_ADDR
 */
struct ipa_qdss_conn_out_params {
	phys_addr_t ipa_rx_db_pa;
};

#if defined CONFIG_IPA3

/**
 * ipa_qdss_conn_pipes - Client should call this
 * function to connect QDSS -> IPA pipe
 *
 * @in: [in] input parameters from client
 * @out: [out] output params to client
 *
 * Note: Should not be called from atomic context
 *
 * @Return 0 on success, negative on failure
 */
int ipa_qdss_conn_pipes(struct ipa_qdss_conn_in_params *in,
	struct ipa_qdss_conn_out_params *out);

/**
 * ipa_qdss_disconn_pipes() - Client should call this
 *		function to disconnect pipes
 *
 * Note: Should not be called from atomic context
 *
 * Returns: 0 on success, negative on failure
 */
int ipa_qdss_disconn_pipes(void);

#else /* CONFIG_IPA3 */

static inline int ipa_qdss_conn_pipes(struct ipa_qdss_conn_in_params *in,
	struct ipa_qdss_conn_out_params *out)
{
	return -IPA_QDSS_PIPE_CONN_FAILURE;
}

static inline int ipa_qdss_disconn_pipes(void)
{
	return -IPA_QDSS_PIPE_DISCONN_FAILURE;
}

#endif /* CONFIG_IPA3 */
#endif /* _IPA_QDSS_H_ */
+2 −0
Original line number Diff line number Diff line
@@ -425,6 +425,8 @@ enum ipa_client_type {
#define IPA_CLIENT_MHI_PRIME_DPL_PROD IPA_CLIENT_MHI_PRIME_DPL_PROD
#define IPA_CLIENT_AQC_ETHERNET_PROD IPA_CLIENT_AQC_ETHERNET_PROD
#define IPA_CLIENT_AQC_ETHERNET_CONS IPA_CLIENT_AQC_ETHERNET_CONS
#define IPA_CLIENT_MHI_QDSS_CONS IPA_CLIENT_MHI_QDSS_CONS
#define IPA_CLIENT_QDSS_PROD IPA_CLIENT_QDSS_PROD

#define IPA_CLIENT_IS_APPS_CONS(client) \
	((client) == IPA_CLIENT_APPS_LAN_CONS || \