12 #include <linux/isdn.h>
13 #include <linux/poll.h>
14 #include <linux/ppp-comp.h>
15 #include <linux/slab.h>
16 #ifdef CONFIG_IPPP_FILTER
17 #include <linux/filter.h>
25 #define PPP_IPX 0x002b
29 static int isdn_ppp_fill_rq(
unsigned char *
buf,
int len,
int proto,
int slot);
30 static int isdn_ppp_closewait(
int slot);
33 static int isdn_ppp_if_get_unit(
char *namebuf);
47 unsigned char code,
unsigned char id,
51 static void isdn_ppp_ccp_reset_free_state(
struct ippp_struct *
is,
53 static void isdn_ppp_ccp_timer_callback(
unsigned long closure);
58 static void isdn_ppp_ccp_reset_ack_rcvd(
struct ippp_struct *
is,
63 #ifdef CONFIG_ISDN_MPP
66 static int isdn_ppp_mp_bundle_array_init(
void);
85 isdn_ppp_frame_log(
char *
info,
char *
data,
int len,
int maxlen,
int unit,
int slot)
95 for (i = 0, cnt = 0; cnt < maxlen; i++) {
96 for (j = 0; j < 16 && cnt < maxlen; j++, cnt++)
97 sprintf(buf + j * 3,
"%02x ", (
unsigned char)data[cnt]);
118 #ifdef CONFIG_ISDN_MPP
119 spin_lock(&lp->
netdev->pb->lock);
121 isdn_net_rm_from_bundle(lp);
122 #ifdef CONFIG_ISDN_MPP
123 if (lp->
netdev->pb->ref_ct == 1)
124 isdn_ppp_mp_cleanup(lp);
127 spin_unlock(&lp->
netdev->pb->lock);
171 net_dev = net_dev->
next;
190 printk(
KERN_WARNING "isdn_ppp_bind: Can't find a (free) connection to the ipppd daemon.\n");
195 unit = isdn_ppp_if_get_unit(lp->
netdev->dev->name);
208 #ifdef CONFIG_ISDN_MPP
209 retval = isdn_ppp_mp_init(lp,
NULL);
243 isdn_ppp_closewait(
int slot)
252 is = ippp_table[
slot];
264 isdn_ppp_get_slot(
void)
268 if (!ippp_table[i]->
state)
284 if (min < 0 || min >= ISDN_MAX_CHANNELS)
287 slot = isdn_ppp_get_slot();
294 slot, min, is->
state);
303 is->
reset = isdn_ppp_ccp_reset_alloc(is);
318 #ifdef CONFIG_ISDN_PPP_VJ
324 #ifdef CONFIG_IPPP_FILTER
325 is->pass_filter =
NULL;
326 is->active_filter =
NULL;
342 if (min < 0 || min >= ISDN_MAX_CHANNELS)
372 is->
first = is->
rq + NUM_RCV_BUFFS - 1;
375 #ifdef CONFIG_ISDN_PPP_VJ
380 #ifdef CONFIG_IPPP_FILTER
381 kfree(is->pass_filter);
382 is->pass_filter =
NULL;
383 kfree(is->active_filter);
384 is->active_filter =
NULL;
403 isdn_ppp_ccp_reset_free(is);
413 get_arg(
void __user *
b,
void *
val,
int len)
416 len =
sizeof(
void *);
426 set_arg(
void __user *b,
void *val,
int len)
429 len =
sizeof(
void *);
435 #ifdef CONFIG_IPPP_FILTER
454 return PTR_ERR(code);
491 #ifdef CONFIG_ISDN_MPP
494 if ((r = get_arg(argp, &val,
sizeof(val))))
496 printk(
KERN_DEBUG "iPPP-bundle: minor: %d, slave unit: %d, master unit: %d\n",
497 (
int) min, (
int) is->
unit, (
int) val);
498 return isdn_ppp_bundle(is, val);
504 if ((r = set_arg(argp, &is->
unit,
sizeof(is->
unit))))
510 if ((r = set_arg(argp, lp->
netdev->dev->name,
519 if ((r = get_arg(argp, &val,
sizeof(val))))
524 if ((r = set_arg(argp, &is->
pppcfg,
sizeof(is->
pppcfg))))
528 if ((r = get_arg(argp, &val,
sizeof(val)))) {
535 netif_wake_queue(lp->
netdev->dev);
545 if ((r = set_arg(argp, &pidle,
sizeof(
struct ppp_idle))))
550 if ((r = get_arg(argp, &val,
sizeof(val))))
559 if ((r = get_arg(argp, &val,
sizeof(val))))
563 #ifdef CONFIG_ISDN_PPP_VJ
569 #ifdef CONFIG_ISDN_PPP_VJ
582 if ((r = set_arg(argp, &is->
debug,
sizeof(is->
debug))))
586 if ((r = get_arg(argp, &val,
sizeof(val))))
592 unsigned long protos[8] = {0,};
595 j = ipc->
num / (
sizeof(
long) * 8);
596 i = ipc->
num % (
sizeof(
long) * 8);
598 protos[
j] |= (1
UL <<
i);
601 if ((r = set_arg(argp, protos, 8 *
sizeof(
long))))
608 return isdn_ppp_set_compressor(is, &data);
627 return set_arg(argp, &pci,
sizeof(
struct pppcallinfo));
629 #ifdef CONFIG_IPPP_FILTER
633 int len = get_filter(argp, &code);
636 kfree(is->pass_filter);
637 is->pass_filter =
code;
644 int len = get_filter(argp, &code);
647 kfree(is->active_filter);
648 is->active_filter =
code;
649 is->active_len = len;
671 iminor(file->
f_path.dentry->d_inode));
674 poll_wait(file, &is->
wq, wait);
695 spin_unlock_irqrestore(&is->
buflock, flags);
704 isdn_ppp_fill_rq(
unsigned char *
buf,
int len,
int proto,
int slot)
715 is = ippp_table[
slot];
728 nbuf[2] = proto >> 8;
729 nbuf[3] = proto & 0xff;
730 memcpy(nbuf + 4, buf, len);
742 bl->
buf = (
char *) nbuf;
746 spin_unlock_irqrestore(&is->
buflock, flags);
776 spin_unlock_irqrestore(&is->
buflock, flags);
784 spin_unlock_irqrestore(&is->
buflock, flags);
802 unsigned char protobuf[4];
845 skb_reserve(skb, hl);
851 if (is->
debug & 0x40) {
856 isdn_ppp_send_ccp(lp->
netdev, lp, skb);
874 #ifdef CONFIG_ISDN_MPP
875 if (isdn_ppp_mp_bundle_array_init() < 0)
882 for (j = 0; j <
i; j++)
883 kfree(ippp_table[j]);
889 ippp_table[
i]->
last = ippp_table[
i]->
rq;
893 ippp_table[
i]->
rq[
j].last = ippp_table[
i]->
rq +
894 (NUM_RCV_BUFFS + j - 1) % NUM_RCV_BUFFS;
895 ippp_table[
i]->
rq[
j].next = ippp_table[
i]->
rq + (j + 1) % NUM_RCV_BUFFS;
907 kfree(ippp_table[i]);
909 #ifdef CONFIG_ISDN_MPP
910 kfree(isdn_ppp_bundle_arr);
924 if (skb->
data[0] == 0xff) {
928 if (skb->
data[1] != 0x03)
945 static int isdn_ppp_strip_proto(
struct sk_buff *skb)
952 if (skb->
data[0] & 0x1) {
954 proto = skb->
data[0];
984 is = ippp_table[
slot];
986 if (is->
debug & 0x4) {
987 printk(
KERN_DEBUG "ippp_receive: is:%08lx lp:%08lx slot:%d unit:%d len:%d\n",
988 (
long)is, (
long)lp, lp->
ppp_slot, is->unit, (
int)skb->
len);
989 isdn_ppp_frame_log(
"receive", skb->
data, skb->
len, 32, is->unit, lp->ppp_slot);
992 if (isdn_ppp_skip_ac(is, skb) < 0) {
996 proto = isdn_ppp_strip_proto(skb);
1002 #ifdef CONFIG_ISDN_MPP
1004 skb = isdn_ppp_decompress(skb, is,
NULL, &proto);
1011 isdn_ppp_mp_receive(net_dev, lp, skb);
1016 isdn_ppp_push_higher(net_dev, lp, skb, proto);
1038 is = ippp_table[
slot];
1049 mis = ippp_table[
slot];
1051 if (is->
debug & 0x10) {
1056 skb = isdn_ppp_decompress(skb, is, mis, &proto);
1062 if (is->
debug & 0x20)
1067 if (is->
debug & 0x20)
1075 #ifdef CONFIG_ISDN_PPP_VJ
1077 if (is->
debug & 0x20)
1080 printk(
KERN_ERR "%s: net_dev->local->ppp_slot(%d) out of range\n",
1091 if (is->
debug & 0x20)
1096 skb = dev_alloc_skb(skb_old->
len + 128);
1104 skb_copy_from_linear_data(skb_old, skb->
data,
1107 printk(
KERN_ERR "%s: net_dev->local->ppp_slot(%d) out of range\n",
1124 isdn_ppp_receive_ccp(net_dev, lp, skb, proto);
1137 #ifdef CONFIG_IPPP_FILTER
1151 if (is->
debug & 0x2)
1156 if (!(is->active_filter
1158 if (is->
debug & 0x2)
1171 skb_reset_mac_header(skb);
1186 static unsigned char *isdn_ppp_skb_push(
struct sk_buff **skb_p,
int len)
1190 if (skb_headroom(skb) < len) {
1198 printk(
KERN_DEBUG "isdn_ppp_skb_push:under %d %d\n", skb_headroom(skb), len);
1219 unsigned int proto =
PPP_IP;
1223 mlp = netdev_priv(netdev);
1233 ipts = ippp_table[
slot];
1236 if (ipts->
debug & 0x1)
1250 printk(
KERN_ERR "isdn_ppp: skipped unsupported protocol: %#x.\n",
1256 lp = isdn_net_get_locked_lp(nd);
1271 ipt = ippp_table[
slot];
1282 #ifdef CONFIG_IPPP_FILTER
1295 if (ipt->pass_filter
1297 if (ipt->
debug & 0x4)
1302 if (!(ipt->active_filter
1304 if (ipt->
debug & 0x4)
1313 if (ipt->
debug & 0x4)
1315 if (ipts->
debug & 0x40)
1318 #ifdef CONFIG_ISDN_PPP_VJ
1339 skb_reserve(new_skb, hl);
1347 if (buf != skb->
data) {
1348 if (new_skb->
data != buf)
1349 printk(
KERN_ERR "isdn_ppp: FATAL error after slhc_compress!!\n");
1353 dev_kfree_skb(new_skb);
1363 skb->
data[0] = (skb->
data[0] & 0x0f) | 0x40;
1376 skb = isdn_ppp_compress(skb, &proto, ipt, ipts, 0);
1382 if (ipt->
debug & 0x24)
1385 #ifdef CONFIG_ISDN_MPP
1391 unsigned char *
data = isdn_ppp_skb_push(&skb, 3);
1396 data[1] = mp_seqno & 0xff;
1399 unsigned char *
data = isdn_ppp_skb_push(&skb, 5);
1403 data[1] = (mp_seqno >> 16) & 0xff;
1404 data[2] = (mp_seqno >> 8) & 0xff;
1405 data[3] = (mp_seqno >> 0) & 0xff;
1416 skb = isdn_ppp_compress(skb, &proto, ipt, ipts, 1);
1419 unsigned char *
data = isdn_ppp_skb_push(&skb, 1);
1422 data[0] = proto & 0xff;
1425 unsigned char *
data = isdn_ppp_skb_push(&skb, 2);
1428 data[0] = (proto >> 8) & 0xff;
1429 data[1] = proto & 0xff;
1432 unsigned char *
data = isdn_ppp_skb_push(&skb, 2);
1441 if (ipts->
debug & 0x40) {
1454 #ifdef CONFIG_IPPP_FILTER
1473 printk(
KERN_ERR "isdn_ppp_autodial_filter: unsupported protocol 0x%x.\n",
1492 drop |= is->pass_filter
1494 drop |= is->active_filter
1501 #ifdef CONFIG_ISDN_MPP
1508 #define MP_HEADER_LEN 5
1510 #define MP_LONGSEQ_MASK 0x00ffffff
1511 #define MP_SHORTSEQ_MASK 0x00000fff
1512 #define MP_LONGSEQ_MAX MP_LONGSEQ_MASK
1513 #define MP_SHORTSEQ_MAX MP_SHORTSEQ_MASK
1514 #define MP_LONGSEQ_MAXBIT ((MP_LONGSEQ_MASK + 1) >> 1)
1515 #define MP_SHORTSEQ_MAXBIT ((MP_SHORTSEQ_MASK + 1) >> 1)
1518 #define MP_LT(a, b) ((a - b) & MP_LONGSEQ_MAXBIT)
1519 #define MP_LE(a, b) !((b - a) & MP_LONGSEQ_MAXBIT)
1520 #define MP_GT(a, b) ((b - a) & MP_LONGSEQ_MAXBIT)
1521 #define MP_GE(a, b) !((a - b) & MP_LONGSEQ_MAXBIT)
1523 #define MP_SEQ(f) ((*(u32 *)(f->data + 1)))
1524 #define MP_FLAGS(f) (f->data[0])
1526 static int isdn_ppp_mp_bundle_array_init(
void)
1537 static ippp_bundle *isdn_ppp_mp_bundle_alloc(
void)
1541 if (isdn_ppp_bundle_arr[i].ref_ct <= 0)
1542 return (isdn_ppp_bundle_arr + i);
1559 lp->
netdev->pb->ref_ct--;
1563 if ((lp->
netdev->pb = isdn_ppp_mp_bundle_alloc()) ==
NULL)
1567 lp->
netdev->pb->frames = 0;
1570 lp->
netdev->pb->ref_ct++;
1576 static u32 isdn_ppp_mp_get_seq(
int short_seq,
1583 static void isdn_ppp_mp_print_recv_pkt(
int slot,
struct sk_buff *skb);
1593 u32 newseq, minseq, thisseq;
1594 unsigned long flags;
1606 spin_unlock_irqrestore(&mp->
lock, flags);
1609 is = ippp_table[
slot];
1613 if (is->
debug & 0x8)
1614 isdn_ppp_mp_print_recv_pkt(lp->
ppp_slot, skb);
1623 if (mp->
seq > MP_LONGSEQ_MAX && (newseq & MP_LONGSEQ_MAXBIT)) {
1627 }
else if (MP_LT(newseq, mp->
seq)) {
1629 isdn_ppp_mp_free_skb(mp, skb);
1630 spin_unlock_irqrestore(&mp->
lock, flags);
1636 for (lpq = net_dev->
queue;;) {
1643 if (MP_LT(lls, minseq))
1646 if ((lpq = lpq->
next) == net_dev->
queue)
1649 if (MP_LT(minseq, mp->
seq))
1655 if ((frag = mp->
frags) ==
NULL || MP_LT(newseq, MP_SEQ(frag))) {
1657 mp->
frags = frag = newfrag;
1662 MP_SEQ(frag) == mp->
seq ? frag :
NULL;
1686 while (start !=
NULL || newfrag !=
NULL) {
1688 thisseq = MP_SEQ(frag);
1692 if (newfrag !=
NULL && thisseq == newseq) {
1693 isdn_ppp_mp_free_skb(mp, newfrag);
1698 if (newfrag !=
NULL && (nextf ==
NULL ||
1699 MP_LT(newseq, MP_SEQ(nextf)))) {
1700 newfrag->
next = nextf;
1701 frag->
next = nextf = newfrag;
1705 if (start !=
NULL) {
1709 "BEGIN flag with no prior END", thisseq);
1712 start = isdn_ppp_mp_discard(mp, start, frag);
1715 }
else if (MP_LE(thisseq, minseq)) {
1721 if (mp->
frags == frag)
1723 isdn_ppp_mp_free_skb(mp, frag);
1734 minseq = mp->
seq = (thisseq + 1) & MP_LONGSEQ_MASK;
1736 isdn_ppp_mp_reassembly(net_dev, lp, start, nextf);
1753 if (nextf !=
NULL &&
1754 ((thisseq + 1) & MP_LONGSEQ_MASK) == MP_SEQ(nextf)) {
1759 if (MP_FLAGS(nextf) & MP_BEGIN_FRAG)
1764 " END flag with no following "
1771 if (nextf !=
NULL && frag !=
NULL &&
1772 MP_LT(thisseq, minseq)) {
1781 mp->
frags = isdn_ppp_mp_discard(mp, start, nextf);
1798 frag = mp->
frags->next;
1799 isdn_ppp_mp_free_skb(mp, mp->
frags);
1803 spin_unlock_irqrestore(&mp->
lock, flags);
1811 nextfrag = frag->
next;
1812 isdn_ppp_mp_free_skb(lp->
netdev->pb, frag);
1818 static u32 isdn_ppp_mp_get_seq(
int short_seq,
1836 if (!(seq & MP_SHORTSEQ_MAXBIT) &&
1837 (last_seq & MP_SHORTSEQ_MAXBIT) &&
1838 (
unsigned long)last_seq <= MP_LONGSEQ_MAX)
1839 seq |= (last_seq + MP_SHORTSEQ_MAX + 1) &
1840 (~MP_SHORTSEQ_MASK & MP_LONGSEQ_MASK);
1842 seq |= last_seq & (~MP_SHORTSEQ_MASK & MP_LONGSEQ_MASK);
1846 *(
u32 *)(skb->
data + 1) = seq;
1856 while (from != to) {
1858 isdn_ppp_mp_free_skb(mp, from);
1870 unsigned int tot_len;
1877 if (MP_FLAGS(from) == (MP_BEGIN_FRAG | MP_END_FRAG)) {
1880 "len %d\n", MP_SEQ(from), from->
len);
1888 for (tot_len = n = 0, frag = from; frag != to; frag = frag->
next, n++)
1889 tot_len += frag->
len - MP_HEADER_LEN;
1893 "to %d, len %d\n", MP_SEQ(from),
1894 (MP_SEQ(from) + n - 1) & MP_LONGSEQ_MASK, tot_len);
1895 if ((skb = dev_alloc_skb(tot_len)) ==
NULL) {
1897 "of size %d\n", tot_len);
1898 isdn_ppp_mp_discard(mp, from, to);
1902 while (from != to) {
1903 unsigned int len = from->
len - MP_HEADER_LEN;
1905 skb_copy_from_linear_data_offset(from, MP_HEADER_LEN,
1909 isdn_ppp_mp_free_skb(mp, from);
1913 proto = isdn_ppp_strip_proto(skb);
1914 isdn_ppp_push_higher(net_dev, lp, skb, proto);
1923 static void isdn_ppp_mp_print_recv_pkt(
int slot,
struct sk_buff *skb)
1926 slot, (
int) skb->
len,
1927 (
int) skb->
data[0], (
int) skb->
data[1], (
int) skb->
data[2],
1928 (
int) skb->
data[3], (
int) skb->
data[4], (
int) skb->
data[5]);
1938 unsigned long flags;
1960 isdn_net_add_to_bundle(p, nlp);
1969 rc = isdn_ppp_mp_init(nlp, p->pb);
1971 spin_unlock_irqrestore(&p->pb->lock, flags);
1982 isdn_ppp_dev_ioctl_stats(
int slot,
struct ifreq *ifr,
struct net_device *dev)
1995 t.p.ppp_ipackets = lp->stats.rx_packets;
1996 t.p.ppp_ibytes = lp->stats.rx_bytes;
1997 t.p.ppp_ierrors = lp->stats.rx_errors;
1998 t.p.ppp_opackets = lp->stats.tx_packets;
1999 t.p.ppp_obytes = lp->stats.tx_bytes;
2000 t.p.ppp_oerrors = lp->stats.tx_errors;
2001 #ifdef CONFIG_ISDN_PPP_VJ
2002 if (slot >= 0 && ippp_table[slot]->slcomp) {
2032 #define PPP_VERSION "2.3.7"
2040 error = isdn_ppp_dev_ioctl_stats(lp->
ppp_slot, ifr, dev);
2050 isdn_ppp_if_get_unit(
char *
name)
2059 if (
strncmp(
"ippp", name, 4) || len > 8)
2062 for (i = 0, deci = 1; i < len; i++, deci *= 10) {
2063 char a = name[len - i - 1];
2064 if (a >=
'0' && a <=
'9')
2065 unit += (a -
'0') * deci;
2069 if (!i || len - i != 4)
2079 #ifdef CONFIG_ISDN_MPP
2110 #ifdef CONFIG_ISDN_MPP
2153 static void isdn_ppp_ccp_kickup(
struct ippp_struct *is)
2193 static void isdn_ppp_ccp_xmit_reset(
struct ippp_struct *is,
int proto,
2194 unsigned char code,
unsigned char id,
2195 unsigned char *
data,
int len)
2204 hl = dev->drv[lp->
isdn_device]->interface->hl_hdrlen;
2208 "ippp: CCP cannot send reset - out of memory\n");
2211 skb_reserve(skb, hl);
2222 *p++ = (proto >> 8);
2223 *p++ = (proto & 0xff);
2228 *p++ = (cnt & 0xff);
2250 " structure - no mem\n");
2259 static void isdn_ppp_ccp_reset_free(
struct ippp_struct *is)
2265 for (
id = 0;
id < 256;
id++) {
2266 if (is->
reset->rs[
id]) {
2267 isdn_ppp_ccp_reset_free_state(is, (
unsigned char)
id);
2275 static void isdn_ppp_ccp_reset_free_state(
struct ippp_struct *is,
2280 if (is->
reset->rs[
id]) {
2295 static void isdn_ppp_ccp_timer_callback(
unsigned long closure)
2311 isdn_ppp_ccp_reset_free_state(rs->
is, rs->
id);
2333 if (is->
reset->rs[
id]) {
2346 rs->
timer.function = isdn_ppp_ccp_timer_callback;
2355 static void isdn_ppp_ccp_reset_trans(
struct ippp_struct *is,
2366 " specify reset id\n");
2376 " trans still in progress"
2377 " for id %d\n", rp->
id);
2380 " trans in wrong state %d for"
2381 " id %d\n", rs->
state, rp->
id);
2386 " %d to be started\n", rp->
id);
2387 rs = isdn_ppp_ccp_reset_alloc_state(is, rp->
id);
2390 " allocing ccp trans\n");
2400 isdn_ppp_ccp_xmit_reset(is,
PPP_CCP,
2423 " trans still in progress"
2424 " for id %d\n", rp->
id);
2427 " trans in wrong state %d for"
2428 " id %d\n", rs->
state, rp->
id);
2432 " %d to be started\n", is->
reset->lastid);
2433 rs = isdn_ppp_ccp_reset_alloc_state(is,
2437 " allocing ccp trans\n");
2458 static void isdn_ppp_ccp_reset_ack_rcvd(
struct ippp_struct *is,
2468 " for id %d but not expected\n",
id);
2471 "sync for id %d\n",
id);
2477 isdn_ppp_ccp_reset_free_state(is,
id);
2483 is->
reset->lastid++;
2531 memset(&rsparm, 0,
sizeof(rsparm));
2532 rsparm.data = rsdata;
2541 len = ipc->
decompress(stat, skb, skb_out, &rsparm);
2547 rsparm.valid ?
"with" :
"without");
2549 isdn_ppp_ccp_reset_trans(ri, &rsparm);
2554 isdn_ppp_ccp_kickup(ri);
2560 *proto = isdn_ppp_strip_proto(skb_out);
2569 ipc->
incomp(stat, skb, *proto);
2581 static struct sk_buff *isdn_ppp_compress(
struct sk_buff *skb_in,
int *proto,
2620 skb_out = alloc_skb(skb_in->
len + skb_in->
len / 2 + 32 +
2624 skb_reserve(skb_out, skb_headroom(skb_in));
2626 ret = (compressor->
compress)(stat, skb_in, skb_out, *proto);
2628 dev_kfree_skb(skb_out);
2632 dev_kfree_skb(skb_in);
2642 struct sk_buff *skb,
int proto)
2667 mis = ippp_table[
slot];
2671 switch (skb->
data[0]) {
2673 if (is->
debug & 0x10)
2682 if (is->
debug & 0x10)
2691 if (is->
debug & 0x10)
2706 len = (skb->
data[2] << 8) | skb->
data[3];
2712 isdn_ppp_ccp_reset_ack_rcvd(mis, skb->
data[1]);
2724 isdn_ppp_ccp_reset_ack_rcvd(is, skb->
data[1]);
2741 memset(&rsparm, 0,
sizeof(rsparm));
2742 rsparm.data = rsdata;
2745 len = (skb->
data[2] << 8) | skb->
data[3];
2771 rsparm.idval ? rsparm.id
2822 unsigned char *
data;
2824 if (!skb || skb->
len < 3)
2831 is = ippp_table[
slot];
2840 proto = ((
int)data[0]<<8) + data[1];
2854 mis = ippp_table[
slot];
2862 if (is->
debug & 0x10)
2871 if (is->
debug & 0x10)
2880 if (is->
debug & 0x10)
2894 if (is->
debug & 0x10)
2920 ipc->
next = ipc_head;
2923 ipc_head->
prev = ipc;
2934 ipc_head = ipc->
next;
2948 if (is->
debug & 0x10)
2958 " allow decompression.\n");
2963 if (ipc->
num == num) {
2964 stat = ipc->
alloc(data);
2966 ret = ipc->
init(stat, data, is->
unit, 0);