diff options
author | Martin Bachem <m.bachem@gmx.de> | 2008-09-03 09:17:45 -0400 |
---|---|---|
committer | Karsten Keil <kkeil@suse.de> | 2009-01-09 16:44:25 -0500 |
commit | 1f28fa19d34c0d9186f274e61e4b3dcfc6428c5c (patch) | |
tree | 40da1b8d61dbc0d837f5b6732cbb82a261cbb277 | |
parent | a9b61830cd88a1d3d5e6d61adb737a3e20f7f0f5 (diff) |
mISDN: Add E-Channel logging features
New prim PH_DATA_E_IND.
- all E-ch frames are indicated by recv_Echannel(), which pushes E-Channel
frames into dch's rqueue
- if dchannel is opened with channel nr 0, no E-Channel logging
is requested
- if dchannel is opened with channel nr 1, E-Channel logging
is requested. if layer1 does not support that, -EINVAL
in return is appropriate
Signed-off-by: Martin Bachem <m.bachem@gmx.de>
Signed-off-by: Karsten Keil <kkeil@suse.de>
-rw-r--r-- | drivers/isdn/mISDN/hwchannel.c | 19 | ||||
-rw-r--r-- | drivers/isdn/mISDN/stack.c | 2 | ||||
-rw-r--r-- | include/linux/mISDNhw.h | 1 | ||||
-rw-r--r-- | include/linux/mISDNif.h | 1 |
4 files changed, 22 insertions, 1 deletions
diff --git a/drivers/isdn/mISDN/hwchannel.c b/drivers/isdn/mISDN/hwchannel.c index 535ceacc05b9..ab1168a110ae 100644 --- a/drivers/isdn/mISDN/hwchannel.c +++ b/drivers/isdn/mISDN/hwchannel.c | |||
@@ -166,6 +166,25 @@ recv_Dchannel(struct dchannel *dch) | |||
166 | EXPORT_SYMBOL(recv_Dchannel); | 166 | EXPORT_SYMBOL(recv_Dchannel); |
167 | 167 | ||
168 | void | 168 | void |
169 | recv_Echannel(struct dchannel *ech, struct dchannel *dch) | ||
170 | { | ||
171 | struct mISDNhead *hh; | ||
172 | |||
173 | if (ech->rx_skb->len < 2) { /* at least 2 for sapi / tei */ | ||
174 | dev_kfree_skb(ech->rx_skb); | ||
175 | ech->rx_skb = NULL; | ||
176 | return; | ||
177 | } | ||
178 | hh = mISDN_HEAD_P(ech->rx_skb); | ||
179 | hh->prim = PH_DATA_E_IND; | ||
180 | hh->id = get_sapi_tei(ech->rx_skb->data); | ||
181 | skb_queue_tail(&dch->rqueue, ech->rx_skb); | ||
182 | ech->rx_skb = NULL; | ||
183 | schedule_event(dch, FLG_RECVQUEUE); | ||
184 | } | ||
185 | EXPORT_SYMBOL(recv_Echannel); | ||
186 | |||
187 | void | ||
169 | recv_Bchannel(struct bchannel *bch) | 188 | recv_Bchannel(struct bchannel *bch) |
170 | { | 189 | { |
171 | struct mISDNhead *hh; | 190 | struct mISDNhead *hh; |
diff --git a/drivers/isdn/mISDN/stack.c b/drivers/isdn/mISDN/stack.c index 9b9fab47cb2b..8cff570bb8df 100644 --- a/drivers/isdn/mISDN/stack.c +++ b/drivers/isdn/mISDN/stack.c | |||
@@ -453,7 +453,7 @@ connect_layer1(struct mISDNdevice *dev, struct mISDNchannel *ch, | |||
453 | ch->peer = &dev->D.st->own; | 453 | ch->peer = &dev->D.st->own; |
454 | ch->st = dev->D.st; | 454 | ch->st = dev->D.st; |
455 | rq.protocol = protocol; | 455 | rq.protocol = protocol; |
456 | rq.adr.channel = 0; | 456 | rq.adr.channel = adr->channel; |
457 | err = dev->D.ctrl(&dev->D, OPEN_CHANNEL, &rq); | 457 | err = dev->D.ctrl(&dev->D, OPEN_CHANNEL, &rq); |
458 | printk(KERN_DEBUG "%s: ret 1 %d\n", __func__, err); | 458 | printk(KERN_DEBUG "%s: ret 1 %d\n", __func__, err); |
459 | if (err) | 459 | if (err) |
diff --git a/include/linux/mISDNhw.h b/include/linux/mISDNhw.h index 9384b92dfc65..97ffdc1d3442 100644 --- a/include/linux/mISDNhw.h +++ b/include/linux/mISDNhw.h | |||
@@ -184,6 +184,7 @@ extern void queue_ch_frame(struct mISDNchannel *, u_int, | |||
184 | extern int dchannel_senddata(struct dchannel *, struct sk_buff *); | 184 | extern int dchannel_senddata(struct dchannel *, struct sk_buff *); |
185 | extern int bchannel_senddata(struct bchannel *, struct sk_buff *); | 185 | extern int bchannel_senddata(struct bchannel *, struct sk_buff *); |
186 | extern void recv_Dchannel(struct dchannel *); | 186 | extern void recv_Dchannel(struct dchannel *); |
187 | extern void recv_Echannel(struct dchannel *, struct dchannel *); | ||
187 | extern void recv_Bchannel(struct bchannel *); | 188 | extern void recv_Bchannel(struct bchannel *); |
188 | extern void recv_Dchannel_skb(struct dchannel *, struct sk_buff *); | 189 | extern void recv_Dchannel_skb(struct dchannel *, struct sk_buff *); |
189 | extern void recv_Bchannel_skb(struct bchannel *, struct sk_buff *); | 190 | extern void recv_Bchannel_skb(struct bchannel *, struct sk_buff *); |
diff --git a/include/linux/mISDNif.h b/include/linux/mISDNif.h index a59febb6143a..f75d596c5316 100644 --- a/include/linux/mISDNif.h +++ b/include/linux/mISDNif.h | |||
@@ -80,6 +80,7 @@ | |||
80 | #define PH_DEACTIVATE_IND 0x0202 | 80 | #define PH_DEACTIVATE_IND 0x0202 |
81 | #define PH_DEACTIVATE_CNF 0x4202 | 81 | #define PH_DEACTIVATE_CNF 0x4202 |
82 | #define PH_DATA_IND 0x2002 | 82 | #define PH_DATA_IND 0x2002 |
83 | #define PH_DATA_E_IND 0x3002 | ||
83 | #define MPH_ACTIVATE_IND 0x0502 | 84 | #define MPH_ACTIVATE_IND 0x0502 |
84 | #define MPH_DEACTIVATE_IND 0x0602 | 85 | #define MPH_DEACTIVATE_IND 0x0602 |
85 | #define MPH_INFORMATION_IND 0x0702 | 86 | #define MPH_INFORMATION_IND 0x0702 |