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

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

Merge "drivers: net: rmnet: Power collapse feature"

parents d65d5bb8 8fb05b8d
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -519,6 +519,7 @@ CONFIG_QCOM_LLCC=y
CONFIG_QCOM_SM8150_LLCC=y
CONFIG_QCOM_LLCC_PERFMON=m
CONFIG_QCOM_QMI_HELPERS=y
CONFIG_QCOM_QMI_RMNET=y
CONFIG_QCOM_QMI_DFC=y
CONFIG_QCOM_QMI_POWER_COLLAPSE=y
CONFIG_QCOM_SMEM=y
+1 −0
Original line number Diff line number Diff line
@@ -541,6 +541,7 @@ CONFIG_QCOM_LLCC=y
CONFIG_QCOM_SM8150_LLCC=y
CONFIG_QCOM_LLCC_PERFMON=m
CONFIG_QCOM_QMI_HELPERS=y
CONFIG_QCOM_QMI_RMNET=y
CONFIG_QCOM_QMI_DFC=y
CONFIG_QCOM_QMI_POWER_COLLAPSE=y
CONFIG_QCOM_SMEM=y
+45 −2
Original line number Diff line number Diff line
@@ -105,7 +105,6 @@ static int rmnet_register_real_device(struct net_device *real_dev)
		kfree(port);
		return -EBUSY;
	}

	/* hold on to real dev for MAP data */
	dev_hold(real_dev);

@@ -484,7 +483,7 @@ int rmnet_del_bridge(struct net_device *rmnet_dev,
	return 0;
}

#ifdef CONFIG_QCOM_QMI_DFC
#ifdef CONFIG_QCOM_QMI_RMNET
void *rmnet_get_qmi_pt(void *port)
{
	if (port)
@@ -548,6 +547,50 @@ void rmnet_init_qmi_pt(void *port, void *qmi)
		((struct rmnet_port *)port)->qmi_info = qmi;
}
EXPORT_SYMBOL(rmnet_init_qmi_pt);

void rmnet_get_packets(void *port, u64 *rx, u64 *tx)
{
	struct rmnet_priv *priv;
	struct rmnet_pcpu_stats *ps;
	unsigned int cpu, start;

	struct rmnet_endpoint *ep;
	unsigned long bkt;

	if (!port || !tx || !rx)
		return;

	*tx = 0;
	*rx = 0;
	hash_for_each(((struct rmnet_port *)port)->muxed_ep, bkt, ep, hlnode) {
		priv = netdev_priv(ep->egress_dev);
		for_each_possible_cpu(cpu) {
			ps = per_cpu_ptr(priv->pcpu_stats, cpu);
			do {
				start = u64_stats_fetch_begin_irq(&ps->syncp);
				*tx += ps->stats.tx_pkts;
				*rx += ps->stats.rx_pkts;
			} while (u64_stats_fetch_retry_irq(&ps->syncp, start));
		}
	}
}
EXPORT_SYMBOL(rmnet_get_packets);

void  rmnet_set_powersave_format(void *port)
{
	if (!port)
		return;
	((struct rmnet_port *)port)->data_format |= RMNET_INGRESS_FORMAT_PS;
}
EXPORT_SYMBOL(rmnet_set_powersave_format);

void  rmnet_clear_powersave_format(void *port)
{
	if (!port)
		return;
	((struct rmnet_port *)port)->data_format &= ~RMNET_INGRESS_FORMAT_PS;
}
EXPORT_SYMBOL(rmnet_clear_powersave_format);
#endif

/* Startup/Shutdown */
+10 −0
Original line number Diff line number Diff line
@@ -24,6 +24,10 @@
#include "rmnet_vnd.h"
#include "rmnet_map.h"
#include "rmnet_handlers.h"
#ifdef CONFIG_QCOM_QMI_HELPERS
#include <soc/qcom/rmnet_qmi.h>
#include <soc/qcom/qmi_rmnet.h>
#endif

#define RMNET_IP_VERSION_4 0x40
#define RMNET_IP_VERSION_6 0x60
@@ -138,6 +142,12 @@ __rmnet_map_ingress_handler(struct sk_buff *skb,
			skb->ip_summed = CHECKSUM_UNNECESSARY;
	}

	if ((port->data_format & RMNET_INGRESS_FORMAT_PS) &&
	    !qmi_rmnet_work_get_active(port)) {
		/* register for powersave indications*/
		qmi_rmnet_work_restart(port);
	}

	skb_trim(skb, len);
	rmnet_deliver_skb(skb, port);
	return;
+3 −0
Original line number Diff line number Diff line
@@ -23,6 +23,9 @@
#define RMNET_INGRESS_FORMAT_DL_MARKER          BIT(30)
#define RMNET_INGRESS_FORMAT_RPS_STAMP          BIG(29)

/* Power save feature*/
#define RMNET_INGRESS_FORMAT_PS                 BIT(27)

/* Replace skb->dev to a virtual rmnet device and pass up the stack */
#define RMNET_EPMODE_VND (1)
/* Pass the frame directly to another device with dev_queue_xmit() */
Loading