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

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

Merge "msm: mhi_dev: Add QMAP flow control hardware channel"

parents 6da2b3fa b6907ec8
Loading
Loading
Loading
Loading
+20 −3
Original line number Diff line number Diff line
@@ -1303,6 +1303,9 @@ static int mhi_hwc_chcmd(struct mhi_dev *mhi, uint chid,
		case MHI_CLIENT_ADPL_IN:
			connect_params.sys.client = IPA_CLIENT_MHI_DPL_CONS;
			break;
		case MHI_CLIENT_IP_HW_QDSS:
			connect_params.sys.client = IPA_CLIENT_MHI_QDSS_CONS;
			break;
		case MHI_CLIENT_IP_HW_0_OUT:
			connect_params.sys.client = IPA_CLIENT_MHI_PROD;
			break;
@@ -1315,6 +1318,12 @@ static int mhi_hwc_chcmd(struct mhi_dev *mhi, uint chid,
		case MHI_CLIENT_IP_HW_1_IN:
			connect_params.sys.client = IPA_CLIENT_MHI2_CONS;
			break;
		case MHI_CLIENT_QMAP_FLOW_CTRL_OUT:
			connect_params.sys.client = IPA_CLIENT_MHI_QMAP_PROD;
			break;
		case MHI_CLIENT_QMAP_FLOW_CTRL_IN:
			connect_params.sys.client = IPA_CLIENT_MHI_QMAP_CONS;
			break;
		default:
			pr_err("Invalid channel = 0x%X\n", chid);
			return -EINVAL;
@@ -1538,6 +1547,10 @@ static void mhi_dev_trigger_cb(enum mhi_client_channel ch_id)
	struct mhi_dev_ready_cb_info *info;
	enum mhi_ctrl_info state_data;

	/* Currently no clients register for HW channel notification */
	if (ch_id >= MHI_MAX_SOFTWARE_CHANNELS)
		return;

	list_for_each_entry(info, &mhi_ctx->client_cb_list, list)
		if (info->cb && info->cb_data.channel == ch_id) {
			mhi_ctrl_state_info(info->cb_data.channel, &state_data);
@@ -2036,7 +2049,7 @@ static void mhi_update_state_info_all(enum mhi_ctrl_info info)
	struct mhi_dev_client_cb_reason reason;

	mhi_ctx->ctrl_info = info;
	for (i = 0; i < MHI_MAX_CHANNELS; ++i) {
	for (i = 0; i < MHI_MAX_SOFTWARE_CHANNELS; ++i) {
		channel_state_info[i].ctrl_info = info;
		/* Notify kernel clients */
		mhi_dev_trigger_cb(i);
@@ -3333,7 +3346,7 @@ int mhi_register_state_cb(void (*mhi_state_cb)
	if (WARN_ON(!mhi_ctx))
		return -ENXIO;

	if (channel > MHI_MAX_CHANNELS) {
	if (channel >= MHI_MAX_SOFTWARE_CHANNELS) {
		pr_err("Invalid channel :%d\n", channel);
		return -EINVAL;
	}
@@ -3373,6 +3386,10 @@ static void mhi_update_state_info_ch(uint32_t ch_id, enum mhi_ctrl_info info)
{
	struct mhi_dev_client_cb_reason reason;

	/* Currently no clients register for HW channel notification */
	if (ch_id >= MHI_MAX_SOFTWARE_CHANNELS)
		return;

	channel_state_info[ch_id].ctrl_info = info;
	if (ch_id == MHI_CLIENT_QMI_OUT || ch_id == MHI_CLIENT_QMI_IN) {
		/* For legacy reasons for QTI client */
@@ -3392,7 +3409,7 @@ int mhi_ctrl_state_info(uint32_t idx, uint32_t *info)
	if (idx == MHI_DEV_UEVENT_CTRL)
		*info = mhi_ctx->ctrl_info;
	else
		if (idx < MHI_MAX_CHANNELS)
		if (idx < MHI_MAX_SOFTWARE_CHANNELS)
			*info = channel_state_info[idx].ctrl_info;
		else
			return -EINVAL;
+4 −3
Original line number Diff line number Diff line
@@ -133,11 +133,12 @@ enum mhi_client_channel {
	MHI_CLIENT_IP_HW_0_OUT = 100,
	MHI_CLIENT_IP_HW_0_IN = 101,
	MHI_CLIENT_ADPL_IN = 102,
	MHI_CLIENT_IP_HW_QDSS = 103,
	MHI_CLIENT_IP_HW_1_OUT = 105,
	MHI_CLIENT_IP_HW_1_IN = 106,
	MHI_CLIENT_RESERVED_2_LOWER = 107,
	MHI_CLIENT_RESERVED_2_UPPER = 127,
	MHI_MAX_CHANNELS = 107,
	MHI_CLIENT_QMAP_FLOW_CTRL_OUT = 109,
	MHI_CLIENT_QMAP_FLOW_CTRL_IN = 110,
	MHI_MAX_CHANNELS = 255,
	MHI_CLIENT_INVALID = 0xFFFFFFFF
};