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
0a808a31
Commit
0a808a31
authored
Aug 02, 2007
by
David S. Miller
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[SPARC32]: Fix modular build of floppy driver.
Signed-off-by:
David S. Miller
<
davem@davemloft.net
>
parent
3daadf33
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
75 additions
and
44 deletions
+75
-44
arch/sparc/kernel/entry.S
arch/sparc/kernel/entry.S
+3
-4
arch/sparc/kernel/irq.c
arch/sparc/kernel/irq.c
+59
-25
arch/sparc/kernel/sparc_ksyms.c
arch/sparc/kernel/sparc_ksyms.c
+0
-1
include/asm-sparc/floppy.h
include/asm-sparc/floppy.h
+11
-9
include/asm-sparc/irq.h
include/asm-sparc/irq.h
+2
-5
No files found.
arch/sparc/kernel/entry.S
View file @
0a808a31
/*
$Id
:
entry
.
S
,
v
1
.170
2001
/
11
/
13
00
:
57
:
05
davem
Exp
$
*
arch
/
sparc
/
kernel
/
entry
.
S
:
Sparc
trap
low
-
level
entry
points
.
/*
arch
/
sparc
/
kernel
/
entry.S
:
Sparc
trap
low
-
level
entry
points
.
*
*
Copyright
(
C
)
1995
David
S
.
Miller
(
davem
@
caip
.
rutgers
.
edu
)
*
Copyright
(
C
)
1995
,
2007
David
S
.
Miller
(
davem
@
davemloft
.
net
)
*
Copyright
(
C
)
1996
Eddie
C
.
Dost
(
ecd
@
skynet
.
be
)
*
Copyright
(
C
)
1996
Miguel
de
Icaza
(
miguel
@
nuclecu
.
unam
.
mx
)
*
Copyright
(
C
)
1996
-
1999
Jakub
Jelinek
(
jj
@
sunsite
.
mff
.
cuni
.
cz
)
...
...
@@ -129,7 +128,7 @@ trap_low:
RESTORE_ALL
#endif
#if
def CONFIG_BLK_DEV_FD
#if
defined(CONFIG_BLK_DEV_FD) || defined(CONFIG_BLK_DEV_FD_MODULE)
.
text
.
align
4
.
globl
floppy_hardint
...
...
arch/sparc/kernel/irq.c
View file @
0a808a31
...
...
@@ -351,34 +351,14 @@ void handler_irq(int irq, struct pt_regs * regs)
set_irq_regs
(
old_regs
);
}
#ifdef CONFIG_BLK_DEV_FD
extern
void
floppy_interrupt
(
int
irq
,
void
*
dev_id
);
void
sparc_floppy_irq
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
struct
pt_regs
*
old_regs
;
int
cpu
=
smp_processor_id
();
old_regs
=
set_irq_regs
(
regs
);
disable_pil_irq
(
irq
);
irq_enter
();
kstat_cpu
(
cpu
).
irqs
[
irq
]
++
;
floppy_interrupt
(
irq
,
dev_id
);
irq_exit
();
enable_pil_irq
(
irq
);
set_irq_regs
(
old_regs
);
// XXX Eek, it's totally changed with preempt_count() and such
// if (softirq_pending(cpu))
// do_softirq();
}
#endif
#if defined(CONFIG_BLK_DEV_FD) || defined(CONFIG_BLK_DEV_FD_MODULE)
/* Fast IRQs on the Sparc can only have one routine attached to them,
* thus no sharing possible.
*/
int
request_fast_irq
(
unsigned
int
irq
,
irq_handler_t
handler
,
unsigned
long
irqflags
,
const
char
*
devname
)
static
int
request_fast_irq
(
unsigned
int
irq
,
void
(
*
handler
)(
void
)
,
unsigned
long
irqflags
,
const
char
*
devname
)
{
struct
irqaction
*
action
;
unsigned
long
flags
;
...
...
@@ -457,7 +437,6 @@ int request_fast_irq(unsigned int irq,
*/
flush_cache_all
();
action
->
handler
=
handler
;
action
->
flags
=
irqflags
;
cpus_clear
(
action
->
mask
);
action
->
name
=
devname
;
...
...
@@ -475,6 +454,61 @@ int request_fast_irq(unsigned int irq,
return
ret
;
}
/* These variables are used to access state from the assembler
* interrupt handler, floppy_hardint, so we cannot put these in
* the floppy driver image because that would not work in the
* modular case.
*/
volatile
unsigned
char
*
fdc_status
;
EXPORT_SYMBOL
(
fdc_status
);
char
*
pdma_vaddr
;
EXPORT_SYMBOL
(
pdma_vaddr
);
unsigned
long
pdma_size
;
EXPORT_SYMBOL
(
pdma_size
);
volatile
int
doing_pdma
;
EXPORT_SYMBOL
(
doing_pdma
);
char
*
pdma_base
;
EXPORT_SYMBOL
(
pdma_base
);
unsigned
long
pdma_areasize
;
EXPORT_SYMBOL
(
pdma_areasize
);
extern
void
floppy_hardint
(
void
);
static
irqreturn_t
(
*
floppy_irq_handler
)(
int
irq
,
void
*
dev_id
);
void
sparc_floppy_irq
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
struct
pt_regs
*
old_regs
;
int
cpu
=
smp_processor_id
();
old_regs
=
set_irq_regs
(
regs
);
disable_pil_irq
(
irq
);
irq_enter
();
kstat_cpu
(
cpu
).
irqs
[
irq
]
++
;
floppy_irq_handler
(
irq
,
dev_id
);
irq_exit
();
enable_pil_irq
(
irq
);
set_irq_regs
(
old_regs
);
// XXX Eek, it's totally changed with preempt_count() and such
// if (softirq_pending(cpu))
// do_softirq();
}
int
sparc_floppy_request_irq
(
int
irq
,
unsigned
long
flags
,
irqreturn_t
(
*
irq_handler
)(
int
irq
,
void
*
))
{
floppy_irq_handler
=
irq_handler
;
return
request_fast_irq
(
irq
,
floppy_hardint
,
flags
,
"floppy"
);
}
EXPORT_SYMBOL
(
sparc_floppy_request_irq
);
#endif
int
request_irq
(
unsigned
int
irq
,
irq_handler_t
handler
,
unsigned
long
irqflags
,
const
char
*
devname
,
void
*
dev_id
)
...
...
arch/sparc/kernel/sparc_ksyms.c
View file @
0a808a31
...
...
@@ -143,7 +143,6 @@ EXPORT_SYMBOL(mstk48t02_regs);
EXPORT_SYMBOL
(
set_auxio
);
EXPORT_SYMBOL
(
get_auxio
);
#endif
EXPORT_SYMBOL
(
request_fast_irq
);
EXPORT_SYMBOL
(
io_remap_pfn_range
);
/* P3: iounit_xxx may be needed, sun4d users */
/* EXPORT_SYMBOL(iounit_map_dma_init); */
...
...
include/asm-sparc/floppy.h
View file @
0a808a31
...
...
@@ -48,7 +48,7 @@ struct sun_flpy_controller {
/* You'll only ever find one controller on a SparcStation anyways. */
static
struct
sun_flpy_controller
*
sun_fdc
=
NULL
;
volatile
unsigned
char
*
fdc_status
;
extern
volatile
unsigned
char
*
fdc_status
;
struct
sun_floppy_ops
{
unsigned
char
(
*
fd_inb
)(
int
port
);
...
...
@@ -225,13 +225,13 @@ static void sun_82077_fd_outb(unsigned char value, int port)
* underruns. If non-zero, doing_pdma encodes the direction of
* the transfer for debugging. 1=read 2=write
*/
char
*
pdma_vaddr
;
unsigned
long
pdma_size
;
volatile
int
doing_pdma
=
0
;
extern
char
*
pdma_vaddr
;
extern
unsigned
long
pdma_size
;
extern
volatile
int
doing_pdma
;
/* This is software state */
char
*
pdma_base
=
NULL
;
unsigned
long
pdma_areasize
;
extern
char
*
pdma_base
;
extern
unsigned
long
pdma_areasize
;
/* Common routines to all controller types on the Sparc. */
static
__inline__
void
virtual_dma_init
(
void
)
...
...
@@ -281,7 +281,8 @@ static __inline__ void sun_fd_enable_dma(void)
}
/* Our low-level entry point in arch/sparc/kernel/entry.S */
irqreturn_t
floppy_hardint
(
int
irq
,
void
*
unused
);
extern
int
sparc_floppy_request_irq
(
int
irq
,
unsigned
long
flags
,
irqreturn_t
(
*
irq_handler
)(
int
irq
,
void
*
));
static
int
sun_fd_request_irq
(
void
)
{
...
...
@@ -290,8 +291,9 @@ static int sun_fd_request_irq(void)
if
(
!
once
)
{
once
=
1
;
error
=
request_fast_irq
(
FLOPPY_IRQ
,
floppy_hardint
,
IRQF_DISABLED
,
"floppy"
);
error
=
sparc_floppy_request_irq
(
FLOPPY_IRQ
,
IRQF_DISABLED
,
floppy_interrupt
);
return
((
error
==
0
)
?
0
:
-
1
);
}
else
return
0
;
}
...
...
include/asm-sparc/irq.h
View file @
0a808a31
/* $Id: irq.h,v 1.32 2000/08/26 02:42:28 anton Exp $
* irq.h: IRQ registers on the Sparc.
/* irq.h: IRQ registers on the Sparc.
*
* Copyright (C) 1995
David S. Miller (davem@caip.rutgers.edu
)
* Copyright (C) 1995
, 2007 David S. Miller (davem@davemloft.net
)
*/
#ifndef _SPARC_IRQ_H
...
...
@@ -13,6 +12,4 @@
#define irq_canonicalize(irq) (irq)
extern
int
request_fast_irq
(
unsigned
int
irq
,
irq_handler_t
handler
,
unsigned
long
flags
,
__const__
char
*
devname
);
#endif
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