/*
 *  Copyright (C) 2007 Lennert Buytenhek <buytenh@wantstofly.org>
 *  Copyright 2004-2009 Freescale Semiconductor, Inc. All Rights Reserved.
 */

/*
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

#include <mach/hardware.h>

#define AVIC_NIMASK	0x04

	@ this macro disables fast irq (not implemented)
	.macro	disable_fiq
	.endm

	.macro  get_irqnr_preamble, base, tmp
#ifndef CONFIG_MXC_TZIC
	ldr	\base, =avic_base
	ldr	\base, [\base]
#ifdef CONFIG_MXC_IRQ_PRIOR
	ldr	r4, [\base, #AVIC_NIMASK]
#endif
#elif defined CONFIG_MXC_TZIC
	ldr	\base, =tzic_base
	ldr	\base, [\base]
#endif /* CONFIG_MXC_TZIC */
	.endm

	.macro  arch_ret_to_user, tmp1, tmp2
	.endm

	@ this macro checks which interrupt occurred
	@ and returns its number in irqnr
	@ and returns if an interrupt occurred in irqstat
	.macro	get_irqnr_and_base, irqnr, irqstat, base, tmp
#ifndef CONFIG_MXC_TZIC
	@ Load offset & priority of the highest priority
	@ interrupt pending from AVIC_NIVECSR
	ldr	\irqstat, [\base, #0x40]
	@ Shift to get the decoded IRQ number, using ASR so
	@ 'no interrupt pending' becomes 0xffffffff
	mov	\irqnr, \irqstat, asr #16
	@ set zero flag if IRQ + 1 == 0
	adds	\tmp, \irqnr, #1
#ifdef CONFIG_MXC_IRQ_PRIOR
	bicne	\tmp, \irqstat, #0xFFFFFFE0
	strne	\tmp, [\base, #AVIC_NIMASK]
	streq	r4, [\base, #AVIC_NIMASK]
#endif
#elif defined CONFIG_MXC_TZIC
	@ Load offset & priority of the highest priority
	@ interrupt pending.
	@ 0x080 is INTSEC0 register
	@ 0xD80 is HIPND0 register
	mov     \irqnr, #0
1000:	add	\irqstat, \base, \irqnr, lsr #3
	ldr	\tmp, [\irqstat, #0xd80]
	ldr	\irqstat, [\irqstat, #0x080]
	ands	\tmp, \tmp, \irqstat
	bne	1001f
	add	\irqnr, \irqnr, #32
	cmp     \irqnr, #128
	blo     1000b
	b       2001f
1001:	mov     \irqstat, #1
1002:	tst     \tmp, \irqstat
	bne     2002f
	movs    \tmp, \tmp, lsr #1
	addne   \irqnr, \irqnr, #1
	bne     1002b
2001:
	mov  \irqnr, #0
2002:
	movs \irqnr, \irqnr
#endif
	.endm
