Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
eae32582
Commit
eae32582
authored
Jul 31, 2002
by
Kai Germaschewski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ISDN: Begin to make driver/channel mapping private to isdn_common.c
parent
0342d35c
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
258 additions
and
293 deletions
+258
-293
drivers/isdn/i4l/isdn_audio.c
drivers/isdn/i4l/isdn_audio.c
+4
-4
drivers/isdn/i4l/isdn_common.c
drivers/isdn/i4l/isdn_common.c
+120
-47
drivers/isdn/i4l/isdn_common.h
drivers/isdn/i4l/isdn_common.h
+10
-0
drivers/isdn/i4l/isdn_net.c
drivers/isdn/i4l/isdn_net.c
+39
-75
drivers/isdn/i4l/isdn_ppp.c
drivers/isdn/i4l/isdn_ppp.c
+5
-5
drivers/isdn/i4l/isdn_tty.c
drivers/isdn/i4l/isdn_tty.c
+68
-129
drivers/isdn/i4l/isdn_ttyfax.c
drivers/isdn/i4l/isdn_ttyfax.c
+10
-27
include/linux/isdn.h
include/linux/isdn.h
+2
-6
No files found.
drivers/isdn/i4l/isdn_audio.c
View file @
eae32582
...
@@ -564,8 +564,8 @@ isdn_audio_eval_dtmf(modem_info * info)
...
@@ -564,8 +564,8 @@ isdn_audio_eval_dtmf(modem_info * info)
ISDN_AUDIO_SKB_LOCK
(
skb
)
=
0
;
ISDN_AUDIO_SKB_LOCK
(
skb
)
=
0
;
save_flags
(
flags
);
save_flags
(
flags
);
cli
();
cli
();
di
=
i
nfo
->
isdn_driver
;
di
=
i
sdn_slot_driver
(
info
->
isdn_slot
)
;
ch
=
i
nfo
->
isdn_channel
;
ch
=
i
sdn_slot_channel
(
info
->
isdn_slot
)
;
__skb_queue_tail
(
&
dev
->
drv
[
di
]
->
rpqueue
[
ch
],
skb
);
__skb_queue_tail
(
&
dev
->
drv
[
di
]
->
rpqueue
[
ch
],
skb
);
dev
->
drv
[
di
]
->
rcvcount
[
ch
]
+=
2
;
dev
->
drv
[
di
]
->
rcvcount
[
ch
]
+=
2
;
restore_flags
(
flags
);
restore_flags
(
flags
);
...
@@ -685,8 +685,8 @@ isdn_audio_put_dle_code(modem_info * info, u_char code)
...
@@ -685,8 +685,8 @@ isdn_audio_put_dle_code(modem_info * info, u_char code)
ISDN_AUDIO_SKB_LOCK
(
skb
)
=
0
;
ISDN_AUDIO_SKB_LOCK
(
skb
)
=
0
;
save_flags
(
flags
);
save_flags
(
flags
);
cli
();
cli
();
di
=
i
nfo
->
isdn_driver
;
di
=
i
sdn_slot_driver
(
info
->
isdn_slot
)
;
ch
=
i
nfo
->
isdn_channel
;
ch
=
i
sdn_slot_channel
(
info
->
isdn_slot
)
;
__skb_queue_tail
(
&
dev
->
drv
[
di
]
->
rpqueue
[
ch
],
skb
);
__skb_queue_tail
(
&
dev
->
drv
[
di
]
->
rpqueue
[
ch
],
skb
);
dev
->
drv
[
di
]
->
rcvcount
[
ch
]
+=
2
;
dev
->
drv
[
di
]
->
rcvcount
[
ch
]
+=
2
;
restore_flags
(
flags
);
restore_flags
(
flags
);
...
...
drivers/isdn/i4l/isdn_common.c
View file @
eae32582
...
@@ -44,6 +44,9 @@ MODULE_LICENSE("GPL");
...
@@ -44,6 +44,9 @@ MODULE_LICENSE("GPL");
isdn_dev
*
dev
;
isdn_dev
*
dev
;
static
int
drvmap
[
ISDN_MAX_CHANNELS
];
/* Map slot -> driver-index */
static
int
chanmap
[
ISDN_MAX_CHANNELS
];
/* Map slot -> channel-index */
static
char
*
isdn_revision
=
"$Revision: 1.114.6.16 $"
;
static
char
*
isdn_revision
=
"$Revision: 1.114.6.16 $"
;
extern
char
*
isdn_net_revision
;
extern
char
*
isdn_net_revision
;
...
@@ -230,7 +233,7 @@ isdn_dc2minor(int di, int ch)
...
@@ -230,7 +233,7 @@ isdn_dc2minor(int di, int ch)
{
{
int
i
;
int
i
;
for
(
i
=
0
;
i
<
ISDN_MAX_CHANNELS
;
i
++
)
for
(
i
=
0
;
i
<
ISDN_MAX_CHANNELS
;
i
++
)
if
(
dev
->
chanmap
[
i
]
==
ch
&&
dev
->
drvmap
[
i
]
==
di
)
if
(
chanmap
[
i
]
==
ch
&&
drvmap
[
i
]
==
di
)
return
i
;
return
i
;
return
-
1
;
return
-
1
;
}
}
...
@@ -458,8 +461,8 @@ isdn_status_callback(isdn_ctrl * c)
...
@@ -458,8 +461,8 @@ isdn_status_callback(isdn_ctrl * c)
case
ISDN_STAT_RUN
:
case
ISDN_STAT_RUN
:
dev
->
drv
[
di
]
->
flags
|=
DRV_FLAG_RUNNING
;
dev
->
drv
[
di
]
->
flags
|=
DRV_FLAG_RUNNING
;
for
(
i
=
0
;
i
<
ISDN_MAX_CHANNELS
;
i
++
)
for
(
i
=
0
;
i
<
ISDN_MAX_CHANNELS
;
i
++
)
if
(
d
ev
->
d
rvmap
[
i
]
==
di
)
if
(
drvmap
[
i
]
==
di
)
isdn_all_eaz
(
di
,
dev
->
chanmap
[
i
]);
isdn_all_eaz
(
di
,
chanmap
[
i
]);
set_global_features
();
set_global_features
();
break
;
break
;
case
ISDN_STAT_STOP
:
case
ISDN_STAT_STOP
:
...
@@ -506,14 +509,10 @@ isdn_status_callback(isdn_ctrl * c)
...
@@ -506,14 +509,10 @@ isdn_status_callback(isdn_ctrl * c)
case
1
:
case
1
:
/* Schedule connection-setup */
/* Schedule connection-setup */
isdn_net_dial
();
isdn_net_dial
();
cmd
.
driver
=
di
;
cmd
.
arg
=
c
->
arg
;
cmd
.
command
=
ISDN_CMD_ACCEPTD
;
for
(
p
=
dev
->
netdev
;
p
;
p
=
p
->
next
)
for
(
p
=
dev
->
netdev
;
p
;
p
=
p
->
next
)
if
(
p
->
local
->
isdn_channel
==
cmd
.
arg
)
if
(
p
->
local
->
isdn_slot
==
isdn_dc2minor
(
di
,
cmd
.
arg
))
{
{
strcpy
(
cmd
.
parm
.
setup
.
eazmsn
,
p
->
local
->
msn
);
strcpy
(
cmd
.
parm
.
setup
.
eazmsn
,
p
->
local
->
msn
);
isdn_
command
(
&
cmd
);
isdn_
slot_command
(
p
->
local
->
isdn_slot
,
ISDN_CMD_ACCEPTD
,
&
cmd
);
retval
=
1
;
retval
=
1
;
break
;
break
;
}
}
...
@@ -679,8 +678,8 @@ isdn_status_callback(isdn_ctrl * c)
...
@@ -679,8 +678,8 @@ isdn_status_callback(isdn_ctrl * c)
save_flags
(
flags
);
save_flags
(
flags
);
cli
();
cli
();
for
(
i
=
0
;
i
<
ISDN_MAX_CHANNELS
;
i
++
)
for
(
i
=
0
;
i
<
ISDN_MAX_CHANNELS
;
i
++
)
if
((
d
ev
->
d
rvmap
[
i
]
==
di
)
&&
if
((
drvmap
[
i
]
==
di
)
&&
(
dev
->
chanmap
[
i
]
==
c
->
arg
))
{
(
chanmap
[
i
]
==
c
->
arg
))
{
if
(
c
->
parm
.
num
[
0
])
if
(
c
->
parm
.
num
[
0
])
dev
->
usage
[
i
]
&=
~
ISDN_USAGE_DISABLED
;
dev
->
usage
[
i
]
&=
~
ISDN_USAGE_DISABLED
;
else
else
...
@@ -707,9 +706,9 @@ isdn_status_callback(isdn_ctrl * c)
...
@@ -707,9 +706,9 @@ isdn_status_callback(isdn_ctrl * c)
cli
();
cli
();
isdn_tty_stat_callback
(
i
,
c
);
isdn_tty_stat_callback
(
i
,
c
);
for
(
i
=
0
;
i
<
ISDN_MAX_CHANNELS
;
i
++
)
for
(
i
=
0
;
i
<
ISDN_MAX_CHANNELS
;
i
++
)
if
(
d
ev
->
d
rvmap
[
i
]
==
di
)
{
if
(
drvmap
[
i
]
==
di
)
{
d
ev
->
d
rvmap
[
i
]
=
-
1
;
drvmap
[
i
]
=
-
1
;
dev
->
chanmap
[
i
]
=
-
1
;
chanmap
[
i
]
=
-
1
;
dev
->
usage
[
i
]
&=
~
ISDN_USAGE_DISABLED
;
dev
->
usage
[
i
]
&=
~
ISDN_USAGE_DISABLED
;
isdn_unregister_devfs
(
i
);
isdn_unregister_devfs
(
i
);
}
}
...
@@ -884,13 +883,13 @@ isdn_readbchan(int di, int channel, u_char * buf, u_char * fp, int len, wait_que
...
@@ -884,13 +883,13 @@ isdn_readbchan(int di, int channel, u_char * buf, u_char * fp, int len, wait_que
static
__inline
int
static
__inline
int
isdn_minor2drv
(
int
minor
)
isdn_minor2drv
(
int
minor
)
{
{
return
(
dev
->
drvmap
[
minor
])
;
return
drvmap
[
minor
]
;
}
}
static
__inline
int
static
__inline
int
isdn_minor2chan
(
int
minor
)
isdn_minor2chan
(
int
minor
)
{
{
return
(
dev
->
chanmap
[
minor
])
;
return
chanmap
[
minor
]
;
}
}
static
char
*
static
char
*
...
@@ -903,19 +902,19 @@ isdn_statstr(void)
...
@@ -903,19 +902,19 @@ isdn_statstr(void)
sprintf
(
istatbuf
,
"idmap:
\t
"
);
sprintf
(
istatbuf
,
"idmap:
\t
"
);
p
=
istatbuf
+
strlen
(
istatbuf
);
p
=
istatbuf
+
strlen
(
istatbuf
);
for
(
i
=
0
;
i
<
ISDN_MAX_CHANNELS
;
i
++
)
{
for
(
i
=
0
;
i
<
ISDN_MAX_CHANNELS
;
i
++
)
{
sprintf
(
p
,
"%s "
,
(
d
ev
->
drvmap
[
i
]
<
0
)
?
"-"
:
dev
->
drvid
[
dev
->
drvmap
[
i
]]);
sprintf
(
p
,
"%s "
,
(
d
rvmap
[
i
]
<
0
)
?
"-"
:
dev
->
drvid
[
drvmap
[
i
]]);
p
=
istatbuf
+
strlen
(
istatbuf
);
p
=
istatbuf
+
strlen
(
istatbuf
);
}
}
sprintf
(
p
,
"
\n
chmap:
\t
"
);
sprintf
(
p
,
"
\n
chmap:
\t
"
);
p
=
istatbuf
+
strlen
(
istatbuf
);
p
=
istatbuf
+
strlen
(
istatbuf
);
for
(
i
=
0
;
i
<
ISDN_MAX_CHANNELS
;
i
++
)
{
for
(
i
=
0
;
i
<
ISDN_MAX_CHANNELS
;
i
++
)
{
sprintf
(
p
,
"%d "
,
dev
->
chanmap
[
i
]);
sprintf
(
p
,
"%d "
,
chanmap
[
i
]);
p
=
istatbuf
+
strlen
(
istatbuf
);
p
=
istatbuf
+
strlen
(
istatbuf
);
}
}
sprintf
(
p
,
"
\n
drmap:
\t
"
);
sprintf
(
p
,
"
\n
drmap:
\t
"
);
p
=
istatbuf
+
strlen
(
istatbuf
);
p
=
istatbuf
+
strlen
(
istatbuf
);
for
(
i
=
0
;
i
<
ISDN_MAX_CHANNELS
;
i
++
)
{
for
(
i
=
0
;
i
<
ISDN_MAX_CHANNELS
;
i
++
)
{
sprintf
(
p
,
"%d "
,
d
ev
->
d
rvmap
[
i
]);
sprintf
(
p
,
"%d "
,
drvmap
[
i
]);
p
=
istatbuf
+
strlen
(
istatbuf
);
p
=
istatbuf
+
strlen
(
istatbuf
);
}
}
sprintf
(
p
,
"
\n
usage:
\t
"
);
sprintf
(
p
,
"
\n
usage:
\t
"
);
...
@@ -1761,10 +1760,10 @@ isdn_get_free_channel(int usage, int l2_proto, int l3_proto, int pre_dev
...
@@ -1761,10 +1760,10 @@ isdn_get_free_channel(int usage, int l2_proto, int l3_proto, int pre_dev
*/
*/
for
(
i
=
0
;
i
<
ISDN_MAX_CHANNELS
;
i
++
)
for
(
i
=
0
;
i
<
ISDN_MAX_CHANNELS
;
i
++
)
if
(
USG_NONE
(
dev
->
usage
[
i
])
&&
if
(
USG_NONE
(
dev
->
usage
[
i
])
&&
(
d
ev
->
d
rvmap
[
i
]
!=
-
1
))
{
(
drvmap
[
i
]
!=
-
1
))
{
int
d
=
d
ev
->
d
rvmap
[
i
];
int
d
=
drvmap
[
i
];
if
((
dev
->
usage
[
i
]
&
ISDN_USAGE_EXCLUSIVE
)
&&
if
((
dev
->
usage
[
i
]
&
ISDN_USAGE_EXCLUSIVE
)
&&
((
pre_dev
!=
d
)
||
(
pre_chan
!=
dev
->
chanmap
[
i
])))
((
pre_dev
!=
d
)
||
(
pre_chan
!=
chanmap
[
i
])))
continue
;
continue
;
if
(
!
strcmp
(
isdn_map_eaz2msn
(
msn
,
d
),
"-"
))
if
(
!
strcmp
(
isdn_map_eaz2msn
(
msn
,
d
),
"-"
))
continue
;
continue
;
...
@@ -1781,7 +1780,7 @@ isdn_get_free_channel(int usage, int l2_proto, int l3_proto, int pre_dev
...
@@ -1781,7 +1780,7 @@ isdn_get_free_channel(int usage, int l2_proto, int l3_proto, int pre_dev
restore_flags
(
flags
);
restore_flags
(
flags
);
return
i
;
return
i
;
}
else
{
}
else
{
if
((
pre_dev
==
d
)
&&
(
pre_chan
==
dev
->
chanmap
[
i
]))
{
if
((
pre_dev
==
d
)
&&
(
pre_chan
==
chanmap
[
i
]))
{
dev
->
usage
[
i
]
&=
ISDN_USAGE_EXCLUSIVE
;
dev
->
usage
[
i
]
&=
ISDN_USAGE_EXCLUSIVE
;
dev
->
usage
[
i
]
|=
usage
;
dev
->
usage
[
i
]
|=
usage
;
isdn_info_update
();
isdn_info_update
();
...
@@ -1802,28 +1801,33 @@ isdn_get_free_channel(int usage, int l2_proto, int l3_proto, int pre_dev
...
@@ -1802,28 +1801,33 @@ isdn_get_free_channel(int usage, int l2_proto, int l3_proto, int pre_dev
void
void
isdn_free_channel
(
int
di
,
int
ch
,
int
usage
)
isdn_free_channel
(
int
di
,
int
ch
,
int
usage
)
{
{
int
i
;
int
slot
;
ulong
flags
;
slot
=
isdn_dc2minor
(
di
,
ch
);
isdn_slot_free
(
slot
,
usage
);
}
void
isdn_slot_free
(
int
slot
,
int
usage
)
{
unsigned
long
flags
;
save_flags
(
flags
);
save_flags
(
flags
);
cli
();
cli
();
for
(
i
=
0
;
i
<
ISDN_MAX_CHANNELS
;
i
++
)
if
(
!
usage
||
(
dev
->
usage
[
slot
]
&
ISDN_USAGE_MASK
)
==
usage
)
{
if
(((
!
usage
)
||
((
dev
->
usage
[
i
]
&
ISDN_USAGE_MASK
)
==
usage
))
&&
dev
->
usage
[
slot
]
&=
(
ISDN_USAGE_NONE
|
ISDN_USAGE_EXCLUSIVE
);
(
dev
->
drvmap
[
i
]
==
di
)
&&
strcpy
(
dev
->
num
[
slot
],
"???"
);
(
dev
->
chanmap
[
i
]
==
ch
))
{
dev
->
ibytes
[
slot
]
=
0
;
dev
->
usage
[
i
]
&=
(
ISDN_USAGE_NONE
|
ISDN_USAGE_EXCLUSIVE
);
dev
->
obytes
[
slot
]
=
0
;
strcpy
(
dev
->
num
[
i
],
"???"
);
dev
->
ibytes
[
i
]
=
0
;
dev
->
obytes
[
i
]
=
0
;
// 20.10.99 JIM, try to reinitialize v110 !
// 20.10.99 JIM, try to reinitialize v110 !
dev
->
v110emu
[
i
]
=
0
;
dev
->
v110emu
[
slot
]
=
0
;
atomic_set
(
&
(
dev
->
v110use
[
i
]),
0
);
atomic_set
(
&
(
dev
->
v110use
[
slot
]),
0
);
isdn_v110_close
(
dev
->
v110
[
i
]);
isdn_v110_close
(
dev
->
v110
[
slot
]);
dev
->
v110
[
i
]
=
NULL
;
dev
->
v110
[
slot
]
=
NULL
;
// 20.10.99 JIM, try to reinitialize v110 !
// 20.10.99 JIM, try to reinitialize v110 !
isdn_info_update
();
isdn_info_update
();
skb_queue_purge
(
&
dev
->
drv
[
di
]
->
rpqueue
[
ch
]);
skb_queue_purge
(
&
dev
->
drv
[
isdn_slot_driver
(
slot
)]
->
rpqueue
[
isdn_slot_channel
(
slot
)
]);
}
}
restore_flags
(
flags
);
restore_flags
(
flags
);
}
}
...
@@ -1839,8 +1843,8 @@ isdn_unexclusive_channel(int di, int ch)
...
@@ -1839,8 +1843,8 @@ isdn_unexclusive_channel(int di, int ch)
save_flags
(
flags
);
save_flags
(
flags
);
cli
();
cli
();
for
(
i
=
0
;
i
<
ISDN_MAX_CHANNELS
;
i
++
)
for
(
i
=
0
;
i
<
ISDN_MAX_CHANNELS
;
i
++
)
if
((
d
ev
->
d
rvmap
[
i
]
==
di
)
&&
if
((
drvmap
[
i
]
==
di
)
&&
(
dev
->
chanmap
[
i
]
==
ch
))
{
(
chanmap
[
i
]
==
ch
))
{
dev
->
usage
[
i
]
&=
~
ISDN_USAGE_EXCLUSIVE
;
dev
->
usage
[
i
]
&=
~
ISDN_USAGE_EXCLUSIVE
;
isdn_info_update
();
isdn_info_update
();
restore_flags
(
flags
);
restore_flags
(
flags
);
...
@@ -1997,9 +2001,9 @@ isdn_add_channels(driver *d, int drvidx, int n, int adding)
...
@@ -1997,9 +2001,9 @@ isdn_add_channels(driver *d, int drvidx, int n, int adding)
cli
();
cli
();
for
(
j
=
d
->
channels
;
j
<
m
;
j
++
)
for
(
j
=
d
->
channels
;
j
<
m
;
j
++
)
for
(
k
=
0
;
k
<
ISDN_MAX_CHANNELS
;
k
++
)
for
(
k
=
0
;
k
<
ISDN_MAX_CHANNELS
;
k
++
)
if
(
dev
->
chanmap
[
k
]
<
0
)
{
if
(
chanmap
[
k
]
<
0
)
{
dev
->
chanmap
[
k
]
=
j
;
chanmap
[
k
]
=
j
;
d
ev
->
d
rvmap
[
k
]
=
drvidx
;
drvmap
[
k
]
=
drvidx
;
isdn_register_devfs
(
k
);
isdn_register_devfs
(
k
);
break
;
break
;
}
}
...
@@ -2140,6 +2144,75 @@ register_isdn(isdn_if * i)
...
@@ -2140,6 +2144,75 @@ register_isdn(isdn_if * i)
return
1
;
return
1
;
}
}
int
isdn_slot_driver
(
int
slot
)
{
BUG_ON
(
slot
<
0
);
return
drvmap
[
slot
];
}
int
isdn_slot_channel
(
int
slot
)
{
BUG_ON
(
slot
<
0
);
return
chanmap
[
slot
];
}
int
isdn_slot_hdrlen
(
int
slot
)
{
int
di
=
isdn_slot_driver
(
slot
);
return
dev
->
drv
[
di
]
->
interface
->
hl_hdrlen
;
}
char
*
isdn_slot_map_eaz2msn
(
int
slot
,
char
*
msn
)
{
int
di
=
isdn_slot_driver
(
slot
);
return
isdn_map_eaz2msn
(
msn
,
di
);
}
int
isdn_slot_command
(
int
slot
,
int
cmd
,
isdn_ctrl
*
ctrl
)
{
ctrl
->
command
=
cmd
;
ctrl
->
driver
=
isdn_slot_driver
(
slot
);
ctrl
->
arg
&=
0xff
;
ctrl
->
arg
|=
isdn_slot_channel
(
slot
);
return
isdn_command
(
ctrl
);
}
void
isdn_slot_all_eaz
(
int
slot
)
{
isdn_ctrl
cmd
;
cmd
.
parm
.
num
[
0
]
=
'\0'
;
isdn_slot_command
(
slot
,
ISDN_CMD_SETEAZ
,
&
cmd
);
}
int
isdn_slot_readbchan
(
int
slot
,
u_char
*
buf
,
u_char
*
fp
,
int
len
,
wait_queue_head_t
*
sleep
)
{
int
di
=
isdn_slot_driver
(
slot
);
int
ch
=
isdn_slot_channel
(
slot
);
return
isdn_readbchan
(
di
,
ch
,
buf
,
fp
,
len
,
sleep
);
}
int
isdn_slot_writebuf_skb_stub
(
int
slot
,
int
ack
,
struct
sk_buff
*
skb
)
{
int
di
=
isdn_slot_driver
(
slot
);
int
ch
=
isdn_slot_channel
(
slot
);
return
isdn_writebuf_skb_stub
(
di
,
ch
,
ack
,
skb
);
}
/*
/*
*****************************************************************************
*****************************************************************************
* And now the modules code.
* And now the modules code.
...
@@ -2261,8 +2334,8 @@ static int __init isdn_init(void)
...
@@ -2261,8 +2334,8 @@ static int __init isdn_init(void)
init_MUTEX
(
&
dev
->
sem
);
init_MUTEX
(
&
dev
->
sem
);
init_waitqueue_head
(
&
dev
->
info_waitq
);
init_waitqueue_head
(
&
dev
->
info_waitq
);
for
(
i
=
0
;
i
<
ISDN_MAX_CHANNELS
;
i
++
)
{
for
(
i
=
0
;
i
<
ISDN_MAX_CHANNELS
;
i
++
)
{
d
ev
->
d
rvmap
[
i
]
=
-
1
;
drvmap
[
i
]
=
-
1
;
dev
->
chanmap
[
i
]
=
-
1
;
chanmap
[
i
]
=
-
1
;
dev
->
m_idx
[
i
]
=
-
1
;
dev
->
m_idx
[
i
]
=
-
1
;
strcpy
(
dev
->
num
[
i
],
"???"
);
strcpy
(
dev
->
num
[
i
],
"???"
);
init_waitqueue_head
(
&
dev
->
mdm
.
info
[
i
].
open_wait
);
init_waitqueue_head
(
&
dev
->
mdm
.
info
[
i
].
open_wait
);
...
...
drivers/isdn/i4l/isdn_common.h
View file @
eae32582
...
@@ -47,3 +47,13 @@ extern int isdn_add_channels(driver *, int, int, int);
...
@@ -47,3 +47,13 @@ extern int isdn_add_channels(driver *, int, int, int);
#if defined(ISDN_DEBUG_NET_DUMP) || defined(ISDN_DEBUG_MODEM_DUMP)
#if defined(ISDN_DEBUG_NET_DUMP) || defined(ISDN_DEBUG_MODEM_DUMP)
extern
void
isdn_dumppkt
(
char
*
,
u_char
*
,
int
,
int
);
extern
void
isdn_dumppkt
(
char
*
,
u_char
*
,
int
,
int
);
#endif
#endif
extern
void
isdn_slot_free
(
int
slot
,
int
usage
);
extern
void
isdn_slot_all_eaz
(
int
slot
);
extern
int
isdn_slot_command
(
int
slot
,
int
cmd
,
isdn_ctrl
*
);
extern
char
*
isdn_slot_map_eaz2msn
(
int
slot
,
char
*
msn
);
extern
int
isdn_slot_writebuf_skb_stub
(
int
slot
,
int
,
struct
sk_buff
*
);
extern
int
isdn_slot_readbchan
(
int
slot
,
u_char
*
,
u_char
*
,
int
,
wait_queue_head_t
*
);
extern
int
isdn_slot_hdrlen
(
int
slot
);
extern
int
isdn_slot_driver
(
int
slot
);
extern
int
isdn_slot_channel
(
int
slot
);
drivers/isdn/i4l/isdn_net.c
View file @
eae32582
...
@@ -280,8 +280,7 @@ isdn_net_bind_channel(isdn_net_local * lp, int idx)
...
@@ -280,8 +280,7 @@ isdn_net_bind_channel(isdn_net_local * lp, int idx)
save_flags
(
flags
);
save_flags
(
flags
);
cli
();
cli
();
lp
->
flags
|=
ISDN_NET_CONNECTED
;
lp
->
flags
|=
ISDN_NET_CONNECTED
;
lp
->
isdn_device
=
dev
->
drvmap
[
idx
];
lp
->
isdn_slot
=
idx
;
lp
->
isdn_channel
=
dev
->
chanmap
[
idx
];
dev
->
rx_netdev
[
idx
]
=
lp
->
netdev
;
dev
->
rx_netdev
[
idx
]
=
lp
->
netdev
;
dev
->
st_netdev
[
idx
]
=
lp
->
netdev
;
dev
->
st_netdev
[
idx
]
=
lp
->
netdev
;
restore_flags
(
flags
);
restore_flags
(
flags
);
...
@@ -307,12 +306,11 @@ isdn_net_unbind_channel(isdn_net_local * lp)
...
@@ -307,12 +306,11 @@ isdn_net_unbind_channel(isdn_net_local * lp)
qdisc_reset
(
lp
->
netdev
->
dev
.
qdisc
);
qdisc_reset
(
lp
->
netdev
->
dev
.
qdisc
);
}
}
lp
->
dialstate
=
0
;
lp
->
dialstate
=
0
;
dev
->
rx_netdev
[
isdn_dc2minor
(
lp
->
isdn_device
,
lp
->
isdn_channel
)
]
=
NULL
;
dev
->
rx_netdev
[
lp
->
isdn_slot
]
=
NULL
;
dev
->
st_netdev
[
isdn_dc2minor
(
lp
->
isdn_device
,
lp
->
isdn_channel
)
]
=
NULL
;
dev
->
st_netdev
[
lp
->
isdn_slot
]
=
NULL
;
isdn_
free_channel
(
lp
->
isdn_device
,
lp
->
isdn_channel
,
ISDN_USAGE_NET
);
isdn_
slot_free
(
lp
->
isdn_slot
,
ISDN_USAGE_NET
);
lp
->
flags
&=
~
ISDN_NET_CONNECTED
;
lp
->
flags
&=
~
ISDN_NET_CONNECTED
;
lp
->
isdn_device
=
-
1
;
lp
->
isdn_slot
=
-
1
;
lp
->
isdn_channel
=
-
1
;
restore_flags
(
flags
);
restore_flags
(
flags
);
}
}
...
@@ -459,7 +457,7 @@ isdn_net_stat_callback(int idx, isdn_ctrl *c)
...
@@ -459,7 +457,7 @@ isdn_net_stat_callback(int idx, isdn_ctrl *c)
isdn_ppp_free
(
lp
);
isdn_ppp_free
(
lp
);
#endif
#endif
isdn_net_lp_disconnected
(
lp
);
isdn_net_lp_disconnected
(
lp
);
isdn_
all_eaz
(
lp
->
isdn_device
,
lp
->
isdn_channel
);
isdn_
slot_all_eaz
(
lp
->
isdn_slot
);
printk
(
KERN_INFO
"%s: remote hangup
\n
"
,
lp
->
name
);
printk
(
KERN_INFO
"%s: remote hangup
\n
"
,
lp
->
name
);
printk
(
KERN_INFO
"%s: Chargesum is %d
\n
"
,
lp
->
name
,
printk
(
KERN_INFO
"%s: Chargesum is %d
\n
"
,
lp
->
name
,
lp
->
charge
);
lp
->
charge
);
...
@@ -574,7 +572,6 @@ isdn_net_dial(void)
...
@@ -574,7 +572,6 @@ isdn_net_dial(void)
{
{
isdn_net_dev
*
p
=
dev
->
netdev
;
isdn_net_dev
*
p
=
dev
->
netdev
;
int
anymore
=
0
;
int
anymore
=
0
;
int
i
;
unsigned
long
flags
;
unsigned
long
flags
;
isdn_ctrl
cmd
;
isdn_ctrl
cmd
;
u_char
*
phone_number
;
u_char
*
phone_number
;
...
@@ -616,13 +613,9 @@ isdn_net_dial(void)
...
@@ -616,13 +613,9 @@ isdn_net_dial(void)
/* Fall through */
/* Fall through */
case
2
:
case
2
:
/* Prepare dialing. Clear EAZ, then set EAZ. */
/* Prepare dialing. Clear EAZ, then set EAZ. */
cmd
.
driver
=
lp
->
isdn_device
;
isdn_slot_command
(
lp
->
isdn_slot
,
ISDN_CMD_CLREAZ
,
&
cmd
);
cmd
.
arg
=
lp
->
isdn_channel
;
cmd
.
command
=
ISDN_CMD_CLREAZ
;
isdn_command
(
&
cmd
);
sprintf
(
cmd
.
parm
.
num
,
"%s"
,
isdn_map_eaz2msn
(
lp
->
msn
,
cmd
.
driver
));
sprintf
(
cmd
.
parm
.
num
,
"%s"
,
isdn_map_eaz2msn
(
lp
->
msn
,
cmd
.
driver
));
cmd
.
command
=
ISDN_CMD_SETEAZ
;
isdn_slot_command
(
lp
->
isdn_slot
,
ISDN_CMD_SETEAZ
,
&
cmd
);
isdn_command
(
&
cmd
);
lp
->
dialretry
=
0
;
lp
->
dialretry
=
0
;
anymore
=
1
;
anymore
=
1
;
lp
->
dialstate
++
;
lp
->
dialstate
++
;
...
@@ -642,16 +635,10 @@ isdn_net_dial(void)
...
@@ -642,16 +635,10 @@ isdn_net_dial(void)
isdn_net_hangup
(
&
p
->
dev
);
isdn_net_hangup
(
&
p
->
dev
);
break
;
break
;
}
}
cmd
.
driver
=
lp
->
isdn_device
;
cmd
.
arg
=
lp
->
l2_proto
<<
8
;
cmd
.
command
=
ISDN_CMD_SETL2
;
isdn_slot_command
(
lp
->
isdn_slot
,
ISDN_CMD_SETL2
,
&
cmd
);
cmd
.
arg
=
lp
->
isdn_channel
+
(
lp
->
l2_proto
<<
8
);
cmd
.
arg
=
lp
->
l3_proto
<<
8
;
isdn_command
(
&
cmd
);
isdn_slot_command
(
lp
->
isdn_slot
,
ISDN_CMD_SETL3
,
&
cmd
);
cmd
.
driver
=
lp
->
isdn_device
;
cmd
.
command
=
ISDN_CMD_SETL3
;
cmd
.
arg
=
lp
->
isdn_channel
+
(
lp
->
l3_proto
<<
8
);
isdn_command
(
&
cmd
);
cmd
.
driver
=
lp
->
isdn_device
;
cmd
.
arg
=
lp
->
isdn_channel
;
save_flags
(
flags
);
save_flags
(
flags
);
cli
();
cli
();
if
(
!
lp
->
dial
)
{
if
(
!
lp
->
dial
)
{
...
@@ -676,8 +663,6 @@ isdn_net_dial(void)
...
@@ -676,8 +663,6 @@ isdn_net_dial(void)
break
;
break
;
}
}
cmd
.
driver
=
lp
->
isdn_device
;
cmd
.
command
=
ISDN_CMD_DIAL
;
cmd
.
parm
.
setup
.
si2
=
0
;
cmd
.
parm
.
setup
.
si2
=
0
;
/* check for DOV */
/* check for DOV */
...
@@ -710,11 +695,10 @@ isdn_net_dial(void)
...
@@ -710,11 +695,10 @@ isdn_net_dial(void)
}
}
restore_flags
(
flags
);
restore_flags
(
flags
);
sprintf
(
cmd
.
parm
.
setup
.
eazmsn
,
"%s"
,
sprintf
(
cmd
.
parm
.
setup
.
eazmsn
,
"%s"
,
isdn_map_eaz2msn
(
lp
->
msn
,
cmd
.
driver
));
isdn_slot_map_eaz2msn
(
lp
->
isdn_slot
,
lp
->
msn
));
i
=
isdn_dc2minor
(
lp
->
isdn_device
,
lp
->
isdn_channel
);
if
(
lp
->
isdn_slot
>=
0
)
{
if
(
i
>=
0
)
{
strcpy
(
dev
->
num
[
lp
->
isdn_slot
],
cmd
.
parm
.
setup
.
phone
);
strcpy
(
dev
->
num
[
i
],
cmd
.
parm
.
setup
.
phone
);
dev
->
usage
[
lp
->
isdn_slot
]
|=
ISDN_USAGE_OUTGOING
;
dev
->
usage
[
i
]
|=
ISDN_USAGE_OUTGOING
;
isdn_info_update
();
isdn_info_update
();
}
}
printk
(
KERN_INFO
"%s: dialing %d %s... %s
\n
"
,
lp
->
name
,
printk
(
KERN_INFO
"%s: dialing %d %s... %s
\n
"
,
lp
->
name
,
...
@@ -725,7 +709,7 @@ isdn_net_dial(void)
...
@@ -725,7 +709,7 @@ isdn_net_dial(void)
printk
(
KERN_DEBUG
"dial: d=%d c=%d
\n
"
,
lp
->
isdn_device
,
printk
(
KERN_DEBUG
"dial: d=%d c=%d
\n
"
,
lp
->
isdn_device
,
lp
->
isdn_channel
);
lp
->
isdn_channel
);
#endif
#endif
isdn_
command
(
&
cmd
);
isdn_
slot_command
(
lp
->
isdn_slot
,
ISDN_CMD_DIAL
,
&
cmd
);
}
}
lp
->
huptimer
=
0
;
lp
->
huptimer
=
0
;
lp
->
outgoing
=
1
;
lp
->
outgoing
=
1
;
...
@@ -752,13 +736,10 @@ isdn_net_dial(void)
...
@@ -752,13 +736,10 @@ isdn_net_dial(void)
break
;
break
;
case
5
:
case
5
:
/* Got D-Channel-Connect, send B-Channel-request */
/* Got D-Channel-Connect, send B-Channel-request */
cmd
.
driver
=
lp
->
isdn_device
;
cmd
.
arg
=
lp
->
isdn_channel
;
cmd
.
command
=
ISDN_CMD_ACCEPTB
;
anymore
=
1
;
anymore
=
1
;
lp
->
dtimer
=
0
;
lp
->
dtimer
=
0
;
lp
->
dialstate
++
;
lp
->
dialstate
++
;
isdn_
command
(
&
cmd
);
isdn_
slot_command
(
lp
->
isdn_slot
,
ISDN_CMD_ACCEPTB
,
&
cmd
);
break
;
break
;
case
6
:
case
6
:
/* Wait for B- or D-Channel-connect. If timeout,
/* Wait for B- or D-Channel-connect. If timeout,
...
@@ -778,14 +759,10 @@ isdn_net_dial(void)
...
@@ -778,14 +759,10 @@ isdn_net_dial(void)
#ifdef ISDN_DEBUG_NET_DIAL
#ifdef ISDN_DEBUG_NET_DIAL
printk
(
KERN_DEBUG
"dialtimer4: %d
\n
"
,
lp
->
dtimer
);
printk
(
KERN_DEBUG
"dialtimer4: %d
\n
"
,
lp
->
dtimer
);
#endif
#endif
cmd
.
driver
=
lp
->
isdn_device
;
cmd
.
arg
=
lp
->
l2_proto
<<
8
;
cmd
.
command
=
ISDN_CMD_SETL2
;
isdn_slot_command
(
lp
->
isdn_slot
,
ISDN_CMD_SETL2
,
&
cmd
);
cmd
.
arg
=
lp
->
isdn_channel
+
(
lp
->
l2_proto
<<
8
);
cmd
.
arg
=
lp
->
l3_proto
<<
8
;
isdn_command
(
&
cmd
);
isdn_slot_command
(
lp
->
isdn_slot
,
ISDN_CMD_SETL3
,
&
cmd
);
cmd
.
driver
=
lp
->
isdn_device
;
cmd
.
command
=
ISDN_CMD_SETL3
;
cmd
.
arg
=
lp
->
isdn_channel
+
(
lp
->
l3_proto
<<
8
);
isdn_command
(
&
cmd
);
if
(
lp
->
dtimer
++
>
ISDN_TIMER_DTIMEOUT15
)
if
(
lp
->
dtimer
++
>
ISDN_TIMER_DTIMEOUT15
)
isdn_net_hangup
(
&
p
->
dev
);
isdn_net_hangup
(
&
p
->
dev
);
else
{
else
{
...
@@ -795,10 +772,7 @@ isdn_net_dial(void)
...
@@ -795,10 +772,7 @@ isdn_net_dial(void)
break
;
break
;
case
9
:
case
9
:
/* Got incoming D-Channel-Connect, send B-Channel-request */
/* Got incoming D-Channel-Connect, send B-Channel-request */
cmd
.
driver
=
lp
->
isdn_device
;
isdn_slot_command
(
lp
->
isdn_slot
,
ISDN_CMD_ACCEPTB
,
&
cmd
);
cmd
.
arg
=
lp
->
isdn_channel
;
cmd
.
command
=
ISDN_CMD_ACCEPTB
;
isdn_command
(
&
cmd
);
anymore
=
1
;
anymore
=
1
;
lp
->
dtimer
=
0
;
lp
->
dtimer
=
0
;
lp
->
dialstate
++
;
lp
->
dialstate
++
;
...
@@ -829,11 +803,8 @@ isdn_net_dial(void)
...
@@ -829,11 +803,8 @@ isdn_net_dial(void)
printk
(
KERN_INFO
"%s: hangup waiting for callback ...
\n
"
,
lp
->
name
);
printk
(
KERN_INFO
"%s: hangup waiting for callback ...
\n
"
,
lp
->
name
);
lp
->
dtimer
=
0
;
lp
->
dtimer
=
0
;
lp
->
dialstate
=
4
;
lp
->
dialstate
=
4
;
cmd
.
driver
=
lp
->
isdn_device
;
isdn_slot_command
(
lp
->
isdn_slot
,
ISDN_CMD_HANGUP
,
&
cmd
);
cmd
.
command
=
ISDN_CMD_HANGUP
;
isdn_slot_all_eaz
(
lp
->
isdn_slot
);
cmd
.
arg
=
lp
->
isdn_channel
;
isdn_command
(
&
cmd
);
isdn_all_eaz
(
lp
->
isdn_device
,
lp
->
isdn_channel
);
}
}
anymore
=
1
;
anymore
=
1
;
break
;
break
;
...
@@ -883,12 +854,9 @@ isdn_net_hangup(struct net_device *d)
...
@@ -883,12 +854,9 @@ isdn_net_hangup(struct net_device *d)
pops
->
disconn_ind
(
cprot
);
pops
->
disconn_ind
(
cprot
);
#endif
/* CONFIG_ISDN_X25 */
#endif
/* CONFIG_ISDN_X25 */
cmd
.
driver
=
lp
->
isdn_device
;
isdn_slot_command
(
lp
->
isdn_slot
,
ISDN_CMD_HANGUP
,
&
cmd
);
cmd
.
command
=
ISDN_CMD_HANGUP
;
cmd
.
arg
=
lp
->
isdn_channel
;
isdn_command
(
&
cmd
);
printk
(
KERN_INFO
"%s: Chargesum is %d
\n
"
,
lp
->
name
,
lp
->
charge
);
printk
(
KERN_INFO
"%s: Chargesum is %d
\n
"
,
lp
->
name
,
lp
->
charge
);
isdn_
all_eaz
(
lp
->
isdn_device
,
lp
->
isdn_channel
);
isdn_
slot_all_eaz
(
lp
->
isdn_slot
);
}
}
isdn_net_unbind_channel
(
lp
);
isdn_net_unbind_channel
(
lp
);
}
}
...
@@ -1049,7 +1017,7 @@ void isdn_net_writebuf_skb(isdn_net_local *lp, struct sk_buff *skb)
...
@@ -1049,7 +1017,7 @@ void isdn_net_writebuf_skb(isdn_net_local *lp, struct sk_buff *skb)
printk
(
"isdn BUG at %s:%d!
\n
"
,
__FILE__
,
__LINE__
);
printk
(
"isdn BUG at %s:%d!
\n
"
,
__FILE__
,
__LINE__
);
goto
error
;
goto
error
;
}
}
ret
=
isdn_
writebuf_skb_stub
(
lp
->
isdn_device
,
lp
->
isdn_channel
,
1
,
skb
);
ret
=
isdn_
slot_writebuf_skb_stub
(
lp
->
isdn_slot
,
1
,
skb
);
if
(
ret
!=
len
)
{
if
(
ret
!=
len
)
{
/* we should never get here */
/* we should never get here */
printk
(
KERN_WARNING
"%s: HL driver queue full
\n
"
,
lp
->
name
);
printk
(
KERN_WARNING
"%s: HL driver queue full
\n
"
,
lp
->
name
);
...
@@ -1433,7 +1401,7 @@ isdn_net_type_trans(struct sk_buff *skb, struct net_device *dev)
...
@@ -1433,7 +1401,7 @@ isdn_net_type_trans(struct sk_buff *skb, struct net_device *dev)
static
struct
sk_buff
*
static
struct
sk_buff
*
isdn_net_ciscohdlck_alloc_skb
(
isdn_net_local
*
lp
,
int
len
)
isdn_net_ciscohdlck_alloc_skb
(
isdn_net_local
*
lp
,
int
len
)
{
{
unsigned
short
hl
=
dev
->
drv
[
lp
->
isdn_device
]
->
interface
->
hl_hdrlen
;
unsigned
short
hl
=
isdn_slot_hdrlen
(
lp
->
isdn_slot
)
;
struct
sk_buff
*
skb
;
struct
sk_buff
*
skb
;
skb
=
alloc_skb
(
hl
+
len
,
GFP_ATOMIC
);
skb
=
alloc_skb
(
hl
+
len
,
GFP_ATOMIC
);
...
@@ -2161,6 +2129,7 @@ isdn_net_find_icall(int di, int ch, int idx, setup_parm *setup)
...
@@ -2161,6 +2129,7 @@ isdn_net_find_icall(int di, int ch, int idx, setup_parm *setup)
char
nr
[
32
];
char
nr
[
32
];
char
*
my_eaz
;
char
*
my_eaz
;
int
slot
=
isdn_dc2minor
(
di
,
ch
);
/* Search name in netdev-chain */
/* Search name in netdev-chain */
save_flags
(
flags
);
save_flags
(
flags
);
cli
();
cli
();
...
@@ -2210,7 +2179,7 @@ p = dev->netdev;
...
@@ -2210,7 +2179,7 @@ p = dev->netdev;
}
}
swapped
=
0
;
swapped
=
0
;
/* check acceptable call types for DOV */
/* check acceptable call types for DOV */
my_eaz
=
isdn_
map_eaz2msn
(
lp
->
msn
,
di
);
my_eaz
=
isdn_
slot_map_eaz2msn
(
slot
,
lp
->
msn
);
if
(
si1
==
1
)
{
/* it's a DOV call, check if we allow it */
if
(
si1
==
1
)
{
/* it's a DOV call, check if we allow it */
if
(
*
my_eaz
==
'v'
||
*
my_eaz
==
'V'
||
if
(
*
my_eaz
==
'v'
||
*
my_eaz
==
'V'
||
*
my_eaz
==
'b'
||
*
my_eaz
==
'B'
)
*
my_eaz
==
'b'
||
*
my_eaz
==
'B'
)
...
@@ -2436,7 +2405,7 @@ p = dev->netdev;
...
@@ -2436,7 +2405,7 @@ p = dev->netdev;
isdn_ppp_free
(
lp
);
isdn_ppp_free
(
lp
);
#endif
#endif
isdn_net_lp_disconnected
(
lp
);
isdn_net_lp_disconnected
(
lp
);
isdn_
free_channel
(
lp
->
isdn_device
,
lp
->
isdn_channel
,
isdn_
slot_free
(
lp
->
isdn_slot
,
ISDN_USAGE_NET
);
ISDN_USAGE_NET
);
}
}
dev
->
usage
[
idx
]
&=
ISDN_USAGE_EXCLUSIVE
;
dev
->
usage
[
idx
]
&=
ISDN_USAGE_EXCLUSIVE
;
...
@@ -2444,8 +2413,7 @@ p = dev->netdev;
...
@@ -2444,8 +2413,7 @@ p = dev->netdev;
strcpy
(
dev
->
num
[
idx
],
nr
);
strcpy
(
dev
->
num
[
idx
],
nr
);
isdn_info_update
();
isdn_info_update
();
dev
->
st_netdev
[
idx
]
=
lp
->
netdev
;
dev
->
st_netdev
[
idx
]
=
lp
->
netdev
;
lp
->
isdn_device
=
di
;
lp
->
isdn_slot
=
slot
;
lp
->
isdn_channel
=
ch
;
lp
->
ppp_slot
=
-
1
;
lp
->
ppp_slot
=
-
1
;
lp
->
flags
|=
ISDN_NET_CONNECTED
;
lp
->
flags
|=
ISDN_NET_CONNECTED
;
lp
->
dialstate
=
7
;
lp
->
dialstate
=
7
;
...
@@ -2471,7 +2439,7 @@ p = dev->netdev;
...
@@ -2471,7 +2439,7 @@ p = dev->netdev;
}
}
/* If none of configured EAZ/MSN matched and not verbose, be silent */
/* If none of configured EAZ/MSN matched and not verbose, be silent */
if
(
!
ematch
||
dev
->
net_verbose
)
if
(
!
ematch
||
dev
->
net_verbose
)
printk
(
KERN_INFO
"isdn_net: call from %s -> %d %s ignored
\n
"
,
nr
,
di
,
eaz
);
printk
(
KERN_INFO
"isdn_net: call from %s -> %d %s ignored
\n
"
,
nr
,
slot
,
eaz
);
restore_flags
(
flags
);
restore_flags
(
flags
);
return
(
wret
==
2
)
?
5
:
0
;
return
(
wret
==
2
)
?
5
:
0
;
}
}
...
@@ -2642,8 +2610,7 @@ isdn_net_new(char *name, struct net_device *master)
...
@@ -2642,8 +2610,7 @@ isdn_net_new(char *name, struct net_device *master)
netdev
->
local
->
tqueue
.
data
=
netdev
->
local
;
netdev
->
local
->
tqueue
.
data
=
netdev
->
local
;
spin_lock_init
(
&
netdev
->
local
->
xmit_lock
);
spin_lock_init
(
&
netdev
->
local
->
xmit_lock
);
netdev
->
local
->
isdn_device
=
-
1
;
netdev
->
local
->
isdn_slot
=
-
1
;
netdev
->
local
->
isdn_channel
=
-
1
;
netdev
->
local
->
pre_device
=
-
1
;
netdev
->
local
->
pre_device
=
-
1
;
netdev
->
local
->
pre_channel
=
-
1
;
netdev
->
local
->
pre_channel
=
-
1
;
netdev
->
local
->
exclusive
=
-
1
;
netdev
->
local
->
exclusive
=
-
1
;
...
@@ -3051,7 +3018,7 @@ int
...
@@ -3051,7 +3018,7 @@ int
isdn_net_getpeer
(
isdn_net_ioctl_phone
*
phone
,
isdn_net_ioctl_phone
*
peer
)
isdn_net_getpeer
(
isdn_net_ioctl_phone
*
phone
,
isdn_net_ioctl_phone
*
peer
)
{
{
isdn_net_dev
*
p
=
isdn_net_findif
(
phone
->
name
);
isdn_net_dev
*
p
=
isdn_net_findif
(
phone
->
name
);
int
ch
,
dv
,
idx
;
int
idx
;
if
(
!
p
)
return
-
ENODEV
;
if
(
!
p
)
return
-
ENODEV
;
/*
/*
...
@@ -3060,11 +3027,8 @@ isdn_net_getpeer(isdn_net_ioctl_phone *phone, isdn_net_ioctl_phone *peer)
...
@@ -3060,11 +3027,8 @@ isdn_net_getpeer(isdn_net_ioctl_phone *phone, isdn_net_ioctl_phone *peer)
* in (partially) wrong number copied to user. This race
* in (partially) wrong number copied to user. This race
* currently ignored.
* currently ignored.
*/
*/
ch
=
p
->
local
->
isdn_channel
;
idx
=
p
->
local
->
isdn_slot
;
dv
=
p
->
local
->
isdn_device
;
if
(
idx
<
0
)
return
-
ENOTCONN
;
if
(
ch
<
0
&&
dv
<
0
)
return
-
ENOTCONN
;
idx
=
isdn_dc2minor
(
dv
,
ch
);
if
(
idx
<
0
)
return
-
ENODEV
;
/* for pre-bound channels, we need this extra check */
/* for pre-bound channels, we need this extra check */
if
(
strncmp
(
dev
->
num
[
idx
],
"???"
,
3
)
==
0
)
return
-
ENOTCONN
;
if
(
strncmp
(
dev
->
num
[
idx
],
"???"
,
3
)
==
0
)
return
-
ENOTCONN
;
strncpy
(
phone
->
phone
,
dev
->
num
[
idx
],
ISDN_MSNLEN
);
strncpy
(
phone
->
phone
,
dev
->
num
[
idx
],
ISDN_MSNLEN
);
...
@@ -3147,7 +3111,7 @@ isdn_net_force_hangup(char *name)
...
@@ -3147,7 +3111,7 @@ isdn_net_force_hangup(char *name)
struct
net_device
*
q
;
struct
net_device
*
q
;
if
(
p
)
{
if
(
p
)
{
if
(
p
->
local
->
isdn_
device
<
0
)
if
(
p
->
local
->
isdn_
slot
<
0
)
return
1
;
return
1
;
q
=
p
->
local
->
slave
;
q
=
p
->
local
->
slave
;
/* If this interface has slaves, do a hangup for them also. */
/* If this interface has slaves, do a hangup for them also. */
...
...
drivers/isdn/i4l/isdn_ppp.c
View file @
eae32582
...
@@ -804,11 +804,11 @@ isdn_ppp_write(struct file *file, const char *buf, size_t count, loff_t *off)
...
@@ -804,11 +804,11 @@ isdn_ppp_write(struct file *file, const char *buf, size_t count, loff_t *off)
if
(
proto
!=
PPP_LCP
)
if
(
proto
!=
PPP_LCP
)
lp
->
huptimer
=
0
;
lp
->
huptimer
=
0
;
if
(
lp
->
isdn_
device
<
0
||
lp
->
isdn_channel
<
0
)
{
if
(
lp
->
isdn_
slot
<
0
)
{
retval
=
0
;
retval
=
0
;
goto
out
;
goto
out
;
}
}
if
((
dev
->
drv
[
lp
->
isdn_device
]
->
flags
&
DRV_FLAG_RUNNING
)
&&
if
((
dev
->
drv
[
isdn_slot_driver
(
lp
->
isdn_slot
)
]
->
flags
&
DRV_FLAG_RUNNING
)
&&
lp
->
dialstate
==
0
&&
lp
->
dialstate
==
0
&&
(
lp
->
flags
&
ISDN_NET_CONNECTED
))
{
(
lp
->
flags
&
ISDN_NET_CONNECTED
))
{
unsigned
short
hl
;
unsigned
short
hl
;
...
@@ -818,7 +818,7 @@ isdn_ppp_write(struct file *file, const char *buf, size_t count, loff_t *off)
...
@@ -818,7 +818,7 @@ isdn_ppp_write(struct file *file, const char *buf, size_t count, loff_t *off)
* sk_buff. old call to dev_alloc_skb only reserved
* sk_buff. old call to dev_alloc_skb only reserved
* 16 bytes, now we are looking what the driver want
* 16 bytes, now we are looking what the driver want
*/
*/
hl
=
dev
->
drv
[
lp
->
isdn_device
]
->
interface
->
hl_hdrlen
;
hl
=
isdn_slot_hdrlen
(
lp
->
isdn_slot
)
;
skb
=
alloc_skb
(
hl
+
count
,
GFP_ATOMIC
);
skb
=
alloc_skb
(
hl
+
count
,
GFP_ATOMIC
);
if
(
!
skb
)
{
if
(
!
skb
)
{
printk
(
KERN_WARNING
"isdn_ppp_write: out of memory!
\n
"
);
printk
(
KERN_WARNING
"isdn_ppp_write: out of memory!
\n
"
);
...
@@ -1263,7 +1263,7 @@ isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev)
...
@@ -1263,7 +1263,7 @@ isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev)
* sk_buff. old call to dev_alloc_skb only reserved
* sk_buff. old call to dev_alloc_skb only reserved
* 16 bytes, now we are looking what the driver want.
* 16 bytes, now we are looking what the driver want.
*/
*/
hl
=
dev
->
drv
[
lp
->
isdn_device
]
->
interface
->
hl_hdrlen
+
IPPP_MAX_HEADER
;
hl
=
isdn_slot_hdrlen
(
lp
->
isdn_slot
)
+
IPPP_MAX_HEADER
;
;
/*
/*
* Note: hl might still be insufficient because the method
* Note: hl might still be insufficient because the method
* above does not account for a possibible MPPP slave channel
* above does not account for a possibible MPPP slave channel
...
@@ -2094,7 +2094,7 @@ static void isdn_ppp_ccp_xmit_reset(struct ippp_struct *is, int proto,
...
@@ -2094,7 +2094,7 @@ static void isdn_ppp_ccp_xmit_reset(struct ippp_struct *is, int proto,
isdn_net_local
*
lp
=
is
->
lp
;
isdn_net_local
*
lp
=
is
->
lp
;
/* Alloc large enough skb */
/* Alloc large enough skb */
hl
=
dev
->
drv
[
lp
->
isdn_device
]
->
interface
->
hl_hdrlen
;
hl
=
isdn_slot_hdrlen
(
lp
->
isdn_slot
)
;
skb
=
alloc_skb
(
len
+
hl
+
16
,
GFP_ATOMIC
);
skb
=
alloc_skb
(
len
+
hl
+
16
,
GFP_ATOMIC
);
if
(
!
skb
)
{
if
(
!
skb
)
{
printk
(
KERN_WARNING
printk
(
KERN_WARNING
...
...
drivers/isdn/i4l/isdn_tty.c
View file @
eae32582
...
@@ -143,7 +143,7 @@ isdn_tty_readmodem(void)
...
@@ -143,7 +143,7 @@ isdn_tty_readmodem(void)
if
(
c
>
0
)
{
if
(
c
>
0
)
{
save_flags
(
flags
);
save_flags
(
flags
);
cli
();
cli
();
r
=
isdn_
readbchan
(
info
->
isdn_driver
,
info
->
isdn_channel
,
r
=
isdn_
slot_readbchan
(
info
->
isdn_slot
,
tty
->
flip
.
char_buf_ptr
,
tty
->
flip
.
char_buf_ptr
,
tty
->
flip
.
flag_buf_ptr
,
c
,
0
);
tty
->
flip
.
flag_buf_ptr
,
c
,
0
);
/* CISCO AsyncPPP Hack */
/* CISCO AsyncPPP Hack */
...
@@ -315,8 +315,7 @@ isdn_tty_tint(modem_info * info)
...
@@ -315,8 +315,7 @@ isdn_tty_tint(modem_info * info)
if
(
!
skb
)
if
(
!
skb
)
return
;
return
;
len
=
skb
->
len
;
len
=
skb
->
len
;
if
((
slen
=
isdn_writebuf_skb_stub
(
info
->
isdn_driver
,
if
((
slen
=
isdn_slot_writebuf_skb_stub
(
info
->
isdn_slot
,
1
,
skb
))
==
len
)
{
info
->
isdn_channel
,
1
,
skb
))
==
len
)
{
struct
tty_struct
*
tty
=
info
->
tty
;
struct
tty_struct
*
tty
=
info
->
tty
;
info
->
send_outstanding
++
;
info
->
send_outstanding
++
;
info
->
msr
&=
~
UART_MSR_CTS
;
info
->
msr
&=
~
UART_MSR_CTS
;
...
@@ -479,11 +478,11 @@ isdn_tty_senddown(modem_info * info)
...
@@ -479,11 +478,11 @@ isdn_tty_senddown(modem_info * info)
atomic_inc
(
&
info
->
xmit_lock
);
atomic_inc
(
&
info
->
xmit_lock
);
if
(
!
(
atomic_dec_and_test
(
&
info
->
xmit_lock
)))
if
(
!
(
atomic_dec_and_test
(
&
info
->
xmit_lock
)))
return
;
return
;
if
(
info
->
isdn_
driver
<
0
)
{
if
(
info
->
isdn_
slot
<
0
)
{
info
->
xmit_count
=
0
;
info
->
xmit_count
=
0
;
return
;
return
;
}
}
skb_res
=
dev
->
drv
[
info
->
isdn_driver
]
->
interface
->
hl_hdrlen
+
4
;
skb_res
=
isdn_slot_hdrlen
(
info
->
isdn_slot
)
;
#ifdef CONFIG_ISDN_AUDIO
#ifdef CONFIG_ISDN_AUDIO
if
(
info
->
vonline
&
2
)
if
(
info
->
vonline
&
2
)
audio_len
=
buflen
*
voice_cf
[
info
->
emu
.
vpar
[
3
]];
audio_len
=
buflen
*
voice_cf
[
info
->
emu
.
vpar
[
3
]];
...
@@ -657,8 +656,7 @@ isdn_tty_dial(char *n, modem_info * info, atemu * m)
...
@@ -657,8 +656,7 @@ isdn_tty_dial(char *n, modem_info * info, atemu * m)
restore_flags
(
flags
);
restore_flags
(
flags
);
isdn_tty_modem_result
(
RESULT_NO_DIALTONE
,
info
);
isdn_tty_modem_result
(
RESULT_NO_DIALTONE
,
info
);
}
else
{
}
else
{
info
->
isdn_driver
=
dev
->
drvmap
[
i
];
info
->
isdn_slot
=
i
;
info
->
isdn_channel
=
dev
->
chanmap
[
i
];
info
->
drv_index
=
i
;
info
->
drv_index
=
i
;
dev
->
m_idx
[
i
]
=
info
->
line
;
dev
->
m_idx
[
i
]
=
info
->
line
;
dev
->
usage
[
i
]
|=
ISDN_USAGE_OUTGOING
;
dev
->
usage
[
i
]
|=
ISDN_USAGE_OUTGOING
;
...
@@ -666,42 +664,30 @@ isdn_tty_dial(char *n, modem_info * info, atemu * m)
...
@@ -666,42 +664,30 @@ isdn_tty_dial(char *n, modem_info * info, atemu * m)
strcpy
(
info
->
last_num
,
n
);
strcpy
(
info
->
last_num
,
n
);
isdn_info_update
();
isdn_info_update
();
restore_flags
(
flags
);
restore_flags
(
flags
);
cmd
.
driver
=
info
->
isdn_driver
;
isdn_slot_command
(
info
->
isdn_slot
,
ISDN_CMD_CLREAZ
,
&
cmd
);
cmd
.
arg
=
info
->
isdn_channel
;
strcpy
(
cmd
.
parm
.
num
,
isdn_slot_map_eaz2msn
(
info
->
isdn_slot
,
m
->
msn
));
cmd
.
command
=
ISDN_CMD_CLREAZ
;
isdn_slot_command
(
info
->
isdn_slot
,
ISDN_CMD_SETEAZ
,
&
cmd
);
isdn_command
(
&
cmd
);
strcpy
(
cmd
.
parm
.
num
,
isdn_map_eaz2msn
(
m
->
msn
,
info
->
isdn_driver
));
cmd
.
driver
=
info
->
isdn_driver
;
cmd
.
command
=
ISDN_CMD_SETEAZ
;
isdn_command
(
&
cmd
);
cmd
.
driver
=
info
->
isdn_driver
;
cmd
.
command
=
ISDN_CMD_SETL2
;
info
->
last_l2
=
l2
;
info
->
last_l2
=
l2
;
cmd
.
arg
=
info
->
isdn_channel
+
(
l2
<<
8
);
cmd
.
arg
=
l2
<<
8
;
isdn_command
(
&
cmd
);
isdn_slot_command
(
info
->
isdn_slot
,
ISDN_CMD_SETL2
,
&
cmd
);
cmd
.
driver
=
info
->
isdn_driver
;
cmd
.
arg
=
m
->
mdmreg
[
REG_L3PROT
]
<<
8
;
cmd
.
command
=
ISDN_CMD_SETL3
;
cmd
.
arg
=
info
->
isdn_channel
+
(
m
->
mdmreg
[
REG_L3PROT
]
<<
8
);
#ifdef CONFIG_ISDN_TTY_FAX
#ifdef CONFIG_ISDN_TTY_FAX
if
(
l2
==
ISDN_PROTO_L2_FAX
)
{
if
(
l2
==
ISDN_PROTO_L2_FAX
)
{
cmd
.
parm
.
fax
=
info
->
fax
;
cmd
.
parm
.
fax
=
info
->
fax
;
info
->
fax
->
direction
=
ISDN_TTY_FAX_CONN_OUT
;
info
->
fax
->
direction
=
ISDN_TTY_FAX_CONN_OUT
;
}
}
#endif
#endif
isdn_command
(
&
cmd
);
isdn_slot_command
(
info
->
isdn_slot
,
ISDN_CMD_SETL3
,
&
cmd
);
cmd
.
driver
=
info
->
isdn_driver
;
cmd
.
arg
=
info
->
isdn_channel
;
sprintf
(
cmd
.
parm
.
setup
.
phone
,
"%s"
,
n
);
sprintf
(
cmd
.
parm
.
setup
.
phone
,
"%s"
,
n
);
sprintf
(
cmd
.
parm
.
setup
.
eazmsn
,
"%s"
,
sprintf
(
cmd
.
parm
.
setup
.
eazmsn
,
"%s"
,
isdn_
map_eaz2msn
(
m
->
msn
,
info
->
isdn_driver
));
isdn_
slot_map_eaz2msn
(
info
->
isdn_slot
,
m
->
msn
));
cmd
.
parm
.
setup
.
si1
=
si
;
cmd
.
parm
.
setup
.
si1
=
si
;
cmd
.
parm
.
setup
.
si2
=
m
->
mdmreg
[
REG_SI2
];
cmd
.
parm
.
setup
.
si2
=
m
->
mdmreg
[
REG_SI2
];
cmd
.
command
=
ISDN_CMD_DIAL
;
info
->
dialing
=
1
;
info
->
dialing
=
1
;
info
->
emu
.
carrierwait
=
0
;
info
->
emu
.
carrierwait
=
0
;
strcpy
(
dev
->
num
[
i
],
n
);
strcpy
(
dev
->
num
[
i
],
n
);
isdn_info_update
();
isdn_info_update
();
isdn_
command
(
&
cmd
);
isdn_
slot_command
(
info
->
isdn_slot
,
ISDN_CMD_DIAL
,
&
cmd
);
isdn_timer_ctrl
(
ISDN_TIMER_CARRIER
,
1
);
isdn_timer_ctrl
(
ISDN_TIMER_CARRIER
,
1
);
}
}
}
}
...
@@ -714,18 +700,16 @@ void
...
@@ -714,18 +700,16 @@ void
isdn_tty_modem_hup
(
modem_info
*
info
,
int
local
)
isdn_tty_modem_hup
(
modem_info
*
info
,
int
local
)
{
{
isdn_ctrl
cmd
;
isdn_ctrl
cmd
;
int
di
,
ch
;
int
slot
;
if
(
!
info
)
if
(
!
info
)
return
;
return
;
di
=
info
->
isdn_driver
;
slot
=
info
->
isdn_slot
;
ch
=
info
->
isdn_channel
;
if
(
slot
<
0
)
if
(
di
<
0
||
ch
<
0
)
return
;
return
;
info
->
isdn_driver
=
-
1
;
info
->
isdn_slot
=
-
1
;
info
->
isdn_channel
=
-
1
;
#ifdef ISDN_DEBUG_MODEM_HUP
#ifdef ISDN_DEBUG_MODEM_HUP
printk
(
KERN_DEBUG
"Mhup ttyI%d
\n
"
,
info
->
line
);
printk
(
KERN_DEBUG
"Mhup ttyI%d
\n
"
,
info
->
line
);
...
@@ -768,16 +752,12 @@ isdn_tty_modem_hup(modem_info * info, int local)
...
@@ -768,16 +752,12 @@ isdn_tty_modem_hup(modem_info * info, int local)
info
->
msr
&=
~
(
UART_MSR_DCD
|
UART_MSR_RI
);
info
->
msr
&=
~
(
UART_MSR_DCD
|
UART_MSR_RI
);
info
->
lsr
|=
UART_LSR_TEMT
;
info
->
lsr
|=
UART_LSR_TEMT
;
if
(
local
)
{
if
(
local
)
cmd
.
driver
=
di
;
isdn_slot_command
(
slot
,
ISDN_CMD_HANGUP
,
&
cmd
);
cmd
.
command
=
ISDN_CMD_HANGUP
;
cmd
.
arg
=
ch
;
isdn_command
(
&
cmd
);
}
isdn_
all_eaz
(
di
,
ch
);
isdn_
slot_all_eaz
(
slot
);
info
->
emu
.
mdmreg
[
REG_RINGCNT
]
=
0
;
info
->
emu
.
mdmreg
[
REG_RINGCNT
]
=
0
;
isdn_
free_channel
(
di
,
ch
,
0
);
isdn_
slot_free
(
slot
,
0
);
if
(
info
->
drv_index
>=
0
)
{
if
(
info
->
drv_index
>=
0
)
{
dev
->
m_idx
[
info
->
drv_index
]
=
-
1
;
dev
->
m_idx
[
info
->
drv_index
]
=
-
1
;
...
@@ -812,11 +792,11 @@ isdn_tty_suspend(char *id, modem_info * info, atemu * m)
...
@@ -812,11 +792,11 @@ isdn_tty_suspend(char *id, modem_info * info, atemu * m)
printk
(
KERN_DEBUG
"Msusp ttyI%d
\n
"
,
info
->
line
);
printk
(
KERN_DEBUG
"Msusp ttyI%d
\n
"
,
info
->
line
);
#endif
#endif
l
=
strlen
(
id
);
l
=
strlen
(
id
);
if
((
info
->
isdn_
driver
>=
0
))
{
if
((
info
->
isdn_
slot
>=
0
))
{
cmd
.
parm
.
cmsg
.
Length
=
l
+
18
;
cmd
.
parm
.
cmsg
.
Length
=
l
+
18
;
cmd
.
parm
.
cmsg
.
Command
=
CAPI_FACILITY
;
cmd
.
parm
.
cmsg
.
Command
=
CAPI_FACILITY
;
cmd
.
parm
.
cmsg
.
Subcommand
=
CAPI_REQ
;
cmd
.
parm
.
cmsg
.
Subcommand
=
CAPI_REQ
;
cmd
.
parm
.
cmsg
.
adr
.
Controller
=
i
nfo
->
isdn_driver
+
1
;
cmd
.
parm
.
cmsg
.
adr
.
Controller
=
i
sdn_slot_driver
(
info
->
isdn_slot
)
+
1
;
cmd
.
parm
.
cmsg
.
para
[
0
]
=
3
;
/* 16 bit 0x0003 suplementary service */
cmd
.
parm
.
cmsg
.
para
[
0
]
=
3
;
/* 16 bit 0x0003 suplementary service */
cmd
.
parm
.
cmsg
.
para
[
1
]
=
0
;
cmd
.
parm
.
cmsg
.
para
[
1
]
=
0
;
cmd
.
parm
.
cmsg
.
para
[
2
]
=
l
+
3
;
cmd
.
parm
.
cmsg
.
para
[
2
]
=
l
+
3
;
...
@@ -824,10 +804,7 @@ isdn_tty_suspend(char *id, modem_info * info, atemu * m)
...
@@ -824,10 +804,7 @@ isdn_tty_suspend(char *id, modem_info * info, atemu * m)
cmd
.
parm
.
cmsg
.
para
[
4
]
=
0
;
cmd
.
parm
.
cmsg
.
para
[
4
]
=
0
;
cmd
.
parm
.
cmsg
.
para
[
5
]
=
l
;
cmd
.
parm
.
cmsg
.
para
[
5
]
=
l
;
strncpy
(
&
cmd
.
parm
.
cmsg
.
para
[
6
],
id
,
l
);
strncpy
(
&
cmd
.
parm
.
cmsg
.
para
[
6
],
id
,
l
);
cmd
.
command
=
CAPI_PUT_MESSAGE
;
isdn_slot_command
(
info
->
isdn_slot
,
CAPI_PUT_MESSAGE
,
&
cmd
);
cmd
.
driver
=
info
->
isdn_driver
;
cmd
.
arg
=
info
->
isdn_channel
;
isdn_command
(
&
cmd
);
}
}
}
}
...
@@ -876,38 +853,25 @@ isdn_tty_resume(char *id, modem_info * info, atemu * m)
...
@@ -876,38 +853,25 @@ isdn_tty_resume(char *id, modem_info * info, atemu * m)
restore_flags
(
flags
);
restore_flags
(
flags
);
isdn_tty_modem_result
(
RESULT_NO_DIALTONE
,
info
);
isdn_tty_modem_result
(
RESULT_NO_DIALTONE
,
info
);
}
else
{
}
else
{
info
->
isdn_driver
=
dev
->
drvmap
[
i
];
info
->
isdn_slot
=
i
;
info
->
isdn_channel
=
dev
->
chanmap
[
i
];
info
->
drv_index
=
i
;
dev
->
m_idx
[
i
]
=
info
->
line
;
dev
->
m_idx
[
i
]
=
info
->
line
;
dev
->
usage
[
i
]
|=
ISDN_USAGE_OUTGOING
;
dev
->
usage
[
i
]
|=
ISDN_USAGE_OUTGOING
;
info
->
last_dir
=
1
;
info
->
last_dir
=
1
;
// strcpy(info->last_num, n);
// strcpy(info->last_num, n);
isdn_info_update
();
isdn_info_update
();
restore_flags
(
flags
);
restore_flags
(
flags
);
cmd
.
driver
=
info
->
isdn_driver
;
isdn_slot_command
(
info
->
isdn_slot
,
ISDN_CMD_CLREAZ
,
&
cmd
);
cmd
.
arg
=
info
->
isdn_channel
;
strcpy
(
cmd
.
parm
.
num
,
isdn_slot_map_eaz2msn
(
info
->
isdn_slot
,
m
->
msn
));
cmd
.
command
=
ISDN_CMD_CLREAZ
;
isdn_slot_command
(
info
->
isdn_slot
,
ISDN_CMD_SETEAZ
,
&
cmd
);
isdn_command
(
&
cmd
);
strcpy
(
cmd
.
parm
.
num
,
isdn_map_eaz2msn
(
m
->
msn
,
info
->
isdn_driver
));
cmd
.
driver
=
info
->
isdn_driver
;
cmd
.
command
=
ISDN_CMD_SETEAZ
;
isdn_command
(
&
cmd
);
cmd
.
driver
=
info
->
isdn_driver
;
cmd
.
command
=
ISDN_CMD_SETL2
;
info
->
last_l2
=
l2
;
info
->
last_l2
=
l2
;
cmd
.
arg
=
info
->
isdn_channel
+
(
l2
<<
8
);
cmd
.
arg
=
l2
<<
8
;
isdn_command
(
&
cmd
);
isdn_slot_command
(
info
->
isdn_slot
,
ISDN_CMD_SETL2
,
&
cmd
);
cmd
.
driver
=
info
->
isdn_driver
;
cmd
.
arg
=
m
->
mdmreg
[
REG_L3PROT
]
<<
8
;
cmd
.
command
=
ISDN_CMD_SETL3
;
isdn_slot_command
(
info
->
isdn_slot
,
ISDN_CMD_SETL3
,
&
cmd
);
cmd
.
arg
=
info
->
isdn_channel
+
(
m
->
mdmreg
[
REG_L3PROT
]
<<
8
);
isdn_command
(
&
cmd
);
cmd
.
driver
=
info
->
isdn_driver
;
cmd
.
arg
=
info
->
isdn_channel
;
cmd
.
parm
.
cmsg
.
Length
=
l
+
18
;
cmd
.
parm
.
cmsg
.
Length
=
l
+
18
;
cmd
.
parm
.
cmsg
.
Command
=
CAPI_FACILITY
;
cmd
.
parm
.
cmsg
.
Command
=
CAPI_FACILITY
;
cmd
.
parm
.
cmsg
.
Subcommand
=
CAPI_REQ
;
cmd
.
parm
.
cmsg
.
Subcommand
=
CAPI_REQ
;
cmd
.
parm
.
cmsg
.
adr
.
Controller
=
i
nfo
->
isdn_driver
+
1
;
cmd
.
parm
.
cmsg
.
adr
.
Controller
=
i
sdn_slot_driver
(
info
->
isdn_slot
)
+
1
;
cmd
.
parm
.
cmsg
.
para
[
0
]
=
3
;
/* 16 bit 0x0003 suplementary service */
cmd
.
parm
.
cmsg
.
para
[
0
]
=
3
;
/* 16 bit 0x0003 suplementary service */
cmd
.
parm
.
cmsg
.
para
[
1
]
=
0
;
cmd
.
parm
.
cmsg
.
para
[
1
]
=
0
;
cmd
.
parm
.
cmsg
.
para
[
2
]
=
l
+
3
;
cmd
.
parm
.
cmsg
.
para
[
2
]
=
l
+
3
;
...
@@ -915,11 +879,10 @@ isdn_tty_resume(char *id, modem_info * info, atemu * m)
...
@@ -915,11 +879,10 @@ isdn_tty_resume(char *id, modem_info * info, atemu * m)
cmd
.
parm
.
cmsg
.
para
[
4
]
=
0
;
cmd
.
parm
.
cmsg
.
para
[
4
]
=
0
;
cmd
.
parm
.
cmsg
.
para
[
5
]
=
l
;
cmd
.
parm
.
cmsg
.
para
[
5
]
=
l
;
strncpy
(
&
cmd
.
parm
.
cmsg
.
para
[
6
],
id
,
l
);
strncpy
(
&
cmd
.
parm
.
cmsg
.
para
[
6
],
id
,
l
);
cmd
.
command
=
CAPI_PUT_MESSAGE
;
info
->
dialing
=
1
;
info
->
dialing
=
1
;
// strcpy(dev->num[i], n);
// strcpy(dev->num[i], n);
isdn_info_update
();
isdn_info_update
();
isdn_
command
(
&
cmd
);
isdn_
slot_command
(
info
->
isdn_slot
,
CAPI_PUT_MESSAGE
,
&
cmd
);
isdn_timer_ctrl
(
ISDN_TIMER_CARRIER
,
1
);
isdn_timer_ctrl
(
ISDN_TIMER_CARRIER
,
1
);
}
}
}
}
...
@@ -970,46 +933,33 @@ isdn_tty_send_msg(modem_info * info, atemu * m, char *msg)
...
@@ -970,46 +933,33 @@ isdn_tty_send_msg(modem_info * info, atemu * m, char *msg)
restore_flags
(
flags
);
restore_flags
(
flags
);
isdn_tty_modem_result
(
RESULT_NO_DIALTONE
,
info
);
isdn_tty_modem_result
(
RESULT_NO_DIALTONE
,
info
);
}
else
{
}
else
{
info
->
isdn_driver
=
dev
->
drvmap
[
i
];
info
->
isdn_slot
=
i
;
info
->
isdn_channel
=
dev
->
chanmap
[
i
];
info
->
drv_index
=
i
;
info
->
drv_index
=
i
;
dev
->
m_idx
[
i
]
=
info
->
line
;
dev
->
m_idx
[
i
]
=
info
->
line
;
dev
->
usage
[
i
]
|=
ISDN_USAGE_OUTGOING
;
dev
->
usage
[
i
]
|=
ISDN_USAGE_OUTGOING
;
info
->
last_dir
=
1
;
info
->
last_dir
=
1
;
isdn_info_update
();
isdn_info_update
();
restore_flags
(
flags
);
restore_flags
(
flags
);
cmd
.
driver
=
info
->
isdn_driver
;
isdn_slot_command
(
info
->
isdn_slot
,
ISDN_CMD_CLREAZ
,
&
cmd
);
cmd
.
arg
=
info
->
isdn_channel
;
strcpy
(
cmd
.
parm
.
num
,
isdn_slot_map_eaz2msn
(
info
->
isdn_slot
,
m
->
msn
));
cmd
.
command
=
ISDN_CMD_CLREAZ
;
isdn_slot_command
(
info
->
isdn_slot
,
ISDN_CMD_SETEAZ
,
&
cmd
);
isdn_command
(
&
cmd
);
strcpy
(
cmd
.
parm
.
num
,
isdn_map_eaz2msn
(
m
->
msn
,
info
->
isdn_driver
));
cmd
.
driver
=
info
->
isdn_driver
;
cmd
.
command
=
ISDN_CMD_SETEAZ
;
isdn_command
(
&
cmd
);
cmd
.
driver
=
info
->
isdn_driver
;
cmd
.
command
=
ISDN_CMD_SETL2
;
info
->
last_l2
=
l2
;
info
->
last_l2
=
l2
;
cmd
.
arg
=
info
->
isdn_channel
+
(
l2
<<
8
);
cmd
.
arg
=
l2
<<
8
;
isdn_command
(
&
cmd
);
isdn_slot_command
(
info
->
isdn_slot
,
ISDN_CMD_SETL2
,
&
cmd
);
cmd
.
driver
=
info
->
isdn_driver
;
cmd
.
arg
=
m
->
mdmreg
[
REG_L3PROT
]
<<
8
;
cmd
.
command
=
ISDN_CMD_SETL3
;
isdn_slot_command
(
info
->
isdn_slot
,
ISDN_CMD_SETL3
,
&
cmd
);
cmd
.
arg
=
info
->
isdn_channel
+
(
m
->
mdmreg
[
REG_L3PROT
]
<<
8
);
isdn_command
(
&
cmd
);
cmd
.
driver
=
info
->
isdn_driver
;
cmd
.
arg
=
info
->
isdn_channel
;
cmd
.
parm
.
cmsg
.
Length
=
l
+
14
;
cmd
.
parm
.
cmsg
.
Length
=
l
+
14
;
cmd
.
parm
.
cmsg
.
Command
=
CAPI_MANUFACTURER
;
cmd
.
parm
.
cmsg
.
Command
=
CAPI_MANUFACTURER
;
cmd
.
parm
.
cmsg
.
Subcommand
=
CAPI_REQ
;
cmd
.
parm
.
cmsg
.
Subcommand
=
CAPI_REQ
;
cmd
.
parm
.
cmsg
.
adr
.
Controller
=
i
nfo
->
isdn_driver
+
1
;
cmd
.
parm
.
cmsg
.
adr
.
Controller
=
i
sdn_slot_driver
(
info
->
isdn_slot
)
+
1
;
cmd
.
parm
.
cmsg
.
para
[
0
]
=
l
+
1
;
cmd
.
parm
.
cmsg
.
para
[
0
]
=
l
+
1
;
strncpy
(
&
cmd
.
parm
.
cmsg
.
para
[
1
],
msg
,
l
);
strncpy
(
&
cmd
.
parm
.
cmsg
.
para
[
1
],
msg
,
l
);
cmd
.
parm
.
cmsg
.
para
[
l
+
1
]
=
0xd
;
cmd
.
parm
.
cmsg
.
para
[
l
+
1
]
=
0xd
;
cmd
.
command
=
CAPI_PUT_MESSAGE
;
/* info->dialing = 1;
/* info->dialing = 1;
strcpy(dev->num[i], n);
strcpy(dev->num[i], n);
isdn_info_update();
isdn_info_update();
*/
*/
isdn_
command
(
&
cmd
);
isdn_
slot_command
(
info
->
isdn_slot
,
CAPI_PUT_MESSAGE
,
&
cmd
);
}
}
}
}
...
@@ -1173,6 +1123,7 @@ isdn_tty_write(struct tty_struct *tty, int from_user, const u_char * buf, int co
...
@@ -1173,6 +1123,7 @@ isdn_tty_write(struct tty_struct *tty, int from_user, const u_char * buf, int co
{
{
int
c
;
int
c
;
int
total
=
0
;
int
total
=
0
;
int
di
;
modem_info
*
info
=
(
modem_info
*
)
tty
->
driver_data
;
modem_info
*
info
=
(
modem_info
*
)
tty
->
driver_data
;
atemu
*
m
=
&
info
->
emu
;
atemu
*
m
=
&
info
->
emu
;
...
@@ -1186,8 +1137,9 @@ isdn_tty_write(struct tty_struct *tty, int from_user, const u_char * buf, int co
...
@@ -1186,8 +1137,9 @@ isdn_tty_write(struct tty_struct *tty, int from_user, const u_char * buf, int co
c
=
count
;
c
=
count
;
if
(
c
>
info
->
xmit_size
-
info
->
xmit_count
)
if
(
c
>
info
->
xmit_size
-
info
->
xmit_count
)
c
=
info
->
xmit_size
-
info
->
xmit_count
;
c
=
info
->
xmit_size
-
info
->
xmit_count
;
if
(
info
->
isdn_driver
>=
0
&&
c
>
dev
->
drv
[
info
->
isdn_driver
]
->
maxbufsize
)
di
=
isdn_slot_driver
(
info
->
isdn_slot
);
c
=
dev
->
drv
[
info
->
isdn_driver
]
->
maxbufsize
;
if
(
di
>=
0
&&
c
>
dev
->
drv
[
di
]
->
maxbufsize
)
c
=
dev
->
drv
[
di
]
->
maxbufsize
;
if
(
c
<=
0
)
if
(
c
<=
0
)
break
;
break
;
if
((
info
->
online
>
1
)
if
((
info
->
online
>
1
)
...
@@ -1247,12 +1199,9 @@ isdn_tty_write(struct tty_struct *tty, int from_user, const u_char * buf, int co
...
@@ -1247,12 +1199,9 @@ isdn_tty_write(struct tty_struct *tty, int from_user, const u_char * buf, int co
if
(
info
->
vonline
&
4
)
{
/* ETX seen */
if
(
info
->
vonline
&
4
)
{
/* ETX seen */
isdn_ctrl
c
;
isdn_ctrl
c
;
c
.
command
=
ISDN_CMD_FAXCMD
;
c
.
driver
=
info
->
isdn_driver
;
c
.
arg
=
info
->
isdn_channel
;
c
.
parm
.
aux
.
cmd
=
ISDN_FAX_CLASS1_CTRL
;
c
.
parm
.
aux
.
cmd
=
ISDN_FAX_CLASS1_CTRL
;
c
.
parm
.
aux
.
subcmd
=
ETX
;
c
.
parm
.
aux
.
subcmd
=
ETX
;
isdn_
command
(
&
c
);
isdn_
slot_command
(
info
->
isdn_slot
,
ISDN_CMD_FAXCMD
,
&
c
);
}
}
info
->
vonline
=
0
;
info
->
vonline
=
0
;
#ifdef ISDN_DEBUG_MODEM_VOICE
#ifdef ISDN_DEBUG_MODEM_VOICE
...
@@ -2100,8 +2049,7 @@ isdn_tty_init(void)
...
@@ -2100,8 +2049,7 @@ isdn_tty_init(void)
info
->
normal_termios
=
m
->
tty_modem
.
init_termios
;
info
->
normal_termios
=
m
->
tty_modem
.
init_termios
;
init_waitqueue_head
(
&
info
->
open_wait
);
init_waitqueue_head
(
&
info
->
open_wait
);
init_waitqueue_head
(
&
info
->
close_wait
);
init_waitqueue_head
(
&
info
->
close_wait
);
info
->
isdn_driver
=
-
1
;
info
->
isdn_slot
=
-
1
;
info
->
isdn_channel
=
-
1
;
info
->
drv_index
=
-
1
;
info
->
drv_index
=
-
1
;
info
->
xmit_size
=
ISDN_SERIAL_XMIT_SIZE
;
info
->
xmit_size
=
ISDN_SERIAL_XMIT_SIZE
;
skb_queue_head_init
(
&
info
->
xmit_queue
);
skb_queue_head_init
(
&
info
->
xmit_queue
);
...
@@ -2265,16 +2213,14 @@ isdn_tty_find_icall(int di, int ch, setup_parm *setup)
...
@@ -2265,16 +2213,14 @@ isdn_tty_find_icall(int di, int ch, setup_parm *setup)
#ifndef FIX_FILE_TRANSFER
#ifndef FIX_FILE_TRANSFER
(
info
->
flags
&
ISDN_ASYNC_NORMAL_ACTIVE
)
&&
(
info
->
flags
&
ISDN_ASYNC_NORMAL_ACTIVE
)
&&
#endif
#endif
(
info
->
isdn_driver
==
-
1
)
&&
(
info
->
isdn_slot
==
-
1
)
&&
(
info
->
isdn_channel
==
-
1
)
&&
(
USG_NONE
(
dev
->
usage
[
idx
])))
{
(
USG_NONE
(
dev
->
usage
[
idx
])))
{
int
matchret
;
int
matchret
;
if
((
matchret
=
isdn_tty_match_icall
(
eaz
,
&
info
->
emu
,
di
))
>
wret
)
if
((
matchret
=
isdn_tty_match_icall
(
eaz
,
&
info
->
emu
,
di
))
>
wret
)
wret
=
matchret
;
wret
=
matchret
;
if
(
!
matchret
)
{
/* EAZ is matching */
if
(
!
matchret
)
{
/* EAZ is matching */
info
->
isdn_driver
=
di
;
info
->
isdn_slot
=
idx
;
info
->
isdn_channel
=
ch
;
info
->
drv_index
=
idx
;
info
->
drv_index
=
idx
;
dev
->
m_idx
[
idx
]
=
info
->
line
;
dev
->
m_idx
[
idx
]
=
info
->
line
;
dev
->
usage
[
idx
]
&=
ISDN_USAGE_EXCLUSIVE
;
dev
->
usage
[
idx
]
&=
ISDN_USAGE_EXCLUSIVE
;
...
@@ -2328,8 +2274,7 @@ isdn_tty_stat_callback(int i, isdn_ctrl *c)
...
@@ -2328,8 +2274,7 @@ isdn_tty_stat_callback(int i, isdn_ctrl *c)
#ifdef ISDN_TTY_STAT_DEBUG
#ifdef ISDN_TTY_STAT_DEBUG
printk
(
KERN_DEBUG
"tty_STAT_BSENT ttyI%d
\n
"
,
info
->
line
);
printk
(
KERN_DEBUG
"tty_STAT_BSENT ttyI%d
\n
"
,
info
->
line
);
#endif
#endif
if
((
info
->
isdn_driver
==
c
->
driver
)
&&
if
((
info
->
isdn_slot
==
isdn_dc2minor
(
c
->
driver
,
c
->
arg
)))
{
(
info
->
isdn_channel
==
c
->
arg
))
{
info
->
msr
|=
UART_MSR_CTS
;
info
->
msr
|=
UART_MSR_CTS
;
if
(
info
->
send_outstanding
)
if
(
info
->
send_outstanding
)
if
(
!
(
--
info
->
send_outstanding
))
if
(
!
(
--
info
->
send_outstanding
))
...
@@ -2459,7 +2404,7 @@ isdn_tty_stat_callback(int i, isdn_ctrl *c)
...
@@ -2459,7 +2404,7 @@ isdn_tty_stat_callback(int i, isdn_ctrl *c)
#endif
#endif
for
(
i
=
0
;
i
<
ISDN_MAX_CHANNELS
;
i
++
)
{
for
(
i
=
0
;
i
<
ISDN_MAX_CHANNELS
;
i
++
)
{
info
=
&
dev
->
mdm
.
info
[
i
];
info
=
&
dev
->
mdm
.
info
[
i
];
if
(
i
nfo
->
isdn_driver
==
c
->
driver
)
{
if
(
i
sdn_slot_driver
(
info
->
isdn_slot
)
==
c
->
driver
)
{
if
(
info
->
online
)
if
(
info
->
online
)
isdn_tty_modem_hup
(
info
,
1
);
isdn_tty_modem_hup
(
info
,
1
);
}
}
...
@@ -2511,6 +2456,7 @@ isdn_tty_at_cout(char *msg, modem_info * info)
...
@@ -2511,6 +2456,7 @@ isdn_tty_at_cout(char *msg, modem_info * info)
ulong
flags
;
ulong
flags
;
struct
sk_buff
*
skb
=
0
;
struct
sk_buff
*
skb
=
0
;
char
*
sp
=
0
;
char
*
sp
=
0
;
int
di
,
ch
;
if
(
!
msg
)
{
if
(
!
msg
)
{
printk
(
KERN_WARNING
"isdn_tty: Null-Message in isdn_tty_at_cout
\n
"
);
printk
(
KERN_WARNING
"isdn_tty: Null-Message in isdn_tty_at_cout
\n
"
);
...
@@ -2526,8 +2472,9 @@ isdn_tty_at_cout(char *msg, modem_info * info)
...
@@ -2526,8 +2472,9 @@ isdn_tty_at_cout(char *msg, modem_info * info)
/* use queue instead of direct flip, if online and */
/* use queue instead of direct flip, if online and */
/* data is in queue or flip buffer is full */
/* data is in queue or flip buffer is full */
di
=
isdn_slot_driver
(
info
->
isdn_slot
);
ch
=
isdn_slot_channel
(
info
->
isdn_slot
);
if
((
info
->
online
)
&&
(((
tty
->
flip
.
count
+
strlen
(
msg
))
>=
TTY_FLIPBUF_SIZE
)
||
if
((
info
->
online
)
&&
(((
tty
->
flip
.
count
+
strlen
(
msg
))
>=
TTY_FLIPBUF_SIZE
)
||
(
!
skb_queue_empty
(
&
dev
->
drv
[
info
->
isdn_driver
]
->
rpqueue
[
info
->
isdn_channel
]))))
{
(
!
skb_queue_empty
(
&
dev
->
drv
[
di
]
->
rpqueue
[
ch
]))))
{
skb
=
alloc_skb
(
strlen
(
msg
)
skb
=
alloc_skb
(
strlen
(
msg
)
#ifdef CONFIG_ISDN_AUDIO
#ifdef CONFIG_ISDN_AUDIO
+
sizeof
(
isdn_audio_skb
)
+
sizeof
(
isdn_audio_skb
)
...
@@ -2570,8 +2517,8 @@ isdn_tty_at_cout(char *msg, modem_info * info)
...
@@ -2570,8 +2517,8 @@ isdn_tty_at_cout(char *msg, modem_info * info)
}
}
}
}
if
(
skb
)
{
if
(
skb
)
{
__skb_queue_tail
(
&
dev
->
drv
[
info
->
isdn_driver
]
->
rpqueue
[
info
->
isdn_channel
],
skb
);
__skb_queue_tail
(
&
dev
->
drv
[
di
]
->
rpqueue
[
ch
],
skb
);
dev
->
drv
[
info
->
isdn_driver
]
->
rcvcount
[
info
->
isdn_channel
]
+=
skb
->
len
;
dev
->
drv
[
di
]
->
rcvcount
[
ch
]
+=
skb
->
len
;
restore_flags
(
flags
);
restore_flags
(
flags
);
/* Schedule dequeuing */
/* Schedule dequeuing */
if
((
dev
->
modempoll
)
&&
(
info
->
rcvsched
))
if
((
dev
->
modempoll
)
&&
(
info
->
rcvsched
))
...
@@ -2589,7 +2536,7 @@ isdn_tty_at_cout(char *msg, modem_info * info)
...
@@ -2589,7 +2536,7 @@ isdn_tty_at_cout(char *msg, modem_info * info)
static
void
static
void
isdn_tty_on_hook
(
modem_info
*
info
)
isdn_tty_on_hook
(
modem_info
*
info
)
{
{
if
(
info
->
isdn_
channel
>=
0
)
{
if
(
info
->
isdn_
slot
>=
0
)
{
#ifdef ISDN_DEBUG_MODEM_HUP
#ifdef ISDN_DEBUG_MODEM_HUP
printk
(
KERN_DEBUG
"Mhup in isdn_tty_on_hook
\n
"
);
printk
(
KERN_DEBUG
"Mhup in isdn_tty_on_hook
\n
"
);
#endif
#endif
...
@@ -3304,24 +3251,18 @@ isdn_tty_cmd_ATA(modem_info * info)
...
@@ -3304,24 +3251,18 @@ isdn_tty_cmd_ATA(modem_info * info)
l2
=
ISDN_PROTO_L2_X75I
;
l2
=
ISDN_PROTO_L2_X75I
;
}
}
#endif
#endif
cmd
.
driver
=
info
->
isdn_driver
;
cmd
.
arg
=
l2
<<
8
;
cmd
.
command
=
ISDN_CMD_SETL2
;
cmd
.
arg
=
info
->
isdn_channel
+
(
l2
<<
8
);
info
->
last_l2
=
l2
;
info
->
last_l2
=
l2
;
isdn_command
(
&
cmd
);
isdn_slot_command
(
info
->
isdn_slot
,
ISDN_CMD_SETL2
,
&
cmd
);
cmd
.
driver
=
info
->
isdn_driver
;
cmd
.
arg
=
m
->
mdmreg
[
REG_L3PROT
]
<<
8
;
cmd
.
command
=
ISDN_CMD_SETL3
;
cmd
.
arg
=
info
->
isdn_channel
+
(
m
->
mdmreg
[
REG_L3PROT
]
<<
8
);
#ifdef CONFIG_ISDN_TTY_FAX
#ifdef CONFIG_ISDN_TTY_FAX
if
(
l2
==
ISDN_PROTO_L2_FAX
)
{
if
(
l2
==
ISDN_PROTO_L2_FAX
)
{
cmd
.
parm
.
fax
=
info
->
fax
;
cmd
.
parm
.
fax
=
info
->
fax
;
info
->
fax
->
direction
=
ISDN_TTY_FAX_CONN_IN
;
info
->
fax
->
direction
=
ISDN_TTY_FAX_CONN_IN
;
}
}
#endif
#endif
isdn_command
(
&
cmd
);
isdn_slot_command
(
info
->
isdn_slot
,
ISDN_CMD_SETL3
,
&
cmd
);
cmd
.
driver
=
info
->
isdn_driver
;
isdn_slot_command
(
info
->
isdn_slot
,
ISDN_CMD_ACCEPTD
,
&
cmd
);
cmd
.
arg
=
info
->
isdn_channel
;
cmd
.
command
=
ISDN_CMD_ACCEPTD
;
info
->
dialing
=
16
;
info
->
dialing
=
16
;
info
->
emu
.
carrierwait
=
0
;
info
->
emu
.
carrierwait
=
0
;
isdn_command
(
&
cmd
);
isdn_command
(
&
cmd
);
...
@@ -3680,12 +3621,10 @@ isdn_tty_cmd_PLUSV(char **p, modem_info * info)
...
@@ -3680,12 +3621,10 @@ isdn_tty_cmd_PLUSV(char **p, modem_info * info)
PARSE_ERROR1
;
PARSE_ERROR1
;
m
->
vpar
[
4
]
=
par1
;
m
->
vpar
[
4
]
=
par1
;
m
->
vpar
[
5
]
=
par2
;
m
->
vpar
[
5
]
=
par2
;
cmd
.
driver
=
info
->
isdn_driver
;
cmd
.
arg
=
ISDN_AUDIO_SETDD
<<
8
;
cmd
.
command
=
ISDN_CMD_AUDIO
;
cmd
.
arg
=
info
->
isdn_channel
+
(
ISDN_AUDIO_SETDD
<<
8
);
cmd
.
parm
.
num
[
0
]
=
par1
;
cmd
.
parm
.
num
[
0
]
=
par1
;
cmd
.
parm
.
num
[
1
]
=
par2
;
cmd
.
parm
.
num
[
1
]
=
par2
;
isdn_
command
(
&
cmd
);
isdn_
slot_command
(
info
->
isdn_slot
,
ISDN_CMD_AUDIO
,
&
cmd
);
break
;
break
;
}
else
}
else
if
(
*
p
[
0
]
==
'?'
)
{
if
(
*
p
[
0
]
==
'?'
)
{
...
...
drivers/isdn/i4l/isdn_ttyfax.c
View file @
eae32582
...
@@ -74,7 +74,7 @@ isdn_tty_fax_modem_result(int code, modem_info * info)
...
@@ -74,7 +74,7 @@ isdn_tty_fax_modem_result(int code, modem_info * info)
case
2
:
/* +FCON */
case
2
:
/* +FCON */
/* Append CPN, if enabled */
/* Append CPN, if enabled */
if
((
m
->
mdmreg
[
REG_CPNFCON
]
&
BIT_CPNFCON
)
&&
if
((
m
->
mdmreg
[
REG_CPNFCON
]
&
BIT_CPNFCON
)
&&
(
!
(
dev
->
usage
[
info
->
isdn_
channel
]
&
ISDN_USAGE_OUTGOING
)))
{
(
!
(
dev
->
usage
[
info
->
isdn_
slot
]
&
ISDN_USAGE_OUTGOING
)))
{
sprintf
(
rs
,
"/%s"
,
m
->
cpn
);
sprintf
(
rs
,
"/%s"
,
m
->
cpn
);
isdn_tty_at_cout
(
rs
,
info
);
isdn_tty_at_cout
(
rs
,
info
);
}
}
...
@@ -360,12 +360,11 @@ isdn_tty_cmd_FCLASS1(char **p, modem_info * info)
...
@@ -360,12 +360,11 @@ isdn_tty_cmd_FCLASS1(char **p, modem_info * info)
default:
default:
PARSE_ERROR1
;
PARSE_ERROR1
;
}
}
c
.
command
=
ISDN_CMD_FAXCMD
;
#ifdef ISDN_TTY_FAX_CMD_DEBUG
#ifdef ISDN_TTY_FAX_CMD_DEBUG
printk
(
KERN_DEBUG
"isdn_tty_cmd_FCLASS1 %d/%d/%d)
\n
"
,
printk
(
KERN_DEBUG
"isdn_tty_cmd_FCLASS1 %d/%d/%d)
\n
"
,
c
.
parm
.
aux
.
cmd
,
c
.
parm
.
aux
.
subcmd
,
c
.
parm
.
aux
.
para
[
0
]);
c
.
parm
.
aux
.
cmd
,
c
.
parm
.
aux
.
subcmd
,
c
.
parm
.
aux
.
para
[
0
]);
#endif
#endif
if
(
info
->
isdn_
driver
<
0
)
{
if
(
info
->
isdn_
slot
<
0
)
{
save_flags
(
flags
);
save_flags
(
flags
);
cli
();
cli
();
if
((
c
.
parm
.
aux
.
subcmd
==
AT_EQ_VALUE
)
||
if
((
c
.
parm
.
aux
.
subcmd
==
AT_EQ_VALUE
)
||
...
@@ -380,26 +379,19 @@ isdn_tty_cmd_FCLASS1(char **p, modem_info * info)
...
@@ -380,26 +379,19 @@ isdn_tty_cmd_FCLASS1(char **p, modem_info * info)
restore_flags
(
flags
);
restore_flags
(
flags
);
PARSE_ERROR1
;
PARSE_ERROR1
;
}
}
info
->
isdn_driver
=
dev
->
drvmap
[
i
];
info
->
isdn_slot
=
i
;
info
->
isdn_channel
=
dev
->
chanmap
[
i
];
info
->
drv_index
=
i
;
info
->
drv_index
=
i
;
dev
->
m_idx
[
i
]
=
info
->
line
;
dev
->
m_idx
[
i
]
=
info
->
line
;
c
.
driver
=
info
->
isdn_driver
;
isdn_slot_command
(
info
->
isdn_slot
,
ISDN_CMD_FAXCMD
,
&
c
);
c
.
arg
=
info
->
isdn_channel
;
isdn_slot_free
(
info
->
isdn_slot
,
ISDN_USAGE_FAX
);
isdn_command
(
&
c
);
info
->
isdn_slot
=
-
1
;
isdn_free_channel
(
info
->
isdn_driver
,
info
->
isdn_channel
,
ISDN_USAGE_FAX
);
info
->
isdn_driver
=
-
1
;
info
->
isdn_channel
=
-
1
;
if
(
info
->
drv_index
>=
0
)
{
if
(
info
->
drv_index
>=
0
)
{
dev
->
m_idx
[
info
->
drv_index
]
=
-
1
;
dev
->
m_idx
[
info
->
drv_index
]
=
-
1
;
info
->
drv_index
=
-
1
;
info
->
drv_index
=
-
1
;
}
}
restore_flags
(
flags
);
restore_flags
(
flags
);
}
else
{
}
else
{
c
.
driver
=
info
->
isdn_driver
;
isdn_slot_command
(
info
->
isdn_slot
,
ISDN_CMD_FAXCMD
,
&
c
);
c
.
arg
=
info
->
isdn_channel
;
isdn_command
(
&
c
);
}
}
return
1
;
return
1
;
}
}
...
@@ -800,10 +792,7 @@ isdn_tty_cmd_FCLASS2(char **p, modem_info * info)
...
@@ -800,10 +792,7 @@ isdn_tty_cmd_FCLASS2(char **p, modem_info * info)
printk
(
KERN_DEBUG
"isdn_tty: Fax FDR
\n
"
);
printk
(
KERN_DEBUG
"isdn_tty: Fax FDR
\n
"
);
#endif
#endif
f
->
code
=
ISDN_TTY_FAX_DR
;
f
->
code
=
ISDN_TTY_FAX_DR
;
cmd
.
driver
=
info
->
isdn_driver
;
isdn_slot_command
(
info
->
isdn_slot
,
ISDN_CMD_FAXCMD
,
&
cmd
);
cmd
.
arg
=
info
->
isdn_channel
;
cmd
.
command
=
ISDN_CMD_FAXCMD
;
isdn_command
(
&
cmd
);
if
(
f
->
phase
==
ISDN_FAX_PHASE_B
)
{
if
(
f
->
phase
==
ISDN_FAX_PHASE_B
)
{
f
->
phase
=
ISDN_FAX_PHASE_C
;
f
->
phase
=
ISDN_FAX_PHASE_C
;
}
else
if
(
f
->
phase
==
ISDN_FAX_PHASE_D
)
{
}
else
if
(
f
->
phase
==
ISDN_FAX_PHASE_D
)
{
...
@@ -855,10 +844,7 @@ isdn_tty_cmd_FCLASS2(char **p, modem_info * info)
...
@@ -855,10 +844,7 @@ isdn_tty_cmd_FCLASS2(char **p, modem_info * info)
#endif
#endif
if
((
f
->
phase
==
ISDN_FAX_PHASE_B
)
||
(
f
->
phase
==
ISDN_FAX_PHASE_D
))
{
if
((
f
->
phase
==
ISDN_FAX_PHASE_B
)
||
(
f
->
phase
==
ISDN_FAX_PHASE_D
))
{
f
->
code
=
ISDN_TTY_FAX_DT
;
f
->
code
=
ISDN_TTY_FAX_DT
;
cmd
.
driver
=
info
->
isdn_driver
;
isdn_slot_command
(
info
->
isdn_slot
,
ISDN_CMD_FAXCMD
,
&
cmd
);
cmd
.
arg
=
info
->
isdn_channel
;
cmd
.
command
=
ISDN_CMD_FAXCMD
;
isdn_command
(
&
cmd
);
if
(
f
->
phase
==
ISDN_FAX_PHASE_D
)
{
if
(
f
->
phase
==
ISDN_FAX_PHASE_D
)
{
f
->
phase
=
ISDN_FAX_PHASE_C
;
f
->
phase
=
ISDN_FAX_PHASE_C
;
isdn_tty_fax_modem_result
(
7
,
info
);
/* CONNECT */
isdn_tty_fax_modem_result
(
7
,
info
);
/* CONNECT */
...
@@ -913,10 +899,7 @@ isdn_tty_cmd_FCLASS2(char **p, modem_info * info)
...
@@ -913,10 +899,7 @@ isdn_tty_cmd_FCLASS2(char **p, modem_info * info)
PARSE_ERROR1
;
PARSE_ERROR1
;
f
->
fet
=
par
;
f
->
fet
=
par
;
f
->
code
=
ISDN_TTY_FAX_ET
;
f
->
code
=
ISDN_TTY_FAX_ET
;
cmd
.
driver
=
info
->
isdn_driver
;
isdn_slot_command
(
info
->
isdn_slot
,
ISDN_CMD_FAXCMD
,
&
cmd
);
cmd
.
arg
=
info
->
isdn_channel
;
cmd
.
command
=
ISDN_CMD_FAXCMD
;
isdn_command
(
&
cmd
);
#ifdef ISDN_TTY_FAX_STAT_DEBUG
#ifdef ISDN_TTY_FAX_STAT_DEBUG
printk
(
KERN_DEBUG
"isdn_tty: Fax FET=%d
\n
"
,
par
);
printk
(
KERN_DEBUG
"isdn_tty: Fax FET=%d
\n
"
,
par
);
#endif
#endif
...
...
include/linux/isdn.h
View file @
eae32582
...
@@ -292,8 +292,7 @@ typedef struct isdn_net_local_s {
...
@@ -292,8 +292,7 @@ typedef struct isdn_net_local_s {
ulong
magic
;
ulong
magic
;
char
name
[
10
];
/* Name of device */
char
name
[
10
];
/* Name of device */
struct
net_device_stats
stats
;
/* Ethernet Statistics */
struct
net_device_stats
stats
;
/* Ethernet Statistics */
int
isdn_device
;
/* Index to isdn-device */
int
isdn_slot
;
/* Index to isdn device/channel */
int
isdn_channel
;
/* Index to isdn-channel */
int
ppp_slot
;
/* PPPD device slot number */
int
ppp_slot
;
/* PPPD device slot number */
int
pre_device
;
/* Preselected isdn-device */
int
pre_device
;
/* Preselected isdn-device */
int
pre_channel
;
/* Preselected isdn-channel */
int
pre_channel
;
/* Preselected isdn-channel */
...
@@ -480,8 +479,7 @@ typedef struct modem_info {
...
@@ -480,8 +479,7 @@ typedef struct modem_info {
/* 2 = B-Channel is up, deliver d.*/
/* 2 = B-Channel is up, deliver d.*/
int
dialing
;
/* Dial in progress or ATA */
int
dialing
;
/* Dial in progress or ATA */
int
rcvsched
;
/* Receive needs schedule */
int
rcvsched
;
/* Receive needs schedule */
int
isdn_driver
;
/* Index to isdn-driver */
int
isdn_slot
;
/* Index to isdn-driver/channel */
int
isdn_channel
;
/* Index to isdn-channel */
int
drv_index
;
/* Index to dev->usage */
int
drv_index
;
/* Index to dev->usage */
int
ncarrier
;
/* Flag: schedule NO CARRIER */
int
ncarrier
;
/* Flag: schedule NO CARRIER */
unsigned
char
last_cause
[
8
];
/* Last cause message */
unsigned
char
last_cause
[
8
];
/* Last cause message */
...
@@ -608,8 +606,6 @@ typedef struct isdn_devt {
...
@@ -608,8 +606,6 @@ typedef struct isdn_devt {
infostruct
*
infochain
;
/* List of open info-devs. */
infostruct
*
infochain
;
/* List of open info-devs. */
wait_queue_head_t
info_waitq
;
/* Wait-Queue for isdninfo */
wait_queue_head_t
info_waitq
;
/* Wait-Queue for isdninfo */
struct
timer_list
timer
;
/* Misc.-function Timer */
struct
timer_list
timer
;
/* Misc.-function Timer */
int
chanmap
[
ISDN_MAX_CHANNELS
];
/* Map minor->device-channel */
int
drvmap
[
ISDN_MAX_CHANNELS
];
/* Map minor->driver-index */
int
usage
[
ISDN_MAX_CHANNELS
];
/* Used by tty/ip/voice */
int
usage
[
ISDN_MAX_CHANNELS
];
/* Used by tty/ip/voice */
char
num
[
ISDN_MAX_CHANNELS
][
ISDN_MSNLEN
];
char
num
[
ISDN_MAX_CHANNELS
][
ISDN_MSNLEN
];
/* Remote number of active ch.*/
/* Remote number of active ch.*/
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment