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
e3999574
Commit
e3999574
authored
Feb 13, 2006
by
David S. Miller
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[SPARC64]: Generic sun4v_build_irq().
Signed-off-by:
David S. Miller
<
davem@davemloft.net
>
parent
10804828
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
35 additions
and
28 deletions
+35
-28
arch/sparc64/kernel/irq.c
arch/sparc64/kernel/irq.c
+32
-0
arch/sparc64/kernel/pci_sun4v.c
arch/sparc64/kernel/pci_sun4v.c
+2
-28
include/asm-sparc64/irq.h
include/asm-sparc64/irq.h
+1
-0
No files found.
arch/sparc64/kernel/irq.c
View file @
e3999574
...
@@ -303,6 +303,38 @@ unsigned int build_irq(int pil, int inofixup, unsigned long iclr, unsigned long
...
@@ -303,6 +303,38 @@ unsigned int build_irq(int pil, int inofixup, unsigned long iclr, unsigned long
return
__irq
(
bucket
);
return
__irq
(
bucket
);
}
}
unsigned
int
sun4v_build_irq
(
u32
devhandle
,
unsigned
int
devino
,
int
pil
,
unsigned
char
flags
)
{
struct
ino_bucket
*
bucket
;
unsigned
long
sysino
;
sysino
=
sun4v_devino_to_sysino
(
devhandle
,
devino
);
printk
(
KERN_INFO
"sun4v_irq: Mapping ( devh[%08x] devino[%08x] ) "
"--> sysino[%016lx]
\n
"
,
devhandle
,
devino
,
sysino
);
bucket
=
&
ivector_table
[
sysino
];
/* Catch accidental accesses to these things. IMAP/ICLR handling
* is done by hypervisor calls on sun4v platforms, not by direct
* register accesses.
*/
bucket
->
imap
=
~
0UL
;
bucket
->
iclr
=
~
0UL
;
bucket
->
pil
=
pil
;
bucket
->
flags
=
flags
;
bucket
->
irq_info
=
kmalloc
(
sizeof
(
struct
irq_desc
),
GFP_ATOMIC
);
if
(
!
bucket
->
irq_info
)
{
prom_printf
(
"IRQ: Error, kmalloc(irq_desc) failed.
\n
"
);
prom_halt
();
}
memset
(
bucket
->
irq_info
,
0
,
sizeof
(
struct
irq_desc
));
return
__irq
(
bucket
);
}
static
void
atomic_bucket_insert
(
struct
ino_bucket
*
bucket
)
static
void
atomic_bucket_insert
(
struct
ino_bucket
*
bucket
)
{
{
unsigned
long
pstate
;
unsigned
long
pstate
;
...
...
arch/sparc64/kernel/pci_sun4v.c
View file @
e3999574
...
@@ -644,18 +644,11 @@ static void pci_sun4v_scan_bus(struct pci_controller_info *p)
...
@@ -644,18 +644,11 @@ static void pci_sun4v_scan_bus(struct pci_controller_info *p)
static
unsigned
int
pci_sun4v_irq_build
(
struct
pci_pbm_info
*
pbm
,
static
unsigned
int
pci_sun4v_irq_build
(
struct
pci_pbm_info
*
pbm
,
struct
pci_dev
*
pdev
,
struct
pci_dev
*
pdev
,
unsigned
int
ino
)
unsigned
int
dev
ino
)
{
{
struct
ino_bucket
*
bucket
;
unsigned
long
sysino
;
u32
devhandle
=
pbm
->
devhandle
;
u32
devhandle
=
pbm
->
devhandle
;
int
pil
;
int
pil
;
sysino
=
sun4v_devino_to_sysino
(
devhandle
,
ino
);
printk
(
KERN_INFO
"pci_irq_buld: Mapping ( devh[%08x] ino[%08x] ) "
"--> sysino[%016lx]
\n
"
,
devhandle
,
ino
,
sysino
);
pil
=
4
;
pil
=
4
;
if
(
pdev
)
{
if
(
pdev
)
{
switch
((
pdev
->
class
>>
16
)
&
0xff
)
{
switch
((
pdev
->
class
>>
16
)
&
0xff
)
{
...
@@ -685,26 +678,7 @@ static unsigned int pci_sun4v_irq_build(struct pci_pbm_info *pbm,
...
@@ -685,26 +678,7 @@ static unsigned int pci_sun4v_irq_build(struct pci_pbm_info *pbm,
}
}
BUG_ON
(
PIL_RESERVED
(
pil
));
BUG_ON
(
PIL_RESERVED
(
pil
));
bucket
=
&
ivector_table
[
sysino
];
return
sun4v_build_irq
(
devhandle
,
devino
,
pil
,
IBF_PCI
);
/* Catch accidental accesses to these things. IMAP/ICLR handling
* is done by hypervisor calls on sun4v platforms, not by direct
* register accesses.
*/
bucket
->
imap
=
~
0UL
;
bucket
->
iclr
=
~
0UL
;
bucket
->
pil
=
pil
;
bucket
->
flags
=
IBF_PCI
;
bucket
->
irq_info
=
kmalloc
(
sizeof
(
struct
irq_desc
),
GFP_ATOMIC
);
if
(
!
bucket
->
irq_info
)
{
prom_printf
(
"IRQ: Error, kmalloc(irq_desc) failed.
\n
"
);
prom_halt
();
}
memset
(
bucket
->
irq_info
,
0
,
sizeof
(
struct
irq_desc
));
return
__irq
(
bucket
);
}
}
static
void
pci_sun4v_base_address_update
(
struct
pci_dev
*
pdev
,
int
resource
)
static
void
pci_sun4v_base_address_update
(
struct
pci_dev
*
pdev
,
int
resource
)
...
...
include/asm-sparc64/irq.h
View file @
e3999574
...
@@ -111,6 +111,7 @@ extern void disable_irq(unsigned int);
...
@@ -111,6 +111,7 @@ extern void disable_irq(unsigned int);
#define disable_irq_nosync disable_irq
#define disable_irq_nosync disable_irq
extern
void
enable_irq
(
unsigned
int
);
extern
void
enable_irq
(
unsigned
int
);
extern
unsigned
int
build_irq
(
int
pil
,
int
inofixup
,
unsigned
long
iclr
,
unsigned
long
imap
);
extern
unsigned
int
build_irq
(
int
pil
,
int
inofixup
,
unsigned
long
iclr
,
unsigned
long
imap
);
extern
unsigned
int
sun4v_build_irq
(
u32
devhandle
,
unsigned
int
devino
,
int
pil
,
unsigned
char
flags
);
extern
unsigned
int
sbus_build_irq
(
void
*
sbus
,
unsigned
int
ino
);
extern
unsigned
int
sbus_build_irq
(
void
*
sbus
,
unsigned
int
ino
);
static
__inline__
void
set_softint
(
unsigned
long
bits
)
static
__inline__
void
set_softint
(
unsigned
long
bits
)
...
...
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