ISDN4BSD (HPS version) is going into ports
Andreas Longwitz
longwitz at incore.de
Mon Jan 14 15:07:18 UTC 2013
Hans Petter Selasky wrote:
> Can you try to add a printf in "src/sys/i4b/driver/i4b_isppp.c":
>
> static void
> i4bisppp_start(struct ifnet *ifp)
> {
> struct i4bisppp_softc *sc = ifp->if_softc;
>
> printf("ifp=%p sc=%p\n", sc, ifp);
>
> is the "sc" NULL ?
No, I get ifp=0xc0c1f380 sc=0xc5532800 for every try for an outgoing
message.
I had to modify my i4b_filter.h hack for eliminating the last byte of
every incoming D-channel message (not every incoming frame). Now
D-channel works for outgoing and incoming calls (SETUP length > 32 byte)
and also for long FACILITY messages of my provider. The patch is against
2.0.6:
--- i4b_filter.h.orig 2009-01-09 20:07:38.000000000 +0100
+++ i4b_filter.h 2013-01-14 15:29:56.000000000 +0100
@@ -158,6 +158,12 @@
(f->buf_len) -= (io_len);
(f->Z_chip) -= (io_len);
+ /* Hack for <AVM Fritz!Card version 2 PCI> */
+ if((FIFO_NO(f) == d1r) && (sc->sc_d1r_fifo_strip_last_byte == 1)) {
+ (f->buf_ptr) -= 1;
+ (f->buf_len) += 1;
+ }
+
return;
}
--- i4b_ihfc2.h.orig 2011-05-23 23:42:32.000000000 +0200
+++ i4b_ihfc2.h 2013-01-13 23:13:56.000000000 +0100
@@ -2583,7 +2583,7 @@
struct usb_callout sc_pollout_timr; /* T50 ms */
struct usb_callout sc_pollout_timr_wait; /* T125 us */
- u_int8_t sc_buffer[1024];
+ u_int8_t sc_buffer[1024] __aligned(4);
struct sc_fifo * sc_fifo_select_last; /* used by
* FIFO_SELECT(,)
@@ -2600,6 +2600,8 @@
u_int16_t sc_f0_counter_offset;
u_int32_t sc_f0_counter_last;
+
+ u_int8_t sc_d1r_fifo_strip_last_byte;
};
--- i4b_avm_pci.h.orig 2012-11-26 22:37:23.000000000 +0100
+++ i4b_avm_pci.h 2013-01-14 12:27:31.000000000 +0100
IHFC_MSG("ista_d=0x%02x\n", ista_d);
+ sc->sc_d1r_fifo_strip_last_byte = 0;
if(ista_d & 0x80 /* RME */)
{
/* read RBCL (ISAC) */
@@ -347,6 +348,7 @@
/* read RSTA (ISAC) */
avm_pci_chip_read(sc, REG_isacsx_rstad, &temp, 1);
sc->sc_fifo[d1r].F_chip = temp;
+ sc->sc_d1r_fifo_strip_last_byte = 1;
}
/* RME or RPF - D channel receive */
For an incoming call I now see correct data in B-channel.
avm_pci_b_status_read: len=32:
0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
avm_pci_b_status_read: len=32:
0xf3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3
... 12 repeats of last frame ...
avm_pci_b_status_read: len=18: 0xff03c02101b0000e0506693e5e370304c023
avm_pci_b_status_read: len=18: 0xff03c02101b1000e0506693e5e370304c023
avm_pci_b_status_read: len=18: 0xff03c02101b2000e0506693e5e370304c023
avm_pci_b_status_read: len=18: 0xff03c02101b3000e0506693e5e370304c023
...
The frames of length 18 are exactly the frames I see on the remote side
by isdndecode. But my local isdndecode does not see these B-channel
messages, I don't know why.
---
Andreas Longwitz
More information about the freebsd-isdn
mailing list