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
6be5e2cb
Commit
6be5e2cb
authored
May 26, 2003
by
Alexander Viro
Committed by
Linus Torvalds
May 26, 2003
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[PATCH] callout removal: cyclades
callout removal: cyclades
parent
598fdf6c
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
11 additions
and
78 deletions
+11
-78
drivers/char/cyclades.c
drivers/char/cyclades.c
+11
-75
include/linux/cyclades.h
include/linux/cyclades.h
+0
-3
No files found.
drivers/char/cyclades.c
View file @
6be5e2cb
...
@@ -712,7 +712,7 @@ cy_get_user(unsigned long *addr)
...
@@ -712,7 +712,7 @@ cy_get_user(unsigned long *addr)
#define JIFFIES_DIFF(n, j) ((j) - (n))
#define JIFFIES_DIFF(n, j) ((j) - (n))
static
struct
tty_driver
cy_serial_driver
,
cy_callout_driver
;
static
struct
tty_driver
cy_serial_driver
;
static
int
serial_refcount
;
static
int
serial_refcount
;
#ifdef CONFIG_ISA
#ifdef CONFIG_ISA
...
@@ -968,8 +968,7 @@ do_softint(void *private_)
...
@@ -968,8 +968,7 @@ do_softint(void *private_)
if
(
test_and_clear_bit
(
Cy_EVENT_HANGUP
,
&
info
->
event
))
{
if
(
test_and_clear_bit
(
Cy_EVENT_HANGUP
,
&
info
->
event
))
{
tty_hangup
(
info
->
tty
);
tty_hangup
(
info
->
tty
);
wake_up_interruptible
(
&
info
->
open_wait
);
wake_up_interruptible
(
&
info
->
open_wait
);
info
->
flags
&=
~
(
ASYNC_NORMAL_ACTIVE
|
info
->
flags
&=
~
ASYNC_NORMAL_ACTIVE
;
ASYNC_CALLOUT_ACTIVE
);
}
}
if
(
test_and_clear_bit
(
Cy_EVENT_OPEN_WAKEUP
,
&
info
->
event
))
{
if
(
test_and_clear_bit
(
Cy_EVENT_OPEN_WAKEUP
,
&
info
->
event
))
{
wake_up_interruptible
(
&
info
->
open_wait
);
wake_up_interruptible
(
&
info
->
open_wait
);
...
@@ -1448,10 +1447,7 @@ cyy_interrupt(int irq, void *dev_id, struct pt_regs *regs)
...
@@ -1448,10 +1447,7 @@ cyy_interrupt(int irq, void *dev_id, struct pt_regs *regs)
if
(
mdm_status
&
CyDCD
){
if
(
mdm_status
&
CyDCD
){
cy_sched_event
(
info
,
cy_sched_event
(
info
,
Cy_EVENT_OPEN_WAKEUP
);
Cy_EVENT_OPEN_WAKEUP
);
}
else
if
(
!
((
info
->
flags
}
else
{
&
ASYNC_CALLOUT_ACTIVE
)
&&
(
info
->
flags
&
ASYNC_CALLOUT_NOHUP
))){
cy_sched_event
(
info
,
cy_sched_event
(
info
,
Cy_EVENT_HANGUP
);
Cy_EVENT_HANGUP
);
}
}
...
@@ -1823,8 +1819,7 @@ cyz_handle_cmd(struct cyclades_card *cinfo)
...
@@ -1823,8 +1819,7 @@ cyz_handle_cmd(struct cyclades_card *cinfo)
((
u_long
)
param
)
:
((
u_long
)
param
)
:
cy_readl
(
&
ch_ctrl
->
rs_status
))
&
C_RS_DCD
)
{
cy_readl
(
&
ch_ctrl
->
rs_status
))
&
C_RS_DCD
)
{
cy_sched_event
(
info
,
Cy_EVENT_OPEN_WAKEUP
);
cy_sched_event
(
info
,
Cy_EVENT_OPEN_WAKEUP
);
}
else
if
(
!
((
info
->
flags
&
ASYNC_CALLOUT_ACTIVE
)
}
else
{
&&
(
info
->
flags
&
ASYNC_CALLOUT_NOHUP
))){
cy_sched_event
(
info
,
Cy_EVENT_HANGUP
);
cy_sched_event
(
info
,
Cy_EVENT_HANGUP
);
}
}
}
}
...
@@ -2375,37 +2370,12 @@ block_til_ready(struct tty_struct *tty, struct file * filp,
...
@@ -2375,37 +2370,12 @@ block_til_ready(struct tty_struct *tty, struct file * filp,
return
((
info
->
flags
&
ASYNC_HUP_NOTIFY
)
?
-
EAGAIN
:
-
ERESTARTSYS
);
return
((
info
->
flags
&
ASYNC_HUP_NOTIFY
)
?
-
EAGAIN
:
-
ERESTARTSYS
);
}
}
/*
* If this is a callout device, then just make sure the normal
* device isn't being used.
*/
if
(
tty
->
driver
->
subtype
==
SERIAL_TYPE_CALLOUT
)
{
if
(
info
->
flags
&
ASYNC_NORMAL_ACTIVE
){
return
-
EBUSY
;
}
if
((
info
->
flags
&
ASYNC_CALLOUT_ACTIVE
)
&&
(
info
->
flags
&
ASYNC_SESSION_LOCKOUT
)
&&
(
info
->
session
!=
current
->
session
)){
return
-
EBUSY
;
}
if
((
info
->
flags
&
ASYNC_CALLOUT_ACTIVE
)
&&
(
info
->
flags
&
ASYNC_PGRP_LOCKOUT
)
&&
(
info
->
pgrp
!=
current
->
pgrp
)){
return
-
EBUSY
;
}
info
->
flags
|=
ASYNC_CALLOUT_ACTIVE
;
return
0
;
}
/*
/*
* If non-blocking mode is set, then make the check up front
* If non-blocking mode is set, then make the check up front
* and then exit.
* and then exit.
*/
*/
if
((
filp
->
f_flags
&
O_NONBLOCK
)
||
if
((
filp
->
f_flags
&
O_NONBLOCK
)
||
(
tty
->
flags
&
(
1
<<
TTY_IO_ERROR
)))
{
(
tty
->
flags
&
(
1
<<
TTY_IO_ERROR
)))
{
if
(
info
->
flags
&
ASYNC_CALLOUT_ACTIVE
){
return
-
EBUSY
;
}
info
->
flags
|=
ASYNC_NORMAL_ACTIVE
;
info
->
flags
|=
ASYNC_NORMAL_ACTIVE
;
return
0
;
return
0
;
}
}
...
@@ -2442,8 +2412,7 @@ block_til_ready(struct tty_struct *tty, struct file * filp,
...
@@ -2442,8 +2412,7 @@ block_til_ready(struct tty_struct *tty, struct file * filp,
while
(
1
)
{
while
(
1
)
{
CY_LOCK
(
info
,
flags
);
CY_LOCK
(
info
,
flags
);
if
(
!
(
info
->
flags
&
ASYNC_CALLOUT_ACTIVE
)
&&
if
((
tty
->
termios
->
c_cflag
&
CBAUD
)){
(
tty
->
termios
->
c_cflag
&
CBAUD
)){
cy_writeb
((
u_long
)
base_addr
+
(
CyCAR
<<
index
),
(
u_char
)
channel
);
cy_writeb
((
u_long
)
base_addr
+
(
CyCAR
<<
index
),
(
u_char
)
channel
);
cy_writeb
((
u_long
)
base_addr
+
(
CyMSVR1
<<
index
),
CyRTS
);
cy_writeb
((
u_long
)
base_addr
+
(
CyMSVR1
<<
index
),
CyRTS
);
cy_writeb
((
u_long
)
base_addr
+
(
CyMSVR2
<<
index
),
CyDTR
);
cy_writeb
((
u_long
)
base_addr
+
(
CyMSVR2
<<
index
),
CyDTR
);
...
@@ -2466,8 +2435,7 @@ block_til_ready(struct tty_struct *tty, struct file * filp,
...
@@ -2466,8 +2435,7 @@ block_til_ready(struct tty_struct *tty, struct file * filp,
CY_LOCK
(
info
,
flags
);
CY_LOCK
(
info
,
flags
);
cy_writeb
((
u_long
)
base_addr
+
(
CyCAR
<<
index
),
(
u_char
)
channel
);
cy_writeb
((
u_long
)
base_addr
+
(
CyCAR
<<
index
),
(
u_char
)
channel
);
if
(
!
(
info
->
flags
&
ASYNC_CALLOUT_ACTIVE
)
if
(
!
(
info
->
flags
&
ASYNC_CLOSING
)
&&
!
(
info
->
flags
&
ASYNC_CLOSING
)
&&
(
C_CLOCAL
(
tty
)
&&
(
C_CLOCAL
(
tty
)
||
(
cy_readb
(
base_addr
+
(
CyMSVR1
<<
index
))
&
CyDCD
)))
{
||
(
cy_readb
(
base_addr
+
(
CyMSVR1
<<
index
))
&
CyDCD
)))
{
CY_UNLOCK
(
info
,
flags
);
CY_UNLOCK
(
info
,
flags
);
...
@@ -2507,8 +2475,7 @@ block_til_ready(struct tty_struct *tty, struct file * filp,
...
@@ -2507,8 +2475,7 @@ block_til_ready(struct tty_struct *tty, struct file * filp,
ch_ctrl
=
zfw_ctrl
->
ch_ctrl
;
ch_ctrl
=
zfw_ctrl
->
ch_ctrl
;
while
(
1
)
{
while
(
1
)
{
if
(
!
(
info
->
flags
&
ASYNC_CALLOUT_ACTIVE
)
&&
if
((
tty
->
termios
->
c_cflag
&
CBAUD
)){
(
tty
->
termios
->
c_cflag
&
CBAUD
)){
cy_writel
(
&
ch_ctrl
[
channel
].
rs_control
,
cy_writel
(
&
ch_ctrl
[
channel
].
rs_control
,
cy_readl
(
&
ch_ctrl
[
channel
].
rs_control
)
|
cy_readl
(
&
ch_ctrl
[
channel
].
rs_control
)
|
(
C_RS_RTS
|
C_RS_DTR
));
(
C_RS_RTS
|
C_RS_DTR
));
...
@@ -2530,8 +2497,7 @@ block_til_ready(struct tty_struct *tty, struct file * filp,
...
@@ -2530,8 +2497,7 @@ block_til_ready(struct tty_struct *tty, struct file * filp,
-
EAGAIN
:
-
ERESTARTSYS
);
-
EAGAIN
:
-
ERESTARTSYS
);
break
;
break
;
}
}
if
(
!
(
info
->
flags
&
ASYNC_CALLOUT_ACTIVE
)
if
(
!
(
info
->
flags
&
ASYNC_CLOSING
)
&&
!
(
info
->
flags
&
ASYNC_CLOSING
)
&&
(
C_CLOCAL
(
tty
)
&&
(
C_CLOCAL
(
tty
)
||
(
cy_readl
(
&
ch_ctrl
[
channel
].
rs_status
)
&
C_RS_DCD
)))
{
||
(
cy_readl
(
&
ch_ctrl
[
channel
].
rs_status
)
&
C_RS_DCD
)))
{
break
;
break
;
...
@@ -2680,15 +2646,9 @@ cy_open(struct tty_struct *tty, struct file * filp)
...
@@ -2680,15 +2646,9 @@ cy_open(struct tty_struct *tty, struct file * filp)
}
}
if
((
info
->
count
==
1
)
&&
(
info
->
flags
&
ASYNC_SPLIT_TERMIOS
))
{
if
((
info
->
count
==
1
)
&&
(
info
->
flags
&
ASYNC_SPLIT_TERMIOS
))
{
if
(
tty
->
driver
->
subtype
==
SERIAL_TYPE_NORMAL
)
*
tty
->
termios
=
info
->
normal_termios
;
*
tty
->
termios
=
info
->
normal_termios
;
else
*
tty
->
termios
=
info
->
callout_termios
;
}
}
info
->
session
=
current
->
session
;
info
->
pgrp
=
current
->
pgrp
;
#ifdef CY_DEBUG_OPEN
#ifdef CY_DEBUG_OPEN
printk
(
" cyc:cy_open done
\n
"
);
/**/
printk
(
" cyc:cy_open done
\n
"
);
/**/
#endif
#endif
...
@@ -2839,8 +2799,6 @@ cy_close(struct tty_struct *tty, struct file *filp)
...
@@ -2839,8 +2799,6 @@ cy_close(struct tty_struct *tty, struct file *filp)
*/
*/
if
(
info
->
flags
&
ASYNC_NORMAL_ACTIVE
)
if
(
info
->
flags
&
ASYNC_NORMAL_ACTIVE
)
info
->
normal_termios
=
*
tty
->
termios
;
info
->
normal_termios
=
*
tty
->
termios
;
if
(
info
->
flags
&
ASYNC_CALLOUT_ACTIVE
)
info
->
callout_termios
=
*
tty
->
termios
;
/*
/*
* Now we wait for the transmit buffer to clear; and we notify
* Now we wait for the transmit buffer to clear; and we notify
...
@@ -2917,8 +2875,7 @@ cy_close(struct tty_struct *tty, struct file *filp)
...
@@ -2917,8 +2875,7 @@ cy_close(struct tty_struct *tty, struct file *filp)
wake_up_interruptible
(
&
info
->
open_wait
);
wake_up_interruptible
(
&
info
->
open_wait
);
CY_LOCK
(
info
,
flags
);
CY_LOCK
(
info
,
flags
);
}
}
info
->
flags
&=
~
(
ASYNC_NORMAL_ACTIVE
|
ASYNC_CALLOUT_ACTIVE
|
info
->
flags
&=
~
(
ASYNC_NORMAL_ACTIVE
|
ASYNC_CLOSING
);
ASYNC_CLOSING
);
wake_up_interruptible
(
&
info
->
close_wait
);
wake_up_interruptible
(
&
info
->
close_wait
);
#ifdef CY_DEBUG_OTHER
#ifdef CY_DEBUG_OTHER
...
@@ -4701,7 +4658,7 @@ cy_hangup(struct tty_struct *tty)
...
@@ -4701,7 +4658,7 @@ cy_hangup(struct tty_struct *tty)
printk
(
"cyc:cy_hangup (%d): setting count to 0
\n
"
,
current
->
pid
);
printk
(
"cyc:cy_hangup (%d): setting count to 0
\n
"
,
current
->
pid
);
#endif
#endif
info
->
tty
=
0
;
info
->
tty
=
0
;
info
->
flags
&=
~
(
ASYNC_NORMAL_ACTIVE
|
ASYNC_CALLOUT_ACTIVE
)
;
info
->
flags
&=
~
ASYNC_NORMAL_ACTIVE
;
wake_up_interruptible
(
&
info
->
open_wait
);
wake_up_interruptible
(
&
info
->
open_wait
);
}
/* cy_hangup */
}
/* cy_hangup */
...
@@ -5523,22 +5480,8 @@ cy_init(void)
...
@@ -5523,22 +5480,8 @@ cy_init(void)
cy_serial_driver
.
wait_until_sent
=
cy_wait_until_sent
;
cy_serial_driver
.
wait_until_sent
=
cy_wait_until_sent
;
cy_serial_driver
.
read_proc
=
cyclades_get_proc_info
;
cy_serial_driver
.
read_proc
=
cyclades_get_proc_info
;
/*
* The callout device is just like normal device except for
* major number and the subtype code.
*/
cy_callout_driver
=
cy_serial_driver
;
cy_callout_driver
.
name
=
"cub"
;
cy_callout_driver
.
major
=
CYCLADESAUX_MAJOR
;
cy_callout_driver
.
subtype
=
SERIAL_TYPE_CALLOUT
;
cy_callout_driver
.
read_proc
=
0
;
cy_callout_driver
.
proc_entry
=
0
;
if
(
tty_register_driver
(
&
cy_serial_driver
))
if
(
tty_register_driver
(
&
cy_serial_driver
))
panic
(
"Couldn't register Cyclades serial driver
\n
"
);
panic
(
"Couldn't register Cyclades serial driver
\n
"
);
if
(
tty_register_driver
(
&
cy_callout_driver
))
panic
(
"Couldn't register Cyclades callout driver
\n
"
);
for
(
i
=
0
;
i
<
NR_CARDS
;
i
++
)
{
for
(
i
=
0
;
i
<
NR_CARDS
;
i
++
)
{
/* base_addr=0 indicates board not found */
/* base_addr=0 indicates board not found */
...
@@ -5629,8 +5572,6 @@ cy_init(void)
...
@@ -5629,8 +5572,6 @@ cy_init(void)
info
->
default_threshold
=
0
;
info
->
default_threshold
=
0
;
info
->
default_timeout
=
0
;
info
->
default_timeout
=
0
;
INIT_WORK
(
&
info
->
tqueue
,
do_softint
,
info
);
INIT_WORK
(
&
info
->
tqueue
,
do_softint
,
info
);
info
->
callout_termios
=
cy_callout_driver
.
init_termios
;
info
->
normal_termios
=
info
->
normal_termios
=
cy_serial_driver
.
init_termios
;
cy_serial_driver
.
init_termios
;
init_waitqueue_head
(
&
info
->
open_wait
);
init_waitqueue_head
(
&
info
->
open_wait
);
...
@@ -5708,8 +5649,6 @@ cy_init(void)
...
@@ -5708,8 +5649,6 @@ cy_init(void)
info
->
default_threshold
=
0
;
info
->
default_threshold
=
0
;
info
->
default_timeout
=
0
;
info
->
default_timeout
=
0
;
INIT_WORK
(
&
info
->
tqueue
,
do_softint
,
info
);
INIT_WORK
(
&
info
->
tqueue
,
do_softint
,
info
);
info
->
callout_termios
=
cy_callout_driver
.
init_termios
;
info
->
normal_termios
=
info
->
normal_termios
=
cy_serial_driver
.
init_termios
;
cy_serial_driver
.
init_termios
;
init_waitqueue_head
(
&
info
->
open_wait
);
init_waitqueue_head
(
&
info
->
open_wait
);
...
@@ -5761,9 +5700,6 @@ cy_cleanup_module(void)
...
@@ -5761,9 +5700,6 @@ cy_cleanup_module(void)
if
((
e1
=
tty_unregister_driver
(
&
cy_serial_driver
)))
if
((
e1
=
tty_unregister_driver
(
&
cy_serial_driver
)))
printk
(
"cyc: failed to unregister Cyclades serial driver(%d)
\n
"
,
printk
(
"cyc: failed to unregister Cyclades serial driver(%d)
\n
"
,
e1
);
e1
);
if
((
e2
=
tty_unregister_driver
(
&
cy_callout_driver
)))
printk
(
"cyc: failed to unregister Cyclades callout driver (%d)
\n
"
,
e2
);
restore_flags
(
flags
);
restore_flags
(
flags
);
...
...
include/linux/cyclades.h
View file @
6be5e2cb
...
@@ -588,8 +588,6 @@ struct cyclades_port {
...
@@ -588,8 +588,6 @@ struct cyclades_port {
int
breakon
;
int
breakon
;
int
breakoff
;
int
breakoff
;
int
blocked_open
;
/* # of blocked opens */
int
blocked_open
;
/* # of blocked opens */
long
session
;
/* Session of opening process */
long
pgrp
;
/* pgrp of opening process */
unsigned
char
*
xmit_buf
;
unsigned
char
*
xmit_buf
;
int
xmit_head
;
int
xmit_head
;
int
xmit_tail
;
int
xmit_tail
;
...
@@ -599,7 +597,6 @@ struct cyclades_port {
...
@@ -599,7 +597,6 @@ struct cyclades_port {
unsigned
long
jiffies
[
3
];
unsigned
long
jiffies
[
3
];
unsigned
long
rflush_count
;
unsigned
long
rflush_count
;
struct
termios
normal_termios
;
struct
termios
normal_termios
;
struct
termios
callout_termios
;
struct
cyclades_monitor
mon
;
struct
cyclades_monitor
mon
;
struct
cyclades_idle_stats
idle_stats
;
struct
cyclades_idle_stats
idle_stats
;
struct
cyclades_icount
icount
;
struct
cyclades_icount
icount
;
...
...
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