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
1b92313d
Commit
1b92313d
authored
Oct 10, 2005
by
Paul Mackerras
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
powerpc: Merge asm/irq.h
Signed-off-by:
Paul Mackerras
<
paulus@samba.org
>
parent
76f9f87f
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
117 additions
and
161 deletions
+117
-161
include/asm-powerpc/irq.h
include/asm-powerpc/irq.h
+117
-41
include/asm-ppc64/irq.h
include/asm-ppc64/irq.h
+0
-120
No files found.
include/asm-ppc/irq.h
→
include/asm-p
ower
pc/irq.h
View file @
1b92313d
#ifdef __KERNEL__
#ifndef _ASM_IRQ_H
#define _ASM_IRQ_H
#ifndef _ASM_POWERPC_IRQ_H
#define _ASM_POWERPC_IRQ_H
/*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*/
#include <linux/config.h>
#include <asm/machdep.h>
/* ppc_md */
#include <linux/threads.h>
#include <asm/types.h>
#include <asm/atomic.h>
/* this number is used when no interrupt has been assigned */
#define NO_IRQ (-1)
/*
* These constants are used for passing information about interrupt
* signal polarity and level/edge sensing to the low-level PIC chip
...
...
@@ -30,6 +42,44 @@
#define for_each_irq(i) \
for ((i) = 0; (i) < NR_IRQS; ++(i))
#ifdef CONFIG_PPC64
/*
* Maximum number of interrupt sources that we can handle.
*/
#define NR_IRQS 512
/* Interrupt numbers are virtual in case they are sparsely
* distributed by the hardware.
*/
extern
unsigned
int
virt_irq_to_real_map
[
NR_IRQS
];
/* Create a mapping for a real_irq if it doesn't already exist.
* Return the virtual irq as a convenience.
*/
int
virt_irq_create_mapping
(
unsigned
int
real_irq
);
void
virt_irq_init
(
void
);
static
inline
unsigned
int
virt_irq_to_real
(
unsigned
int
virt_irq
)
{
return
virt_irq_to_real_map
[
virt_irq
];
}
extern
unsigned
int
real_irq_to_virt_slowpath
(
unsigned
int
real_irq
);
/*
* List of interrupt controllers.
*/
#define IC_INVALID 0
#define IC_OPEN_PIC 1
#define IC_PPC_XIC 2
#define IC_BPA_IIC 3
#define IC_ISERIES 4
extern
u64
ppc64_interrupt_controller
;
#else
/* 32-bit */
#if defined(CONFIG_40x)
#include <asm/ibm4xx.h>
...
...
@@ -72,11 +122,6 @@
#define NR_UIC_IRQS UIC_WIDTH
#define NR_IRQS ((NR_UIC_IRQS * NR_UICS) + NR_BOARD_IRQS)
#endif
static
__inline__
int
irq_canonicalize
(
int
irq
)
{
return
(
irq
);
}
#elif defined(CONFIG_44x)
#include <asm/ibm44x.h>
...
...
@@ -84,12 +129,6 @@ irq_canonicalize(int irq)
#define NR_UIC_IRQS 32
#define NR_IRQS ((NR_UIC_IRQS * NR_UICS) + NR_BOARD_IRQS)
static
__inline__
int
irq_canonicalize
(
int
irq
)
{
return
(
irq
);
}
#elif defined(CONFIG_8xx)
/* Now include the board configuration specific associations.
...
...
@@ -176,20 +215,9 @@ irq_canonicalize(int irq)
*/
#define mk_int_int_mask(IL) (1 << (7 - (IL/2)))
/* always the same on 8xx -- Cort */
static
__inline__
int
irq_canonicalize
(
int
irq
)
{
return
irq
;
}
#elif defined(CONFIG_83xx)
#include <asm/mpc83xx.h>
static
__inline__
int
irq_canonicalize
(
int
irq
)
{
return
irq
;
}
#define NR_IRQS (NR_IPIC_INTS)
#elif defined(CONFIG_85xx)
...
...
@@ -313,17 +341,13 @@ static __inline__ int irq_canonicalize(int irq)
#define SIU_INT_PC1 ((uint)0x3e+CPM_IRQ_OFFSET)
#define SIU_INT_PC0 ((uint)0x3f+CPM_IRQ_OFFSET)
static
__inline__
int
irq_canonicalize
(
int
irq
)
{
return
irq
;
}
#else
/* CONFIG_40x + CONFIG_8xx */
/*
* this is the # irq's for all ppc arch's (pmac/chrp/prep)
* so it is the max of them all
*/
#define NR_IRQS 256
#define __DO_IRQ_CANON 1
#ifndef CONFIG_8260
...
...
@@ -400,25 +424,77 @@ static __inline__ int irq_canonicalize(int irq)
#endif
/* CONFIG_8260 */
#endif
#define NR_MASK_WORDS ((NR_IRQS + 31) / 32)
/* pedantic: these are long because they are used with set_bit --RR */
extern
unsigned
long
ppc_cached_irq_mask
[
NR_MASK_WORDS
];
extern
unsigned
long
ppc_lost_interrupts
[
NR_MASK_WORDS
];
extern
atomic_t
ppc_n_lost_interrupts
;
#endif
/*
* This gets called from serial.c, which is now used on
* powermacs as well as prep/chrp boxes.
* Prep and chrp both have cascaded 8259 PICs.
* Because many systems have two overlapping names spaces for
* interrupts (ISA and XICS for example), and the ISA interrupts
* have historically not been easy to renumber, we allow ISA
* interrupts to take values 0 - 15, and shift up the remaining
* interrupts by 0x10.
*/
#define NUM_ISA_INTERRUPTS 0x10
extern
int
__irq_offset_value
;
static
inline
int
irq_offset_up
(
int
irq
)
{
return
(
irq
+
__irq_offset_value
);
}
static
inline
int
irq_offset_down
(
int
irq
)
{
return
(
irq
-
__irq_offset_value
);
}
static
inline
int
irq_offset_value
(
void
)
{
return
__irq_offset_value
;
}
#ifdef __DO_IRQ_CANON
extern
int
ppc_do_canonicalize_irqs
;
#else
#define ppc_do_canonicalize_irqs 0
#endif
static
__inline__
int
irq_canonicalize
(
int
irq
)
{
if
(
ppc_
md
.
irq_canonicalize
)
return
ppc_md
.
irq_canonicalize
(
irq
)
;
if
(
ppc_
do_canonicalize_irqs
&&
irq
==
2
)
irq
=
9
;
return
irq
;
}
#endif
extern
int
distribute_irqs
;
#define NR_MASK_WORDS ((NR_IRQS + 31) / 32)
/* pedantic: these are long because they are used with set_bit --RR */
extern
unsigned
long
ppc_cached_irq_mask
[
NR_MASK_WORDS
];
extern
unsigned
long
ppc_lost_interrupts
[
NR_MASK_WORDS
];
extern
atomic_t
ppc_n_lost_interrupts
;
struct
irqaction
;
struct
pt_regs
;
#ifdef CONFIG_IRQSTACKS
/*
* Per-cpu stacks for handling hard and soft interrupts.
*/
extern
struct
thread_info
*
hardirq_ctx
[
NR_CPUS
];
extern
struct
thread_info
*
softirq_ctx
[
NR_CPUS
];
extern
void
irq_ctx_init
(
void
);
extern
void
call_do_softirq
(
struct
thread_info
*
tp
);
extern
int
call_handle_IRQ_event
(
int
irq
,
struct
pt_regs
*
regs
,
struct
irqaction
*
action
,
struct
thread_info
*
tp
);
#define __ARCH_HAS_DO_SOFTIRQ
#else
#define irq_ctx_init()
#endif
/* CONFIG_IRQSTACKS */
#endif
/* _ASM_IRQ_H */
#endif
/* __KERNEL__ */
include/asm-ppc64/irq.h
deleted
100644 → 0
View file @
76f9f87f
#ifdef __KERNEL__
#ifndef _ASM_IRQ_H
#define _ASM_IRQ_H
/*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*/
#include <linux/config.h>
#include <linux/threads.h>
/*
* Maximum number of interrupt sources that we can handle.
*/
#define NR_IRQS 512
/* this number is used when no interrupt has been assigned */
#define NO_IRQ (-1)
/*
* These constants are used for passing information about interrupt
* signal polarity and level/edge sensing to the low-level PIC chip
* drivers.
*/
#define IRQ_SENSE_MASK 0x1
#define IRQ_SENSE_LEVEL 0x1
/* interrupt on active level */
#define IRQ_SENSE_EDGE 0x0
/* interrupt triggered by edge */
#define IRQ_POLARITY_MASK 0x2
#define IRQ_POLARITY_POSITIVE 0x2
/* high level or low->high edge */
#define IRQ_POLARITY_NEGATIVE 0x0
/* low level or high->low edge */
/*
* IRQ line status macro IRQ_PER_CPU is used
*/
#define ARCH_HAS_IRQ_PER_CPU
#define get_irq_desc(irq) (&irq_desc[(irq)])
/* Define a way to iterate across irqs. */
#define for_each_irq(i) \
for ((i) = 0; (i) < NR_IRQS; ++(i))
/* Interrupt numbers are virtual in case they are sparsely
* distributed by the hardware.
*/
extern
unsigned
int
virt_irq_to_real_map
[
NR_IRQS
];
/* Create a mapping for a real_irq if it doesn't already exist.
* Return the virtual irq as a convenience.
*/
int
virt_irq_create_mapping
(
unsigned
int
real_irq
);
void
virt_irq_init
(
void
);
static
inline
unsigned
int
virt_irq_to_real
(
unsigned
int
virt_irq
)
{
return
virt_irq_to_real_map
[
virt_irq
];
}
extern
unsigned
int
real_irq_to_virt_slowpath
(
unsigned
int
real_irq
);
/*
* Because many systems have two overlapping names spaces for
* interrupts (ISA and XICS for example), and the ISA interrupts
* have historically not been easy to renumber, we allow ISA
* interrupts to take values 0 - 15, and shift up the remaining
* interrupts by 0x10.
*/
#define NUM_ISA_INTERRUPTS 0x10
extern
int
__irq_offset_value
;
static
inline
int
irq_offset_up
(
int
irq
)
{
return
(
irq
+
__irq_offset_value
);
}
static
inline
int
irq_offset_down
(
int
irq
)
{
return
(
irq
-
__irq_offset_value
);
}
static
inline
int
irq_offset_value
(
void
)
{
return
__irq_offset_value
;
}
static
__inline__
int
irq_canonicalize
(
int
irq
)
{
return
irq
;
}
extern
int
distribute_irqs
;
struct
irqaction
;
struct
pt_regs
;
#ifdef CONFIG_IRQSTACKS
/*
* Per-cpu stacks for handling hard and soft interrupts.
*/
extern
struct
thread_info
*
hardirq_ctx
[
NR_CPUS
];
extern
struct
thread_info
*
softirq_ctx
[
NR_CPUS
];
extern
void
irq_ctx_init
(
void
);
extern
void
call_do_softirq
(
struct
thread_info
*
tp
);
extern
int
call_handle_IRQ_event
(
int
irq
,
struct
pt_regs
*
regs
,
struct
irqaction
*
action
,
struct
thread_info
*
tp
);
#define __ARCH_HAS_DO_SOFTIRQ
#else
#define irq_ctx_init()
#endif
/* CONFIG_IRQSTACKS */
#endif
/* _ASM_IRQ_H */
#endif
/* __KERNEL__ */
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