Backport linux-atm api from 2.6.8.1 for brcm63xx
authorflorian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Mon, 8 Jan 2007 09:51:40 +0000 (09:51 +0000)
committerflorian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Mon, 8 Jan 2007 09:51:40 +0000 (09:51 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@6029 3c298f89-4303-0410-b956-a3cf2f4a3e73

target/linux/brcm63xx-2.6/patches/100-atm_hacks.patch [new file with mode: 0644]

diff --git a/target/linux/brcm63xx-2.6/patches/100-atm_hacks.patch b/target/linux/brcm63xx-2.6/patches/100-atm_hacks.patch
new file mode 100644 (file)
index 0000000..b0afadd
--- /dev/null
@@ -0,0 +1,238 @@
+diff -urN linux-2.6.19.1/include/linux/atm.h linux-2.6.19.1.new/include/linux/atm.h
+--- linux-2.6.19.1/include/linux/atm.h 2006-12-11 20:32:53.000000000 +0100
++++ linux-2.6.19.1.new/include/linux/atm.h     2007-01-07 18:38:50.000000000 +0100
+@@ -48,6 +48,9 @@
+ #define ATM_AAL2      2               /* AAL2 (VBR) */
+ #define ATM_AAL34     3               /* AAL3/4 (data) */
+ #define ATM_AAL5      5               /* AAL5 (data) */
++#if defined(CONFIG_MIPS_BCM963XX)
++#define ATM_BCM_AAL0    14              /* "raw" ATM cells */
++#endif
+ /*
+  * socket option name coding functions
+diff -urN linux-2.6.19.1/include/linux/atmbr2684.h linux-2.6.19.1.new/include/linux/atmbr2684.h
+--- linux-2.6.19.1/include/linux/atmbr2684.h   2006-12-11 20:32:53.000000000 +0100
++++ linux-2.6.19.1.new/include/linux/atmbr2684.h       2007-01-07 18:24:01.000000000 +0100
+@@ -78,6 +78,10 @@
+       __u8    vpn_id[7];
+       int     send_padding;   /* unsupported */
+       int     min_size;       /* we will pad smaller packets than this */
++#if defined(CONFIG_MIPS_BCM963XX)
++#define FILTER_PPPOE  1
++      int     proto_filter;   /* protocol filter flag, current only PPPoE */
++#endif
+ };
+ /*
+diff -urN linux-2.6.19.1/include/linux/atmdev.h linux-2.6.19.1.new/include/linux/atmdev.h
+--- linux-2.6.19.1/include/linux/atmdev.h      2006-12-11 20:32:53.000000000 +0100
++++ linux-2.6.19.1.new/include/linux/atmdev.h  2007-01-07 18:37:34.000000000 +0100
+@@ -29,6 +29,10 @@
+ #define ATM_DS3_PCR   (8000*12)
+                       /* DS3: 12 cells in a 125 usec time slot */
++#if defined(CONFIG_MIPS_BCM963XX)
++#define atm_sk(__sk) ((struct atm_vcc *)(__sk)->sk_protinfo)
++#define ATM_SD(s)      (atm_sk((s)->sk))
++#endif
+ #define __AAL_STAT_ITEMS \
+     __HANDLE_ITEM(tx);                        /* TX okay */ \
+@@ -111,6 +115,9 @@
+ #define ATM_BACKEND_RAW               0       
+ #define ATM_BACKEND_PPP               1       /* PPPoATM - RFC2364 */
+ #define ATM_BACKEND_BR2684    2       /* Bridged RFC1483/2684 */
++#if defined(CONFIG_MIPS_BCM963XX)
++#define ATM_BACKEND_RT2684      3       /* Routed RFC1483/2684 */
++#endif
+ /* for ATM_GETTYPE */
+ #define ATM_ITFTYP_LEN        8       /* maximum length of interface type name */
+@@ -274,6 +281,9 @@
+ enum {
++#if defined(CONFIG_MIPS_BCM963XX)
++      ATM_DF_CLOSE,           /* close device when last VCC is closed */
++#endif
+       ATM_DF_REMOVED,         /* device was removed from atm_devs list */
+ };
+@@ -285,8 +295,10 @@
+ #define ATM_ATMOPT_CLP        1       /* set CLP bit */
+ struct atm_vcc {
++#if !defined(CONFIG_MIPS_BCM963XX)
+       /* struct sock has to be the first member of atm_vcc */
+       struct sock     sk;
++#endif
+       unsigned long   flags;          /* VCC flags (ATM_VF_*) */
+       short           vpi;            /* VPI and VCI (types must be equal */
+                                       /* with sockaddr) */
+@@ -303,6 +315,9 @@
+       void            *dev_data;      /* per-device data */
+       void            *proto_data;    /* per-protocol data */
+       struct k_atm_aal_stats *stats;  /* pointer to AAL stats group */
++#if defined(CONFIG_MIP_BCM963XX)
++      struct sock     *sk;            /* socket backpointer */
++#endif
+       /* SVC part --- may move later ------------------------------------- */
+       short           itf;            /* interface number */
+       struct sockaddr_atmsvc local;
+@@ -332,7 +347,11 @@
+ struct atm_dev_addr {
+       struct sockaddr_atmsvc addr;    /* ATM address */
++#if defined(CONFIG_MIPS_BCM963XX)
++      struct atm_dev_addr *next;      /* next address */
++#else
+       struct list_head entry;         /* next address */
++#endif
+ };
+ enum atm_addr_type_t { ATM_ADDR_LOCAL, ATM_ADDR_LECS };
+@@ -346,8 +365,12 @@
+       void            *dev_data;      /* per-device data */
+       void            *phy_data;      /* private PHY date */
+       unsigned long   flags;          /* device flags (ATM_DF_*) */
++#if defined(CONFIG_MIPS_BCM963XX)
++      struct atm_dev_addr *local;     /* local ATM addresses */
++#else
+       struct list_head local;         /* local ATM addresses */
+       struct list_head lecs;          /* LECS ATM addresses learned via ILMI */
++#endif
+       unsigned char   esi[ESI_LEN];   /* ESI ("MAC" addr) */
+       struct atm_cirange ci_range;    /* VPI/VCI range */
+       struct k_atm_dev_stats stats;   /* statistics */
+@@ -359,7 +382,9 @@
+       struct proc_dir_entry *proc_entry; /* proc entry */
+       char *proc_name;                /* proc entry name */
+ #endif
++#if !defined(CONFIG_MIPS_BCM963XX)
+       struct class_device class_dev;  /* sysfs class device */
++#endif
+       struct list_head dev_list;      /* linkage */
+ };
+@@ -416,7 +441,13 @@
+     int number,unsigned long *flags); /* number == -1: pick first available */
+ struct atm_dev *atm_dev_lookup(int number);
+ void atm_dev_deregister(struct atm_dev *dev);
++#if defined(CONFIG_MIPS_BCM963XX)
++void shutdown_atm_dev(struct atm_dev *dev);
++#endif
+ void vcc_insert_socket(struct sock *sk);
++#if defined(CONFIG_MIPS_BCM963XX)
++void vcc_remove_socket(struct sock *sk);
++#endif
+ /*
+@@ -432,20 +463,33 @@
+ static inline void atm_force_charge(struct atm_vcc *vcc,int truesize)
+ {
++#if defined(CONFIG_MIPS_BCM963XX)
++      atomic_add(truesize, &vcc->sk->sk_rmem_alloc);
++#else
+       atomic_add(truesize, &sk_atm(vcc)->sk_rmem_alloc);
++#endif
+ }
+ static inline void atm_return(struct atm_vcc *vcc,int truesize)
+ {
++#if defined(CONFIG_MIPS_BCM963XX)
++      atomic_sub(truesize, &vcc->sk->sk_rmem_alloc);
++#else
+       atomic_sub(truesize, &sk_atm(vcc)->sk_rmem_alloc);
++#endif
+ }
+ static inline int atm_may_send(struct atm_vcc *vcc,unsigned int size)
+ {
++#if defined(CONFIG_MIPS_BCM963XX)
++      return (size + atomic_read(&vcc->sk->sk_wmem_alloc)) <
++              vcc->sk->sk_sndbuf;
++#else
+       return (size + atomic_read(&sk_atm(vcc)->sk_wmem_alloc)) <
+              sk_atm(vcc)->sk_sndbuf;
++#endif
+ }
+@@ -457,12 +501,20 @@
+ static inline void atm_dev_put(struct atm_dev *dev)
+ {
++#if defined(CONFIG_MIPS_BCM963XX)
++      atomic_dec(&dev->refcnt);
++      
++      if ((atomic_read(&dev->refcnt) == 1) &&
++           test_bit(ATM_DF_CLOSE,&dev->flags))
++              shutdown_atm_dev(dev);
++#else
+       if (atomic_dec_and_test(&dev->refcnt)) {
+               BUG_ON(!test_bit(ATM_DF_REMOVED, &dev->flags));
+               if (dev->ops->dev_close)
+                       dev->ops->dev_close(dev);
+               class_device_put(&dev->class_dev);
+       }
++#endif
+ }
+diff -urN linux-2.6.19.1/include/linux/atmrt2684.h linux-2.6.19.1.new/include/linux/atmrt2684.h
+--- linux-2.6.19.1/include/linux/atmrt2684.h   1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.19.1.new/include/linux/atmrt2684.h       2007-01-07 18:40:39.000000000 +0100
+@@ -0,0 +1,48 @@
++#ifndef _LINUX_ATMRT2684_H
++#define _LINUX_ATMRT2684_H
++
++#include <linux/atm.h>
++#include <linux/if.h>         /* For IFNAMSIZ */
++
++#define RT2684_ENCAPS_NULL    (0)     /* VC-mux */
++#define RT2684_ENCAPS_LLC     (1)
++#define RT2684_ENCAPS_AUTODETECT (2)  /* Unsuported */
++
++/*
++ * This is for the ATM_NEWBACKENDIF call - these are like socket families:
++ * the first element of the structure is the backend number and the rest
++ * is per-backend specific
++ */
++struct atm_newif_rt2684 {
++      atm_backend_t   backend_num;    /* ATM_BACKEND_RT2684 */
++      char            ifname[IFNAMSIZ];
++};
++
++/*
++ * This structure is used to specify a rt2684 interface - either by a
++ * positive integer (returned by ATM_NEWBACKENDIF) or the interfaces name
++ */
++#define RT2684_FIND_BYNOTHING (0)
++#define RT2684_FIND_BYNUM     (1)
++#define RT2684_FIND_BYIFNAME  (2)
++struct rt2684_if_spec {
++      int method;                     /* RT2684_FIND_* */
++      union {
++              char            ifname[IFNAMSIZ];
++              int             devnum;
++      } spec;
++};
++
++/*
++ * This is for the ATM_SETBACKEND call - these are like socket families:
++ * the first element of the structure is the backend number and the rest
++ * is per-backend specific
++ */
++struct atm_backend_rt2684 {
++      atm_backend_t   backend_num;    /* ATM_BACKEND_RT2684 */
++      struct rt2684_if_spec ifspec;
++      unsigned char   encaps;         /* RT2684_ENCAPS_* */
++};
++
++
++#endif /* _LINUX_ATMRT2684_H */