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
2f1efd68
Commit
2f1efd68
authored
Sep 30, 2002
by
Kai Germaschewski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ISDN: More moving of per-channel stuff into isdn_net_dev
parent
65c9ec4d
Changes
5
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
130 additions
and
106 deletions
+130
-106
drivers/isdn/i4l/isdn_ciscohdlck.c
drivers/isdn/i4l/isdn_ciscohdlck.c
+6
-4
drivers/isdn/i4l/isdn_net.c
drivers/isdn/i4l/isdn_net.c
+78
-65
drivers/isdn/i4l/isdn_net.h
drivers/isdn/i4l/isdn_net.h
+27
-16
drivers/isdn/i4l/isdn_ppp.c
drivers/isdn/i4l/isdn_ppp.c
+8
-10
include/linux/isdn.h
include/linux/isdn.h
+11
-11
No files found.
drivers/isdn/i4l/isdn_ciscohdlck.c
View file @
2f1efd68
...
...
@@ -164,7 +164,7 @@ isdn_net_ciscohdlck_slarp_send_keepalive(unsigned long data)
p
+=
put_u32
(
p
,
lp
->
cisco_yourseq
);
p
+=
put_u16
(
p
,
0xffff
);
// reliablity, always 0xffff
isdn_net_write_super
(
lp
,
skb
);
isdn_net_write_super
(
idev
,
skb
);
lp
->
cisco_timer
.
expires
=
jiffies
+
lp
->
cisco_keepalive_period
*
HZ
;
...
...
@@ -174,6 +174,7 @@ isdn_net_ciscohdlck_slarp_send_keepalive(unsigned long data)
static
void
isdn_net_ciscohdlck_slarp_send_request
(
isdn_net_local
*
lp
)
{
isdn_net_dev
*
idev
=
lp
->
netdev
;
struct
sk_buff
*
skb
;
unsigned
char
*
p
;
...
...
@@ -194,7 +195,7 @@ isdn_net_ciscohdlck_slarp_send_request(isdn_net_local *lp)
p
+=
put_u32
(
p
,
0
);
// netmask
p
+=
put_u16
(
p
,
0
);
// unused
isdn_net_write_super
(
lp
,
skb
);
isdn_net_write_super
(
idev
,
skb
);
}
static
void
...
...
@@ -218,7 +219,7 @@ isdn_ciscohdlck_connected(isdn_net_local *lp)
lp
->
cisco_timer
.
expires
=
jiffies
+
lp
->
cisco_keepalive_period
*
HZ
;
add_timer
(
&
lp
->
cisco_timer
);
}
isdn_net_dev
ice_wake_queue
(
lp
);
isdn_net_dev
_wake_queue
(
lp
->
netdev
);
}
static
void
...
...
@@ -232,6 +233,7 @@ isdn_ciscohdlck_disconnected(isdn_net_local *lp)
static
void
isdn_net_ciscohdlck_slarp_send_reply
(
isdn_net_local
*
lp
)
{
isdn_net_dev
*
idev
=
lp
->
netdev
;
struct
sk_buff
*
skb
;
unsigned
char
*
p
;
struct
in_device
*
in_dev
=
NULL
;
...
...
@@ -265,7 +267,7 @@ isdn_net_ciscohdlck_slarp_send_reply(isdn_net_local *lp)
p
+=
put_u32
(
p
,
mask
);
// netmask
p
+=
put_u16
(
p
,
0
);
// unused
isdn_net_write_super
(
lp
,
skb
);
isdn_net_write_super
(
idev
,
skb
);
}
static
void
...
...
drivers/isdn/i4l/isdn_net.c
View file @
2f1efd68
This diff is collapsed.
Click to expand it.
drivers/isdn/i4l/isdn_net.h
View file @
2f1efd68
...
...
@@ -52,10 +52,10 @@ extern int isdn_net_force_hangup(char *);
extern
int
isdn_net_force_dial
(
char
*
);
extern
isdn_net_dev
*
isdn_net_findif
(
char
*
);
extern
int
isdn_net_rcv_skb
(
int
,
struct
sk_buff
*
);
extern
int
isdn_net_dial_req
(
isdn_net_
local
*
);
extern
void
isdn_net_writebuf_skb
(
isdn_net_
local
*
lp
,
struct
sk_buff
*
skb
);
extern
void
isdn_net_write_super
(
isdn_net_
local
*
lp
,
struct
sk_buff
*
skb
);
extern
int
isdn_net_online
(
isdn_net_dev
*
idev
);
extern
int
isdn_net_dial_req
(
isdn_net_
dev
*
);
extern
void
isdn_net_writebuf_skb
(
isdn_net_
dev
*
,
struct
sk_buff
*
skb
);
extern
void
isdn_net_write_super
(
isdn_net_
dev
*
,
struct
sk_buff
*
skb
);
extern
int
isdn_net_online
(
isdn_net_dev
*
);
static
inline
void
isdn_net_reset_huptimer
(
isdn_net_dev
*
idev
,
isdn_net_dev
*
idev2
)
...
...
@@ -69,9 +69,10 @@ isdn_net_reset_huptimer(isdn_net_dev *idev, isdn_net_dev *idev2)
/*
* is this particular channel busy?
*/
static
__inline__
int
isdn_net_lp_busy
(
isdn_net_local
*
lp
)
static
inline
int
isdn_net_dev_busy
(
isdn_net_dev
*
idev
)
{
if
(
atomic_read
(
&
lp
->
frame_cnt
)
<
ISDN_NET_MAX_QUEUE_LENGTH
)
if
(
atomic_read
(
&
idev
->
frame_cnt
)
<
ISDN_NET_MAX_QUEUE_LENGTH
)
return
0
;
else
return
1
;
...
...
@@ -81,34 +82,39 @@ static __inline__ int isdn_net_lp_busy(isdn_net_local *lp)
* For the given net device, this will get a non-busy channel out of the
* corresponding bundle. The returned channel is locked.
*/
static
__inline__
isdn_net_local
*
isdn_net_get_locked_lp
(
isdn_net_dev
*
nd
)
static
inline
isdn_net_dev
*
isdn_net_get_locked_dev
(
isdn_net_dev
*
nd
)
{
unsigned
long
flags
;
isdn_net_local
*
lp
;
isdn_net_dev
*
idev
;
spin_lock_irqsave
(
&
nd
->
queue_lock
,
flags
);
lp
=
nd
->
queue
;
/* get lp on top of queue */
spin_lock_bh
(
&
nd
->
queue
->
xmit_lock
);
while
(
isdn_net_lp_busy
(
nd
->
queue
))
{
spin_unlock_bh
(
&
nd
->
queue
->
xmit_lock
);
idev
=
nd
->
queue
->
netdev
;
spin_lock_bh
(
&
idev
->
xmit_lock
);
while
(
isdn_net_dev_busy
(
idev
))
{
spin_unlock_bh
(
&
idev
->
xmit_lock
);
nd
->
queue
=
nd
->
queue
->
next
;
idev
=
nd
->
queue
->
netdev
;
if
(
nd
->
queue
==
lp
)
{
/* not found -- should never happen */
lp
=
NULL
;
goto
errout
;
}
spin_lock_bh
(
&
nd
->
queue
->
xmit_lock
);
spin_lock_bh
(
&
idev
->
xmit_lock
);
}
lp
=
nd
->
queue
;
nd
->
queue
=
nd
->
queue
->
next
;
errout:
spin_unlock_irqrestore
(
&
nd
->
queue_lock
,
flags
);
return
lp
;
return
lp
?
lp
->
netdev
:
NULL
;
}
/*
* add a channel to a bundle
*/
static
__inline__
void
isdn_net_add_to_bundle
(
isdn_net_dev
*
nd
,
isdn_net_local
*
nlp
)
static
inline
void
isdn_net_add_to_bundle
(
isdn_net_dev
*
nd
,
isdn_net_local
*
nlp
)
{
isdn_net_local
*
lp
;
unsigned
long
flags
;
...
...
@@ -127,7 +133,8 @@ static __inline__ void isdn_net_add_to_bundle(isdn_net_dev *nd, isdn_net_local *
/*
* remove a channel from the bundle it belongs to
*/
static
__inline__
void
isdn_net_rm_from_bundle
(
isdn_net_local
*
lp
)
static
inline
void
isdn_net_rm_from_bundle
(
isdn_net_local
*
lp
)
{
isdn_net_local
*
master_lp
=
lp
;
unsigned
long
flags
;
...
...
@@ -152,15 +159,19 @@ static __inline__ void isdn_net_rm_from_bundle(isdn_net_local *lp)
* wake up the network -> net_device queue.
* For slaves, wake the corresponding master interface.
*/
static
inline
void
isdn_net_device_wake_queue
(
isdn_net_local
*
lp
)
static
inline
void
isdn_net_dev_wake_queue
(
isdn_net_dev
*
idev
)
{
isdn_net_local
*
lp
=
&
idev
->
local
;
if
(
lp
->
master
)
netif_wake_queue
(
lp
->
master
);
else
netif_wake_queue
(
&
lp
->
netdev
->
dev
);
}
static
inline
int
isdn_net_bound
(
isdn_net_dev
*
idev
)
static
inline
int
isdn_net_bound
(
isdn_net_dev
*
idev
)
{
return
idev
->
isdn_slot
>=
0
;
}
...
...
drivers/isdn/i4l/isdn_ppp.c
View file @
2f1efd68
...
...
@@ -585,7 +585,6 @@ static unsigned int
isdn_ppp_poll
(
struct
file
*
file
,
poll_table
*
wait
)
{
unsigned
int
mask
;
unsigned
long
flags
;
struct
ippp_struct
*
is
;
is
=
file
->
private_data
;
...
...
@@ -782,7 +781,7 @@ isdn_ppp_write(struct file *file, const char *buf, size_t count, loff_t *off)
isdn_ppp_send_ccp
(
idev
,
&
idev
->
local
,
skb
);
/* keeps CCP/compression states in sync */
isdn_net_write_super
(
&
idev
->
local
,
skb
);
isdn_net_write_super
(
idev
,
skb
);
}
}
retval
=
count
;
...
...
@@ -1127,7 +1126,7 @@ static unsigned char *isdn_ppp_skb_push(struct sk_buff **skb_p,int len)
int
isdn_ppp_xmit
(
struct
sk_buff
*
skb
,
struct
net_device
*
netdev
)
{
isdn_net_local
*
lp
,
*
mlp
;
isdn_net_local
*
mlp
;
isdn_net_dev
*
idev
;
isdn_net_dev
*
nd
;
unsigned
int
proto
=
PPP_IP
;
/* 0x21 */
...
...
@@ -1166,13 +1165,12 @@ isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev)
return
0
;
}
lp
=
isdn_net_get_locked_lp
(
nd
);
if
(
!
lp
)
{
idev
=
isdn_net_get_locked_dev
(
nd
);
if
(
!
idev
)
{
printk
(
KERN_WARNING
"%s: all channels busy - requeuing!
\n
"
,
netdev
->
name
);
return
1
;
}
/* we have our lp locked from now on */
idev
=
lp
->
netdev
;
slot
=
idev
->
ppp_slot
;
if
(
slot
<
0
||
slot
>
ISDN_MAX_CHANNELS
)
{
printk
(
KERN_ERR
"isdn_ppp_xmit: lp->ppp_slot(%d)
\n
"
,
...
...
@@ -1325,10 +1323,10 @@ isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev)
isdn_ppp_frame_log
(
"xmit"
,
skb
->
data
,
skb
->
len
,
32
,
ipt
->
unit
,
idev
->
ppp_slot
);
}
isdn_net_writebuf_skb
(
lp
,
skb
);
isdn_net_writebuf_skb
(
idev
,
skb
);
unlock:
spin_unlock_bh
(
&
lp
->
xmit_lock
);
spin_unlock_bh
(
&
idev
->
xmit_lock
);
return
0
;
}
...
...
@@ -1938,7 +1936,7 @@ isdn_ppp_dial_slave(char *name)
if
(
!
sdev
)
return
2
;
isdn_net_dial_req
((
isdn_net_local
*
)
sdev
->
pri
v
);
isdn_net_dial_req
((
(
isdn_net_local
*
)
sdev
->
priv
)
->
netde
v
);
return
0
;
#else
return
-
1
;
...
...
@@ -2079,7 +2077,7 @@ static void isdn_ppp_ccp_xmit_reset(struct ippp_struct *is, int proto,
printk
(
KERN_DEBUG
"Sending CCP Frame:
\n
"
);
isdn_ppp_frame_log
(
"ccp-xmit"
,
skb
->
data
,
skb
->
len
,
32
,
is
->
unit
,
idev
->
ppp_slot
);
isdn_net_write_super
(
&
idev
->
local
,
skb
);
isdn_net_write_super
(
idev
,
skb
);
}
/* Allocate the reset state vector */
...
...
include/linux/isdn.h
View file @
2f1efd68
...
...
@@ -329,8 +329,6 @@ typedef struct isdn_net_local_s {
u_char
l2_proto
;
/* Layer-2-protocol */
u_char
l3_proto
;
/* Layer-3-protocol */
int
sqfull
;
/* Flag: netdev-queue overloaded */
ulong
sqfull_stamp
;
/* Start-Time of overload */
ulong
slavedelay
;
/* Dynamic bundling delaytime */
int
triggercps
;
/* BogoCPS needed for trigger slave */
struct
list_head
phone
[
2
];
/* List of remote-phonenumbers */
...
...
@@ -341,14 +339,6 @@ typedef struct isdn_net_local_s {
struct
isdn_net_local_s
*
next
;
/* Ptr to next link in bundle */
struct
isdn_net_local_s
*
last
;
/* Ptr to last link in bundle */
struct
isdn_net_dev_s
*
netdev
;
/* Ptr to netdev */
struct
sk_buff_head
super_tx_queue
;
/* List of supervisory frames to */
/* be transmitted asap */
atomic_t
frame_cnt
;
/* number of frames currently */
/* queued in HL driver */
/* Ptr to orig. hard_header_cache */
spinlock_t
xmit_lock
;
/* used to protect the xmit path of */
/* a particular channel (including */
/* the frame_cnt */
#ifdef CONFIG_ISDN_X25
struct
concap_device_ops
*
dops
;
/* callbacks used by encapsulator */
...
...
@@ -362,7 +352,6 @@ typedef struct isdn_net_local_s {
char
cisco_line_state
;
/* state of line according to keepalive packets */
char
cisco_debserint
;
/* debugging flag of cisco hdlc with slarp */
struct
timer_list
cisco_timer
;
struct
tq_struct
tqueue
;
struct
isdn_netif_ops
*
ops
;
}
isdn_net_local
;
...
...
@@ -386,6 +375,8 @@ typedef struct isdn_net_dev_s {
int
cps
;
/* current speed of this interface */
int
transcount
;
/* byte-counter for cps-calculation */
int
last_jiffies
;
/* when transcount was reset */
int
sqfull
;
/* Flag: netdev-queue overloaded */
ulong
sqfull_stamp
;
/* Start-Time of overload */
struct
timer_list
hup_timer
;
/* auto hangup timer */
int
huptimer
;
/* Timeout-counter for auto-hangup */
...
...
@@ -397,6 +388,15 @@ typedef struct isdn_net_dev_s {
int
pppbind
;
/* ippp device for bindings */
int
ppp_slot
;
/* PPPD device slot number */
spinlock_t
xmit_lock
;
/* used to protect the xmit path of */
/* a particular channel (including */
/* the frame_cnt */
struct
sk_buff_head
super_tx_queue
;
/* List of supervisory frames to */
/* be transmitted asap */
atomic_t
frame_cnt
;
/* number of frames currently */
/* queued in HL driver */
struct
tq_struct
tqueue
;
isdn_net_local
*
queue
;
/* circular list of all bundled
channels, which are currently
online */
...
...
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