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
Expand all
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
This diff is collapsed.
Click to expand it.
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
This diff is collapsed.
Click to expand it.
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