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

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

Merge "net: qrtr: log rx packet causing system wakeup"

parents 77e9e8d6 9e2b485c
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -56,6 +56,8 @@ do { \
#define RPM_GLINK_CID_MAX	65536

static int should_wake;
int glink_resume_pkt;
EXPORT_SYMBOL(glink_resume_pkt);

struct glink_msg {
	__le16 cmd;
@@ -1246,8 +1248,11 @@ static irqreturn_t qcom_glink_native_intr(int irq, void *data)
	unsigned int cmd;
	int ret = 0;

	if (should_wake)
	if (should_wake) {
		pr_info("%s: %d triggered %s\n", __func__, irq, glink->irqname);
		glink_resume_pkt = true;
		pm_system_wakeup();
	}
	/* To wakeup any blocking writers */
	wake_up_all(&glink->tx_avail_notify);

+1 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ struct qcom_glink_pipe {

struct qcom_glink;
extern const struct dev_pm_ops glink_native_pm_ops;
extern int glink_resume_pkt;

struct qcom_glink *qcom_glink_native_probe(struct device *dev,
					   unsigned long features,
+20 −1
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
/*
 * Copyright (c) 2015, Sony Mobile Communications Inc.
 * Copyright (c) 2013, 2020, The Linux Foundation. All rights reserved.
 * Copyright (c) 2013, 2020-2021, The Linux Foundation. All rights reserved.
 * Copyright (c) 2020, Linaro Ltd.
 */

@@ -98,6 +98,25 @@ static struct qrtr_node *node_get(unsigned int node_id)
	return node;
}

unsigned int qrtr_get_service_id(unsigned int node_id, unsigned int port_id)
{
	struct qrtr_server *srv;
	struct qrtr_node *node;
	unsigned long index;

	node = node_get(node_id);
	if (!node)
		return 0;

	xa_for_each(&node->servers, index, srv) {
		if (srv->node == node_id && srv->port == port_id)
			return srv->service;
	}

	return 0;
}
EXPORT_SYMBOL(qrtr_get_service_id);

static int server_match(const struct qrtr_server *srv,
			const struct qrtr_server_filter *f)
{
+26 −1
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright (c) 2015, Sony Mobile Communications Inc.
 * Copyright (c) 2013, 2018-2019 The Linux Foundation. All rights reserved.
 * Copyright (c) 2013, 2018-2019, 2021, The Linux Foundation. All rights reserved.
 */
#include <linux/kthread.h>
#include <linux/module.h>
@@ -40,6 +40,11 @@

#define AID_VENDOR_QRTR	KGIDT_INIT(2906)

#if defined(CONFIG_RPMSG_QCOM_GLINK_NATIVE)
extern bool glink_resume_pkt;
#endif
extern unsigned int qrtr_get_service_id(unsigned int node_id,
					unsigned int port_id);
/**
 * struct qrtr_hdr_v1 - (I|R)PCrouter packet header version 1
 * @version: protocol version
@@ -269,6 +274,23 @@ static void qrtr_log_tx_msg(struct qrtr_node *node, struct qrtr_hdr_v1 *hdr,
	}
}

#if defined(CONFIG_RPMSG_QCOM_GLINK_NATIVE)
static void qrtr_log_resume_pkt(struct qrtr_cb *cb, u64 pl_buf)
{
	unsigned int service_id;

	if (glink_resume_pkt) {
		glink_resume_pkt = false;
		service_id = qrtr_get_service_id(cb->src_node, cb->src_port);
		pr_info("[QRTR RESUME PKT]:src[0x%x:0x%x] dst[0x%x:0x%x] [%08x %08x]: service[0x%x]\n",
			cb->src_node, cb->src_port,
			cb->dst_node, cb->dst_port,
			(unsigned int)pl_buf, (unsigned int)(pl_buf >> 32),
			service_id);
	}
}
#endif

static void qrtr_log_rx_msg(struct qrtr_node *node, struct sk_buff *skb)
{
	struct qrtr_ctrl_pkt pkt = {0,};
@@ -287,6 +309,9 @@ static void qrtr_log_rx_msg(struct qrtr_node *node, struct sk_buff *skb)
			  skb->len, cb->confirm_rx, cb->src_node, cb->src_port,
			  cb->dst_node, cb->dst_port,
			  (unsigned int)pl_buf, (unsigned int)(pl_buf >> 32));
#if defined(CONFIG_RPMSG_QCOM_GLINK_NATIVE)
		qrtr_log_resume_pkt(cb, pl_buf);
#endif
	} else {
		skb_copy_bits(skb, 0, &pkt, sizeof(pkt));
		if (cb->type == QRTR_TYPE_NEW_SERVER ||
+2 −0
Original line number Diff line number Diff line
@@ -38,4 +38,6 @@ void qrtr_ns_init(void);
void qrtr_ns_remove(void);

int qrtr_peek_pkt_size(const void *data);

unsigned int qrtr_get_service_id(unsigned int node_id, unsigned int port_id);
#endif