mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-03 14:34:27 -05:00 
			
		
		
		
	Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.6.41 Manually rebased: lantiq/patches-6.6/0028-NET-lantiq-various-etop-fixes.patch All other patches automatically rebased. Build system: x86/64 Build-tested: x86/64/AMD Cezanne, flogic/xiaomi_redmi-router-ax6000-ubootmod Run-tested: x86/64/AMD Cezanne, flogic/xiaomi_redmi-router-ax6000-ubootmod Signed-off-by: John Audia <therealgraysky@proton.me>
		
			
				
	
	
		
			138 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			138 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From: Subhra Banerjee <subhrax.banerjee@intel.com>
 | 
						|
Date: Fri, 31 Aug 2018 12:01:19 +0530
 | 
						|
Subject: [PATCH] UGW_SW-29163: ATM oam support
 | 
						|
 | 
						|
--- a/drivers/net/ppp/ppp_generic.c
 | 
						|
+++ b/drivers/net/ppp/ppp_generic.c
 | 
						|
@@ -2968,6 +2968,22 @@ char *ppp_dev_name(struct ppp_channel *c
 | 
						|
 	return name;
 | 
						|
 }
 | 
						|
 
 | 
						|
+/*
 | 
						|
+ * Return the PPP device interface pointer
 | 
						|
+ */
 | 
						|
+struct net_device *ppp_device(struct ppp_channel *chan)
 | 
						|
+{
 | 
						|
+	struct channel *pch = chan->ppp;
 | 
						|
+	struct net_device *dev = NULL;
 | 
						|
+
 | 
						|
+	if (pch) {
 | 
						|
+		read_lock_bh(&pch->upl);
 | 
						|
+		if (pch->ppp && pch->ppp->dev)
 | 
						|
+			dev = pch->ppp->dev;
 | 
						|
+		read_unlock_bh(&pch->upl);
 | 
						|
+	}
 | 
						|
+	return dev;
 | 
						|
+}
 | 
						|
 
 | 
						|
 /*
 | 
						|
  * Disconnect a channel from the generic layer.
 | 
						|
@@ -3614,6 +3630,7 @@ EXPORT_SYMBOL(ppp_unregister_channel);
 | 
						|
 EXPORT_SYMBOL(ppp_channel_index);
 | 
						|
 EXPORT_SYMBOL(ppp_unit_number);
 | 
						|
 EXPORT_SYMBOL(ppp_dev_name);
 | 
						|
+EXPORT_SYMBOL(ppp_device);
 | 
						|
 EXPORT_SYMBOL(ppp_input);
 | 
						|
 EXPORT_SYMBOL(ppp_input_error);
 | 
						|
 EXPORT_SYMBOL(ppp_output_wakeup);
 | 
						|
--- a/include/linux/ppp_channel.h
 | 
						|
+++ b/include/linux/ppp_channel.h
 | 
						|
@@ -76,6 +76,9 @@ extern int ppp_unit_number(struct ppp_ch
 | 
						|
 /* Get the device name associated with a channel, or NULL if none */
 | 
						|
 extern char *ppp_dev_name(struct ppp_channel *);
 | 
						|
 
 | 
						|
+/* Get the device pointer associated with a channel, or NULL if none */
 | 
						|
+extern struct net_device *ppp_device(struct ppp_channel *);
 | 
						|
+
 | 
						|
 /*
 | 
						|
  * SMP locking notes:
 | 
						|
  * The channel code must ensure that when it calls ppp_unregister_channel,
 | 
						|
--- a/net/atm/Kconfig
 | 
						|
+++ b/net/atm/Kconfig
 | 
						|
@@ -56,6 +56,12 @@ config ATM_MPOA
 | 
						|
 	  subnetwork boundaries. These shortcut connections bypass routers
 | 
						|
 	  enhancing overall network performance.
 | 
						|
 
 | 
						|
+config ATM_MPOA_INTEL_DSL_PHY_SUPPORT
 | 
						|
+	bool "Intel DSL Phy MPOA support"
 | 
						|
+	depends on ATM && INET && ATM_MPOA!=n
 | 
						|
+	help
 | 
						|
+	  Add support for Intel DSL Phy ATM MPOA
 | 
						|
+
 | 
						|
 config ATM_BR2684
 | 
						|
 	tristate "RFC1483/2684 Bridged protocols"
 | 
						|
 	depends on ATM && INET
 | 
						|
--- a/net/atm/br2684.c
 | 
						|
+++ b/net/atm/br2684.c
 | 
						|
@@ -598,6 +598,11 @@ static int br2684_regvcc(struct atm_vcc
 | 
						|
 	atmvcc->push = br2684_push;
 | 
						|
 	atmvcc->pop = br2684_pop;
 | 
						|
 	atmvcc->release_cb = br2684_release_cb;
 | 
						|
+#if IS_ENABLED(CONFIG_ATM_MPOA_INTEL_DSL_PHY_SUPPORT)
 | 
						|
+	if (atm_hook_mpoa_setup) /* IPoA or EoA w/o FCS */
 | 
						|
