aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Bachem <m.bachem@gmx.de>2008-09-03 09:17:45 -0400
committerKarsten Keil <kkeil@suse.de>2009-01-09 16:44:25 -0500
commit1f28fa19d34c0d9186f274e61e4b3dcfc6428c5c (patch)
tree40da1b8d61dbc0d837f5b6732cbb82a261cbb277
parenta9b61830cd88a1d3d5e6d61adb737a3e20f7f0f5 (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.c19
-rw-r--r--drivers/isdn/mISDN/stack.c2
-rw-r--r--include/linux/mISDNhw.h1
-rw-r--r--include/linux/mISDNif.h1
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)
166EXPORT_SYMBOL(recv_Dchannel); 166EXPORT_SYMBOL(recv_Dchannel);
167 167
168void 168void
169recv_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}
185EXPORT_SYMBOL(recv_Echannel);
186
187void
169recv_Bchannel(struct bchannel *bch) 188recv_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,
184extern int dchannel_senddata(struct dchannel *, struct sk_buff *); 184extern int dchannel_senddata(struct dchannel *, struct sk_buff *);
185extern int bchannel_senddata(struct bchannel *, struct sk_buff *); 185extern int bchannel_senddata(struct bchannel *, struct sk_buff *);
186extern void recv_Dchannel(struct dchannel *); 186extern void recv_Dchannel(struct dchannel *);
187extern void recv_Echannel(struct dchannel *, struct dchannel *);
187extern void recv_Bchannel(struct bchannel *); 188extern void recv_Bchannel(struct bchannel *);
188extern void recv_Dchannel_skb(struct dchannel *, struct sk_buff *); 189extern void recv_Dchannel_skb(struct dchannel *, struct sk_buff *);
189extern void recv_Bchannel_skb(struct bchannel *, struct sk_buff *); 190extern 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