Module: xenomai-head Branch: master Commit: 899cc5f1e76e85f913110d63bc0fded190958ab0 URL: http://git.xenomai.org/?p=xenomai-head.git;a=commit;h=899cc5f1e76e85f913110d63bc0fded190958ab0
Author: Philippe Gerum <r...@xenomai.org> Date: Thu Feb 3 12:00:11 2011 +0100 wrappers: introduce generic chip handler accessors for GENERIC_HARDIRQS-compliant kernels --- include/asm-arm/wrappers.h | 4 +++- include/asm-blackfin/wrappers.h | 4 +++- include/asm-generic/wrappers.h | 30 ++++++++++++++++++++++++++++++ include/asm-nios2/wrappers.h | 4 +++- include/asm-powerpc/wrappers.h | 2 ++ include/asm-x86/wrappers_32.h | 2 ++ include/asm-x86/wrappers_64.h | 2 ++ 7 files changed, 45 insertions(+), 3 deletions(-) diff --git a/include/asm-arm/wrappers.h b/include/asm-arm/wrappers.h index 97e6724..321c207 100644 --- a/include/asm-arm/wrappers.h +++ b/include/asm-arm/wrappers.h @@ -65,9 +65,11 @@ typedef irqreturn_t (*rthal_irq_host_handler_t)(int irq, extern void (*fp_init)(union fp_state *); #else /* >= 2.6.19 */ -#define rthal_irq_desc_lock(irq) (&rthal_irq_descp(irq)->lock) +#ifndef CONFIG_GENERIC_HARDIRQS #define rthal_irq_chip_enable(irq) ({ rthal_irq_descp(irq)->chip->unmask(irq); 0; }) #define rthal_irq_chip_disable(irq) ({ rthal_irq_descp(irq)->chip->mask(irq); 0; }) +#endif +#define rthal_irq_desc_lock(irq) (&rthal_irq_descp(irq)->lock) #define rthal_irq_chip_end(irq) ({ rthal_irq_descp(irq)->ipipe_end(irq, rthal_irq_descp(irq)); 0; }) typedef irq_handler_t rthal_irq_host_handler_t; #define rthal_mark_irq_disabled(irq) do { \ diff --git a/include/asm-blackfin/wrappers.h b/include/asm-blackfin/wrappers.h index 4573f52..ccfc3fc 100644 --- a/include/asm-blackfin/wrappers.h +++ b/include/asm-blackfin/wrappers.h @@ -35,9 +35,11 @@ #define wrap_strncpy_from_user(dstP, srcP, n) strncpy_from_user(dstP, srcP, n) -#define rthal_irq_desc_status(irq) (rthal_irq_descp(irq)->status) +#ifndef CONFIG_GENERIC_HARDIRQS #define rthal_irq_chip_enable(irq) ({ rthal_irq_descp(irq)->chip->enable(irq); 0; }) #define rthal_irq_chip_disable(irq) ({ rthal_irq_descp(irq)->chip->disable(irq); 0; }) +#endif +#define rthal_irq_desc_status(irq) (rthal_irq_descp(irq)->status) #define rthal_irq_chip_end(irq) ({ rthal_irq_descp(irq)->ipipe_end(irq, rthal_irq_descp(irq)); 0; }) typedef irq_handler_t rthal_irq_host_handler_t; diff --git a/include/asm-generic/wrappers.h b/include/asm-generic/wrappers.h index 81c722c..69ec0e5 100644 --- a/include/asm-generic/wrappers.h +++ b/include/asm-generic/wrappers.h @@ -610,4 +610,34 @@ static inline void wrap_proc_dir_entry_owner(struct proc_dir_entry *entry) #define init_MUTEX(sem) sema_init((sem), 1) #endif +#ifdef CONFIG_GENERIC_HARDIRQS +/* + * The irq chip descriptor has been heavily revamped in + * 2.6.37. Provide generic accessors to the chip handlers we need for + * kernels implementing those changes. + */ +#define rthal_irq_chip_enable(irq) \ + ({ \ + struct irq_desc *desc = rthal_irq_descp(irq); \ + struct irq_chip *chip = desc->chip; \ + int __ret__ = 0; \ + if (unlikely(chip->irq_unmask == NULL)) \ + __ret__ = -ENODEV; \ + else \ + chip->irq_unmask(&desc->irq_data); \ + __ret__; \ + }) +#define rthal_irq_chip_disable(irq) \ + ({ \ + struct irq_desc *desc = rthal_irq_descp(irq); \ + struct irq_chip *chip = desc->chip; \ + int __ret__ = 0; \ + if (unlikely(chip->irq_mask == NULL)) \ + __ret__ = -ENODEV; \ + else \ + chip->irq_mask(&desc->irq_data); \ + __ret__; \ + }) +#endif + #endif /* _XENO_ASM_GENERIC_WRAPPERS_H */ diff --git a/include/asm-nios2/wrappers.h b/include/asm-nios2/wrappers.h index c15ab35..5216a21 100644 --- a/include/asm-nios2/wrappers.h +++ b/include/asm-nios2/wrappers.h @@ -31,9 +31,11 @@ #define wrap_strncpy_from_user(dstP, srcP, n) strncpy_from_user(dstP, srcP, n) -#define rthal_irq_desc_status(irq) (rthal_irq_descp(irq)->status) +#ifndef CONFIG_GENERIC_HARDIRQS #define rthal_irq_chip_enable(irq) ({ rthal_irq_descp(irq)->chip->enable(irq); 0; }) #define rthal_irq_chip_disable(irq) ({ rthal_irq_descp(irq)->chip->disable(irq); 0; }) +#endif +#define rthal_irq_desc_status(irq) (rthal_irq_descp(irq)->status) #define rthal_irq_chip_end(irq) ({ rthal_irq_descp(irq)->ipipe_end(irq, rthal_irq_descp(irq)); 0; }) typedef irq_handler_t rthal_irq_host_handler_t; diff --git a/include/asm-powerpc/wrappers.h b/include/asm-powerpc/wrappers.h index fb49307..32dea29 100644 --- a/include/asm-powerpc/wrappers.h +++ b/include/asm-powerpc/wrappers.h @@ -166,6 +166,7 @@ typedef irq_handler_t rthal_irq_host_handler_t; __err__; \ }) #else /* > 2.6.19 */ +#ifndef CONFIG_GENERIC_HARDIRQS #define rthal_irq_chip_enable(irq) \ ({ \ int __err__ = 0; \ @@ -184,6 +185,7 @@ typedef irq_handler_t rthal_irq_host_handler_t; rthal_irq_handlerp(irq)->mask(irq); \ __err__; \ }) +#endif #define rthal_irq_chip_end(irq) ({ rthal_irq_descp(irq)->ipipe_end(irq, rthal_irq_descp(irq)); 0; }) #endif diff --git a/include/asm-x86/wrappers_32.h b/include/asm-x86/wrappers_32.h index 5f37766..ff8d461 100644 --- a/include/asm-x86/wrappers_32.h +++ b/include/asm-x86/wrappers_32.h @@ -182,8 +182,10 @@ typedef irqreturn_t (*rthal_irq_host_handler_t)(int irq, #define rthal_irq_chip_end(irq) rthal_irq_chip_enable(irq) #else /* >= 2.6.19 */ +#ifndef CONFIG_GENERIC_HARDIRQS #define rthal_irq_chip_enable(irq) ({ rthal_irq_descp(irq)->chip->unmask(irq); 0; }) #define rthal_irq_chip_disable(irq) ({ rthal_irq_descp(irq)->chip->mask(irq); 0; }) +#endif #define rthal_irq_chip_end(irq) ({ rthal_irq_descp(irq)->ipipe_end(irq, rthal_irq_descp(irq)); 0; }) typedef irq_handler_t rthal_irq_host_handler_t; diff --git a/include/asm-x86/wrappers_64.h b/include/asm-x86/wrappers_64.h index 0d04b9c..9d16455 100644 --- a/include/asm-x86/wrappers_64.h +++ b/include/asm-x86/wrappers_64.h @@ -34,8 +34,10 @@ #define rthal_irq_desc_status(irq) (rthal_irq_descp(irq)->status) +#ifndef CONFIG_GENERIC_HARDIRQS #define rthal_irq_chip_enable(irq) ({ rthal_irq_descp(irq)->chip->unmask(irq); 0; }) #define rthal_irq_chip_disable(irq) ({ rthal_irq_descp(irq)->chip->mask(irq); 0; }) +#endif #define rthal_irq_chip_end(irq) ({ rthal_irq_descp(irq)->ipipe_end(irq, rthal_irq_descp(irq)); 0; }) typedef irq_handler_t rthal_irq_host_handler_t; _______________________________________________ Xenomai-git mailing list Xenomai-git@gna.org https://mail.gna.org/listinfo/xenomai-git