+		atm_hook_mpoa_setup(atmvcc, brdev->payload == p_routed ? 3 : 0,
 | 
						|
+			brvcc->encaps == BR2684_ENCAPS_LLC ? 1 : 0, net_dev);
 | 
						|
+#endif
 | 
						|
 	atmvcc->owner = THIS_MODULE;
 | 
						|
 
 | 
						|
 	/* initialize netdev carrier state */
 | 
						|
--- a/net/atm/common.c
 | 
						|
+++ b/net/atm/common.c
 | 
						|
@@ -137,6 +137,11 @@ static struct proto vcc_proto = {
 | 
						|
 	.release_cb = vcc_release_cb,
 | 
						|
 };
 | 
						|
 
 | 
						|
+#if IS_ENABLED(CONFIG_ATM_MPOA_INTEL_DSL_PHY_SUPPORT)
 | 
						|
+void (*atm_hook_mpoa_setup)(struct atm_vcc *, int, int, struct net_device *) = NULL;
 | 
						|
+EXPORT_SYMBOL(atm_hook_mpoa_setup);
 | 
						|
+#endif
 | 
						|
+
 | 
						|
 int vcc_create(struct net *net, struct socket *sock, int protocol, int family, int kern)
 | 
						|
 {
 | 
						|
 	struct sock *sk;
 | 
						|
--- a/net/atm/common.h
 | 
						|
+++ b/net/atm/common.h
 | 
						|
@@ -53,4 +53,6 @@ int svc_change_qos(struct atm_vcc *vcc,s
 | 
						|
 
 | 
						|
 void atm_dev_release_vccs(struct atm_dev *dev);
 | 
						|
 
 | 
						|
+extern void (*atm_hook_mpoa_setup)(struct atm_vcc *, int, int, struct net_device *);
 | 
						|
+
 | 
						|
 #endif
 | 
						|
--- a/net/atm/mpc.c
 | 
						|
+++ b/net/atm/mpc.c
 | 
						|
@@ -31,6 +31,7 @@
 | 
						|
 /* Modular too */
 | 
						|
 #include <linux/module.h>
 | 
						|
 
 | 
						|
+#include "common.h"
 | 
						|
 #include "lec.h"
 | 
						|
 #include "mpc.h"
 | 
						|
 #include "resources.h"
 | 
						|
@@ -645,6 +646,10 @@ static int atm_mpoa_vcc_attach(struct at
 | 
						|
 	vcc->proto_data = mpc->dev;
 | 
						|
 	vcc->push = mpc_push;
 | 
						|
 
 | 
						|
+#if IS_ENABLED(CONFIG_ATM_MPOA_INTEL_DSL_PHY_SUPPORT)
 | 
						|
+	if (atm_hook_mpoa_setup) /* IPoA, LLC */
 | 
						|
+		atm_hook_mpoa_setup(vcc, 3, 1, mpc->dev);
 | 
						|
+#endif
 | 
						|
 	return 0;
 | 
						|
 }
 | 
						|
 
 | 
						|
--- a/net/atm/pppoatm.c
 | 
						|
+++ b/net/atm/pppoatm.c
 | 
						|
@@ -422,6 +422,12 @@ static int pppoatm_assign_vcc(struct atm
 | 
						|
 	atmvcc->user_back = pvcc;
 | 
						|
 	atmvcc->push = pppoatm_push;
 | 
						|
 	atmvcc->pop = pppoatm_pop;
 | 
						|
+#if IS_ENABLED(CONFIG_ATM_MPOA_INTEL_DSL_PHY_SUPPORT)
 | 
						|
+	if (atm_hook_mpoa_setup) /* PPPoA */
 | 
						|
+		atm_hook_mpoa_setup(atmvcc, 2,
 | 
						|
+			pvcc->encaps == e_llc ? 1 : 0,
 | 
						|
+			ppp_device(&pvcc->chan));
 | 
						|
+#endif
 | 
						|
 	atmvcc->release_cb = pppoatm_release_cb;
 | 
						|
 	__module_get(THIS_MODULE);
 | 
						|
 	atmvcc->owner = THIS_MODULE;
 |