lkml.org 
[lkml]   [1997]   [Jan]   [15]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
FromKeith Owens <>
Subject2.1.21-patch_drivers_isdn-1
DateWed, 15 Jan 1997 18:24:58 +1100
Based on some patches against 2.1.16 by Michael Galbraith, reworked for
2.1.21.  No idea if the driver works, no hardware to test with but at
least it compiles!

diff -ur linux-2.1.21.orig/include/linux/isdn.h linux/include/linux/isdn.h
--- linux-2.1.21.orig/include/linux/isdn.h	Sun Sep  1 02:01:49 1996
+++ linux/include/linux/isdn.h	Wed Jan 15 14:24:08 1997
@@ -378,8 +378,8 @@
   struct sk_buff         *first_skb;   /* Ptr to skb that triggers dialing */
   struct sk_buff         *sav_skb;     /* Ptr to skb, rejected by LL-driver*/
                                        /* Ptr to orig. header_cache_bind   */
-  void                   (*org_hcb)(struct hh_cache **, struct device *,
-                                    unsigned short, __u32);
+  int                   (*org_hcb)(struct dst_entry *dst, struct dst_entry *neigh,
+                                    struct hh_cache *hh);
                                        /* Ptr to orig. header_cache_update */
   void                   (*org_hcu)(struct hh_cache *, struct device *,
                                     unsigned char *);
diff -ur linux-2.1.21.orig/drivers/isdn/isdn_audio.c linux/drivers/isdn/isdn_audio.c
--- linux-2.1.21.orig/drivers/isdn/isdn_audio.c	Fri Jun  7 23:02:40 1996
+++ linux/drivers/isdn/isdn_audio.c	Wed Jan 15 12:55:26 1997
@@ -503,7 +503,6 @@
                 return;
         }
         result = (int *)skb_put(skb, sizeof(int) * NCOEFF);
