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
3b1022c5
Commit
3b1022c5
authored
Oct 11, 2002
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
http://linux-isdn.bkbits.net/linux-2.5.isdn
into home.transmeta.com:/home/torvalds/v2.5/linux
parents
798c67c3
c2ee3a2d
Changes
9
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
366 additions
and
335 deletions
+366
-335
drivers/isdn/i4l/isdn_common.c
drivers/isdn/i4l/isdn_common.c
+26
-51
drivers/isdn/i4l/isdn_common.h
drivers/isdn/i4l/isdn_common.h
+1
-2
drivers/isdn/i4l/isdn_concap.c
drivers/isdn/i4l/isdn_concap.c
+0
-4
drivers/isdn/i4l/isdn_net.c
drivers/isdn/i4l/isdn_net.c
+0
-157
drivers/isdn/i4l/isdn_net.h
drivers/isdn/i4l/isdn_net.h
+0
-4
drivers/isdn/i4l/isdn_net_lib.c
drivers/isdn/i4l/isdn_net_lib.c
+330
-109
drivers/isdn/i4l/isdn_tty.c
drivers/isdn/i4l/isdn_tty.c
+1
-1
drivers/isdn/i4l/isdn_ttyfax.c
drivers/isdn/i4l/isdn_ttyfax.c
+1
-1
include/linux/isdn.h
include/linux/isdn.h
+7
-6
No files found.
drivers/isdn/i4l/isdn_common.c
View file @
3b1022c5
...
...
@@ -503,11 +503,14 @@ isdn_status_callback(isdn_ctrl * c)
retval
=
2
;
}
break
;
case
1
:
case
1
:
/* incoming call accepted by net interface */
list_for_each
(
l
,
&
isdn_net_devs
)
{
isdn_net_dev
*
p
=
list_entry
(
l
,
isdn_net_dev
,
global_list
);
if
(
p
->
isdn_slot
==
i
)
{
strcpy
(
cmd
.
parm
.
setup
.
eazmsn
,
p
->
mlp
->
msn
);
isdn_slot_set_usage
(
i
,
(
isdn_slot_usage
(
i
)
&
ISDN_USAGE_EXCLUSIVE
)
|
ISDN_USAGE_NET
);
strcpy
(
isdn_slot_num
(
i
),
c
->
parm
.
setup
.
phone
);
isdn_slot_command
(
i
,
ISDN_CMD_ACCEPTD
,
&
cmd
);
retval
=
1
;
break
;
...
...
@@ -1535,26 +1538,20 @@ isdn_get_free_slot(int usage, int l2_proto, int l3_proto,
if
(
USG_NONE
(
slot
[
i
].
usage
)
&&
(
slot
[
i
].
di
!=
-
1
))
{
int
d
=
slot
[
i
].
di
;
if
((
slot
[
i
].
usage
&
ISDN_USAGE_EXCLUSIVE
)
&&
((
pre_dev
!=
d
)
||
(
pre_chan
!=
slot
[
i
].
ch
)))
continue
;
if
(
!
strcmp
(
isdn_map_eaz2msn
(
msn
,
d
),
"-"
))
continue
;
if
(
slot
[
i
].
usage
&
ISDN_USAGE_DISABLED
)
continue
;
/* usage not allowed */
if
(
dev
->
drv
[
d
]
->
flags
&
DRV_FLAG_RUNNING
)
{
if
(
!
dev
->
drv
[
d
]
->
flags
&
DRV_FLAG_RUNNING
)
continue
;
if
(((
dev
->
drv
[
d
]
->
interface
->
features
&
features
)
==
features
)
||
(((
dev
->
drv
[
d
]
->
interface
->
features
&
vfeatures
)
==
vfeatures
)
&&
(
dev
->
drv
[
d
]
->
interface
->
features
&
ISDN_FEATURE_L2_TRANS
)))
{
if
((
pre_dev
<
0
)
||
(
pre_chan
<
0
))
{
isdn_slot_set_usage
(
i
,
(
isdn_slot_usage
(
i
)
&
ISDN_USAGE_EXCLUSIVE
)
|
usage
);
if
(
pre_dev
<
0
||
pre_chan
<
0
||
(
pre_dev
==
d
&&
pre_chan
==
slot
[
i
].
ch
))
{
isdn_slot_set_usage
(
i
,
usage
);
restore_flags
(
flags
);
return
i
;
}
else
if
((
pre_dev
==
d
)
&&
(
pre_chan
==
slot
[
i
].
ch
))
{
isdn_slot_set_usage
(
i
,
(
isdn_slot_usage
(
i
)
&
ISDN_USAGE_EXCLUSIVE
)
|
usage
);
restore_flags
(
flags
);
return
i
;
}
}
}
}
...
...
@@ -1571,17 +1568,16 @@ isdn_free_channel(int di, int ch, int usage)
int
sl
;
sl
=
isdn_dc2minor
(
di
,
ch
);
isdn_slot_free
(
sl
,
usage
);
isdn_slot_free
(
sl
);
}
void
isdn_slot_free
(
int
sl
,
int
usage
)
isdn_slot_free
(
int
sl
)
{
unsigned
long
flags
;
save_flags
(
flags
);
cli
();
if
(
!
usage
||
(
slot
[
sl
].
usage
&
ISDN_USAGE_MASK
)
==
usage
)
{
strcpy
(
isdn_slot_num
(
sl
),
"???"
);
slot
[
sl
].
ibytes
=
0
;
slot
[
sl
].
obytes
=
0
;
...
...
@@ -1591,30 +1587,8 @@ isdn_slot_free(int sl, int usage)
isdn_v110_close
(
slot
[
sl
].
iv110
.
v110
);
slot
[
sl
].
iv110
.
v110
=
NULL
;
// 20.10.99 JIM, try to reinitialize v110 !
isdn_slot_set_usage
(
sl
,
isdn_slot_usage
(
sl
)
&
(
ISDN_USAGE_NONE
|
ISDN_USAGE_EXCLUSIVE
)
);
isdn_slot_set_usage
(
sl
,
ISDN_USAGE_NONE
);
skb_queue_purge
(
&
dev
->
drv
[
isdn_slot_driver
(
sl
)]
->
rpqueue
[
isdn_slot_channel
(
sl
)]);
}
restore_flags
(
flags
);
}
/*
* Cancel Exclusive-Flag for ISDN-channel
*/
void
isdn_unexclusive_channel
(
int
di
,
int
ch
)
{
int
i
;
ulong
flags
;
save_flags
(
flags
);
cli
();
for
(
i
=
0
;
i
<
ISDN_MAX_CHANNELS
;
i
++
)
if
((
slot
[
i
].
di
==
di
)
&&
(
slot
[
i
].
ch
==
ch
))
{
isdn_slot_set_usage
(
i
,
isdn_slot_usage
(
i
)
&
~
ISDN_USAGE_EXCLUSIVE
);
restore_flags
(
flags
);
return
;
}
restore_flags
(
flags
);
}
...
...
@@ -1959,6 +1933,7 @@ isdn_slot_command(int sl, int cmd, isdn_ctrl *ctrl)
case
ISDN_CMD_DIAL
:
if
(
dev
->
global_flags
&
ISDN_GLOBAL_STOPPED
)
return
-
EBUSY
;
/* fall through */
default:
ctrl
->
arg
=
isdn_slot_channel
(
sl
);
...
...
drivers/isdn/i4l/isdn_common.h
View file @
3b1022c5
...
...
@@ -64,7 +64,6 @@ extern int isdn_dc2minor(int di, int ch);
extern
void
isdn_info_update
(
void
);
extern
char
*
isdn_map_eaz2msn
(
char
*
msn
,
int
di
);
extern
void
isdn_timer_ctrl
(
int
tf
,
int
onoff
);
extern
void
isdn_unexclusive_channel
(
int
di
,
int
ch
);
extern
int
isdn_getnum
(
char
**
);
extern
int
isdn_msncmp
(
const
char
*
,
const
char
*
);
extern
int
isdn_add_channels
(
driver
*
,
int
,
int
,
int
);
...
...
@@ -85,7 +84,7 @@ struct dial_info {
};
extern
int
isdn_get_free_slot
(
int
,
int
,
int
,
int
,
int
,
char
*
);
extern
void
isdn_slot_free
(
int
slot
,
int
usage
);
extern
void
isdn_slot_free
(
int
slot
);
extern
void
isdn_slot_all_eaz
(
int
slot
);
extern
int
isdn_slot_command
(
int
slot
,
int
cmd
,
isdn_ctrl
*
);
extern
int
isdn_slot_dial
(
int
slot
,
struct
dial_info
*
dial
);
...
...
drivers/isdn/i4l/isdn_concap.c
View file @
3b1022c5
...
...
@@ -21,8 +21,6 @@
#include "isdn_concap.h"
#include <linux/if_arp.h>
#ifdef CONFIG_ISDN_X25
/* The following set of device service operations are for encapsulation
protocols that require for reliable datalink semantics. That means:
...
...
@@ -255,5 +253,3 @@ struct isdn_netif_ops isdn_x25_ops = {
.
open
=
isdn_x25_open
,
.
close
=
isdn_x25_close
,
};
#endif
/* CONFIG_ISDN_X25 */
drivers/isdn/i4l/isdn_net.c
View file @
3b1022c5
...
...
@@ -423,163 +423,6 @@ isdn_net_rcv_skb(int idx, struct sk_buff *skb)
return
0
;
}
/*
* An incoming call-request has arrived.
* Search the interface-chain for an appropriate interface.
* If found, connect the interface to the ISDN-channel and initiate
* D- and B-Channel-setup. If secure-flag is set, accept only
* configured phone-numbers. If callback-flag is set, initiate
* callback-dialing.
*
* Return-Value: 0 = No appropriate interface for this call.
* 1 = Call accepted
* 2 = Reject call, wait cbdelay, then call back
* 3 = Reject call
* 4 = Wait cbdelay, then call back
* 5 = No appropriate interface for this call,
* would eventually match if CID was longer.
*/
int
isdn_net_find_icall
(
int
di
,
int
ch
,
int
idx
,
setup_parm
*
setup
)
{
char
*
eaz
;
unsigned
char
si1
,
si2
;
int
match_more
=
0
;
int
retval
;
struct
list_head
*
l
;
struct
isdn_net_phone
*
n
;
ulong
flags
;
char
nr
[
32
];
char
*
my_eaz
;
int
slot
=
isdn_dc2minor
(
di
,
ch
);
/* Search name in netdev-chain */
save_flags
(
flags
);
cli
();
if
(
!
setup
->
phone
[
0
])
{
nr
[
0
]
=
'0'
;
nr
[
1
]
=
'\0'
;
printk
(
KERN_INFO
"isdn_net: Incoming call without OAD, assuming '0'
\n
"
);
}
else
{
strcpy
(
nr
,
setup
->
phone
);
}
si1
=
setup
->
si1
;
si2
=
setup
->
si2
;
if
(
!
setup
->
eazmsn
[
0
])
{
printk
(
KERN_WARNING
"isdn_net: Incoming call without CPN, assuming '0'
\n
"
);
eaz
=
"0"
;
}
else
{
eaz
=
setup
->
eazmsn
;
}
if
(
dev
->
net_verbose
>
1
)
printk
(
KERN_INFO
"isdn_net: call from %s,%d,%d -> %s
\n
"
,
nr
,
si1
,
si2
,
eaz
);
/* Accept DATA and VOICE calls at this stage
local eaz is checked later for allowed call types */
if
((
si1
!=
7
)
&&
(
si1
!=
1
))
{
restore_flags
(
flags
);
if
(
dev
->
net_verbose
>
1
)
printk
(
KERN_INFO
"isdn_net: Service-Indicator not 1 or 7, ignored
\n
"
);
return
0
;
}
n
=
NULL
;
dbg_net_icall
(
"n_fi: di=%d ch=%d idx=%d usg=%d
\n
"
,
di
,
ch
,
idx
,
isdn_slot_usage
(
idx
));
list_for_each
(
l
,
&
isdn_net_devs
)
{
isdn_net_dev
*
idev
=
list_entry
(
l
,
isdn_net_dev
,
global_list
);
isdn_net_local
*
mlp
=
idev
->
mlp
;
/* check acceptable call types for DOV */
dbg_net_icall
(
"n_fi: if='%s', l.msn=%s, l.flags=%#x, l.dstate=%d
\n
"
,
idev
->
name
,
mlp
->
msn
,
mlp
->
flags
,
idev
->
fi
.
state
);
my_eaz
=
isdn_slot_map_eaz2msn
(
slot
,
mlp
->
msn
);
if
(
si1
==
1
)
{
/* it's a DOV call, check if we allow it */
if
(
*
my_eaz
==
'v'
||
*
my_eaz
==
'V'
||
*
my_eaz
==
'b'
||
*
my_eaz
==
'B'
)
my_eaz
++
;
/* skip to allow a match */
else
continue
;
/* force non match */
}
else
{
/* it's a DATA call, check if we allow it */
if
(
*
my_eaz
==
'b'
||
*
my_eaz
==
'B'
)
my_eaz
++
;
/* skip to allow a match */
}
switch
(
isdn_msncmp
(
eaz
,
my_eaz
))
{
case
1
:
continue
;
case
2
:
match_more
=
1
;
continue
;
}
if
(
isdn_net_bound
(
idev
))
continue
;
if
(
!
USG_NONE
(
isdn_slot_usage
(
idx
)))
continue
;
dbg_net_icall
(
"n_fi: match1, pdev=%d pch=%d
\n
"
,
idev
->
pre_device
,
idev
->
pre_channel
);
if
(
isdn_slot_usage
(
idx
)
&
ISDN_USAGE_EXCLUSIVE
&&
(
idev
->
pre_channel
!=
ch
||
idev
->
pre_device
!=
di
))
{
dbg_net_icall
(
"n_fi: excl check failed
\n
"
);
continue
;
}
dbg_net_icall
(
"n_fi: match2
\n
"
);
if
(
mlp
->
flags
&
ISDN_NET_SECURE
)
{
list_for_each_entry
(
n
,
&
mlp
->
phone
[
0
],
list
)
{
if
(
!
isdn_msncmp
(
nr
,
n
->
num
))
{
goto
found
;
}
}
continue
;
}
found:
dbg_net_icall
(
"n_fi: match3
\n
"
);
/* matching interface found */
/*
* Is the state STOPPED?
* If so, no dialin is allowed,
* so reject actively.
* */
if
(
ISDN_NET_DIALMODE
(
*
mlp
)
==
ISDN_NET_DM_OFF
)
{
restore_flags
(
flags
);
printk
(
KERN_INFO
"incoming call, interface %s `stopped' -> rejected
\n
"
,
idev
->
name
);
return
3
;
}
/*
* Is the interface up?
* If not, reject the call actively.
*/
if
(
!
isdn_net_device_started
(
idev
))
{
restore_flags
(
flags
);
printk
(
KERN_INFO
"%s: incoming call, interface down -> rejected
\n
"
,
idev
->
name
);
return
3
;
}
if
(
mlp
->
flags
&
ISDN_NET_CALLBACK
)
{
retval
=
isdn_net_do_callback
(
idev
);
restore_flags
(
flags
);
return
retval
;
}
printk
(
KERN_DEBUG
"%s: call from %s -> %s accepted
\n
"
,
idev
->
name
,
nr
,
eaz
);
isdn_net_accept
(
idev
,
idx
,
nr
);
restore_flags
(
flags
);
return
1
;
}
if
(
dev
->
net_verbose
)
printk
(
KERN_INFO
"isdn_net: call from %s -> %d %s ignored
\n
"
,
nr
,
slot
,
eaz
);
restore_flags
(
flags
);
return
(
match_more
==
2
)
?
5
:
0
;
}
/*
* This is called from certain upper protocol layers (multilink ppp
* and x25iface encapsulation module) that want to initiate dialing
...
...
drivers/isdn/i4l/isdn_net.h
View file @
3b1022c5
...
...
@@ -43,11 +43,7 @@ extern int register_isdn_netif(int encap, struct isdn_netif_ops *ops);
extern
int
isdn_net_autodial
(
struct
sk_buff
*
skb
,
struct
net_device
*
ndev
);
extern
int
isdn_net_start_xmit
(
struct
sk_buff
*
skb
,
struct
net_device
*
ndev
);
extern
int
isdn_net_bind_channel
(
isdn_net_dev
*
idev
,
int
slot
);
extern
void
isdn_net_unbind_channel
(
isdn_net_dev
*
idev
);
extern
int
isdn_net_dial
(
isdn_net_dev
*
idev
);
extern
void
isdn_net_accept
(
isdn_net_dev
*
idev
,
int
slot
,
char
*
nr
);
extern
int
isdn_net_do_callback
(
isdn_net_dev
*
idev
);
extern
int
isdn_net_bsent
(
isdn_net_dev
*
idev
,
isdn_ctrl
*
c
);
...
...
drivers/isdn/i4l/isdn_net_lib.c
View file @
3b1022c5
This diff is collapsed.
Click to expand it.
drivers/isdn/i4l/isdn_tty.c
View file @
3b1022c5
...
...
@@ -745,7 +745,7 @@ isdn_tty_modem_hup(modem_info * info, int local)
isdn_slot_all_eaz
(
slot
);
info
->
emu
.
mdmreg
[
REG_RINGCNT
]
=
0
;
isdn_slot_free
(
slot
,
0
);
isdn_slot_free
(
slot
);
isdn_slot_set_m_idx
(
slot
,
-
1
);
info
->
isdn_slot
=
-
1
;
}
...
...
drivers/isdn/i4l/isdn_ttyfax.c
View file @
3b1022c5
...
...
@@ -382,7 +382,7 @@ isdn_tty_cmd_FCLASS1(char **p, modem_info * info)
info
->
isdn_slot
=
i
;
isdn_slot_set_m_idx
(
i
,
info
->
line
);
isdn_slot_command
(
info
->
isdn_slot
,
ISDN_CMD_FAXCMD
,
&
c
);
isdn_slot_free
(
info
->
isdn_slot
,
ISDN_USAGE_FAX
);
isdn_slot_free
(
info
->
isdn_slot
);
isdn_slot_set_m_idx
(
i
,
-
1
);
info
->
isdn_slot
=
-
1
;
restore_flags
(
flags
);
...
...
include/linux/isdn.h
View file @
3b1022c5
...
...
@@ -339,10 +339,11 @@ typedef struct isdn_net_local_s {
/* phone[1] = Outgoing Numbers */
struct
list_head
slaves
;
/* list of all bundled channels */
struct
list_head
online
;
/* circular list of all bundled
channels, which are currently
online */
spinlock_t
online_lock
;
/* lock to protect queue */
struct
list_head
online
;
/* list of all bundled channels,
which are currently online */
spinlock_t
online_lock
;
/* lock to protect online list */
struct
list_head
running_devs
;
/* member of global running_devs */
atomic_t
refcnt
;
/* references held by ISDN code */
#ifdef CONFIG_ISDN_X25
struct
concap_device_ops
*
dops
;
/* callbacks used by encapsulator */
...
...
@@ -403,8 +404,8 @@ typedef struct isdn_net_dev_s {
isdn_net_local
*
mlp
;
/* Ptr to master device for all devs*/
struct
list_head
slaves
;
/*
Members of local->slaves
*/
struct
list_head
online
;
/*
Members of local->online
*/
struct
list_head
slaves
;
/*
member of local->slaves
*/
struct
list_head
online
;
/*
member of local->online
*/
char
name
[
10
];
/* Name of device */
struct
list_head
global_list
;
/* global list of all isdn_net_devs */
...
...
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