Index: kernel/arch/arm32/include/mach/gta02/gta02.h
===================================================================
--- kernel/arch/arm32/include/mach/gta02/gta02.h	(revision bd11d3e61f28b76b32ae485033f9c0a9e0c0720c)
+++ kernel/arch/arm32/include/mach/gta02/gta02.h	(revision 0e796cc3e0abc77c3580a6189cb9b4ce08a72f79)
@@ -43,4 +43,7 @@
 extern struct arm_machine_ops gta02_machine_ops;
 
+/** Size of GTA02 IRQ number range (starting from 0) */
+#define GTA02_IRQ_COUNT 32
+
 #endif
 
Index: kernel/arch/arm32/include/mach/integratorcp/integratorcp.h
===================================================================
--- kernel/arch/arm32/include/mach/integratorcp/integratorcp.h	(revision bd11d3e61f28b76b32ae485033f9c0a9e0c0720c)
+++ kernel/arch/arm32/include/mach/integratorcp/integratorcp.h	(revision 0e796cc3e0abc77c3580a6189cb9b4ce08a72f79)
@@ -108,4 +108,7 @@
 extern struct arm_machine_ops icp_machine_ops;
 
+/** Size of IntegratorCP IRQ number range (starting from 0) */
+#define ICP_IRQ_COUNT 8
+
 #endif
 
Index: kernel/arch/arm32/include/mach/testarm/testarm.h
===================================================================
--- kernel/arch/arm32/include/mach/testarm/testarm.h	(revision bd11d3e61f28b76b32ae485033f9c0a9e0c0720c)
+++ kernel/arch/arm32/include/mach/testarm/testarm.h	(revision 0e796cc3e0abc77c3580a6189cb9b4ce08a72f79)
@@ -42,10 +42,8 @@
 #include <arch/machine_func.h>
 
-/** Last interrupt number (beginning from 0) whose status is probed
- * from interrupt controller
- */
-#define GXEMUL_IRQC_MAX_IRQ  8
-#define GXEMUL_KBD_IRQ       2
-#define GXEMUL_TIMER_IRQ     4
+/** Size of GXemul IRQ number range (starting from 0) */
+#define GXEMUL_IRQ_COUNT	32
+#define GXEMUL_KBD_IRQ		2
+#define GXEMUL_TIMER_IRQ	4
 
 /** Timer frequency */
Index: kernel/arch/arm32/include/machine_func.h
===================================================================
--- kernel/arch/arm32/include/machine_func.h	(revision bd11d3e61f28b76b32ae485033f9c0a9e0c0720c)
+++ kernel/arch/arm32/include/machine_func.h	(revision 0e796cc3e0abc77c3580a6189cb9b4ce08a72f79)
@@ -104,4 +104,6 @@
 extern void machine_input_init(void);
 
+extern size_t machine_get_irq_count(void);
+
 #endif
 
Index: kernel/arch/arm32/src/interrupt.c
===================================================================
--- kernel/arch/arm32/src/interrupt.c	(revision bd11d3e61f28b76b32ae485033f9c0a9e0c0720c)
+++ kernel/arch/arm32/src/interrupt.c	(revision 0e796cc3e0abc77c3580a6189cb9b4ce08a72f79)
@@ -40,7 +40,4 @@
 #include <ddi/device.h>
 #include <interrupt.h>
-
-/** Initial size of a table holding interrupt handlers. */
-#define IRQ_COUNT 8
 
 /** Disable interrupts.
@@ -105,5 +102,9 @@
 void interrupt_init(void)
 {
-	irq_init(IRQ_COUNT, IRQ_COUNT);
+	size_t irq_count;
+
+	irq_count = machine_get_irq_count();
+	irq_init(irq_count, irq_count);
+
 	machine_timer_irq_start();
 }
Index: kernel/arch/arm32/src/mach/testarm/testarm.c
===================================================================
--- kernel/arch/arm32/src/mach/testarm/testarm.c	(revision bd11d3e61f28b76b32ae485033f9c0a9e0c0720c)
+++ kernel/arch/arm32/src/mach/testarm/testarm.c	(revision 0e796cc3e0abc77c3580a6189cb9b4ce08a72f79)
@@ -211,5 +211,5 @@
 	unsigned int i;
 
-	for (i = 0; i < GXEMUL_IRQC_MAX_IRQ; i++) {
+	for (i = 0; i < GXEMUL_IRQ_COUNT; i++) {
 		if (sources & (1 << i)) {
 			irq_t *irq = irq_dispatch_and_lock(i);
Index: kernel/arch/arm32/src/machine_func.c
===================================================================
--- kernel/arch/arm32/src/machine_func.c	(revision bd11d3e61f28b76b32ae485033f9c0a9e0c0720c)
+++ kernel/arch/arm32/src/machine_func.c	(revision 0e796cc3e0abc77c3580a6189cb9b4ce08a72f79)
@@ -125,4 +125,21 @@
 }
 
+/** Get IRQ number range used by machine. */
+size_t machine_get_irq_count(void)
+{
+	size_t irq_count;
+ 
+#if defined(MACHINE_gta02)
+	irq_count = GTA02_IRQ_COUNT;
+#elif defined(MACHINE_testarm)
+	irq_count = GXEMUL_IRQ_COUNT;
+#elif defined(MACHINE_integratorcp)
+	irq_count = ICP_IRQ_COUNT;
+#else
+#error Machine type not defined.
+#endif
+	return irq_count;
+}
+
 /** @}
  */