-        skb->free = 1;
         skb->users = 0;
         for (k = 0; k < NCOEFF; k++) {
                 sk = sk1 = sk2 = 0;
diff -ur linux-2.1.21.orig/drivers/isdn/isdn_common.c linux/drivers/isdn/isdn_common.c
--- linux-2.1.21.orig/drivers/isdn/isdn_common.c	Fri Dec 27 21:03:22 1996
+++ linux/drivers/isdn/isdn_common.c	Wed Jan 15 14:13:30 1997
@@ -117,9 +117,9 @@
  *
  */
 
-#include <asm/uaccess.h>
 #include <linux/config.h>
 #include <linux/module.h>
+#include <asm/uaccess.h>
 #include <linux/version.h>
 #ifndef __GENKSYMS__      /* Don't want genksyms report unneeded structs */
 #include <linux/isdn.h>
@@ -179,7 +179,6 @@
 
 static __inline void isdn_trash_skb(struct sk_buff *skb, int rw)
 {
-        skb->free = 1;
         kfree_skb(skb, rw);
 }
 
@@ -308,7 +307,6 @@
 	if (isdn_net_rcv_skb(i, skb))
 		return;
 	/* No network-device found, deliver to tty or raw-channel */
-        skb->free = 1;
 	if (skb->len) {
                 if ((midx = dev->m_idx[i])<0) {
                         /* if midx is invalid, drop packet */
@@ -756,9 +754,6 @@
 		        ret = 0;
                 if (!(skb = skb_peek(&dev->drv[di]->rpqueue[channel])))
                         break;
-                if (skb->lock)
-                        break;
-                skb->lock = 1;
                 if (skb->users) {
                         /* users is the count of DLE's in
                          * this buff when in voice mode.
@@ -823,7 +818,6 @@
                          */
 			if (fp)
 				*(fp - 1) = 0xff;
-                        skb->lock = 0;
                         skb = skb_dequeue(&dev->drv[di]->rpqueue[channel]);
                         isdn_trash_skb(skb, FREE_READ);
 		} else {
@@ -832,7 +826,6 @@
                          * but we pull off the data we got until now.
                          */
 			skb_pull(skb,count_pull);
-                        skb->lock = 0;
                 }
 		dev->drv[di]->rcvcount[channel] -= count_put;
 	}
@@ -1836,7 +1829,6 @@
                         return 0;
 
                 skb_reserve(skb, dev->drv[drvidx]->interface->hl_hdrlen);
-                skb->free = 1;
 
                 if (user) {
 					    if(copy_from_user(skb_put(skb, len), buf, len)) {
diff -ur linux-2.1.21.orig/drivers/isdn/isdn_net.c linux/drivers/isdn/isdn_net.c
--- linux-2.1.21.orig/drivers/isdn/isdn_net.c	Wed Oct 30 23:26:48 1996
+++ linux/drivers/isdn/isdn_net.c	Wed Jan 15 12:55:27 1997
@@ -119,8 +119,7 @@
 #endif
 
 /* In ksyms.c, but why not in some .h ??? */
-extern int arp_find(unsigned char *, u32, struct device *, u32,
-                    struct sk_buff *);
+extern int arp_find(unsigned char *haddr, struct sk_buff *skb);
 
 /* Prototypes */
 
@@ -755,7 +754,6 @@
 		return 0;
 	}
         if (ret < 0) {
-                skb->free = 1;
                 dev_kfree_skb(skb, FREE_WRITE);
                 lp->stats.tx_errors++;
                 clear_bit(0, (void *)&(ndev->tbusy));
@@ -1249,14 +1247,14 @@
 /* We don't need to send arp, because we have point-to-point connections. */
 
 static int
-isdn_net_rebuild_header(void *buff, struct device *dev, unsigned long dst,
-                        struct sk_buff *skb)
+isdn_net_rebuild_header(struct sk_buff *skb)
 {
-	isdn_net_local *lp = dev->priv;
+	struct device *dev = skb->dev;
+	isdn_net_local *lp = skb->dev->priv;
         int ret = 0;
 
         if (lp->p_encap == ISDN_NET_ENCAP_ETHER) {
-                struct ethhdr *eth = (struct ethhdr *)buff;
+                struct ethhdr *eth = (struct ethhdr *)skb->data;
                 
                 /*
                  *      Only ARP/IP is currently supported
@@ -1273,7 +1271,7 @@
                  *      Try to get ARP to resolve the header.
                  */
 #ifdef CONFIG_INET       
-                ret = arp_find(eth->h_dest, dst, dev, dev->pa_addr, skb)? 1 : 0;
+                ret = arp_find(eth->h_dest, skb) ? 1 : 0;
 #endif  
         }
 	return ret;
@@ -1299,13 +1297,13 @@
 	}
 
         ether_setup(ndev);
-        lp->org_hcb               = ndev->header_cache_bind;
+        lp->org_hcb               = ndev->hard_header_cache;
         lp->org_hcu               = ndev->header_cache_update;
 
 	/* Setup the generic properties */
 
         ndev->hard_header         = NULL;
-        ndev->header_cache_bind   = NULL;
+        ndev->hard_header_cache   = NULL;
         ndev->header_cache_update = NULL;
         ndev->mtu                 = 1500;
         ndev->flags               = IFF_NOARP;
@@ -2080,17 +2078,17 @@
 		if (cfg->p_encap != p->local.p_encap) {
                         if (cfg->p_encap == ISDN_NET_ENCAP_RAWIP) {
                                 p->dev.hard_header         = NULL;
-                                p->dev.header_cache_bind   = NULL;
+                                p->dev.hard_header_cache   = NULL;
                                 p->dev.header_cache_update = NULL;
                                 p->dev.flags               = IFF_NOARP;
                         } else {
                                 p->dev.hard_header = isdn_net_header;
                                 if (cfg->p_encap == ISDN_NET_ENCAP_ETHER) {
-                                        p->dev.header_cache_bind   = p->local.org_hcb;
+                                        p->dev.hard_header_cache   = p->local.org_hcb;
                                         p->dev.header_cache_update = p->local.org_hcu;
                                         p->dev.flags = IFF_BROADCAST | IFF_MULTICAST;
                                 } else {
-                                        p->dev.header_cache_bind   = NULL;
+                                        p->dev.hard_header_cache   = NULL;
                                         p->dev.header_cache_update = NULL;
                                         p->dev.flags               = IFF_NOARP;
                                 }
diff -ur linux-2.1.21.orig/drivers/isdn/isdn_ppp.c linux/drivers/isdn/isdn_ppp.c
--- linux-2.1.21.orig/drivers/isdn/isdn_ppp.c	Wed Oct 30 23:26:48 1996
+++ linux/drivers/isdn/isdn_ppp.c	Wed Jan 15 14:28:04 1997
@@ -649,7 +649,6 @@
 				printk(KERN_WARNING "isdn_ppp_write: out of memory!\n");
 				return count;
 			}
-			skb->free = 1;
 			copy_from_user(skb_put(skb, count), buf, count);
 			if(isdn_writebuf_skb_stub(lp->isdn_device,lp->isdn_channel,skb) != count) {
 				if(lp->sav_skb) {
@@ -713,7 +712,7 @@
 	is = ippp_table[lp->ppp_slot];
 
 	if(is->debug & 0x4)
-		printk(KERN_DEBUG "recv skb, len: %ld\n",skb->len);
+		printk(KERN_DEBUG "recv skb, len: %d\n",skb->len);
 
 	if(net_dev->local.master) {
 		printk(KERN_WARNING "isdn_ppp_receice: net_dev != master\n");
@@ -723,8 +722,7 @@
 	if(skb->data[0] == 0xff && skb->data[1] == 0x03)
 		skb_pull(skb,2);
 	else if (is->pppcfg & SC_REJ_COMP_AC) {
-		skb->free = 1;
-		dev_kfree_skb(skb,0 /* FREE_READ */ );
+		dev_kfree_skb(skb, FREE_WRITE );
 		return;		/* discard it silently */
 	}
 
@@ -818,8 +816,7 @@
 				if (!q) {
 					net_dev->ib.modify = 0;
 					printk(KERN_WARNING "ippp/MPPP: Bad! Can't alloc sq node!\n");
-					skb->free = 1;
-					dev_kfree_skb(skb, 0 /* FREE_READ */ );
+					dev_kfree_skb(skb, FREE_WRITE );
 					return;		/* discard */
 				}
 				q->skb = skb;
@@ -893,7 +890,7 @@
 	}
 
 	if(is->debug & 0x10)
-		printk(KERN_DEBUG "push, skb %ld %04x\n",skb->len,proto);
+		printk(KERN_DEBUG "push, skb %d %04x\n",skb->len,proto);
 
 	switch (proto) {
 	case PPP_IPX: /* untested */
@@ -910,8 +907,7 @@
 		if(slhc_remember(ippp_table[net_dev->local.ppp_slot]->slcomp, skb->data, skb->len) <= 0) {
 			printk(KERN_WARNING "isdn_ppp: received illegal VJC_UNCOMP frame!\n");
 			net_dev->local.stats.rx_dropped++;
-			skb->free = 1;
-			dev_kfree_skb(skb,0 /* FREE_READ */ );
+			dev_kfree_skb(skb, FREE_WRITE );
 			return;
 		}
 #endif
@@ -931,12 +927,10 @@
 			int pkt_len;
 			skb = dev_alloc_skb(skb_old->len + 40);
 
-			skb_old->free = 1;
-
 			if (!skb) {
 				printk(KERN_WARNING "%s: Memory squeeze, dropping packet.\n", dev->name);
 				net_dev->local.stats.rx_dropped++;
-				dev_kfree_skb(skb_old,0 /* FREE_READ */ );
+				dev_kfree_skb(skb_old, FREE_WRITE );
 				return;
 			}
 			skb->dev = dev;
@@ -945,10 +939,9 @@
 			skb->mac.raw = skb->data;
 			pkt_len = slhc_uncompress(ippp_table[net_dev->local.ppp_slot]->slcomp,
 						  skb->data, skb_old->len);
-			dev_kfree_skb(skb_old,0 /* FREE_READ */ );
+			dev_kfree_skb(skb_old, FREE_WRITE );
 			if(pkt_len < 0) {
-				skb->free = 1;
-				dev_kfree_skb(skb, 0 /* FREE_READ */ );
+				dev_kfree_skb(skb, FREE_WRITE );
 				lp->stats.rx_dropped++;
 				return;
 			}
@@ -958,15 +951,13 @@
 #else
 		printk(KERN_INFO "isdn: Ooopsa .. VJ-Compression support not compiled into isdn driver.\n");
 		lp->stats.rx_dropped++;
-		skb->free = 1;
-		dev_kfree_skb(skb,0 /* FREE_READ */ );
+		dev_kfree_skb(skb, FREE_WRITE );
 		return;
 #endif
 		break;
 	default:
 		isdn_ppp_fill_rq(skb->data, skb->len,proto, lp->ppp_slot);	/* push data to pppd device */
-		skb->free = 1;
-		dev_kfree_skb(skb,0 /* FREE_READ */ );
+		dev_kfree_skb(skb, FREE_WRITE );
 		return;
 	}
 
@@ -1043,7 +1034,7 @@
 	 */
 
 	if(ipt->debug & 0x4)
-		printk(KERN_DEBUG  "xmit skb, len %ld\n",skb->len);
+		printk(KERN_DEBUG  "xmit skb, len %d\n",skb->len);
 
 #ifdef CONFIG_ISDN_PPP_VJ
 	if (ipts->pppcfg & SC_COMP_TCP) {	/* ipts here? probably yes .. but this check again */
@@ -1055,7 +1046,6 @@
 			int pktlen;
 
 			new_skb->dev = skb->dev;
-			new_skb->free = 1;
 			skb_put(new_skb,skb->len);
 			buf = skb->data;
 
@@ -1069,7 +1059,7 @@
 				skb = new_skb;
 			}
 			else {
-				dev_kfree_skb(new_skb,0 /* FREE_WRITE */ );
+				dev_kfree_skb(new_skb, FREE_WRITE );
 			}
 
 			skb_trim(skb,pktlen);
@@ -1086,7 +1076,7 @@
 #endif
 
         if(ipt->debug & 0x24)
- 		printk(KERN_DEBUG  "xmit2 skb, len %ld, proto %04x\n",skb->len,proto);
+ 		printk(KERN_DEBUG  "xmit2 skb, len %d, proto %04x\n",skb->len,proto);
 
 #ifdef CONFIG_ISDN_MPP
 	if (ipt->mpppcfg & SC_MP_PROT) {
@@ -1137,8 +1127,7 @@
 	while(q) {
 		struct sqqueue *qn = q->next;
 		if(q->skb) {
-			q->skb->free = 1;
-			dev_kfree_skb(q->skb,0 /* FREE_READ */ );
+			dev_kfree_skb(q->skb, FREE_WRITE );
 		}
 		kfree(q);
 		q = qn;
@@ -1151,8 +1140,7 @@
 	struct mpqueue *ql, *q = p->mp_last;
 	while (q) {
 		ql = q->next;
-		q->skb->free = 1;
- 		dev_kfree_skb(q->skb,0 /* FREE_READ */ );
+ 		dev_kfree_skb(q->skb, FREE_WRITE );
 		kfree(q);
 		q = ql;
 	}
@@ -1321,8 +1309,7 @@
 	if (!(*skb)) {
 		while (q) {
 			struct mpqueue *ql = q->next;
-			q->skb->free = 1;
-			dev_kfree_skb(q->skb,0 /* FREE_READ */ );
+			dev_kfree_skb(q->skb, FREE_WRITE );
 			kfree(q);
 			q = ql;
 		}
@@ -1334,8 +1321,7 @@
 		struct mpqueue *ql = q->next;
 		memcpy((*skb)->data + cnt, q->skb->data, q->skb->len);
 		cnt += q->skb->len;
-		q->skb->free = 1;
-		dev_kfree_skb(q->skb,0 /* FREE_READ */ );
+		dev_kfree_skb(q->skb, FREE_WRITE );
 		kfree(q);
 		q = ql;
 	}
@@ -1368,8 +1354,7 @@
 					q->next->last = NULL;
 				while (q) {
 					ql = q->last;
-					q->skb->free = 1;
-					dev_kfree_skb(q->skb,0 /* FREE_READ */ );
+					dev_kfree_skb(q->skb, FREE_WRITE );
 					kfree(q);
 #ifdef CONFIG_ISDN_PPP_VJ
 					toss = 1;
diff -ur linux-2.1.21.orig/drivers/isdn/isdn_tty.c linux/drivers/isdn/isdn_tty.c
--- linux-2.1.21.orig/drivers/isdn/isdn_tty.c	Sat Nov 30 19:48:34 1996
+++ linux/drivers/isdn/isdn_tty.c	Wed Jan 15 12:55:27 1997
@@ -184,7 +184,6 @@
                                         if (info->emu.mdmreg[12] & 128)
                                                 tty->flip.flag_buf_ptr[len - 1] = 0xff;
 					queue_task_irq_off(&tty->flip.tqueue, &tq_timer);
-                                        skb->free = 1;
                                         kfree_skb(skb, FREE_READ);
 					return 1;
 				}
@@ -261,12 +260,10 @@
         cli();
         if (skb_queue_len(&info->xmit_queue))
                 while ((skb = skb_dequeue(&info->xmit_queue))) {
-                        skb->free = 1;
                         kfree_skb(skb, FREE_WRITE);
                 }
         if (skb_queue_len(&info->dtmf_queue))
                 while ((skb = skb_dequeue(&info->dtmf_queue))) {
-                        skb->free = 1;
                         kfree_skb(skb, FREE_WRITE);
                 }
         restore_flags(flags);
@@ -489,7 +486,6 @@
 #ifdef CONFIG_ISDN_AUDIO
         }
 #endif
-        skb->free = 1;
         if (info->emu.mdmreg[13] & 2)
                 /* Add T.70 simplified header */
                 memcpy(skb_push(skb, 4), "\1\0\1\0", 4);
diff -ur linux-2.1.21.orig/drivers/isdn/pcbit/capi.c linux/drivers/isdn/pcbit/capi.c
--- linux-2.1.21.orig/drivers/isdn/pcbit/capi.c	Sun Jun 30 03:36:22 1996
+++ linux/drivers/isdn/pcbit/capi.c	Wed Jan 15 12:55:27 1997
@@ -147,8 +147,6 @@
 		return -1;
 	}
 
-        (*skb)->free = 1;
-
 
         *((ushort*) skb_put(*skb, 2) ) = chan->callref;  
         *(skb_put(*skb, 1)) = 0x01;  /* ACCEPT_CALL */
@@ -170,8 +168,6 @@
 		return -1;
 	}
 
-        (*skb)->free = 1;
-
         *((ushort*) skb_put(*skb, 2) ) = chan->callref;  
 
 #ifdef DEBUG
@@ -200,8 +196,6 @@
 		return -1;
 	}
 
-        (*skb)->free = 1;
-
         *((ushort*) skb_put(*skb, 2) ) = chan->callref;  
 
         return 2;
@@ -222,8 +216,6 @@
 		return -1;
 	}
 
-        (*skb)->free = 1;
-  
         *((ushort*) skb_put(*skb, 2) ) = chan->callref;  
 
         /* Layer2 protocol */
@@ -285,8 +277,6 @@
 		return -1;
 	}
 
-        (*skb)->free = 1;
-
         *((ushort*) skb_put(*skb, 2) ) = chan->callref;  
 
         
@@ -338,8 +328,6 @@
 		return -1;
 	}
 
-        (*skb)->free = 1;
-
         *((ushort*) skb_put(*skb, 2) ) = chan->callref;  
 
         *(skb_put(*skb, 1)) = chan->layer2link;
@@ -357,8 +345,6 @@
 		return -1;
 	}
 
-        (*skb)->free = 1;
-
         *((ushort*) skb_put(*skb, 2) ) = callref;  
 
         *(skb_put(*skb, 1)) = 2;                  /* Cause.Length = 2; */
@@ -381,8 +367,6 @@
 		printk(KERN_WARNING "capi_disc_resp: alloc_skb failed\n");
 		return -1;
 	}
