blob: 2fdaf35f4d9ff240ee13db2701e3fb7146e01b36 [file] [log] [blame]
Duy Truongf3ac7b32013-02-13 01:07:28 -08001/* Copyright (c) 2012, The Linux Foundation. All rights reserved.
Channagoud Kadabi81ba1102011-10-01 16:37:59 +05302 *
3 * Redistribution and use in source and binary forms, with or without
4 * modification, are permitted provided that the following conditions are
5 * met:
6 * * Redistributions of source code must retain the above copyright
7 * notice, this list of conditions and the following disclaimer.
8 * * Redistributions in binary form must reproduce the above
9 * copyright notice, this list of conditions and the following
10 * disclaimer in the documentation and/or other materials provided
11 * with the distribution.
Duy Truongf3ac7b32013-02-13 01:07:28 -080012 * * Neither the name of The Linux Foundation nor the names of its
Channagoud Kadabi81ba1102011-10-01 16:37:59 +053013 * contributors may be used to endorse or promote products derived
14 * from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 */
29
30#include <arch/arm.h>
31#include <platform/irqs.h>
32#include <platform/interrupts.h>
33#include <debug.h>
vijay kumar4f4405f2014-08-08 11:49:53 +053034#include <qgic.h>
Channagoud Kadabi81ba1102011-10-01 16:37:59 +053035
36extern int target_supports_qgic();
37
38enum handler_return platform_irq(struct arm_iframe *frame)
39{
40#if TARGET_USES_GIC_VIC
41 if(target_supports_qgic())
42 return gic_platform_irq(frame);
43 else
44 return vic_platform_irq(frame);
45#else
46 return gic_platform_irq(frame);
47#endif
48}
49
50void platform_fiq(struct arm_iframe *frame)
51{
52#if TARGET_USES_GIC_VIC
53 if(target_supports_qgic())
54 gic_platform_fiq(frame);
55 else
56 vic_platform_fiq(frame);
57#else
58 gic_platform_fiq(frame);
59#endif
60}
61
62status_t mask_interrupt(unsigned int vector)
63{
64#if TARGET_USES_GIC_VIC
65 if(target_supports_qgic())
66 return gic_mask_interrupt(vector);
67 else
68 return vic_mask_interrupt(vector);
69#else
70 return gic_mask_interrupt(vector);
71#endif
72}
73
74status_t unmask_interrupt(unsigned int vector)
75{
76#if TARGET_USES_GIC_VIC
77 if(target_supports_qgic())
78 return gic_unmask_interrupt(vector);
79 else
80 return vic_unmask_interrupt(vector);
81#else
82 return gic_unmask_interrupt(vector);
83#endif
84}
85
86void register_int_handler(unsigned int vector, int_handler func, void *arg)
87{
88#if TARGET_USES_GIC_VIC
89 if(target_supports_qgic())
90 gic_register_int_handler(vector, func, arg);
91 else
92 vic_register_int_handler(vector, func, arg);
93#else
94 gic_register_int_handler(vector, func, arg);
95#endif
96}