Messages in this thread Patch in this message |  | | From | Keith Owens <> | Subject | 2.1.21-patch_drivers_isdn-1 | Date | Wed, 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},
|  |