diff options
Diffstat (limited to 'c/src/lib/libcpu/powerpc/mpc55xx/include/irq.h')
-rw-r--r-- | c/src/lib/libcpu/powerpc/mpc55xx/include/irq.h | 254 |
1 files changed, 193 insertions, 61 deletions
diff --git a/c/src/lib/libcpu/powerpc/mpc55xx/include/irq.h b/c/src/lib/libcpu/powerpc/mpc55xx/include/irq.h index baa36d8844..dab8bb3014 100644 --- a/c/src/lib/libcpu/powerpc/mpc55xx/include/irq.h +++ b/c/src/lib/libcpu/powerpc/mpc55xx/include/irq.h @@ -34,13 +34,8 @@ extern "C" { * Interrupt numbers */ -/* Basics */ +#define MPC55XX_IRQ_INVALID 0x10000U #define MPC55XX_IRQ_MIN 0U -#define MPC55XX_IRQ_MAX 328U -#define MPC55XX_IRQ_MIN 0U -#define MPC55XX_IRQ_MAX 328U -#define MPC55XX_IRQ_BASE MPC55XX_IRQ_MIN -#define MPC55XX_IRQ_NUMBER (MPC55XX_IRQ_MAX + 1U) /* Software interrupts */ #define MPC55XX_IRQ_SOFTWARE_MIN 0U @@ -49,19 +44,18 @@ extern "C" { #define MPC55XX_IRQ_SOFTWARE_GET_REQUEST(i) (i) #define MPC55XX_IRQ_SOFTWARE_NUMBER (MPC55XX_IRQ_SOFTWARE_MAX + 1U) -#if MPC55XX_CHIP_TYPE >= 5510 && MPC55XX_CHIP_TYPE <= 5517 - /* eDMA interrupts */ - #define MPC55XX_IRQ_EDMA_ERROR_LOW 10U - #define MPC55XX_IRQ_EDMA_REQUEST_LOW_MIN 11U - #define MPC55XX_IRQ_EDMA_REQUEST_LOW_MAX 26U +#if MPC55XX_CHIP_TYPE / 10 == 551 + #define MPC55XX_IRQ_MAX 293U - #define MPC55XX_IRQ_EDMA_GET_CHANNEL(v) \ - ((v) - MPC55XX_IRQ_EDMA_REQUEST_LOW_MIN) - #define MPC55XX_IRQ_EDMA_GET_REQUEST(c) \ - ((c) + MPC55XX_IRQ_EDMA_REQUEST_LOW_MIN) + /* eDMA */ + #define MPC55XX_IRQ_EDMA_ERROR(group) \ + ((group) == 0 ? 10U : MPC55XX_IRQ_INVALID) + #define MPC55XX_IRQ_EDMA(ch) \ + ((unsigned) (ch) < 16U ? 11U + (ch) : MPC55XX_IRQ_INVALID) - /* I2C interrupt */ - #define MPC55XX_IRQ_I2C 48U + /* I2C */ + #define MPC55XX_IRQ_I2C(mod) \ + ((mod) == 0 ? 48U : MPC55XX_IRQ_INVALID) /* SIU external interrupts */ #define MPC55XX_IRQ_SIU_EXTERNAL_0 53U @@ -70,31 +64,74 @@ extern "C" { #define MPC55XX_IRQ_SIU_EXTERNAL_3 56U #define MPC55XX_IRQ_SIU_EXTERNAL_4_15 57U - /* eMIOS interrupts */ - #define MPC55XX_IRQ_EMIOS_REQUEST_LOW_MIN 58U - #define MPC55XX_IRQ_EMIOS_REQUEST_LOW_MAX 81U - #define MPC55XX_IRQ_EMIOS_GET_CHANNEL(v) \ - ((v) - MPC55XX_IRQ_EMIOS_REQUEST_LOW_MIN) - #define MPC55XX_IRQ_EMIOS_GET_REQUEST(c) \ - ((c) + MPC55XX_IRQ_EMIOS_REQUEST_LOW_MIN) -#elif MPC55XX_CHIP_TYPE >= 5554 && MPC55XX_CHIP_TYPE <= 5567 - /* eDMA interrupts */ - #define MPC55XX_IRQ_EDMA_ERROR_LOW 10U - #define MPC55XX_IRQ_EDMA_REQUEST_LOW_MIN 11U - #define MPC55XX_IRQ_EDMA_REQUEST_LOW_MAX 42U - - #define MPC55XX_IRQ_EDMA_ERROR_HIGH 210U - #define MPC55XX_IRQ_EDMA_REQUEST_HIGH_MIN 211U - #define MPC55XX_IRQ_EDMA_REQUEST_HIGH_MAX 242U - - #define MPC55XX_IRQ_EDMA_GET_CHANNEL(v) \ - (((v) > MPC55XX_IRQ_EDMA_REQUEST_LOW_MAX) \ - ? ((v) + 32U - MPC55XX_IRQ_EDMA_REQUEST_HIGH_MIN) \ - : ((v) - MPC55XX_IRQ_EDMA_REQUEST_LOW_MIN)) - #define MPC55XX_IRQ_EDMA_GET_REQUEST(c) \ - (((c) >= 32U) \ - ? ((c) - 32U + MPC55XX_IRQ_EDMA_REQUEST_HIGH_MIN) \ - : ((c) + MPC55XX_IRQ_EDMA_REQUEST_LOW_MIN)) + /* PIT */ + #define MPC55XX_IRQ_RTI 148U + #define MPC55XX_IRQ_PIT(timer) (148U + (timer)) + + /* eTPU */ + #define MPC55XX_IRQ_ETPU_BASE(mod) MPC55XX_IRQ_INVALID + + /* DSPI */ + #define MPC55XX_IRQ_DSPI_BASE(mod) \ + ((mod) == 0 ? 117U : \ + ((mod) == 1 ? 122U : \ + ((mod) == 2 ? 274U : \ + ((mod) == 3 ? 279U : MPC55XX_IRQ_INVALID)))) + + /* eMIOS */ + #define MPC55XX_IRQ_EMIOS(ch) \ + ((unsigned) (ch) < 24U ? 58U + (ch) : MPC55XX_IRQ_INVALID) + + /* eQADC */ + #define MPC55XX_IRQ_EQADC_BASE(mod) \ + ((mod) == 0 ? 82U : MPC55XX_IRQ_INVALID) + + /* eSCI */ + #define MPC55XX_IRQ_ESCI_BASE(mod) \ + ((mod) == 0 ? 113U : \ + ((mod) == 1 ? 114U : \ + ((mod) == 2 ? 115U : \ + ((mod) == 3 ? 116U : \ + ((mod) == 4 ? 270U : \ + ((mod) == 5 ? 271U : \ + ((mod) == 6 ? 272U : \ + ((mod) == 7 ? 273U : MPC55XX_IRQ_INVALID)))))))) + + /* FlexCAN */ + #define MPC55XX_IRQ_CAN_BASE(mod) \ + ((mod) == 0 ? 127U : \ + ((mod) == 1 ? 157U : \ + ((mod) == 2 ? 178U : \ + ((mod) == 3 ? 199U : \ + ((mod) == 4 ? 220U : \ + ((mod) == 5 ? 241U : MPC55XX_IRQ_INVALID)))))) + + /* FlexRay */ + #define MPC55XX_IRQ_FLEXRAY_BASE(mod) \ + ((mod) == 0 ? 284U : MPC55XX_IRQ_INVALID) +#else + #if MPC55XX_CHIP_TYPE / 10 == 555 + #define MPC55XX_IRQ_MAX 307U + #elif MPC55XX_CHIP_TYPE / 10 == 556 + #define MPC55XX_IRQ_MAX 360U + #elif MPC55XX_CHIP_TYPE / 10 == 567 + #define MPC55XX_IRQ_MAX 479U + #else + #error "unsupported chip type" + #endif + + /* eDMA */ + #define MPC55XX_IRQ_EDMA_ERROR(group) \ + ((group) == 0 ? 10U : \ + ((group) == 1 ? 210U : \ + ((group) == 2 ? 425U : MPC55XX_IRQ_INVALID))) + #define MPC55XX_IRQ_EDMA(ch) \ + ((unsigned) (ch) < 32U ? 11U + (ch) : \ + ((unsigned) (ch) < 64U ? 179U + (ch) : \ + ((unsigned) (ch) < 96U ? 362U + (ch) : MPC55XX_IRQ_INVALID))) + + /* I2C */ + #define MPC55XX_IRQ_I2C(mod) MPC55XX_IRQ_INVALID /* SIU external interrupts */ #define MPC55XX_IRQ_SIU_EXTERNAL_0 46U @@ -103,25 +140,116 @@ extern "C" { #define MPC55XX_IRQ_SIU_EXTERNAL_3 49U #define MPC55XX_IRQ_SIU_EXTERNAL_4_15 50U - /* eMIOS interrupts */ - #define MPC55XX_IRQ_EMIOS_REQUEST_LOW_MIN 51U - #define MPC55XX_IRQ_EMIOS_REQUEST_LOW_MAX 66U - #define MPC55XX_IRQ_EMIOS_REQUEST_HIGH_MIN 202U - #define MPC55XX_IRQ_EMIOS_REQUEST_HIGH_MAX 209U - - #define MPC55XX_IRQ_EMIOS_GET_CHANNEL(v) \ - (((v) > MPC55XX_IRQ_EMIOS_REQUEST_LOW_MAX) \ - ? ((v) + 16U - MPC55XX_IRQ_EMIOS_REQUEST_HIGH_MIN) \ - : ((v) - MPC55XX_IRQ_EMIOS_REQUEST_LOW_MIN)) - - #define MPC55XX_IRQ_EMIOS_GET_REQUEST(c) \ - (((c) >= 16U) \ - ? ((c) - 16U + MPC55XX_IRQ_EMIOS_REQUEST_HIGH_MIN) \ - : ((c) + MPC55XX_IRQ_EMIOS_REQUEST_LOW_MIN)) -#else - #error "unexpected chip type" + /* PIT */ + #define MPC55XX_IRQ_RTI 305U + #define MPC55XX_IRQ_PIT(ch) (301U + (ch)) + + /* eTPU */ + #define MPC55XX_IRQ_ETPU_BASE(mod) \ + ((mod) == 0 ? 67U : \ + ((mod) == 1 ? 243U : MPC55XX_IRQ_INVALID)) + + /* DSPI */ + #define MPC55XX_IRQ_DSPI_BASE(mod) \ + ((mod) == 0 ? 275U : \ + ((mod) == 1 ? 131U : \ + ((mod) == 2 ? 136U : \ + ((mod) == 3 ? 141U : MPC55XX_IRQ_INVALID)))) + + /* eMIOS */ + #define MPC55XX_IRQ_EMIOS(ch) \ + ((unsigned) (ch) < 16U ? 51U + (ch) : \ + ((unsigned) (ch) < 24U ? 186U + (ch) : \ + ((unsigned) (ch) < 32U ? 435U + (ch) : MPC55XX_IRQ_INVALID))) + + /* eQADC */ + #define MPC55XX_IRQ_EQADC_BASE(mod) \ + ((mod) == 0 ? 100U : \ + ((mod) == 1 ? 394U : MPC55XX_IRQ_INVALID)) + + /* eSCI */ + #define MPC55XX_IRQ_ESCI_BASE(mod) \ + ((mod) == 0 ? 146U : \ + ((mod) == 1 ? 149U : \ + ((mod) == 2 ? 473U : MPC55XX_IRQ_INVALID))) + + /* FlexCAN */ + #define MPC55XX_IRQ_CAN_BASE(mod) \ + ((mod) == 0 ? 152U : \ + ((mod) == 1 ? 280U : \ + ((mod) == 2 ? 173U : \ + ((mod) == 3 ? 308U : \ + ((mod) == 4 ? 329U : MPC55XX_IRQ_INVALID))))) + + /* FlexRay */ + #define MPC55XX_IRQ_FLEXRAY_BASE(mod) \ + ((mod) == 0 ? 350U : MPC55XX_IRQ_INVALID) #endif +#define MPC55XX_IRQ_NUMBER (MPC55XX_IRQ_MAX + 1U) + +/* eTPU */ +#define MPC55XX_IRQ_ETPU(mod) \ + (MPC55XX_IRQ_ETPU_BASE(mod) + 0U) +#define MPC55XX_IRQ_ETPU_CHANNEL(mod, ch) \ + (MPC55XX_IRQ_ETPU_BASE(mod) + 1U + (ch)) + +/* DSPI */ +#define MPC55XX_IRQ_DSPI_TFUF_RFOF(mod) (MPC55XX_IRQ_DSPI_BASE(mod) + 0U) +#define MPC55XX_IRQ_DSPI_EOQF(mod) (MPC55XX_IRQ_DSPI_BASE(mod) + 1U) +#define MPC55XX_IRQ_DSPI_TFFF(mod) (MPC55XX_IRQ_DSPI_BASE(mod) + 2U) +#define MPC55XX_IRQ_DSPI_TCF(mod) (MPC55XX_IRQ_DSPI_BASE(mod) + 3U) +#define MPC55XX_IRQ_DSPI_RFDF(mod) (MPC55XX_IRQ_DSPI_BASE(mod) + 4U) + +/* eQADC */ +#define MPC55XX_IRQ_EQADC_TORF_RFOF_CFUF(mod) \ + (MPC55XX_IRQ_EQADC_BASE(mod) + 0U) +#define MPC55XX_IRQ_EQADC_NCF(mod, fifo) \ + (MPC55XX_IRQ_EQADC_BASE(mod) + 1U + (fifo) * 5U + 0U) +#define MPC55XX_IRQ_EQADC_PF(mod, fifo) \ + (MPC55XX_IRQ_EQADC_BASE(mod) + 1U + (fifo) * 5U + 1U) +#define MPC55XX_IRQ_EQADC_EOQF(mod, fifo) \ + (MPC55XX_IRQ_EQADC_BASE(mod) + 1U + (fifo) * 5U + 2U) +#define MPC55XX_IRQ_EQADC_CFFF(mod, fifo) \ + (MPC55XX_IRQ_EQADC_BASE(mod) + 1U + (fifo) * 5U + 3U) +#define MPC55XX_IRQ_EQADC_RFDF(mod, fifo) \ + (MPC55XX_IRQ_EQADC_BASE(mod) + 1U + (fifo) * 5U + 4U) + +/* eSCI */ +#define MPC55XX_IRQ_ESCI(mod) (MPC55XX_IRQ_ESCI_BASE(mod) + 0U) + +/* FlexCAN */ +#define MPC55XX_IRQ_CAN_BOFF_TWRN_RWRN(mod) (MPC55XX_IRQ_CAN(mod) + 0U) +#define MPC55XX_IRQ_CAN_ERR(mod) (MPC55XX_IRQ_CAN(mod) + 1U) +#define MPC55XX_IRQ_CAN_BUF_0(mod) (MPC55XX_IRQ_CAN(mod) + 3U) +#define MPC55XX_IRQ_CAN_BUF_1(mod) (MPC55XX_IRQ_CAN(mod) + 4U) +#define MPC55XX_IRQ_CAN_BUF_2(mod) (MPC55XX_IRQ_CAN(mod) + 5U) +#define MPC55XX_IRQ_CAN_BUF_3(mod) (MPC55XX_IRQ_CAN(mod) + 6U) +#define MPC55XX_IRQ_CAN_BUF_4(mod) (MPC55XX_IRQ_CAN(mod) + 7U) +#define MPC55XX_IRQ_CAN_BUF_5(mod) (MPC55XX_IRQ_CAN(mod) + 8U) +#define MPC55XX_IRQ_CAN_BUF_6(mod) (MPC55XX_IRQ_CAN(mod) + 9U) +#define MPC55XX_IRQ_CAN_BUF_7(mod) (MPC55XX_IRQ_CAN(mod) + 10U) +#define MPC55XX_IRQ_CAN_BUF_8(mod) (MPC55XX_IRQ_CAN(mod) + 12U) +#define MPC55XX_IRQ_CAN_BUF_9(mod) (MPC55XX_IRQ_CAN(mod) + 12U) +#define MPC55XX_IRQ_CAN_BUF_10(mod) (MPC55XX_IRQ_CAN(mod) + 13U) +#define MPC55XX_IRQ_CAN_BUF_11(mod) (MPC55XX_IRQ_CAN(mod) + 14U) +#define MPC55XX_IRQ_CAN_BUF_12(mod) (MPC55XX_IRQ_CAN(mod) + 15U) +#define MPC55XX_IRQ_CAN_BUF_13(mod) (MPC55XX_IRQ_CAN(mod) + 16U) +#define MPC55XX_IRQ_CAN_BUF_14(mod) (MPC55XX_IRQ_CAN(mod) + 17U) +#define MPC55XX_IRQ_CAN_BUF_15(mod) (MPC55XX_IRQ_CAN(mod) + 18U) +#define MPC55XX_IRQ_CAN_BUF_16_31(mod) (MPC55XX_IRQ_CAN(mod) + 19U) +#define MPC55XX_IRQ_CAN_BUF_32_63(mod) (MPC55XX_IRQ_CAN(mod) + 20U) + +/* FlexRay */ +#define MPC55XX_IRQ_FLEXRAY_MIF(mod) (MPC55XX_IRQ_FLEXRAY_BASE(mod) + 0U) +#define MPC55XX_IRQ_FLEXRAY_PRIF(mod) (MPC55XX_IRQ_FLEXRAY_BASE(mod) + 1U) +#define MPC55XX_IRQ_FLEXRAY_CHIF(mod) (MPC55XX_IRQ_FLEXRAY_BASE(mod) + 2U) +#define MPC55XX_IRQ_FLEXRAY_WUP_IF(mod) (MPC55XX_IRQ_FLEXRAY_BASE(mod) + 3U) +#define MPC55XX_IRQ_FLEXRAY_FBNE_F(mod) (MPC55XX_IRQ_FLEXRAY_BASE(mod) + 4U) +#define MPC55XX_IRQ_FLEXRAY_FANE_F(mod) (MPC55XX_IRQ_FLEXRAY_BASE(mod) + 5U) +#define MPC55XX_IRQ_FLEXRAY_RBIF(mod) (MPC55XX_IRQ_FLEXRAY_BASE(mod) + 6U) +#define MPC55XX_IRQ_FLEXRAY_TBIF(mod) (MPC55XX_IRQ_FLEXRAY_BASE(mod) + 7U) + /* Checks */ #define MPC55XX_IRQ_IS_VALID(v) \ ((v) >= MPC55XX_IRQ_MIN && \ @@ -171,9 +299,9 @@ rtems_status_code mpc55xx_intc_clear_software_irq(rtems_vector_number vector); * @{ */ -#define BSP_INTERRUPT_VECTOR_MIN 0 +#define BSP_INTERRUPT_VECTOR_MIN MPC55XX_IRQ_MIN -#define BSP_INTERRUPT_VECTOR_MAX 328 +#define BSP_INTERRUPT_VECTOR_MAX MPC55XX_IRQ_MAX #define BSP_INTERRUPT_USE_INDEX_TABLE @@ -186,6 +314,10 @@ rtems_status_code mpc55xx_intc_clear_software_irq(rtems_vector_number vector); /** @} */ +/* Legacy API */ +#define MPC55XX_IRQ_EDMA_GET_REQUEST(ch) MPC55XX_IRQ_EDMA(ch) +#define MPC55XX_IRQ_EMIOS_GET_REQUEST(ch) MPC55XX_IRQ_EMIOS(ch) + #ifdef __cplusplus }; #endif /* __cplusplus */ |