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

Commit 79ffe61e authored by rio.zhao's avatar rio.zhao Committed by hecaiqiang
Browse files

Synchronize codes for Oneplus 7 Pro Oxygen OS 9.5.9.GM21AA



GPS: Add qcom patch CR2432846(2/2)

Change-Id: I035526074e73f954c9a216827824bf5b97b59042
Signed-off-by: default avatarrio.zhao <rio.zhao@oneplus.com>
(cherry picked from commit e8242c03add7f9a13f8c8a2d81fd2455b8a7f22b)
parent 339fa253
Loading
Loading
Loading
Loading
+20 −7
Original line number Original line Diff line number Diff line
@@ -45,6 +45,9 @@


#define AID_VENDOR_QRTR	KGIDT_INIT(2906)
#define AID_VENDOR_QRTR	KGIDT_INIT(2906)


#define GPS_QRTR_SERVICE_ID 0x10
#define INVALID_PORT 0xff

/**
/**
 * struct qrtr_hdr_v1 - (I|R)PCrouter packet header version 1
 * struct qrtr_hdr_v1 - (I|R)PCrouter packet header version 1
 * @version: protocol version
 * @version: protocol version
@@ -687,7 +690,7 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len)
	unsigned int ver;
	unsigned int ver;
	size_t hdrlen;
	size_t hdrlen;
	struct qrtr_ctrl_pkt *pkt;
	struct qrtr_ctrl_pkt *pkt;
	static __le32 src_port = 0xff;
	static __le32 src_port = INVALID_PORT;


	if (len & 3)
	if (len & 3)
		return -EINVAL;
		return -EINVAL;
@@ -737,7 +740,6 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len)
		pr_err("qrtr: Invalid version %d\n", ver);
		pr_err("qrtr: Invalid version %d\n", ver);
		goto err;
		goto err;
	}
	}

	if (cb->dst_port == QRTR_PORT_CTRL_LEGACY)
	if (cb->dst_port == QRTR_PORT_CTRL_LEGACY)
		cb->dst_port = QRTR_PORT_CTRL;
		cb->dst_port = QRTR_PORT_CTRL;


@@ -751,15 +753,26 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len)
	skb_put_data(skb, data + hdrlen, size);
	skb_put_data(skb, data + hdrlen, size);


	if (node->ws && node->nid == 0)
	if (node->ws && node->nid == 0)
		if (skb->len == sizeof(*pkt))
		switch (cb->type) {
		case QRTR_TYPE_DATA:
			if (cb->src_port == src_port)
				__pm_wakeup_event(node->ws, 0);
			break;
		case QRTR_TYPE_NEW_SERVER:
			pkt = (void *)skb->data;
			pkt = (void *)skb->data;
			//Location service of id is 0x10
			//Location service of id is 0x10
			if (le32_to_cpu(pkt->server.service) == 0x10) {
			if (le32_to_cpu(pkt->server.service) ==
			   GPS_QRTR_SERVICE_ID) {
				src_port = le32_to_cpu(pkt->server.port);
				src_port = le32_to_cpu(pkt->server.port);
				__pm_wakeup_event(node->ws, 0);
				__pm_wakeup_event(node->ws, 0);

			}
			} else if (cb->src_port == src_port) {
			break;
				__pm_wakeup_event(node->ws, 0);
		case QRTR_TYPE_DEL_SERVER:
			pkt = (void *)skb->data;
			if (le32_to_cpu(pkt->server.service) ==
			   GPS_QRTR_SERVICE_ID)
				src_port = INVALID_PORT;
			break;
		}
		}
	qrtr_log_rx_msg(node, skb);
	qrtr_log_rx_msg(node, skb);