ipq40xx: add Intel/Lantiq ATM hacks
authorMartin Schiller <ms.3headeddevs@gmail.com>
Wed, 21 Aug 2019 06:33:43 +0000 (08:33 +0200)
committerDaniel Golle <daniel@makrotopia.org>
Mon, 16 Jan 2023 23:41:41 +0000 (23:41 +0000)
Similar to the lantiq platform, these are required for DSL support.

Signed-off-by: Martin Schiller <ms.3headeddevs@gmail.com>
[switch to kernel 5.10 and 5.15]
Signed-off-by: Jan Hoffmann <jan@3e8.eu>
[update patches based on UGW 8.5.2.10, remove 5.10 support]
Signed-off-by: Andre Heider <a.heider@gmail.com>
target/linux/ipq40xx/patches-5.15/998-lantiq-atm-hacks.patch [new file with mode: 0644]
target/linux/ipq40xx/patches-5.15/999-atm-mpoa-intel-dsl-phy-support.patch [new file with mode: 0644]

diff --git a/target/linux/ipq40xx/patches-5.15/998-lantiq-atm-hacks.patch b/target/linux/ipq40xx/patches-5.15/998-lantiq-atm-hacks.patch
new file mode 100644 (file)
index 0000000..c15a4b3
--- /dev/null
@@ -0,0 +1,43 @@
+From: John Crispin <blogic@openwrt.org>
+Date: Fri, 3 Aug 2012 10:27:25 +0200
+Subject: [PATCH 04/36] MIPS: lantiq: add atm hack
+
+Signed-off-by: John Crispin <blogic@openwrt.org>
+--- a/include/uapi/linux/atm.h
++++ b/include/uapi/linux/atm.h
+@@ -131,8 +131,14 @@
+ #define ATM_ABR               4
+ #define ATM_ANYCLASS  5               /* compatible with everything */
++#define ATM_VBR_NRT     ATM_VBR
++#define ATM_VBR_RT      6
++#define ATM_UBR_PLUS    7
++#define ATM_GFR         8
++
+ #define ATM_MAX_PCR   -1              /* maximum available PCR */
++
+ struct atm_trafprm {
+       unsigned char   traffic_class;  /* traffic class (ATM_UBR, ...) */
+       int             max_pcr;        /* maximum PCR in cells per second */
+@@ -155,6 +161,9 @@ struct atm_trafprm {
+       unsigned int adtf      :10;     /* ACR Decrease Time Factor (10-bit) */
+       unsigned int cdf       :3;      /* Cutoff Decrease Factor (3-bit) */
+         unsigned int spare     :9;      /* spare bits */ 
++      int             scr;            /* sustained rate in cells per second */
++      int             mbs;            /* maximum burst size (MBS) in cells */
++      int             cdv;            /* Cell delay variation */
+ };
+ struct atm_qos {
+--- a/net/atm/proc.c
++++ b/net/atm/proc.c
+@@ -141,7 +141,7 @@ static void *vcc_seq_next(struct seq_fil
+ static void pvc_info(struct seq_file *seq, struct atm_vcc *vcc)
+ {
+       static const char *const class_name[] = {
+-              "off", "UBR", "CBR", "VBR", "ABR"};
++              "off","UBR","CBR","NTR-VBR","ABR","ANY","RT-VBR","UBR+","GFR"};
+       static const char *const aal_name[] = {
+               "---",  "1",    "2",    "3/4",  /*  0- 3 */
+               "???",  "5",    "???",  "???",  /*  4- 7 */
diff --git a/target/linux/ipq40xx/patches-5.15/999-atm-mpoa-intel-dsl-phy-support.patch b/target/linux/ipq40xx/patches-5.15/999-atm-mpoa-intel-dsl-phy-support.patch
new file mode 100644 (file)
index 0000000..b774fc3
--- /dev/null
@@ -0,0 +1,137 @@
+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
+@@ -2952,6 +2952,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.
+@@ -3598,6 +3614,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
+@@ -74,6 +74,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
+@@ -596,6 +596,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;