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
04da6b90
Commit
04da6b90
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: ip2
callout removal: ip2
parent
8c368f33
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
12 additions
and
89 deletions
+12
-89
drivers/char/ip2/i2lib.h
drivers/char/ip2/i2lib.h
+0
-3
drivers/char/ip2main.c
drivers/char/ip2main.c
+12
-86
No files found.
drivers/char/ip2/i2lib.h
View file @
04da6b90
...
@@ -92,8 +92,6 @@ typedef struct _i2ChanStr
...
@@ -92,8 +92,6 @@ typedef struct _i2ChanStr
int
throttled
;
// Set if upper layer can take no data
int
throttled
;
// Set if upper layer can take no data
int
flags
;
// Defined in tty.h
int
flags
;
// Defined in tty.h
int
session
;
// Defined in tty.h
int
pgrp
;
// Defined in tty.h
PWAITQ
open_wait
;
// Pointer for OS sleep function.
PWAITQ
open_wait
;
// Pointer for OS sleep function.
PWAITQ
close_wait
;
// Pointer for OS sleep function.
PWAITQ
close_wait
;
// Pointer for OS sleep function.
...
@@ -104,7 +102,6 @@ typedef struct _i2ChanStr
...
@@ -104,7 +102,6 @@ typedef struct _i2ChanStr
wait_queue_head_t
pBookmarkWait
;
// Used by i2DrainOutput
wait_queue_head_t
pBookmarkWait
;
// Used by i2DrainOutput
struct
termios
NormalTermios
;
struct
termios
NormalTermios
;
struct
termios
CalloutTermios
;
int
BaudBase
;
int
BaudBase
;
int
BaudDivisor
;
int
BaudDivisor
;
...
...
drivers/char/ip2main.c
View file @
04da6b90
...
@@ -194,7 +194,6 @@
...
@@ -194,7 +194,6 @@
#define ioremap(a,b) vremap((a),(b))
#define ioremap(a,b) vremap((a),(b))
#define iounmap(a) vfree((a))
#define iounmap(a) vfree((a))
#define SERIAL_TYPE_NORMAL 1
#define SERIAL_TYPE_NORMAL 1
#define SERIAL_TYPE_CALLOUT 2
#define schedule_timeout(a){current->timeout = jiffies + (a); schedule();}
#define schedule_timeout(a){current->timeout = jiffies + (a); schedule();}
#define signal_pending(a) ((a)->signal & ~(a)->blocked)
#define signal_pending(a) ((a)->signal & ~(a)->blocked)
#define in_interrupt() intr_count
#define in_interrupt() intr_count
...
@@ -232,16 +231,13 @@ static char *pcVersion = "1.2.14";
...
@@ -232,16 +231,13 @@ static char *pcVersion = "1.2.14";
static
char
*
pcDriver_name
=
"ip2"
;
static
char
*
pcDriver_name
=
"ip2"
;
#ifdef CONFIG_DEVFS_FS
#ifdef CONFIG_DEVFS_FS
static
char
*
pcTty
=
"tts/F%d"
;
static
char
*
pcTty
=
"tts/F%d"
;
static
char
*
pcCallout
=
"cua/F%d"
;
#else
#else
static
char
*
pcTty
=
"ttyF"
;
static
char
*
pcTty
=
"ttyF"
;
static
char
*
pcCallout
=
"cuf"
;
#endif
#endif
static
char
*
pcIpl
=
"ip2ipl"
;
static
char
*
pcIpl
=
"ip2ipl"
;
/* Serial subtype definitions */
/* Serial subtype definitions */
#define SERIAL_TYPE_NORMAL 1
#define SERIAL_TYPE_NORMAL 1
#define SERIAL_TYPE_CALLOUT 2
// cheezy kludge or genius - you decide?
// cheezy kludge or genius - you decide?
int
ip2_loadmain
(
int
*
,
int
*
,
unsigned
char
*
,
int
);
int
ip2_loadmain
(
int
*
,
int
*
,
unsigned
char
*
,
int
);
...
@@ -307,7 +303,6 @@ static unsigned short find_eisa_board(int);
...
@@ -307,7 +303,6 @@ static unsigned short find_eisa_board(int);
/***************/
/***************/
static
struct
tty_driver
ip2_tty_driver
;
static
struct
tty_driver
ip2_tty_driver
;
static
struct
tty_driver
ip2_callout_driver
;
static
int
ref_count
;
static
int
ref_count
;
...
@@ -523,9 +518,6 @@ cleanup_module(void)
...
@@ -523,9 +518,6 @@ cleanup_module(void)
if
(
(
err
=
tty_unregister_driver
(
&
ip2_tty_driver
)
)
)
{
if
(
(
err
=
tty_unregister_driver
(
&
ip2_tty_driver
)
)
)
{
printk
(
KERN_ERR
"IP2: failed to unregister tty driver (%d)
\n
"
,
err
);
printk
(
KERN_ERR
"IP2: failed to unregister tty driver (%d)
\n
"
,
err
);
}
}
if
(
(
err
=
tty_unregister_driver
(
&
ip2_callout_driver
)
)
)
{
printk
(
KERN_ERR
"IP2: failed to unregister callout driver (%d)
\n
"
,
err
);
}
if
(
(
err
=
unregister_chrdev
(
IP2_IPL_MAJOR
,
pcIpl
)
)
)
{
if
(
(
err
=
unregister_chrdev
(
IP2_IPL_MAJOR
,
pcIpl
)
)
)
{
printk
(
KERN_ERR
"IP2: failed to unregister IPL driver (%d)
\n
"
,
err
);
printk
(
KERN_ERR
"IP2: failed to unregister IPL driver (%d)
\n
"
,
err
);
}
}
...
@@ -834,27 +826,12 @@ ip2_loadmain(int *iop, int *irqp, unsigned char *firmware, int firmsize)
...
@@ -834,27 +826,12 @@ ip2_loadmain(int *iop, int *irqp, unsigned char *firmware, int firmsize)
ip2_tty_driver
.
start
=
ip2_start
;
ip2_tty_driver
.
start
=
ip2_start
;
ip2_tty_driver
.
hangup
=
ip2_hangup
;
ip2_tty_driver
.
hangup
=
ip2_hangup
;
/* Initialise the callout driver structure from the tty driver, and
* make the needed adjustments.
*/
ip2_callout_driver
=
ip2_tty_driver
;
ip2_callout_driver
.
name
=
pcCallout
;
#if LINUX_VERSION_CODE > KERNEL_VERSION(2,1,0)
ip2_callout_driver
.
driver_name
=
pcDriver_name
;
ip2_callout_driver
.
read_proc
=
NULL
;
#endif
ip2_callout_driver
.
major
=
IP2_CALLOUT_MAJOR
;
ip2_callout_driver
.
subtype
=
SERIAL_TYPE_CALLOUT
;
ip2trace
(
ITRC_NO_PORT
,
ITRC_INIT
,
3
,
0
);
ip2trace
(
ITRC_NO_PORT
,
ITRC_INIT
,
3
,
0
);
/* Register the tty devices. */
/* Register the tty devices. */
if
(
(
err
=
tty_register_driver
(
&
ip2_tty_driver
)
)
)
{
if
(
(
err
=
tty_register_driver
(
&
ip2_tty_driver
)
)
)
{
printk
(
KERN_ERR
"IP2: failed to register tty driver (%d)
\n
"
,
err
);
printk
(
KERN_ERR
"IP2: failed to register tty driver (%d)
\n
"
,
err
);
}
else
}
else
if
(
(
err
=
tty_register_driver
(
&
ip2_callout_driver
)
)
)
{
printk
(
KERN_ERR
"IP2: failed to register callout driver (%d)
\n
"
,
err
);
}
else
/* Register the IPL driver. */
/* Register the IPL driver. */
if
(
(
err
=
register_chrdev
(
IP2_IPL_MAJOR
,
pcIpl
,
&
ip2_ipl
)
)
)
{
if
(
(
err
=
register_chrdev
(
IP2_IPL_MAJOR
,
pcIpl
,
&
ip2_ipl
)
)
)
{
printk
(
KERN_ERR
"IP2: failed to register IPL device (%d)
\n
"
,
err
);
printk
(
KERN_ERR
"IP2: failed to register IPL device (%d)
\n
"
,
err
);
...
@@ -893,9 +870,6 @@ ip2_loadmain(int *iop, int *irqp, unsigned char *firmware, int firmsize)
...
@@ -893,9 +870,6 @@ ip2_loadmain(int *iop, int *irqp, unsigned char *firmware, int firmsize)
tty_register_device
(
&
ip2_tty_driver
,
tty_register_device
(
&
ip2_tty_driver
,
j
+
ABS_BIGGEST_BOX
*
j
+
ABS_BIGGEST_BOX
*
(
box
+
i
*
ABS_MAX_BOXES
),
NULL
);
(
box
+
i
*
ABS_MAX_BOXES
),
NULL
);
tty_register_device
(
&
ip2_callout_driver
,
j
+
ABS_BIGGEST_BOX
*
(
box
+
i
*
ABS_MAX_BOXES
),
NULL
);
}
}
}
}
}
}
...
@@ -1497,7 +1471,7 @@ static void do_status(void *p)
...
@@ -1497,7 +1471,7 @@ static void do_status(void *p)
if
(
pCh
->
wopen
)
{
if
(
pCh
->
wopen
)
{
wake_up_interruptible
(
&
pCh
->
open_wait
);
wake_up_interruptible
(
&
pCh
->
open_wait
);
}
}
}
else
if
(
!
(
pCh
->
flags
&
ASYNC_CALLOUT_ACTIVE
)
)
{
}
else
{
if
(
pCh
->
pTTY
&&
(
!
(
pCh
->
pTTY
->
termios
->
c_cflag
&
CLOCAL
))
)
{
if
(
pCh
->
pTTY
&&
(
!
(
pCh
->
pTTY
->
termios
->
c_cflag
&
CLOCAL
))
)
{
tty_hangup
(
pCh
->
pTTY
);
tty_hangup
(
pCh
->
pTTY
);
}
}
...
@@ -1602,36 +1576,10 @@ ip2_open( PTTY tty, struct file *pFile )
...
@@ -1602,36 +1576,10 @@ ip2_open( PTTY tty, struct file *pFile )
set_current_state
(
TASK_RUNNING
);
set_current_state
(
TASK_RUNNING
);
remove_wait_queue
(
&
pCh
->
close_wait
,
&
wait
);
remove_wait_queue
(
&
pCh
->
close_wait
,
&
wait
);
/*
* 2. If this is a callout device, make sure the normal port is not in
* use, and that someone else doesn't have the callout device locked.
* (These are the only tests the standard serial driver makes for
* callout devices.)
*/
if
(
tty
->
driver
->
subtype
==
SERIAL_TYPE_CALLOUT
)
{
if
(
pCh
->
flags
&
ASYNC_NORMAL_ACTIVE
)
{
return
-
EBUSY
;
}
if
(
(
pCh
->
flags
&
ASYNC_CALLOUT_ACTIVE
)
&&
(
pCh
->
flags
&
ASYNC_SESSION_LOCKOUT
)
&&
(
pCh
->
session
!=
current
->
session
)
)
{
return
-
EBUSY
;
}
if
(
(
pCh
->
flags
&
ASYNC_CALLOUT_ACTIVE
)
&&
(
pCh
->
flags
&
ASYNC_PGRP_LOCKOUT
)
&&
(
pCh
->
pgrp
!=
current
->
pgrp
)
)
{
return
-
EBUSY
;
}
pCh
->
flags
|=
ASYNC_CALLOUT_ACTIVE
;
goto
noblock
;
}
/*
/*
* 3. Handle a non-blocking open of a normal port.
* 3. Handle a non-blocking open of a normal port.
*/
*/
if
(
(
pFile
->
f_flags
&
O_NONBLOCK
)
||
(
tty
->
flags
&
(
1
<<
TTY_IO_ERROR
)
))
{
if
(
(
pFile
->
f_flags
&
O_NONBLOCK
)
||
(
tty
->
flags
&
(
1
<<
TTY_IO_ERROR
)
))
{
if
(
pCh
->
flags
&
ASYNC_CALLOUT_ACTIVE
)
{
return
-
EBUSY
;
}
pCh
->
flags
|=
ASYNC_NORMAL_ACTIVE
;
pCh
->
flags
|=
ASYNC_NORMAL_ACTIVE
;
goto
noblock
;
goto
noblock
;
}
}
...
@@ -1639,15 +1587,8 @@ ip2_open( PTTY tty, struct file *pFile )
...
@@ -1639,15 +1587,8 @@ ip2_open( PTTY tty, struct file *pFile )
* 4. Now loop waiting for the port to be free and carrier present
* 4. Now loop waiting for the port to be free and carrier present
* (if required).
* (if required).
*/
*/
if
(
pCh
->
flags
&
ASYNC_CALLOUT_ACTIVE
)
{
if
(
tty
->
termios
->
c_cflag
&
CLOCAL
)
if
(
pCh
->
NormalTermios
.
c_cflag
&
CLOCAL
)
{
do_clocal
=
1
;
do_clocal
=
1
;
}
}
else
{
if
(
tty
->
termios
->
c_cflag
&
CLOCAL
)
{
do_clocal
=
1
;
}
}
#ifdef IP2DEBUG_OPEN
#ifdef IP2DEBUG_OPEN
printk
(
KERN_DEBUG
"OpenBlock: do_clocal = %d
\n
"
,
do_clocal
);
printk
(
KERN_DEBUG
"OpenBlock: do_clocal = %d
\n
"
,
do_clocal
);
...
@@ -1659,32 +1600,27 @@ ip2_open( PTTY tty, struct file *pFile )
...
@@ -1659,32 +1600,27 @@ ip2_open( PTTY tty, struct file *pFile )
add_wait_queue
(
&
pCh
->
open_wait
,
&
wait
);
add_wait_queue
(
&
pCh
->
open_wait
,
&
wait
);
for
(;;)
{
for
(;;)
{
if
(
!
(
pCh
->
flags
&
ASYNC_CALLOUT_ACTIVE
))
{
i2QueueCommands
(
PTYPE_INLINE
,
pCh
,
100
,
2
,
CMD_DTRUP
,
CMD_RTSUP
);
i2QueueCommands
(
PTYPE_INLINE
,
pCh
,
100
,
2
,
CMD_DTRUP
,
CMD_RTSUP
);
pCh
->
dataSetOut
|=
(
I2_DTR
|
I2_RTS
);
pCh
->
dataSetOut
|=
(
I2_DTR
|
I2_RTS
);
set_current_state
(
TASK_INTERRUPTIBLE
);
set_current_state
(
TASK_INTERRUPTIBLE
);
serviceOutgoingFifo
(
pCh
->
pMyBord
);
serviceOutgoingFifo
(
pCh
->
pMyBord
);
}
if
(
tty_hung_up_p
(
pFile
)
)
{
if
(
tty_hung_up_p
(
pFile
)
)
{
set_current_state
(
TASK_RUNNING
);
set_current_state
(
TASK_RUNNING
);
remove_wait_queue
(
&
pCh
->
open_wait
,
&
wait
);
remove_wait_queue
(
&
pCh
->
open_wait
,
&
wait
);
return
(
pCh
->
flags
&
ASYNC_HUP_NOTIFY
)
?
-
EBUSY
:
-
ERESTARTSYS
;
return
(
pCh
->
flags
&
ASYNC_HUP_NOTIFY
)
?
-
EBUSY
:
-
ERESTARTSYS
;
}
}
if
(
!
(
pCh
->
flags
&
ASYNC_CALLOUT_ACTIVE
)
&&
if
(
!
(
pCh
->
flags
&
ASYNC_CLOSING
)
&&
!
(
pCh
->
flags
&
ASYNC_CLOSING
)
&&
(
do_clocal
||
(
pCh
->
dataSetIn
&
I2_DCD
)
))
{
(
do_clocal
||
(
pCh
->
dataSetIn
&
I2_DCD
)
))
{
rc
=
0
;
rc
=
0
;
break
;
break
;
}
}
#ifdef IP2DEBUG_OPEN
#ifdef IP2DEBUG_OPEN
printk
(
KERN_DEBUG
"ASYNC_CALLOUT_ACTIVE = %s
\n
"
,
(
pCh
->
flags
&
ASYNC_CALLOUT_ACTIVE
)
?
"True"
:
"False"
);
printk
(
KERN_DEBUG
"ASYNC_CLOSING = %s
\n
"
,
printk
(
KERN_DEBUG
"ASYNC_CLOSING = %s
\n
"
,
(
pCh
->
flags
&
ASYNC_CLOSING
)
?
"True"
:
"False"
);
(
pCh
->
flags
&
ASYNC_CLOSING
)
?
"True"
:
"False"
);
printk
(
KERN_DEBUG
"OpenBlock: waiting for CD or signal
\n
"
);
printk
(
KERN_DEBUG
"OpenBlock: waiting for CD or signal
\n
"
);
#endif
#endif
ip2trace
(
CHANN
,
ITRC_OPEN
,
3
,
2
,
(
pCh
->
flags
&
ASYNC_CALLOUT_ACTIVE
)
,
ip2trace
(
CHANN
,
ITRC_OPEN
,
3
,
2
,
0
,
(
pCh
->
flags
&
ASYNC_CLOSING
)
);
(
pCh
->
flags
&
ASYNC_CLOSING
)
);
/* check for signal */
/* check for signal */
if
(
signal_pending
(
current
))
{
if
(
signal_pending
(
current
))
{
...
@@ -1711,20 +1647,12 @@ ip2_open( PTTY tty, struct file *pFile )
...
@@ -1711,20 +1647,12 @@ ip2_open( PTTY tty, struct file *pFile )
if
(
tty
->
count
==
1
)
{
if
(
tty
->
count
==
1
)
{
i2QueueCommands
(
PTYPE_INLINE
,
pCh
,
0
,
2
,
CMD_CTSFL_DSAB
,
CMD_RTSFL_DSAB
);
i2QueueCommands
(
PTYPE_INLINE
,
pCh
,
0
,
2
,
CMD_CTSFL_DSAB
,
CMD_RTSFL_DSAB
);
if
(
pCh
->
flags
&
ASYNC_SPLIT_TERMIOS
)
{
if
(
pCh
->
flags
&
ASYNC_SPLIT_TERMIOS
)
{
if
(
tty
->
driver
->
subtype
==
SERIAL_TYPE_NORMAL
)
{
*
tty
->
termios
=
pCh
->
NormalTermios
;
*
tty
->
termios
=
pCh
->
NormalTermios
;
}
else
{
*
tty
->
termios
=
pCh
->
CalloutTermios
;
}
}
}
/* Now we must send the termios settings to the loadware */
/* Now we must send the termios settings to the loadware */
set_params
(
pCh
,
NULL
);
set_params
(
pCh
,
NULL
);
}
}
/* override previous and never reset ??? */
pCh
->
session
=
current
->
session
;
pCh
->
pgrp
=
current
->
pgrp
;
/*
/*
* Now set any i2lib options. These may go away if the i2lib code ends
* Now set any i2lib options. These may go away if the i2lib code ends
* up rolled into the mainline.
* up rolled into the mainline.
...
@@ -1786,8 +1714,6 @@ ip2_close( PTTY tty, struct file *pFile )
...
@@ -1786,8 +1714,6 @@ ip2_close( PTTY tty, struct file *pFile )
*/
*/
if
(
pCh
->
flags
&
ASYNC_NORMAL_ACTIVE
)
if
(
pCh
->
flags
&
ASYNC_NORMAL_ACTIVE
)
pCh
->
NormalTermios
=
*
tty
->
termios
;
pCh
->
NormalTermios
=
*
tty
->
termios
;
if
(
pCh
->
flags
&
ASYNC_CALLOUT_ACTIVE
)
pCh
->
CalloutTermios
=
*
tty
->
termios
;
tty
->
closing
=
1
;
tty
->
closing
=
1
;
...
@@ -1833,7 +1759,7 @@ ip2_close( PTTY tty, struct file *pFile )
...
@@ -1833,7 +1759,7 @@ ip2_close( PTTY tty, struct file *pFile )
wake_up_interruptible
(
&
pCh
->
open_wait
);
wake_up_interruptible
(
&
pCh
->
open_wait
);
}
}
pCh
->
flags
&=~
(
ASYNC_NORMAL_ACTIVE
|
ASYNC_C
ALLOUT_ACTIVE
|
ASYNC_C
LOSING
);
pCh
->
flags
&=~
(
ASYNC_NORMAL_ACTIVE
|
ASYNC_CLOSING
);
wake_up_interruptible
(
&
pCh
->
close_wait
);
wake_up_interruptible
(
&
pCh
->
close_wait
);
#ifdef IP2DEBUG_OPEN
#ifdef IP2DEBUG_OPEN
...
@@ -1883,7 +1809,7 @@ ip2_hangup ( PTTY tty )
...
@@ -1883,7 +1809,7 @@ ip2_hangup ( PTTY tty )
wake_up_interruptible
(
&
pCh
->
delta_msr_wait
);
wake_up_interruptible
(
&
pCh
->
delta_msr_wait
);
pCh
->
flags
&=
~
(
ASYNC_NORMAL_ACTIVE
|
ASYNC_CALLOUT_ACTIVE
)
;
pCh
->
flags
&=
~
ASYNC_NORMAL_ACTIVE
;
pCh
->
pTTY
=
NULL
;
pCh
->
pTTY
=
NULL
;
wake_up_interruptible
(
&
pCh
->
open_wait
);
wake_up_interruptible
(
&
pCh
->
open_wait
);
...
...
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