-
-        (*skb)->free = 1;
 
         *((ushort*) skb_put(*skb, 2)) = chan->callref;  
 
diff -ur linux-2.1.21.orig/drivers/isdn/pcbit/drv.c linux/drivers/isdn/pcbit/drv.c
--- linux-2.1.21.orig/drivers/isdn/pcbit/drv.c	Mon Nov 18 20:31:31 1996
+++ linux/drivers/isdn/pcbit/drv.c	Wed Jan 15 12:55:27 1997
@@ -751,8 +751,6 @@
 #endif
 	}
 
-	skb->free = 1;
-
 	kfree_skb(skb, FREE_READ);
 
 }
diff -ur linux-2.1.21.orig/drivers/isdn/pcbit/layer2.c linux/drivers/isdn/pcbit/layer2.c
--- linux-2.1.21.orig/drivers/isdn/pcbit/layer2.c	Sun Jun 30 03:36:22 1996
+++ linux/drivers/isdn/pcbit/layer2.c	Wed Jan 15 12:55:27 1997
@@ -120,11 +120,8 @@
         frame->copied = 0;        
         frame->hdr_len = hdr_len;
 
-        if (skb) {
+        if (skb)
                 frame->dt_len = skb->len - hdr_len;
-		if (frame->dt_len == 0)
-                        skb->lock++;
-        }
         else
                 frame->dt_len = 0;
 
