diff options
| author | Magnus Damm <damm@opensource.se> | 2011-10-17 05:00:35 -0400 |
|---|---|---|
| committer | Paul Mundt <lethal@linux-sh.org> | 2011-11-04 12:03:55 -0400 |
| commit | 91c088ae17c62f7741d9563e36935bc7a69a7e9e (patch) | |
| tree | fb293b1e6dafaf0c0ba07d9faf7f3d9f05445029 | |
| parent | 3087b905c4050afeb1847fb0fcf89b3e09f6ffee (diff) | |
ARM: mach-shmobile: Add support for PINT though INTC macros
Add a INTC_PINT() macro with various helper bits to allow SoCs
like sh73a0 to suppor the PINT hardware using regular INTC tables.
Signed-off-by: Magnus Damm <damm@opensource.se>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
| -rw-r--r-- | arch/arm/mach-shmobile/include/mach/intc.h | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/arch/arm/mach-shmobile/include/mach/intc.h b/arch/arm/mach-shmobile/include/mach/intc.h index 1cd8b36678ee..8b22258c8caa 100644 --- a/arch/arm/mach-shmobile/include/mach/intc.h +++ b/arch/arm/mach-shmobile/include/mach/intc.h | |||
| @@ -192,4 +192,55 @@ static struct intc_desc p ## _desc __initdata = { \ | |||
| 192 | p ## _sense_registers, p ## _ack_registers) \ | 192 | p ## _sense_registers, p ## _ack_registers) \ |
| 193 | } | 193 | } |
| 194 | 194 | ||
| 195 | #define INTC_PINT_E_EMPTY | ||
| 196 | #define INTC_PINT_E_NONE 0, 0, 0, 0, 0, 0, 0, 0, | ||
| 197 | #define INTC_PINT_E(p) \ | ||
| 198 | PINT ## p ## 0, PINT ## p ## 1, PINT ## p ## 2, PINT ## p ## 3, \ | ||
| 199 | PINT ## p ## 4, PINT ## p ## 5, PINT ## p ## 6, PINT ## p ## 7, | ||
| 200 | |||
| 201 | #define INTC_PINT_V_NONE | ||
| 202 | #define INTC_PINT_V(p, vect) \ | ||
| 203 | vect(PINT ## p ## 0, 0), vect(PINT ## p ## 1, 1), \ | ||
| 204 | vect(PINT ## p ## 2, 2), vect(PINT ## p ## 3, 3), \ | ||
| 205 | vect(PINT ## p ## 4, 4), vect(PINT ## p ## 5, 5), \ | ||
| 206 | vect(PINT ## p ## 6, 6), vect(PINT ## p ## 7, 7), | ||
| 207 | |||
| 208 | #define INTC_PINT(p, mask_reg, sense_base, str, \ | ||
| 209 | enums_1, enums_2, enums_3, enums_4, \ | ||
| 210 | vect_1, vect_2, vect_3, vect_4, \ | ||
| 211 | mask_a, mask_b, mask_c, mask_d, \ | ||
| 212 | sense_a, sense_b, sense_c, sense_d) \ | ||
| 213 | \ | ||
| 214 | enum { \ | ||
| 215 | PINT ## p ## _UNUSED = 0, \ | ||
| 216 | enums_1 enums_2 enums_3 enums_4 \ | ||
| 217 | }; \ | ||
| 218 | \ | ||
| 219 | static struct intc_vect p ## _vectors[] __initdata = { \ | ||
| 220 | vect_1 vect_2 vect_3 vect_4 \ | ||
| 221 | }; \ | ||
| 222 | \ | ||
| 223 | static struct intc_mask_reg p ## _mask_registers[] __initdata = { \ | ||
| 224 | { mask_reg, 0, 32, /* PINTER */ \ | ||
| 225 | { mask_a mask_b mask_c mask_d } } \ | ||
| 226 | }; \ | ||
| 227 | \ | ||
| 228 | static struct intc_sense_reg p ## _sense_registers[] __initdata = { \ | ||
| 229 | { sense_base + 0x00, 16, 2, /* PINTCR */ \ | ||
| 230 | { sense_a } }, \ | ||
| 231 | { sense_base + 0x04, 16, 2, /* PINTCR */ \ | ||
| 232 | { sense_b } }, \ | ||
| 233 | { sense_base + 0x08, 16, 2, /* PINTCR */ \ | ||
| 234 | { sense_c } }, \ | ||
| 235 | { sense_base + 0x0c, 16, 2, /* PINTCR */ \ | ||
| 236 | { sense_d } }, \ | ||
| 237 | }; \ | ||
| 238 | \ | ||
| 239 | static struct intc_desc p ## _desc __initdata = { \ | ||
| 240 | .name = str, \ | ||
| 241 | .hw = INTC_HW_DESC(p ## _vectors, NULL, \ | ||
| 242 | p ## _mask_registers, NULL, \ | ||
| 243 | p ## _sense_registers, NULL), \ | ||
| 244 | } | ||
| 245 | |||
| 195 | #endif /* __ASM_MACH_INTC_H */ | 246 | #endif /* __ASM_MACH_INTC_H */ |
