lkml.org 
[lkml]   [2009]   [Mar]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 38/57] microblaze_v7: headers for irq
    Date
    From: Michal Simek <monstr@monstr.eu>


    Signed-off-by: Michal Simek <monstr@monstr.eu>
    ---
    arch/microblaze/include/asm/hardirq.h | 29 ++++++++
    arch/microblaze/include/asm/irq_regs.h | 1 +
    arch/microblaze/include/asm/irqflags.h | 123 ++++++++++++++++++++++++++++++++
    3 files changed, 153 insertions(+), 0 deletions(-)
    create mode 100644 arch/microblaze/include/asm/hardirq.h
    create mode 100644 arch/microblaze/include/asm/hw_irq.h
    create mode 100644 arch/microblaze/include/asm/irq_regs.h
    create mode 100644 arch/microblaze/include/asm/irqflags.h

    diff --git a/arch/microblaze/include/asm/hardirq.h b/arch/microblaze/include/asm/hardirq.h
    new file mode 100644
    index 0000000..0f2d6b0
    --- /dev/null
    +++ b/arch/microblaze/include/asm/hardirq.h
    @@ -0,0 +1,29 @@
    +/*
    + * Copyright (C) 2006 Atmark Techno, Inc.
    + *
    + * This file is subject to the terms and conditions of the GNU General Public
    + * License. See the file "COPYING" in the main directory of this archive
    + * for more details.
    + */
    +
    +#ifndef _ASM_MICROBLAZE_HARDIRQ_H
    +#define _ASM_MICROBLAZE_HARDIRQ_H
    +
    +#include <linux/cache.h>
    +#include <linux/irq.h>
    +#include <asm/irq.h>
    +#include <asm/current.h>
    +#include <linux/ptrace.h>
    +
    +/* should be defined in each interrupt controller driver */
    +extern unsigned int get_irq(struct pt_regs *regs);
    +
    +typedef struct {
    + unsigned int __softirq_pending;
    +} ____cacheline_aligned irq_cpustat_t;
    +
    +void ack_bad_irq(unsigned int irq);
    +
    +#include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */
    +
    +#endif /* _ASM_MICROBLAZE_HARDIRQ_H */
    diff --git a/arch/microblaze/include/asm/hw_irq.h b/arch/microblaze/include/asm/hw_irq.h
    new file mode 100644
    index 0000000..e69de29
    diff --git a/arch/microblaze/include/asm/irq_regs.h b/arch/microblaze/include/asm/irq_regs.h
    new file mode 100644
    index 0000000..3dd9c0b
    --- /dev/null
    +++ b/arch/microblaze/include/asm/irq_regs.h
    @@ -0,0 +1 @@
    +#include <asm-generic/irq_regs.h>
    diff --git a/arch/microblaze/include/asm/irqflags.h b/arch/microblaze/include/asm/irqflags.h
    new file mode 100644
    index 0000000..dea6564
    --- /dev/null
    +++ b/arch/microblaze/include/asm/irqflags.h
    @@ -0,0 +1,123 @@
    +/*
    + * Copyright (C) 2006 Atmark Techno, Inc.
    + *
    + * This file is subject to the terms and conditions of the GNU General Public
    + * License. See the file "COPYING" in the main directory of this archive
    + * for more details.
    + */
    +
    +#ifndef _ASM_MICROBLAZE_IRQFLAGS_H
    +#define _ASM_MICROBLAZE_IRQFLAGS_H
    +
    +#include <linux/irqflags.h>
    +
    +# if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR
    +
    +# define local_irq_save(flags) \
    + do { \
    + asm volatile ("# local_irq_save \n\t" \
    + "msrclr %0, %1 \n\t" \
    + "nop \n\t" \
    + : "=r"(flags) \
    + : "i"(MSR_IE) \
    + : "memory"); \
    + } while (0)
    +
    +# define local_irq_disable() \
    + do { \
    + asm volatile ("# local_irq_disable \n\t" \
    + "msrclr r0, %0 \n\t" \
    + "nop \n\t" \
    + : \
    + : "i"(MSR_IE) \
    + : "memory"); \
    + } while (0)
    +
    +# define local_irq_enable() \
    + do { \
    + asm volatile ("# local_irq_enable \n\t" \
    + "msrset r0, %0 \n\t" \
    + "nop \n\t" \
    + : \
    + : "i"(MSR_IE) \
    + : "memory"); \
    + } while (0)
    +
    +# else /* CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR == 0 */
    +
    +# define local_irq_save(flags) \
    + do { \
    + register unsigned tmp; \
    + asm volatile ("# local_irq_save \n\t" \
    + "mfs %0, rmsr \n\t" \
    + "nop \n\t" \
    + "andi %1, %0, %2 \n\t" \
    + "mts rmsr, %1 \n\t" \
    + "nop \n\t" \
    + : "=r"(flags), "=r" (tmp) \
    + : "i"(~MSR_IE) \
    + : "memory"); \
    + } while (0)
    +
    +# define local_irq_disable() \
    + do { \
    + register unsigned tmp; \
    + asm volatile ("# local_irq_disable \n\t" \
    + "mfs %0, rmsr \n\t" \
    + "nop \n\t" \
    + "andi %0, %0, %1 \n\t" \
    + "mts rmsr, %0 \n\t" \
    + "nop \n\t" \
    + : "=r"(tmp) \
    + : "i"(~MSR_IE) \
    + : "memory"); \
    + } while (0)
    +
    +# define local_irq_enable() \
    + do { \
    + register unsigned tmp; \
    + asm volatile ("# local_irq_enable \n\t" \
    + "mfs %0, rmsr \n\t" \
    + "nop \n\t" \
    + "ori %0, %0, %1 \n\t" \
    + "mts rmsr, %0 \n\t" \
    + "nop \n\t" \
    + : "=r"(tmp) \
    + : "i"(MSR_IE) \
    + : "memory"); \
    + } while (0)
    +
    +# endif /* CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR */
    +
    +#define local_save_flags(flags) \
    + do { \
    + asm volatile ("# local_save_flags \n\t" \
    + "mfs %0, rmsr \n\t" \
    + "nop \n\t" \
    + : "=r"(flags) \
    + : \
    + : "memory"); \
    + } while (0)
    +
    +#define local_irq_restore(flags) \
    + do { \
    + asm volatile ("# local_irq_restore \n\t"\
    + "mts rmsr, %0 \n\t" \
    + "nop \n\t" \
    + : \
    + : "r"(flags) \
    + : "memory"); \
    + } while (0)
    +
    +static inline int irqs_disabled(void)
    +{
    + unsigned long flags;
    +
    + local_save_flags(flags);
    + return ((flags & MSR_IE) == 0);
    +}
    +
    +#define raw_irqs_disabled irqs_disabled
    +#define raw_irqs_disabled_flags(flags) ((flags) == 0)
    +
    +#endif /* _ASM_MICROBLAZE_IRQFLAGS_H */
    --
    1.5.5.1


    \
     
     \ /
      Last update: 2009-03-18 22:53    [W:0.048 / U:120.412 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site