@@ -388,10 +385,8 @@
                         return;
 #else
 			/* discard previous queued frame */
-			if (dev->read_frame->skb) {
-				dev->read_frame->skb->free = 1;
+			if (dev->read_frame->skb)
 				kfree_skb(dev->read_frame->skb, FREE_READ);
-			}
 			kfree(dev->read_frame);
 			dev->read_frame = NULL;
 #endif
@@ -683,10 +678,7 @@
         if (dev->read_frame)
 	{
                 if (dev->read_frame->skb)
-		{
-			dev->read_frame->skb->free = 1; 
                         kfree_skb(dev->read_frame->skb, FREE_READ);
-		}
                 kfree(dev->read_frame);
                 dev->read_frame = NULL;
         }
diff -ur linux-2.1.21.orig/drivers/isdn/pcbit/module.c linux/drivers/isdn/pcbit/module.c
--- linux-2.1.21.orig/drivers/isdn/pcbit/module.c	Fri Dec 27 21:03:22 1996
+++ linux/drivers/isdn/pcbit/module.c	Wed Jan 15 12:58:42 1997
@@ -22,8 +22,8 @@
 #include <linux/isdnif.h>
 #include "pcbit.h"
 
-int mem[MAX_PCBIT_CARDS] = {0, };
-int irq[MAX_PCBIT_CARDS] = {0, };
+static int mem[MAX_PCBIT_CARDS] = {0, };
+static int irq[MAX_PCBIT_CARDS] = {0, };
 
 int num_boards;
 struct pcbit_dev * dev_pcbit[MAX_PCBIT_CARDS] = {0, 0, 0, 0};
diff -ur linux-2.1.21.orig/drivers/isdn/teles/mod.c linux/drivers/isdn/teles/mod.c
--- linux-2.1.21.orig/drivers/isdn/teles/mod.c	Fri Dec 27 21:03:22 1996
+++ linux/drivers/isdn/teles/mod.c	Wed Jan 15 12:58:42 1997
@@ -20,7 +20,7 @@
 	unsigned int    protocol;
 } io_type;
 
-io_type         io[] =
+static io_type         io[] =
 {
 	{0, 0, 0, 0},
 	{0, 0, 0, 0},


\
 
 \ /
  Last update: 2005-03-22 12:38    [W:0.198 / U:0.060 seconds]
©2003-2008 Jasper Spaans