//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
//------------------------------------------------------------------------------
//
// Copyright (C) 2004-2006, Freescale Semiconductor, Inc. All Rights Reserved.
// THIS SOURCE CODE, AND ITS USE AND DISTRIBUTION, IS SUBJECT TO THE TERMS
// AND CONDITIONS OF THE APPLICABLE LICENSE AGREEMENT
//
//------------------------------------------------------------------------------
//
// Header: bsp_irq.h
//
// Provides irq configuration macro specific i.MX31 Zoom Litekit.
//
//------------------------------------------------------------------------------
#ifndef __BSP_IRQ_H__
#define __BSP_IRQ_H__

#if __cplusplus
extern "C" {
#endif

#define IRQ_GPIO_Pxy_MIN                64
#define IRQ_GPIO_Pxy_MAX                IRQ_GPIO_P3_31
#define IRQ_GPIO_Pxy(Port, Pin)         (((Port) - 1) * 32 + (Pin) + IRQ_GPIO_Pxy_MIN)
#define GET_GPIOIRQ_PORT(Irq)           ((((Irq) - IRQ_GPIO_Pxy_MIN) / 32) + 1)
#define GET_GPIOIRQ_PORTINDEX(Irq)      ((((Irq) - IRQ_GPIO_Pxy_MIN) / 32))
#define GET_GPIOIRQ_PIN(Irq)            ((((Irq) - IRQ_GPIO_Pxy_MIN) % 32))
#define GET_GPIOIRQ_PINMASK(Irq)        (1 << GET_GPIOIRQ_PIN(Irq))
#define IS_GPIOIRQ(Irq)                 ((IRQ_GPIO_Pxy_MIN <= (Irq)) && ((Irq) <= IRQ_GPIO_Pxy_MAX))

//-----------------------------------------------------------------------------
// Physical interrupt IDs for
//      GPIO Port1 interrupts:   64-95
//                              IRQ_GPIO_PA_0 - IRQ_GPIO_PA_31
//      GPIO PortB interrupts:   96-127
//                              IRQ_GPIO_PB_0 - IRQ_GPIO_PB_31
//      GPIO PortC interrupts:   128-159
//                              IRQ_GPIO_PC_0 - IRQ_GPIO_PC_31
//      GPIO PortD interrupts:   160-191
//                              IRQ_GPIO_PD_0 - IRQ_GPIO_PD_31
//      GPIO PortE interrupts:   192-223
//                              IRQ_GPIO_PE_0 - IRQ_GPIO_PE_31
//      GPIO PortF interrupts:   224-255
//                              IRQ_GPIO_PF_0 - IRQ_GPIO_PF_31
//-----------------------------------------------------------------------------
// GPIO PORT 1
#define IRQ_GPIO_P1_0                   IRQ_GPIO_Pxy(1,  0)
#define IRQ_GPIO_P1_1                   IRQ_GPIO_Pxy(1,  1)
#define IRQ_GPIO_P1_2                   IRQ_GPIO_Pxy(1,  2)
#define IRQ_GPIO_P1_3                   IRQ_GPIO_Pxy(1,  3)
#define IRQ_GPIO_P1_4                   IRQ_GPIO_Pxy(1,  4)
#define IRQ_GPIO_P1_5                   IRQ_GPIO_Pxy(1,  5)
#define IRQ_GPIO_P1_6                   IRQ_GPIO_Pxy(1,  6)
#define IRQ_GPIO_P1_7                   IRQ_GPIO_Pxy(1,  7)
#define IRQ_GPIO_P1_8                   IRQ_GPIO_Pxy(1,  8)
#define IRQ_GPIO_P1_9                   IRQ_GPIO_Pxy(1,  9)
#define IRQ_GPIO_P1_10                  IRQ_GPIO_Pxy(1, 10)
#define IRQ_GPIO_P1_11                  IRQ_GPIO_Pxy(1, 11)
#define IRQ_GPIO_P1_12                  IRQ_GPIO_Pxy(1, 12)
#define IRQ_GPIO_P1_13                  IRQ_GPIO_Pxy(1, 13)
#define IRQ_GPIO_P1_14                  IRQ_GPIO_Pxy(1, 14)
#define IRQ_GPIO_P1_15                  IRQ_GPIO_Pxy(1, 15)
#define IRQ_GPIO_P1_16                  IRQ_GPIO_Pxy(1, 16)
#define IRQ_GPIO_P1_17                  IRQ_GPIO_Pxy(1, 17)
#define IRQ_GPIO_P1_18                  IRQ_GPIO_Pxy(1, 18)
#define IRQ_GPIO_P1_19                  IRQ_GPIO_Pxy(1, 19)
#define IRQ_GPIO_P1_20                  IRQ_GPIO_Pxy(1, 20)
#define IRQ_GPIO_P1_21                  IRQ_GPIO_Pxy(1, 21)
#define IRQ_GPIO_P1_22                  IRQ_GPIO_Pxy(1, 22)
#define IRQ_GPIO_P1_23                  IRQ_GPIO_Pxy(1, 23)
#define IRQ_GPIO_P1_24                  IRQ_GPIO_Pxy(1, 24)
#define IRQ_GPIO_P1_25                  IRQ_GPIO_Pxy(1, 25)
#define IRQ_GPIO_P1_26                  IRQ_GPIO_Pxy(1, 26)
#define IRQ_GPIO_P1_27                  IRQ_GPIO_Pxy(1, 27)
#define IRQ_GPIO_P1_28                  IRQ_GPIO_Pxy(1, 28)
#define IRQ_GPIO_P1_29                  IRQ_GPIO_Pxy(1, 29)
#define IRQ_GPIO_P1_30                  IRQ_GPIO_Pxy(1, 30)
#define IRQ_GPIO_P1_31                  IRQ_GPIO_Pxy(1, 31)
// GPIO PORT 2
#define IRQ_GPIO_P2_0                   IRQ_GPIO_Pxy(2,  0)
#define IRQ_GPIO_P2_1                   IRQ_GPIO_Pxy(2,  1)
#define IRQ_GPIO_P2_2                   IRQ_GPIO_Pxy(2,  2)
#define IRQ_GPIO_P2_3                   IRQ_GPIO_Pxy(2,  3)
#define IRQ_GPIO_P2_4                   IRQ_GPIO_Pxy(2,  4)
#define IRQ_GPIO_P2_5                   IRQ_GPIO_Pxy(2,  5)
#define IRQ_GPIO_P2_6                   IRQ_GPIO_Pxy(2,  6)
#define IRQ_GPIO_P2_7                   IRQ_GPIO_Pxy(2,  7)
#define IRQ_GPIO_P2_8                   IRQ_GPIO_Pxy(2,  8)
#define IRQ_GPIO_P2_9                   IRQ_GPIO_Pxy(2,  9)
#define IRQ_GPIO_P2_10                  IRQ_GPIO_Pxy(2, 10)
#define IRQ_GPIO_P2_11                  IRQ_GPIO_Pxy(2, 11)
#define IRQ_GPIO_P2_12                  IRQ_GPIO_Pxy(2, 12)
#define IRQ_GPIO_P2_13                  IRQ_GPIO_Pxy(2, 13)
#define IRQ_GPIO_P2_14                  IRQ_GPIO_Pxy(2, 14)
#define IRQ_GPIO_P2_15                  IRQ_GPIO_Pxy(2, 15)
#define IRQ_GPIO_P2_16                  IRQ_GPIO_Pxy(2, 16)
#define IRQ_GPIO_P2_17                  IRQ_GPIO_Pxy(2, 17)
#define IRQ_GPIO_P2_18                  IRQ_GPIO_Pxy(2, 18)
#define IRQ_GPIO_P2_19                  IRQ_GPIO_Pxy(2, 19)
#define IRQ_GPIO_P2_20                  IRQ_GPIO_Pxy(2, 20)
#define IRQ_GPIO_P2_21                  IRQ_GPIO_Pxy(2, 21)
#define IRQ_GPIO_P2_22                  IRQ_GPIO_Pxy(2, 22)
#define IRQ_GPIO_P2_23                  IRQ_GPIO_Pxy(2, 23)
#define IRQ_GPIO_P2_24                  IRQ_GPIO_Pxy(2, 24)
#define IRQ_GPIO_P2_25                  IRQ_GPIO_Pxy(2, 25)
#define IRQ_GPIO_P2_26                  IRQ_GPIO_Pxy(2, 26)
#define IRQ_GPIO_P2_27                  IRQ_GPIO_Pxy(2, 27)
#define IRQ_GPIO_P2_28                  IRQ_GPIO_Pxy(2, 28)
#define IRQ_GPIO_P2_29                  IRQ_GPIO_Pxy(2, 29)
#define IRQ_GPIO_P2_30                  IRQ_GPIO_Pxy(2, 30)
#define IRQ_GPIO_P2_31                  IRQ_GPIO_Pxy(2, 31)
// GPIO PORT 3
#define IRQ_GPIO_P3_0                   IRQ_GPIO_Pxy(3,  0)
#define IRQ_GPIO_P3_1                   IRQ_GPIO_Pxy(3,  1)
#define IRQ_GPIO_P3_2                   IRQ_GPIO_Pxy(3,  2)
#define IRQ_GPIO_P3_3                   IRQ_GPIO_Pxy(3,  3)
#define IRQ_GPIO_P3_4                   IRQ_GPIO_Pxy(3,  4)
#define IRQ_GPIO_P3_5                   IRQ_GPIO_Pxy(3,  5)
#define IRQ_GPIO_P3_6                   IRQ_GPIO_Pxy(3,  6)
#define IRQ_GPIO_P3_7                   IRQ_GPIO_Pxy(3,  7)
#define IRQ_GPIO_P3_8                   IRQ_GPIO_Pxy(3,  8)
#define IRQ_GPIO_P3_9                   IRQ_GPIO_Pxy(3,  9)
#define IRQ_GPIO_P3_10                  IRQ_GPIO_Pxy(3, 10)
#define IRQ_GPIO_P3_11                  IRQ_GPIO_Pxy(3, 11)
#define IRQ_GPIO_P3_12                  IRQ_GPIO_Pxy(3, 12)
#define IRQ_GPIO_P3_13                  IRQ_GPIO_Pxy(3, 13)
#define IRQ_GPIO_P3_14                  IRQ_GPIO_Pxy(3, 14)
#define IRQ_GPIO_P3_15                  IRQ_GPIO_Pxy(3, 15)
#define IRQ_GPIO_P3_16                  IRQ_GPIO_Pxy(3, 16)
#define IRQ_GPIO_P3_17                  IRQ_GPIO_Pxy(3, 17)
#define IRQ_GPIO_P3_18                  IRQ_GPIO_Pxy(3, 18)
#define IRQ_GPIO_P3_19                  IRQ_GPIO_Pxy(3, 19)
#define IRQ_GPIO_P3_20                  IRQ_GPIO_Pxy(3, 20)
#define IRQ_GPIO_P3_21                  IRQ_GPIO_Pxy(3, 21)
#define IRQ_GPIO_P3_22                  IRQ_GPIO_Pxy(3, 22)
#define IRQ_GPIO_P3_23                  IRQ_GPIO_Pxy(3, 23)
#define IRQ_GPIO_P3_24                  IRQ_GPIO_Pxy(3, 24)
#define IRQ_GPIO_P3_25                  IRQ_GPIO_Pxy(3, 25)
#define IRQ_GPIO_P3_26                  IRQ_GPIO_Pxy(3, 26)
#define IRQ_GPIO_P3_27                  IRQ_GPIO_Pxy(3, 27)
#define IRQ_GPIO_P3_28                  IRQ_GPIO_Pxy(3, 28)
#define IRQ_GPIO_P3_29                  IRQ_GPIO_Pxy(3, 29)
#define IRQ_GPIO_P3_30                  IRQ_GPIO_Pxy(3, 30)
#define IRQ_GPIO_P3_31                  IRQ_GPIO_Pxy(3, 31)

#if IRQ_GPIO_Pxy_MAX != 159
#error 
#endif

#ifdef __cplusplus
}
#endif

#endif // __BSP_IRQ_H__

