Loading arch/arm64/configs/vendor/sm8150-perf_defconfig +1 −0 Original line number Diff line number Diff line Loading @@ -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 Loading arch/arm64/configs/vendor/sm8150_defconfig +1 −0 Original line number Diff line number Diff line Loading @@ -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 Loading drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c +45 −2 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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) Loading Loading @@ -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 */ Loading drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c +10 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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; Loading drivers/net/ethernet/qualcomm/rmnet/rmnet_private.h +3 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
arch/arm64/configs/vendor/sm8150-perf_defconfig +1 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
arch/arm64/configs/vendor/sm8150_defconfig +1 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c +45 −2 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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) Loading Loading @@ -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 */ Loading
drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c +10 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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; Loading
drivers/net/ethernet/qualcomm/rmnet/rmnet_private.h +3 −0 Original line number Diff line number Diff line Loading @@ -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