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
Kirill Smelkov
linux
Commits
d43cc577
Commit
d43cc577
authored
Nov 23, 2007
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Import 1.2.7
parent
f1bf8612
Changes
22
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
269 additions
and
123 deletions
+269
-123
Makefile
Makefile
+1
-1
arch/alpha/config.in
arch/alpha/config.in
+5
-5
arch/i386/config.in
arch/i386/config.in
+5
-5
arch/i386/kernel/signal.c
arch/i386/kernel/signal.c
+2
-2
arch/mips/config.in
arch/mips/config.in
+5
-5
arch/sparc/config.in
arch/sparc/config.in
+5
-5
drivers/block/ide-cd.c
drivers/block/ide-cd.c
+37
-5
drivers/char/ChangeLog
drivers/char/ChangeLog
+13
-0
drivers/char/serial.c
drivers/char/serial.c
+1
-0
drivers/char/tty_io.c
drivers/char/tty_io.c
+16
-17
drivers/net/3c503.c
drivers/net/3c503.c
+1
-0
drivers/net/8390.c
drivers/net/8390.c
+59
-37
drivers/net/8390.h
drivers/net/8390.h
+7
-2
drivers/net/Makefile
drivers/net/Makefile
+2
-2
drivers/net/ne.c
drivers/net/ne.c
+84
-22
drivers/net/wd.c
drivers/net/wd.c
+1
-0
drivers/scsi/53c7,8xx.c
drivers/scsi/53c7,8xx.c
+8
-8
drivers/scsi/53c7,8xx.h
drivers/scsi/53c7,8xx.h
+1
-1
drivers/scsi/ChangeLog
drivers/scsi/ChangeLog
+5
-5
fs/buffer.c
fs/buffer.c
+1
-1
include/asm-alpha/byteorder.h
include/asm-alpha/byteorder.h
+5
-0
include/asm-i386/byteorder.h
include/asm-i386/byteorder.h
+5
-0
No files found.
Makefile
View file @
d43cc577
VERSION
=
1
PATCHLEVEL
=
2
SUBLEVEL
=
6
SUBLEVEL
=
7
ARCH
=
i386
...
...
arch/alpha/config.in
View file @
d43cc577
...
...
@@ -43,10 +43,10 @@ else
comment 'SCSI support type (disk, tape, CDrom)'
bool 'S
csi
disk support' CONFIG_BLK_DEV_SD y
bool 'S
csi
tape support' CONFIG_CHR_DEV_ST n
bool 'S
csi
CDROM support' CONFIG_BLK_DEV_SR n
bool 'S
csi
generic support' CONFIG_CHR_DEV_SG n
bool 'S
CSI
disk support' CONFIG_BLK_DEV_SD y
bool 'S
CSI
tape support' CONFIG_CHR_DEV_ST n
bool 'S
CSI
CDROM support' CONFIG_BLK_DEV_SR n
bool 'S
CSI
generic support' CONFIG_CHR_DEV_SG n
comment 'SCSI low-level drivers'
...
...
@@ -233,5 +233,5 @@ if [ "$CONFIG_PROFILE" = "y" ]; then
int ' Profile shift count' CONFIG_PROFILE_SHIFT 2
fi
if [ "$CONFIG_SCSI" = "y" ]; then
bool 'Verbose
scsi
error reporting (kernel size +=12K)' CONFIG_SCSI_CONSTANTS y
bool 'Verbose
SCSI
error reporting (kernel size +=12K)' CONFIG_SCSI_CONSTANTS y
fi
arch/i386/config.in
View file @
d43cc577
...
...
@@ -69,10 +69,10 @@ else
comment 'SCSI support type (disk, tape, CDrom)'
bool 'S
csi
disk support' CONFIG_BLK_DEV_SD y
bool 'S
csi
tape support' CONFIG_CHR_DEV_ST n
bool 'S
csi
CDROM support' CONFIG_BLK_DEV_SR n
bool 'S
csi
generic support' CONFIG_CHR_DEV_SG n
bool 'S
CSI
disk support' CONFIG_BLK_DEV_SD y
bool 'S
CSI
tape support' CONFIG_CHR_DEV_ST n
bool 'S
CSI
CDROM support' CONFIG_BLK_DEV_SR n
bool 'S
CSI
generic support' CONFIG_CHR_DEV_SG n
comment 'Some SCSI devices (e.g. CD jukebox) support multiple LUNs'
...
...
@@ -267,5 +267,5 @@ if [ "$CONFIG_PROFILE" = "y" ]; then
int ' Profile shift count' CONFIG_PROFILE_SHIFT 2
fi
if [ "$CONFIG_SCSI" = "y" ]; then
bool 'Verbose
scsi
error reporting (kernel size +=12K)' CONFIG_SCSI_CONSTANTS y
bool 'Verbose
SCSI
error reporting (kernel size +=12K)' CONFIG_SCSI_CONSTANTS y
fi
arch/i386/kernel/signal.c
View file @
d43cc577
...
...
@@ -151,10 +151,10 @@ asmlinkage int do_signal(unsigned long oldmask, struct pt_regs * regs)
struct
sigaction
*
sa
;
while
((
signr
=
current
->
signal
&
mask
))
{
__asm__
(
"bsf %
2
,%1
\n\t
"
__asm__
(
"bsf %
3
,%1
\n\t
"
"btrl %1,%0"
:
"=m"
(
current
->
signal
),
"=r"
(
signr
)
:
"1"
(
signr
));
:
"
0"
(
current
->
signal
),
"
1"
(
signr
));
sa
=
current
->
sigaction
+
signr
;
signr
++
;
if
((
current
->
flags
&
PF_PTRACED
)
&&
signr
!=
SIGKILL
)
{
...
...
arch/mips/config.in
View file @
d43cc577
...
...
@@ -63,10 +63,10 @@ else
comment 'SCSI support type (disk, tape, CDrom)'
bool 'S
csi
disk support' CONFIG_BLK_DEV_SD y
bool 'S
csi
tape support' CONFIG_CHR_DEV_ST y
bool 'S
csi
CDROM support' CONFIG_BLK_DEV_SR y
bool 'S
csi
generic support' CONFIG_CHR_DEV_SG y
bool 'S
CSI
disk support' CONFIG_BLK_DEV_SD y
bool 'S
CSI
tape support' CONFIG_CHR_DEV_ST y
bool 'S
CSI
CDROM support' CONFIG_BLK_DEV_SR y
bool 'S
CSI
generic support' CONFIG_CHR_DEV_SG y
comment 'SCSI low-level drivers'
...
...
@@ -252,5 +252,5 @@ if [ "$CONFIG_PROFILE" = "y" ]; then
int ' Profile shift count' CONFIG_PROFILE_SHIFT 2
fi
if [ "$CONFIG_SCSI" = "y" ]; then
bool 'Verbose
scsi
error reporting (kernel size +=12K)' CONFIG_SCSI_CONSTANTS y
bool 'Verbose
SCSI
error reporting (kernel size +=12K)' CONFIG_SCSI_CONSTANTS y
fi
arch/sparc/config.in
View file @
d43cc577
...
...
@@ -50,10 +50,10 @@ else
comment 'SCSI support type (disk, tape, CDrom)'
bool 'S
csi
disk support' CONFIG_BLK_DEV_SD y
bool 'S
csi
tape support' CONFIG_CHR_DEV_ST n
bool 'S
csi
CDROM support' CONFIG_BLK_DEV_SR n
bool 'S
csi
generic support' CONFIG_CHR_DEV_SG n
bool 'S
CSI
disk support' CONFIG_BLK_DEV_SD y
bool 'S
CSI
tape support' CONFIG_CHR_DEV_ST n
bool 'S
CSI
CDROM support' CONFIG_BLK_DEV_SR n
bool 'S
CSI
generic support' CONFIG_CHR_DEV_SG n
comment 'SCSI low-level drivers'
...
...
@@ -242,5 +242,5 @@ if [ "$CONFIG_PROFILE" = "y" ]; then
int ' Profile shift count' CONFIG_PROFILE_SHIFT 2
fi
if [ "$CONFIG_SCSI" = "y" ]; then
bool 'Verbose
scsi
error reporting (kernel size +=12K)' CONFIG_SCSI_CONSTANTS y
bool 'Verbose
SCSI
error reporting (kernel size +=12K)' CONFIG_SCSI_CONSTANTS y
fi
drivers/block/ide-cd.c
View file @
d43cc577
/*
* linux/drivers/block/ide-cd.c
(BETA)
* linux/drivers/block/ide-cd.c
*
* 1.00 Oct 31, 1994 -- Initial version.
* 1.01 Nov 2, 1994 -- Fixed problem with starting request in
...
...
@@ -20,10 +20,17 @@
* 2.03 Jan 10, 1995 -- Rewrite block read routines to handle block sizes
* other than 2k and to move multiple sectors in a
* single transaction.
* 2.04 Apr 21, 1995 -- Add work-around for Creative Labs CD220E drives.
* Thanks to Nick Saw <cwsaw@pts7.pts.mot.com> for
* help in figuring this out. Ditto for Acer and
* Aztech drives, which seem to have the same problem.
*
*
* ATAPI cd-rom driver. To be used with ide.c.
*
* Copyright (C) 1994, 1995 scott snyder <snyder@fnald0.fnal.gov>
* May be copied or modified under the terms of the GNU General Public License
* (../../COPYING).
*/
#include <linux/cdrom.h>
...
...
@@ -88,7 +95,8 @@ struct ide_cd_flags {
unsigned
media_changed
:
1
;
/* Driver has noticed a media change. */
unsigned
toc_valid
:
1
;
/* Saved TOC information is current. */
unsigned
reserved
:
4
;
unsigned
no_lba_toc
:
1
;
/* Drive cannot return TOC info in LBA format */
unsigned
reserved
:
3
;
};
#define CDROM_FLAGS(dev) ((struct ide_cd_flags *)&((dev)->bios_sect))
...
...
@@ -1094,6 +1102,7 @@ cdrom_read_tocentry (ide_dev_t *dev, int trackno, int msf_flag,
static
int
cdrom_read_toc
(
ide_dev_t
*
dev
)
{
int
msf_flag
;
int
stat
,
ntracks
,
i
;
struct
atapi_toc
*
toc
=
cdrom_info
[
dev
->
hwif
][
dev
->
select
.
b
.
drive
].
toc
;
...
...
@@ -1118,8 +1127,11 @@ cdrom_read_toc (ide_dev_t *dev)
if
(
CDROM_FLAGS
(
dev
)
->
toc_valid
)
return
0
;
/* Some drives can't return TOC data in LBA format. */
msf_flag
=
(
CDROM_FLAGS
(
dev
)
->
no_lba_toc
);
/* First read just the header, so we know how long the TOC is. */
stat
=
cdrom_read_tocentry
(
dev
,
0
,
0
,
(
char
*
)
toc
,
stat
=
cdrom_read_tocentry
(
dev
,
0
,
msf_flag
,
(
char
*
)
toc
,
sizeof
(
struct
atapi_toc_header
)
+
sizeof
(
struct
atapi_toc_entry
));
if
(
stat
)
return
stat
;
...
...
@@ -1129,13 +1141,21 @@ cdrom_read_toc (ide_dev_t *dev)
if
(
ntracks
>
MAX_TRACKS
)
ntracks
=
MAX_TRACKS
;
/* Now read the whole schmeer. */
stat
=
cdrom_read_tocentry
(
dev
,
0
,
0
,
(
char
*
)
toc
,
stat
=
cdrom_read_tocentry
(
dev
,
0
,
msf_flag
,
(
char
*
)
toc
,
sizeof
(
struct
atapi_toc_header
)
+
(
ntracks
+
1
)
*
sizeof
(
struct
atapi_toc_entry
));
if
(
stat
)
return
stat
;
byte_swap_word
(
&
toc
->
hdr
.
toc_length
);
for
(
i
=
0
;
i
<=
ntracks
;
i
++
)
{
if
(
msf_flag
)
{
byte
*
adr
=
(
byte
*
)
&
(
toc
->
ent
[
i
].
lba
);
toc
->
ent
[
i
].
lba
=
msf_to_lba
(
adr
[
1
],
adr
[
2
],
adr
[
3
]);
}
else
byte_swap_long
(
&
toc
->
ent
[
i
].
lba
);
}
/* Remember that we've read this stuff. */
CDROM_FLAGS
(
dev
)
->
toc_valid
=
1
;
...
...
@@ -1618,8 +1638,20 @@ static void cdrom_setup (ide_dev_t *dev)
CDROM_FLAGS
(
dev
)
->
toc_valid
=
0
;
CDROM_FLAGS
(
dev
)
->
no_playaudio12
=
0
;
CDROM_FLAGS
(
dev
)
->
no_lba_toc
=
0
;
CDROM_FLAGS
(
dev
)
->
drq_interrupt
=
((
dev
->
id
->
config
&
0x0060
)
==
0x20
);
/* Accommodate some broken drives... */
if
(
strcmp
(
dev
->
id
->
model
,
"CD220E"
)
==
0
)
/* Creative Labs */
CDROM_FLAGS
(
dev
)
->
no_lba_toc
=
1
;
else
if
(
strcmp
(
dev
->
id
->
model
,
"TO-ICSLYAL"
)
==
0
||
/* Acer CD525E */
strcmp
(
dev
->
id
->
model
,
"OTI-SCYLLA"
)
==
0
)
CDROM_FLAGS
(
dev
)
->
no_lba_toc
=
1
;
else
if
(
strcmp
(
dev
->
id
->
model
,
"CDA26803I SE"
)
==
0
)
/* Aztech */
CDROM_FLAGS
(
dev
)
->
no_lba_toc
=
1
;
cdrom_info
[
dev
->
hwif
][
dev
->
select
.
b
.
drive
].
toc
=
NULL
;
cdrom_info
[
dev
->
hwif
][
dev
->
select
.
b
.
drive
].
sector_buffer
=
NULL
;
cdrom_info
[
dev
->
hwif
][
dev
->
select
.
b
.
drive
].
sector_buffered
=
0
;
...
...
drivers/char/ChangeLog
View file @
d43cc577
Wed Apr 26 10:23:44 1995 Theodore Y. Ts'o <tytso@localhost>
* tty_io.c (release_dev): Try to shutdown the line discpline
*before* decrementing the tty count variable; this removes
a potential race condition which occurs when the line
discpline close blocks, and another process then tries
open the same serial port.
* serial.c (rs_hangup): When hanging up, flush the output buffer
befure shutting down the UART. Otherwise the line
discpline close blocks waiting for the characters to get
flushed, which never happens until the serial port gets reused.
Wed Apr 12 08:06:16 1995 Theodore Y. Ts'o <tytso@localhost>
* serial.c (do_serial_hangup, do_softint, check_modem_status,
...
...
drivers/char/serial.c
View file @
d43cc577
...
...
@@ -2090,6 +2090,7 @@ void rs_hangup(struct tty_struct *tty)
if
(
serial_paranoia_check
(
info
,
tty
->
device
,
"rs_hangup"
))
return
;
rs_flush_buffer
(
tty
);
shutdown
(
info
);
info
->
event
=
0
;
info
->
count
=
0
;
...
...
drivers/char/tty_io.c
View file @
d43cc577
...
...
@@ -1006,6 +1006,22 @@ static void release_dev(struct file * filp)
tty
->
link
->
count
=
0
;
}
}
if
(
tty
->
count
<=
1
)
{
/*
* Shutdown the current line discipline, and reset it
* to N_TTY.
*/
if
(
tty
->
ldisc
.
close
)
(
tty
->
ldisc
.
close
)(
tty
);
tty
->
ldisc
=
ldiscs
[
N_TTY
];
tty
->
termios
->
c_line
=
N_TTY
;
if
(
o_tty
&&
o_tty
->
count
<=
0
)
{
if
(
o_tty
->
ldisc
.
close
)
(
o_tty
->
ldisc
.
close
)(
o_tty
);
o_tty
->
ldisc
=
ldiscs
[
N_TTY
];
o_tty
->
termios
->
c_line
=
N_TTY
;
}
}
if
(
--
tty
->
count
<
0
)
{
printk
(
"release_dev: bad tty->count (%d) for %s
\n
"
,
tty
->
count
,
tty_name
(
tty
));
...
...
@@ -1039,23 +1055,6 @@ static void release_dev(struct file * filp)
(
*
p
)
->
tty
=
NULL
;
}
/*
* Shutdown the current line discipline, and reset it to
* N_TTY.
*/
if
(
tty
->
ldisc
.
close
)
(
tty
->
ldisc
.
close
)(
tty
);
tty
->
ldisc
=
ldiscs
[
N_TTY
];
tty
->
termios
->
c_line
=
N_TTY
;
if
(
o_tty
)
{
if
(
o_tty
->
ldisc
.
close
)
(
o_tty
->
ldisc
.
close
)(
o_tty
);
o_tty
->
ldisc
=
ldiscs
[
N_TTY
];
#if 0 /* No way! We just released the termios struct! */
o_tty->termios->c_line = N_TTY;
#endif
}
tty
->
driver
.
table
[
idx
]
=
NULL
;
if
(
tty
->
driver
.
flags
&
TTY_DRIVER_RESET_TERMIOS
)
{
tty
->
driver
.
termios
[
idx
]
=
NULL
;
...
...
drivers/net/3c503.c
View file @
d43cc577
...
...
@@ -317,6 +317,7 @@ el2_close(struct device *dev)
outb
(
EGACFR_IRQOFF
,
E33G_GACFR
);
/* disable interrupts. */
NS8390_init
(
dev
,
0
);
dev
->
start
=
0
;
return
0
;
}
...
...
drivers/net/8390.c
View file @
d43cc577
...
...
@@ -15,6 +15,11 @@
This is the chip-specific code for many 8390-based ethernet adaptors.
This is not a complete driver, it must be combined with board-specific
code such as ne.c, wd.c, 3c503.c, etc.
13/04/95 -- Don't blindly swallow ENISR_RDC interrupts for non-shared
memory cards. We need to follow these closely for neX000 cards.
Plus other minor cleanups. -- Paul Gortmaker
*/
static
char
*
version
=
...
...
@@ -83,7 +88,7 @@ int ei_debug = 1;
#endif
/* Max number of packets received at one Intr.
Current this may only be examined by a kernel debugger. */
Current
ly
this may only be examined by a kernel debugger. */
static
int
high_water_mark
=
0
;
/* Index to functions. */
...
...
@@ -124,16 +129,18 @@ static int ei_start_xmit(struct sk_buff *skb, struct device *dev)
int
e8390_base
=
dev
->
base_addr
;
struct
ei_device
*
ei_local
=
(
struct
ei_device
*
)
dev
->
priv
;
int
length
,
send_length
;
unsigned
long
flags
;
/* We normally shouldn't be called if dev->tbusy is set, but the
existing code does anyway.
If it has been too long (> 100 or 150ms.) since the last Tx we assume
the board has died and kick it. */
/*
* We normally shouldn't be called if dev->tbusy is set, but the
* existing code does anyway. If it has been too long since the
* last Tx, we assume the board has died and kick it.
*/
if
(
dev
->
tbusy
)
{
/* Do timeouts, just like the 8003 driver. */
int
txsr
=
inb
(
e8390_base
+
EN0_TSR
),
isr
;
int
tickssofar
=
jiffies
-
dev
->
trans_start
;
if
(
tickssofar
<
10
||
(
tickssofar
<
15
&&
!
(
txsr
&
ENTSR_PTX
)))
{
if
(
tickssofar
<
TX_TIMEOUT
||
(
tickssofar
<
(
TX_TIMEOUT
+
5
)
&&
!
(
txsr
&
ENTSR_PTX
)))
{
return
1
;
}
isr
=
inb
(
e8390_base
+
EN0_ISR
);
...
...
@@ -170,15 +177,22 @@ static int ei_start_xmit(struct sk_buff *skb, struct device *dev)
if
(
skb
->
len
<=
0
)
return
0
;
save_flags
(
flags
);
cli
();
/* Block a timer-based transmit from overlapping. */
if
(
set_bit
(
0
,
(
void
*
)
&
dev
->
tbusy
)
!=
0
)
{
printk
(
"%s: Transmitter access conflict.
\n
"
,
dev
->
name
);
if
((
set_bit
(
0
,
(
void
*
)
&
dev
->
tbusy
)
!=
0
)
||
ei_local
->
irqlock
)
{
printk
(
"%s: Tx access conflict. irq=%d lock=%d tx1=%d tx2=%d last=%d
\n
"
,
dev
->
name
,
dev
->
interrupt
,
ei_local
->
irqlock
,
ei_local
->
tx1
,
ei_local
->
tx2
,
ei_local
->
lasttx
);
restore_flags
(
flags
);
return
1
;
}
/* Mask interrupts from the ethercard. */
outb
(
0x00
,
e8390_base
+
EN0_IMR
);
ei_local
->
irqlock
=
1
;
restore_flags
(
flags
);
send_length
=
ETH_ZLEN
<
length
?
length
:
ETH_ZLEN
;
...
...
@@ -200,8 +214,9 @@ static int ei_start_xmit(struct sk_buff *skb, struct device *dev)
ei_local
->
txing
);
}
else
{
/* We should never get here. */
if
(
ei_debug
)
printk
(
"%s: No packet buffer space for ping-pong use.
\n
"
,
dev
->
name
);
printk
(
"%s: No Tx buffers free. irq=%d tx1=%d tx2=%d last=%d
\n
"
,
dev
->
name
,
dev
->
interrupt
,
ei_local
->
tx1
,
ei_local
->
tx2
,
ei_local
->
lasttx
);
ei_local
->
irqlock
=
0
;
dev
->
tbusy
=
1
;
outb_p
(
ENISR_ALL
,
e8390_base
+
EN0_IMR
);
...
...
@@ -209,19 +224,20 @@ static int ei_start_xmit(struct sk_buff *skb, struct device *dev)
}
ei_block_output
(
dev
,
length
,
skb
->
data
,
output_page
);
if
(
!
ei_local
->
txing
)
{
ei_local
->
txing
=
1
;
NS8390_trigger_send
(
dev
,
send_length
,
output_page
);
dev
->
trans_start
=
jiffies
;
if
(
output_page
==
ei_local
->
tx_start_page
)
ei_local
->
tx1
=
-
1
,
ei_local
->
lasttx
=
-
1
;
else
ei_local
->
tx2
=
-
1
,
ei_local
->
lasttx
=
-
2
;
ei_local
->
txing
=
1
;
}
else
ei_local
->
txqueue
++
;
dev
->
tbusy
=
(
ei_local
->
tx1
&&
ei_local
->
tx2
);
}
else
{
/* No pingpong, just a single Tx buffer. */
ei_block_output
(
dev
,
length
,
skb
->
data
,
ei_local
->
tx_start_page
);
ei_local
->
txing
=
1
;
NS8390_trigger_send
(
dev
,
send_length
,
ei_local
->
tx_start_page
);
dev
->
trans_start
=
jiffies
;
dev
->
tbusy
=
1
;
...
...
@@ -242,7 +258,7 @@ void ei_interrupt(int irq, struct pt_regs * regs)
{
struct
device
*
dev
=
(
struct
device
*
)(
irq2dev_map
[
irq
]);
int
e8390_base
;
int
interrupts
,
boguscount
=
0
;
int
interrupts
,
nr_serviced
=
0
;
struct
ei_device
*
ei_local
;
if
(
dev
==
NULL
)
{
...
...
@@ -253,7 +269,6 @@ void ei_interrupt(int irq, struct pt_regs * regs)
ei_local
=
(
struct
ei_device
*
)
dev
->
priv
;
if
(
dev
->
interrupt
||
ei_local
->
irqlock
)
{
/* The "irqlock" check is only for testing. */
sti
();
printk
(
ei_local
->
irqlock
?
"%s: Interrupted while interrupts are masked! isr=%#2x imr=%#2x.
\n
"
:
"%s: Reentering the interrupt handler! isr=%#2x imr=%#2x.
\n
"
,
...
...
@@ -263,7 +278,6 @@ void ei_interrupt(int irq, struct pt_regs * regs)
}
dev
->
interrupt
=
1
;
sti
();
/* Allow other interrupts. */
/* Change to page 0 and read the intr status reg. */
outb_p
(
E8390_NODMA
+
E8390_PAGE0
,
e8390_base
+
E8390_CMD
);
...
...
@@ -273,16 +287,12 @@ void ei_interrupt(int irq, struct pt_regs * regs)
/* !!Assumption!! -- we stay in page 0. Don't break this. */
while
((
interrupts
=
inb_p
(
e8390_base
+
EN0_ISR
))
!=
0
&&
++
boguscount
<
9
)
{
&&
++
nr_serviced
<
MAX_SERVICE
)
{
if
(
dev
->
start
==
0
)
{
printk
(
"%s: interrupt from stopped card
\n
"
,
dev
->
name
);
interrupts
=
0
;
break
;
}
if
(
interrupts
&
ENISR_RDC
)
{
/* Ack meaningless DMA complete. */
outb_p
(
ENISR_RDC
,
e8390_base
+
EN0_ISR
);
}
if
(
interrupts
&
ENISR_OVER
)
{
ei_rx_overrun
(
dev
);
}
else
if
(
interrupts
&
(
ENISR_RX
+
ENISR_RX_ERR
))
{
...
...
@@ -303,18 +313,26 @@ void ei_interrupt(int irq, struct pt_regs * regs)
if
(
interrupts
&
ENISR_TX_ERR
)
{
outb_p
(
ENISR_TX_ERR
,
e8390_base
+
EN0_ISR
);
/* Ack intr. */
}
if
(
interrupts
&
ENISR_RDC
)
{
if
(
dev
->
mem_start
)
outb_p
(
ENISR_RDC
,
e8390_base
+
EN0_ISR
);
}
outb_p
(
E8390_NODMA
+
E8390_PAGE0
+
E8390_START
,
e8390_base
+
E8390_CMD
);
}
if
(
interrupts
&&
ei_debug
)
{
if
(
boguscount
==
9
)
if
((
interrupts
&
~
ENISR_RDC
)
&&
ei_debug
)
{
outb_p
(
E8390_NODMA
+
E8390_PAGE0
+
E8390_START
,
e8390_base
+
E8390_CMD
);
if
(
nr_serviced
==
MAX_SERVICE
)
{
printk
(
"%s: Too much work at interrupt, status %#2.2x
\n
"
,
dev
->
name
,
interrupts
);
else
outb_p
(
ENISR_ALL
,
e8390_base
+
EN0_ISR
);
/* Ack. most intrs. */
}
else
{
printk
(
"%s: unknown interrupt %#2x
\n
"
,
dev
->
name
,
interrupts
);
outb_p
(
E8390_NODMA
+
E8390_PAGE0
+
E8390_START
,
e8390_base
+
E8390_CMD
);
outb_p
(
0xff
,
e8390_base
+
EN0_ISR
);
/* Ack. all intrs. */
}
}
dev
->
interrupt
=
0
;
return
;
}
...
...
@@ -338,9 +356,9 @@ static void ei_tx_intr(struct device *dev)
ei_local
->
tx1
=
0
;
dev
->
tbusy
=
0
;
if
(
ei_local
->
tx2
>
0
)
{
ei_local
->
txing
=
1
;
NS8390_trigger_send
(
dev
,
ei_local
->
tx2
,
ei_local
->
tx_start_page
+
6
);
dev
->
trans_start
=
jiffies
;
ei_local
->
txing
=
1
;
ei_local
->
tx2
=
-
1
,
ei_local
->
lasttx
=
2
;
}
else
...
...
@@ -352,9 +370,9 @@ static void ei_tx_intr(struct device *dev)
ei_local
->
tx2
=
0
;
dev
->
tbusy
=
0
;
if
(
ei_local
->
tx1
>
0
)
{
ei_local
->
txing
=
1
;
NS8390_trigger_send
(
dev
,
ei_local
->
tx1
,
ei_local
->
tx_start_page
);
dev
->
trans_start
=
jiffies
;
ei_local
->
txing
=
1
;
ei_local
->
tx1
=
-
1
;
ei_local
->
lasttx
=
1
;
}
else
...
...
@@ -402,7 +420,7 @@ static void ei_receive(struct device *dev)
rxing_page
=
inb_p
(
e8390_base
+
EN1_CURPAG
);
outb_p
(
E8390_NODMA
+
E8390_PAGE0
,
e8390_base
+
E8390_CMD
);
/* Remove one frame from the ring. Boundary is alway a page behind. */
/* Remove one frame from the ring. Boundary is alway
s
a page behind. */
this_frame
=
inb_p
(
e8390_base
+
EN0_BOUNDARY
)
+
1
;
if
(
this_frame
>=
ei_local
->
stop_page
)
this_frame
=
ei_local
->
rx_start_page
;
...
...
@@ -475,12 +493,12 @@ static void ei_receive(struct device *dev)
/* This _should_ never happen: it's here for avoiding bad clones. */
if
(
next_frame
>=
ei_local
->
stop_page
)
{
printk
(
"%s: next frame inconsistency, %#2x
..
"
,
dev
->
name
,
printk
(
"%s: next frame inconsistency, %#2x
\n
"
,
dev
->
name
,
next_frame
);
next_frame
=
ei_local
->
rx_start_page
;
}
ei_local
->
current_page
=
next_frame
;
outb
(
next_frame
-
1
,
e8390_base
+
EN0_BOUNDARY
);
outb
_p
(
next_frame
-
1
,
e8390_base
+
EN0_BOUNDARY
);
}
/* If any worth-while packets have been received, dev_rint()
has done a mark_bh(NET_BH) for us and will work on them
...
...
@@ -539,6 +557,9 @@ static struct enet_statistics *get_stats(struct device *dev)
short
ioaddr
=
dev
->
base_addr
;
struct
ei_device
*
ei_local
=
(
struct
ei_device
*
)
dev
->
priv
;
/* If the card is stopped, just return the present stats. */
if
(
dev
->
start
==
0
)
return
&
ei_local
->
stat
;
/* Read the counter registers, assuming we are in page 0. */
ei_local
->
stat
.
rx_frame_errors
+=
inb_p
(
ioaddr
+
EN0_COUNTER0
);
ei_local
->
stat
.
rx_crc_errors
+=
inb_p
(
ioaddr
+
EN0_COUNTER1
);
...
...
@@ -610,6 +631,7 @@ void NS8390_init(struct device *dev, int startp)
struct
ei_device
*
ei_local
=
(
struct
ei_device
*
)
dev
->
priv
;
int
i
;
int
endcfg
=
ei_local
->
word16
?
(
0x48
|
ENDCFG_WTS
)
:
0x48
;
unsigned
long
flags
;
/* Follow National Semi's recommendations for initing the DP83902. */
outb_p
(
E8390_NODMA
+
E8390_PAGE0
+
E8390_STOP
,
e8390_base
);
/* 0x21 */
...
...
@@ -633,6 +655,7 @@ void NS8390_init(struct device *dev, int startp)
/* Copy the station address into the DS8390 registers,
and set the multicast hash bitmap to receive all multicasts. */
save_flags
(
flags
);
cli
();
outb_p
(
E8390_NODMA
+
E8390_PAGE1
+
E8390_STOP
,
e8390_base
);
/* 0x61 */
for
(
i
=
0
;
i
<
6
;
i
++
)
{
...
...
@@ -645,7 +668,7 @@ void NS8390_init(struct device *dev, int startp)
outb_p
(
ei_local
->
rx_start_page
,
e8390_base
+
EN1_CURPAG
);
outb_p
(
E8390_NODMA
+
E8390_PAGE0
+
E8390_STOP
,
e8390_base
);
sti
(
);
restore_flags
(
flags
);
dev
->
tbusy
=
0
;
dev
->
interrupt
=
0
;
ei_local
->
tx1
=
ei_local
->
tx2
=
0
;
...
...
@@ -667,7 +690,6 @@ static void NS8390_trigger_send(struct device *dev, unsigned int length,
{
int
e8390_base
=
dev
->
base_addr
;
ei_status
.
txing
=
1
;
outb_p
(
E8390_NODMA
+
E8390_PAGE0
,
e8390_base
);
if
(
inb_p
(
e8390_base
)
&
E8390_TRANS
)
{
...
...
drivers/net/8390.h
View file @
d43cc577
...
...
@@ -44,14 +44,13 @@ struct ei_device {
unsigned
open
:
1
;
unsigned
word16
:
1
;
/* We have the 16-bit (vs 8-bit) version of the card. */
unsigned
txing
:
1
;
/* Transmit Active */
unsigned
dmaing
:
2
;
/* Remote DMA Active */
unsigned
irqlock
:
1
;
/* 8390's intrs disabled when '1'. */
unsigned
pingpong
:
1
;
/* Using the ping-pong driver */
unsigned
char
tx_start_page
,
rx_start_page
,
stop_page
;
unsigned
char
current_page
;
/* Read pointer in buffer */
unsigned
char
interface_num
;
/* Net port (AUI, 10bT.) to use. */
unsigned
char
txqueue
;
/* Tx Packet buffer queue length. */
unsigned
char
in_interrupt
;
unsigned
char
dmaing
;
/* Remote DMA (Tx/Rx/Active) */
short
tx1
,
tx2
;
/* Packet lengths for ping-pong tx. */
short
lasttx
;
/* Alpha version consistency check. */
unsigned
char
reg0
;
/* Register '0' in a WD8013 */
...
...
@@ -61,6 +60,12 @@ struct ei_device {
struct
enet_statistics
stat
;
};
/* The maximum number of 8390 interrupt serivce routines called per IRQ. */
#define MAX_SERVICE 12
/* The maximum number of jiffies waited before assuming a Tx failed. */
#define TX_TIMEOUT 20
#define ei_status (*(struct ei_device *)(dev->priv))
/* Some generic ethernet register configurations. */
...
...
drivers/net/Makefile
View file @
d43cc577
...
...
@@ -11,8 +11,8 @@ include CONFIG
MODULES
:=
NETDRV_OBJS
:=
Space.o auto_irq.o net_init.o loopback.o
CFLAGS
:=
$(CFLAGS)
-I
../../net/inet
CPP
:=
$(CPP)
-I
../../net/inet
override
CFLAGS
:
= $(CFLAGS) -I../../net/inet
override
CPP
:
= $(CPP) -I../../net/inet
.c.o
:
$(CC)
$(CFLAGS)
-c
$<
...
...
drivers/net/ne.c
View file @
d43cc577
This diff is collapsed.
Click to expand it.
drivers/net/wd.c
View file @
d43cc577
...
...
@@ -368,6 +368,7 @@ wd_close_card(struct device *dev)
if
(
ei_debug
>
1
)
printk
(
"%s: Shutting down ethercard.
\n
"
,
dev
->
name
);
NS8390_init
(
dev
,
0
);
dev
->
start
=
0
;
/* Change from 16-bit to 8-bit shared memory so reboot works. */
outb
(
ei_status
.
reg5
,
wd_cmdreg
+
WD_CMDREG5
);
...
...
drivers/scsi/53c7,8xx.c
View file @
d43cc577
...
...
@@ -740,7 +740,7 @@ static int normal_init (Scsi_Host_Template *tpnt, int board, int chip,
So, we stick it past the end of our hostdata structure.
ASSUMPTION :
Irregardless of how many simultaen
ous SCSI commands we allow,
Regardless of how many simultane
ous SCSI commands we allow,
the probe code only executes a _single_ instruction at a time,
so we only need one here, and don't need to allocate NCR53c7x0_cmd
structures for each target until we are no longer in scan_scsis
...
...
@@ -2304,8 +2304,8 @@ NCR53c8x0_soft_reset (struct Scsi_Host *host) {
/*
* Function static struct NCR53c7x0_cmd *create_cmd (Scsi_Cmnd *cmd)
*
* Purpose : If we have not al
l
ready allocated enough NCR53c7x0_cmd
* structures to satisfy any allowable number of simulta
en
ous
* Purpose : If we have not already allocated enough NCR53c7x0_cmd
* structures to satisfy any allowable number of simulta
ne
ous
* commands for this host; do so (using either scsi_malloc()
* or kmalloc() depending on configuration), and add them to the
* hostdata free list. Take the first structure off the free list,
...
...
@@ -2339,9 +2339,9 @@ create_cmd (Scsi_Cmnd *cmd) {
unsigned
long
flags
;
NCR53c7x0_local_setup
(
cmd
->
host
);
/* FIXME : when we start doing multiple simulta
en
ous commands per LUN,
/* FIXME : when we start doing multiple simulta
ne
ous commands per LUN,
we will need to either
- Do an attach_slave() and detach_slave() the right way (alocate
- Do an attach_slave() and detach_slave() the right way (al
l
ocate
memory in attach_slave() as we do in scsi_register).
- Make sure this code works
with the former being cleaner. At the same time, we can also go with
...
...
@@ -2355,7 +2355,7 @@ create_cmd (Scsi_Cmnd *cmd) {
!
(
hostdata
->
cmd_allocated
[
cmd
->
target
]
&
(
1
<<
cmd
->
lun
)))
{
for
(
i
=
host
->
hostt
->
cmd_per_lun
-
1
;
i
>=
0
--
i
)
{
#ifdef SCSI_MALLOC
/* scsi_malloc must allocate with a 512 byte granularity, but al
l
ways
/* scsi_malloc must allocate with a 512 byte granularity, but always
returns buffers which are aligned on a 512 boundary */
size
=
(
hostdata
->
max_cmd_size
+
511
)
/
512
*
512
;
tmp
=
(
struct
NCR53c7x0_cmd
*
)
scsi_malloc
(
size
);
...
...
@@ -3815,7 +3815,7 @@ NCR53c7xx_reset (Scsi_Cmnd *cmd) {
save_flags
(
flags
);
halt
(
host
);
NCR53c7x0_write8
(
SCNTL1_REG
,
SCNTL1_RST
);
udelay
(
25
);
/* Minimum am
m
ount of time to assert RST */
udelay
(
25
);
/* Minimum amount of time to assert RST */
NCR53c7x0_write8
(
SCNTL1_REG
,
SCNTL1_RST
);
for
(
c
=
(
struct
NCR53c7x0_cmd
*
)
hostdata
->
running_list
,
found
=
0
;
c
;
c
=
(
struct
NCR53c7x0_cmd
*
)
c
->
next
)
{
...
...
@@ -3899,7 +3899,7 @@ shutdown (struct Scsi_Host *host) {
* reset.
*/
NCR53c7x0_write8
(
SCNTL1_REG
,
SCNTL1_RST
);
udelay
(
25
);
/* Minimum am
m
ount of time to assert RST */
udelay
(
25
);
/* Minimum amount of time to assert RST */
NCR53c7x0_write8
(
SCNTL1_REG
,
SCNTL1_RST
);
restore_flags
(
flags
);
return
0
;
...
...
drivers/scsi/53c7,8xx.h
View file @
d43cc577
...
...
@@ -59,7 +59,7 @@ extern int NCR53c7xx_release(struct Scsi_Host *);
#endif
#define NCR53c7xx {NULL, NULL, "NCR53c{7,8}xx (rel 4)", NCR53c7xx_detect, \
NULL,
/* info */
NULL,
/* command, depr
i
cated */
NULL, \
NULL,
/* info */
NULL,
/* command, depr
e
cated */
NULL, \
NCR53c7xx_queue_command, NCR53c7xx_abort, NCR53c7xx_reset, \
NULL
/* slave attach */
, scsicam_bios_param,
/* can queue */
1, \
/* id */
7, 127
/* old SG_ALL */
,
/* cmd per lun */
1 , \
...
...
drivers/scsi/ChangeLog
View file @
d43cc577
...
...
@@ -89,7 +89,7 @@ Mon Feb 20 08:57:17 1995 Eric Youngdale (eric@andante)
* 53c7,8xx.c: crash on AEN fixed, SCSI reset is no longer a NOP,
NULL pointer panic on odd UDCs fixed, two bugs in diagnostic output
fixed, should initialize correctly if left running, now loadable,
new memory allocation, extraneous diagnostic output supressed,
new memory allocation, extraneous diagnostic output sup
p
ressed,
splx() replaced with save/restore flags. [ Drew ]
* hosts.c, hosts.h, scsi_ioctl.c, sd.c, sd_ioctl.c, sg.c, sr.c,
...
...
@@ -111,7 +111,7 @@ Mon Feb 20 08:57:17 1995 Eric Youngdale (eric@andante)
* sr.c: More photo-cd hacks to make sure we get the xa stuff right.
* sr.h, sr.c: Change is_xa to xa_flags field.
* st.c: Diable retries for write operations.
* st.c: Di
s
able retries for write operations.
Wed Feb 15 10:52:56 1995 Eric Youngdale (eric@andante)
...
...
@@ -181,7 +181,7 @@ Wed Feb 1 09:20:45 1995 Eric Youngdale (eric@andante)
* Linux 1.1.89 released.
* Makefile, u14-34f.c: Modulariz
.e
* Makefile, u14-34f.c: Modulariz
e.
* Makefile, eata.c: Modularize. Now version 1.14
...
...
@@ -202,7 +202,7 @@ Wed Feb 1 09:20:45 1995 Eric Youngdale (eric@andante)
* scsi.h: Define QUEUE_FULL condition.
* sd.c: Do not check for non-exist
a
nt partition until after
* sd.c: Do not check for non-exist
e
nt partition until after
new media check.
* sg.c: Undo previous change which was wrong.
...
...
@@ -281,7 +281,7 @@ Wed Jan 18 23:33:09 1995 Eric Youngdale (eric@andante)
* scsi.c: Make RECOVERED_ERROR a SUGGEST_IS_OK.
* sd.c: Fail if we are opening a non-exist
a
nt partition.
* sd.c: Fail if we are opening a non-exist
e
nt partition.
* sr.c: Bump SR_TIMEOUT to 15000.
Do not probe for media size at boot time(hard on changers).
...
...
fs/buffer.c
View file @
d43cc577
...
...
@@ -1849,7 +1849,7 @@ asmlinkage int sys_bdflush(int func, long data)
/* If there are still a lot of dirty buffers around, skip the sleep
and flush some more */
if
(
nr_buffers_type
[
BUF_DIRTY
]
<
(
nr_buffers
-
nr_buffers_type
[
BUF_SHARED
])
*
if
(
nr_buffers_type
[
BUF_DIRTY
]
<
=
(
nr_buffers
-
nr_buffers_type
[
BUF_SHARED
])
*
bdf_prm
.
b_un
.
nfract
/
100
)
{
if
(
current
->
signal
&
(
1
<<
(
SIGKILL
-
1
)))
{
bdflush_running
--
;
...
...
include/asm-alpha/byteorder.h
View file @
d43cc577
...
...
@@ -6,8 +6,13 @@
#undef htonl
#undef htons
#ifndef LITTLE_ENDIAN
#define LITTLE_ENDIAN
#endif
#ifndef LITTLE_ENDIAN_BITFIELD
#define LITTLE_ENDIAN_BITFIELD
#endif
extern
unsigned
long
int
ntohl
(
unsigned
long
int
);
extern
unsigned
short
int
ntohs
(
unsigned
short
int
);
...
...
include/asm-i386/byteorder.h
View file @
d43cc577
...
...
@@ -6,8 +6,13 @@
#undef htonl
#undef htons
#ifndef LITTLE_ENDIAN
#define LITTLE_ENDIAN 1234
#endif
#ifndef LITTLE_ENDIAN_BITFIELD
#define LITTLE_ENDIAN_BITFIELD
#endif
extern
unsigned
long
int
ntohl
(
unsigned
long
int
);
extern
unsigned
short
int
ntohs
(
unsigned
short
int
);
...
...
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