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
c6383562
Commit
c6383562
authored
Apr 30, 2002
by
Jeff Garzik
Browse files
Options
Browse Files
Download
Plain Diff
Merge
http://linux-isdn.bkbits.net/linux-2.5.net-auto_irq
into mandrakesoft.com:/home/jgarzik/repo/net-drivers-2.5
parents
043ae76b
d9af4ef3
Changes
18
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
89 additions
and
63 deletions
+89
-63
drivers/cdrom/sonycd535.c
drivers/cdrom/sonycd535.c
+8
-7
drivers/net/3c501.c
drivers/net/3c501.c
+6
-2
drivers/net/8390.h
drivers/net/8390.h
+0
-6
drivers/net/Makefile
drivers/net/Makefile
+0
-10
drivers/net/appletalk/ltpc.c
drivers/net/appletalk/ltpc.c
+5
-2
drivers/net/depca.c
drivers/net/depca.c
+7
-2
drivers/net/eepro.c
drivers/net/eepro.c
+6
-2
drivers/net/ewrk3.c
drivers/net/ewrk3.c
+6
-2
drivers/net/isa-skeleton.c
drivers/net/isa-skeleton.c
+2
-2
drivers/net/lance.c
drivers/net/lance.c
+12
-4
drivers/net/ni5010.c
drivers/net/ni5010.c
+6
-2
drivers/net/ni52.c
drivers/net/ni52.c
+8
-2
drivers/net/ni65.c
drivers/net/ni65.c
+7
-3
drivers/net/pcmcia/ax8390.h
drivers/net/pcmcia/ax8390.h
+0
-6
drivers/net/smc9194.c
drivers/net/smc9194.c
+3
-3
drivers/net/wan/sbni.c
drivers/net/wan/sbni.c
+6
-2
drivers/net/wd.c
drivers/net/wd.c
+7
-2
include/linux/ioport.h
include/linux/ioport.h
+0
-4
No files found.
drivers/cdrom/sonycd535.c
View file @
c6383562
...
...
@@ -1549,19 +1549,20 @@ sony535_init(void)
#endif
/* now ready to use interrupts, if available */
sony535_irq_used
=
tmp_irq
;
#ifndef MODULE
/* This code is not in MODULEs by default, since the autoirq stuff might
* not be in the module-accessible symbol table.
*/
/* A negative sony535_irq_used will attempt an autoirq. */
if
(
sony535_irq_used
<
0
)
{
autoirq_setup
(
0
);
unsigned
long
irq_mask
,
delay
;
irq_mask
=
probe_irq_on
();
enable_interrupts
();
outb
(
0
,
read_status_reg
);
/* does a reset? */
sony535_irq_used
=
autoirq_report
(
10
);
delay
=
jiffies
+
HZ
/
10
;
while
(
time_before
(
jiffies
,
delay
))
;
sony535_irq_used
=
probe_irq_off
(
irq_mask
);
disable_interrupts
();
}
#endif
if
(
sony535_irq_used
>
0
)
{
if
(
request_irq
(
sony535_irq_used
,
cdu535_interrupt
,
SA_INTERRUPT
,
CDU535_HANDLE
,
NULL
))
{
...
...
drivers/net/3c501.c
View file @
c6383562
...
...
@@ -323,14 +323,18 @@ static int __init el1_probe1(struct net_device *dev, int ioaddr)
if
(
dev
->
irq
<
2
)
{
autoirq_setup
(
2
);
unsigned
long
irq_mask
,
delay
;
irq_mask
=
probe_irq_on
();
inb
(
RX_STATUS
);
/* Clear pending interrupts. */
inb
(
TX_STATUS
);
outb
(
AX_LOOP
+
1
,
AX_CMD
);
outb
(
0x00
,
AX_CMD
);
autoirq
=
autoirq_report
(
1
);
delay
=
jiffies
+
HZ
/
50
;
while
(
time_before
(
jiffies
,
delay
))
;
autoirq
=
probe_irq_off
(
irq_mask
);
if
(
autoirq
==
0
)
{
...
...
drivers/net/8390.h
View file @
c6383562
...
...
@@ -39,12 +39,6 @@ extern int ei_debug;
#define ei_debug 1
#endif
#ifndef HAVE_AUTOIRQ
/* From auto_irq.c */
extern
void
autoirq_setup
(
int
waittime
);
extern
unsigned
long
autoirq_report
(
int
waittime
);
#endif
extern
int
ethdev_init
(
struct
net_device
*
dev
);
extern
void
NS8390_init
(
struct
net_device
*
dev
,
int
startp
);
extern
int
ei_open
(
struct
net_device
*
dev
);
...
...
drivers/net/Makefile
View file @
c6383562
...
...
@@ -221,16 +221,6 @@ subdir-y += ../acorn/net
obj-y
+=
../acorn/net/acorn-net.o
endif
#
# HIPPI adapters
#
ifneq
($(ARCH),s390)
ifneq
($(ARCH),s390x)
obj-y
+=
auto_irq.o
endif
endif
include
$(TOPDIR)/Rules.make
clean
:
...
...
drivers/net/appletalk/ltpc.c
View file @
c6383562
...
...
@@ -1092,15 +1092,18 @@ int __init ltpc_probe(struct net_device *dev)
/* probe for the IRQ line */
if
(
irq
<
2
)
{
autoirq_setup
(
2
)
;
unsigned
long
irq_mask
,
delay
;
irq_mask
=
probe_irq_on
();
/* reset the interrupt line */
inb_p
(
io
+
7
);
inb_p
(
io
+
7
);
/* trigger an interrupt (I hope) */
inb_p
(
io
+
6
);
autoirq
=
autoirq_report
(
1
);
delay
=
jiffies
+
HZ
/
50
;
while
(
time_before
(
jiffies
,
delay
))
;
autoirq
=
probe_irq_off
(
irq_mask
);
if
(
autoirq
==
0
)
{
printk
(
"ltpc: probe at %#x failed to detect IRQ line.
\n
"
,
...
...
drivers/net/depca.c
View file @
c6383562
...
...
@@ -682,7 +682,9 @@ depca_hw_init(struct net_device *dev, u_long ioaddr, int mca_slot)
if
(
dev
->
irq
<
2
)
{
#ifndef MODULE
unsigned
char
irqnum
;
autoirq_setup
(
0
);
unsigned
long
irq_mask
,
delay
;
irq_mask
=
probe_irq_on
();
/* Assign the correct irq list */
switch
(
lp
->
adapter
)
{
...
...
@@ -706,7 +708,10 @@ depca_hw_init(struct net_device *dev, u_long ioaddr, int mca_slot)
/* Trigger an initialization just for the interrupt. */
outw
(
INEA
|
INIT
,
DEPCA_DATA
);
irqnum
=
autoirq_report
(
1
);
delay
=
jiffies
+
HZ
/
50
;
while
(
time_before
(
jiffies
,
delay
))
;
irqnum
=
probe_irq_off
(
irq_mask
);
status
=
-
ENXIO
;
if
(
!
irqnum
)
{
printk
(
" and failed to detect IRQ line.
\n
"
);
...
...
drivers/net/eepro.c
View file @
c6383562
...
...
@@ -896,12 +896,16 @@ static int eepro_grab_irq(struct net_device *dev)
eepro_sw2bank0
(
ioaddr
);
/* Switch back to Bank 0 */
if
(
request_irq
(
*
irqp
,
NULL
,
SA_SHIRQ
,
"bogus"
,
dev
)
!=
EBUSY
)
{
unsigned
long
irq_mask
,
delay
;
/* Twinkle the interrupt, and check if it's seen */
autoirq_setup
(
0
);
irq_mask
=
probe_irq_on
(
);
eepro_diag
(
ioaddr
);
/* RESET the 82595 */
if
(
*
irqp
==
autoirq_report
(
2
))
/* It's a good IRQ line */
delay
=
jiffies
+
HZ
/
50
;
while
(
time_before
(
jiffies
,
delay
))
;
if
(
*
irqp
==
probe_irq_off
(
irq_mask
))
/* It's a good IRQ line */
break
;
/* clear all interrupts */
...
...
drivers/net/ewrk3.c
View file @
c6383562
...
...
@@ -555,8 +555,10 @@ ewrk3_hw_init(struct net_device *dev, u_long iobase)
if
(
dev
->
irq
<
2
)
{
#ifndef MODULE
u_char
irqnum
;
unsigned
long
irq_mask
,
delay
;
autoirq_setup
(
0
);
irq_mask
=
probe_irq_on
(
);
/*
** Trigger a TNE interrupt.
...
...
@@ -567,7 +569,9 @@ ewrk3_hw_init(struct net_device *dev, u_long iobase)
irqnum
=
irq
[((
icr
&
IRQ_SEL
)
>>
4
)];
dev
->
irq
=
autoirq_report
(
1
);
delay
=
jiffies
+
HZ
/
50
;
while
(
time_before
(
jiffies
,
delay
))
;
dev
->
irq
=
probe_irq_off
(
irq_mask
);
if
((
dev
->
irq
)
&&
(
irqnum
==
dev
->
irq
))
{
printk
(
" and uses IRQ%d.
\n
"
,
dev
->
irq
);
}
else
{
...
...
drivers/net/isa-skeleton.c
View file @
c6383562
...
...
@@ -202,10 +202,10 @@ static int __init netcard_probe1(struct net_device *dev, int ioaddr)
if
(
dev
->
irq
==
-
1
)
;
/* Do nothing: a user-level program will set it. */
else
if
(
dev
->
irq
<
2
)
{
/* "Auto-IRQ" */
autoirq_setup
(
0
);
unsigned
long
irq_mask
=
probe_irq_on
(
);
/* Trigger an interrupt here. */
dev
->
irq
=
autoirq_report
(
0
);
dev
->
irq
=
probe_irq_off
(
irq_mask
);
if
(
net_debug
>=
2
)
printk
(
" autoirq is %d"
,
dev
->
irq
);
}
else
if
(
dev
->
irq
==
2
)
...
...
drivers/net/lance.c
View file @
c6383562
...
...
@@ -545,15 +545,19 @@ static int __init lance_probe1(struct net_device *dev, int ioaddr, int irq, int
if
(
dev
->
irq
>=
2
)
printk
(
" assigned IRQ %d"
,
dev
->
irq
);
else
if
(
lance_version
!=
0
)
{
/* 7990 boards need DMA detection first. */
unsigned
long
irq_mask
,
delay
;
/* To auto-IRQ we enable the initialization-done and DMA error
interrupts. For ISA boards we get a DMA error, but VLB and PCI
boards will work. */
autoirq_setup
(
0
);
irq_mask
=
probe_irq_on
(
);
/* Trigger an initialization just for the interrupt. */
outw
(
0x0041
,
ioaddr
+
LANCE_DATA
);
dev
->
irq
=
autoirq_report
(
2
);
delay
=
jiffies
+
HZ
/
50
;
while
(
time_before
(
jiffies
,
delay
))
;
dev
->
irq
=
probe_irq_off
(
irq_mask
);
if
(
dev
->
irq
)
printk
(
", probed IRQ %d"
,
dev
->
irq
);
else
{
...
...
@@ -619,10 +623,14 @@ static int __init lance_probe1(struct net_device *dev, int ioaddr, int irq, int
if
(
lance_version
==
0
&&
dev
->
irq
==
0
)
{
/* We may auto-IRQ now that we have a DMA channel. */
/* Trigger an initialization just for the interrupt. */
autoirq_setup
(
0
);
unsigned
long
irq_mask
,
delay
;
irq_mask
=
probe_irq_on
(
0
);
outw
(
0x0041
,
ioaddr
+
LANCE_DATA
);
dev
->
irq
=
autoirq_report
(
4
);
delay
=
jiffies
+
HZ
/
25
;
while
(
time_before
(
jiffies
,
delay
))
;
dev
->
irq
=
probe_irq_off
(
irq_mask
);
if
(
dev
->
irq
==
0
)
{
printk
(
" Failed to detect the 7990 IRQ line.
\n
"
);
return
-
ENODEV
;
...
...
drivers/net/ni5010.c
View file @
c6383562
...
...
@@ -254,11 +254,15 @@ static int __init ni5010_probe1(struct net_device *dev, int ioaddr)
if
(
dev
->
irq
==
0xff
)
;
else
if
(
dev
->
irq
<
2
)
{
unsigned
long
irq_mask
,
delay
;
PRINTK2
((
KERN_DEBUG
"%s: I/O #5 passed!
\n
"
,
dev
->
name
));
autoirq_setup
(
0
);
irq_mask
=
probe_irq_on
(
);
trigger_irq
(
ioaddr
);
dev
->
irq
=
autoirq_report
(
2
);
delay
=
jiffies
+
HZ
/
50
;
while
(
time_before
(
jiffies
,
delay
))
;
dev
->
irq
=
probe_irq_off
(
irq_mask
);
PRINTK2
((
KERN_DEBUG
"%s: I/O #6 passed!
\n
"
,
dev
->
name
));
...
...
drivers/net/ni52.c
View file @
c6383562
...
...
@@ -491,10 +491,16 @@ static int __init ni52_probe1(struct net_device *dev,int ioaddr)
if
(
dev
->
irq
<
2
)
{
autoirq_setup
(
0
);
unsigned
long
irq_mask
,
delay
;
irq_mask
=
probe_irq_on
();
ni_reset586
();
ni_attn586
();
if
(
!
(
dev
->
irq
=
autoirq_report
(
2
)))
delay
=
jiffies
+
HZ
/
50
;
while
(
time_before
(
jiffies
,
delay
))
;
dev
->
irq
=
probe_irq_off
(
irq_mask
);
if
(
!
dev
->
irq
)
{
printk
(
"?autoirq, Failed to detect IRQ line!
\n
"
);
kfree
(
dev
->
priv
);
...
...
drivers/net/ni65.c
View file @
c6383562
...
...
@@ -447,11 +447,15 @@ static int __init ni65_probe1(struct net_device *dev,int ioaddr)
if
(
dev
->
irq
<
2
)
{
unsigned
long
irq_mask
,
delay
;
ni65_init_lance
(
p
,
dev
->
dev_addr
,
0
,
0
);
autoirq_setup
(
0
);
irq_mask
=
probe_irq_on
(
);
writereg
(
CSR0_INIT
|
CSR0_INEA
,
CSR0
);
/* trigger interrupt */
if
(
!
(
dev
->
irq
=
autoirq_report
(
2
)))
delay
=
jiffies
+
HZ
/
50
;
while
(
time_before
(
jiffies
,
delay
))
;
dev
->
irq
=
probe_irq_off
(
irq_mask
);
if
(
!
dev
->
irq
)
{
printk
(
"Failed to detect IRQ line!
\n
"
);
ni65_free_buffer
(
p
);
...
...
drivers/net/pcmcia/ax8390.h
View file @
c6383562
...
...
@@ -39,12 +39,6 @@ extern int ei_debug;
#define ei_debug 1
#endif
#ifndef HAVE_AUTOIRQ
/* From auto_irq.c */
extern
void
autoirq_setup
(
int
waittime
);
extern
unsigned
long
autoirq_report
(
int
waittime
);
#endif
static
int
ethdev_init
(
struct
net_device
*
dev
);
static
void
NS8390_init
(
struct
net_device
*
dev
,
int
startp
);
static
int
ei_open
(
struct
net_device
*
dev
);
...
...
drivers/net/smc9194.c
View file @
c6383562
...
...
@@ -751,15 +751,15 @@ int __init smc_findirq( int ioaddr )
timeout
--
;
}
/* there is really nothing that I can do here if timeout fails,
as
autoirq_report
will return a 0 anyway, which is what I
as
probe_irq_off
will return a 0 anyway, which is what I
want in this case. Plus, the clean up is needed in both
cases. */
/* DELAY HERE!
On a fast machine, the status might change before the interrupt
is given to the processor. This means that the interrupt was
never detected, and
autoirq_report
fails to report anything.
This should fix
auto
irq_* problems.
never detected, and
probe_irq_off
fails to report anything.
This should fix
probe_
irq_* problems.
*/
SMC_DELAY
();
SMC_DELAY
();
...
...
drivers/net/wan/sbni.c
View file @
c6383562
...
...
@@ -330,10 +330,14 @@ sbni_probe1( struct net_device *dev, unsigned long ioaddr, int irq )
outb
(
0
,
ioaddr
+
CSR0
);
if
(
irq
<
2
)
{
autoirq_setup
(
5
);
unsigned
long
irq_mask
,
delay
;
irq_mask
=
probe_irq_on
();
outb
(
EN_INT
|
TR_REQ
,
ioaddr
+
CSR0
);
outb
(
PR_RES
,
ioaddr
+
CSR1
);
irq
=
autoirq_report
(
5
);
delay
=
jiffies
+
HZ
/
20
;
while
(
time_before
(
jiffies
,
delay
))
;
irq
=
probe_irq_off
(
irq_mask
);
outb
(
0
,
ioaddr
+
CSR0
);
if
(
!
irq
)
{
...
...
drivers/net/wd.c
View file @
c6383562
...
...
@@ -235,18 +235,23 @@ static int __init wd_probe1(struct net_device *dev, int ioaddr)
int
reg4
=
inb
(
ioaddr
+
4
);
if
(
ancient
||
reg1
==
0xff
)
{
/* Ack!! No way to read the IRQ! */
short
nic_addr
=
ioaddr
+
WD_NIC_OFFSET
;
unsigned
long
irq_mask
,
delay
;
/* We have an old-style ethercard that doesn't report its IRQ
line. Do autoirq to find the IRQ line. Note that this IS NOT
a reliable way to trigger an interrupt. */
outb_p
(
E8390_NODMA
+
E8390_STOP
,
nic_addr
);
outb
(
0x00
,
nic_addr
+
EN0_IMR
);
/* Disable all intrs. */
autoirq_setup
(
0
);
irq_mask
=
probe_irq_on
();
outb_p
(
0xff
,
nic_addr
+
EN0_IMR
);
/* Enable all interrupts. */
outb_p
(
0x00
,
nic_addr
+
EN0_RCNTLO
);
outb_p
(
0x00
,
nic_addr
+
EN0_RCNTHI
);
outb
(
E8390_RREAD
+
E8390_START
,
nic_addr
);
/* Trigger it... */
dev
->
irq
=
autoirq_report
(
2
);
delay
=
jiffies
+
HZ
/
50
;
while
(
time_before
(
jiffies
,
delay
))
;
dev
->
irq
=
probe_irq_off
(
irq_mask
);
outb_p
(
0x00
,
nic_addr
+
EN0_IMR
);
/* Mask all intrs. again. */
if
(
ei_debug
>
2
)
...
...
include/linux/ioport.h
View file @
c6383562
...
...
@@ -113,8 +113,4 @@ extern void __release_region(struct resource *, unsigned long, unsigned long);
#define get_ioport_list(buf) get_resource_list(&ioport_resource, buf, PAGE_SIZE)
#define get_mem_list(buf) get_resource_list(&iomem_resource, buf, PAGE_SIZE)
#define HAVE_AUTOIRQ
extern
void
autoirq_setup
(
int
waittime
);
extern
int
autoirq_report
(
int
waittime
);
#endif
/* _LINUX_IOPORT_H */
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