diff packages/hal/arm/xscale/uE250/current/include/hal_plf_ints.h @ 745:524cd8104dfd

Add PCI interrupts (extended support)
author gthomas
date Mon, 24 Feb 2003 18:10:07 +0000
parents 4ca0953b0734
children
line wrap: on
line diff
--- a/packages/hal/arm/xscale/uE250/current/include/hal_plf_ints.h
+++ b/packages/hal/arm/xscale/uE250/current/include/hal_plf_ints.h
@@ -61,6 +61,62 @@
 #include <cyg/hal/plf_io.h>
 
 //----------------------------------------------------------------------------
+// Additional interrupts from PCI & Motherboard
+#define _uPCI_BASE_INTERRUPT   (96+17)
+
+#define CYGNUM_HAL_INTERRUPT_PCI_INTA    (_uPCI_BASE_INTERRUPT+0)   
+#define CYGNUM_HAL_INTERRUPT_PCI_INTB    (_uPCI_BASE_INTERRUPT+1)   
+#define CYGNUM_HAL_INTERRUPT_PCI_INTC    (_uPCI_BASE_INTERRUPT+2)   
+#define CYGNUM_HAL_INTERRUPT_PCI_INTD    (_uPCI_BASE_INTERRUPT+3)   
+#define CYGNUM_HAL_INTERRUPT_PXA         (_uPCI_BASE_INTERRUPT+4)   
+
+#undef  CYGNUM_HAL_ISR_MIN
+#undef  CYGNUM_HAL_ISR_MAX
+#define CYGNUM_HAL_ISR_MIN               0
+#define CYGNUM_HAL_ISR_MAX               (_uPCI_BASE_INTERRUPT+4)   
+
+//----------------------------------------------------------------------------
+// Platform specific interrupt handling
+externC int  _uE250_extended_irq(void);
+externC void _uE250_extended_int_mask(int vector);
+externC void _uE250_extended_int_unmask(int vector);
+externC void _uE250_extended_int_acknowledge(int vector);
+externC void _uE250_extended_int_configure(int vector, int level, int up);
+externC void _uE250_extended_int_set_level(int vector, int level);
+
+#define HAL_EXTENDED_IRQ_HANDLER(sources)                       \
+    if ((sources & (1 << CYGNUM_HAL_INTERRUPT_GPIO1)) != 0) {   \
+        int res = _uE250_extended_irq();                        \
+        if (res) return res;                                    \
+    };
+#define HAL_EXTENDED_INTERRUPT_MASK(vector)     \
+    if (vector >= _uPCI_BASE_INTERRUPT) {       \
+        _uE250_extended_int_mask(vector);       \
+        return;                                 \
+    }
+#define HAL_EXTENDED_INTERRUPT_UNMASK(vector)   \
+    if (vector >= _uPCI_BASE_INTERRUPT) {       \
+        _uE250_extended_int_unmask(vector);     \
+        return;                                 \
+    }
+#define HAL_EXTENDED_INTERRUPT_ACKNOWLEDGE(vector)      \
+    if (vector >= _uPCI_BASE_INTERRUPT) {               \
+        _uE250_extended_int_acknowledge(vector);        \
+        return;                                         \
+    }
+#define HAL_EXTENDED_INTERRUPT_CONFIGURE(vector, level, up)     \
+    if (vector >= _uPCI_BASE_INTERRUPT) {                       \
+        _uE250_extended_int_configure(vector, level, up);       \
+        return;                                                 \
+    }
+#define HAL_EXTENDED_INTERRUPT_SET_LEVEL(vector, level) \
+    if (vector >= _uPCI_BASE_INTERRUPT) {               \
+        _uE250_extended_int_set_level(vector, level);   \
+        return;                                         \
+    }
+
+
+//----------------------------------------------------------------------------
 // Reset.
 #undef  HAL_PLATFORM_RESET
 #define HAL_PLATFORM_RESET()                                               \