Index: generic/include/errno.h
===================================================================
--- generic/include/errno.h	(revision 429ff2ea63e3dccc351037f1b2f72ee2844ae09d)
+++ generic/include/errno.h	(revision 4fd61ba9ecb8f0f9026f3fa3a2b1cd920756fdb4)
@@ -41,4 +41,5 @@
 			* to close the connection. Used by answerbox
 			* to close the connection.  */
+#define EEXISTS    -8  /* Entry already exists */
 
 #endif
Index: generic/include/ipc/ipc.h
===================================================================
--- generic/include/ipc/ipc.h	(revision 429ff2ea63e3dccc351037f1b2f72ee2844ae09d)
+++ generic/include/ipc/ipc.h	(revision 4fd61ba9ecb8f0f9026f3fa3a2b1cd920756fdb4)
@@ -44,4 +44,5 @@
 #define IPC_CALL_FORWARDED      (1<<3) /* Call was forwarded */
 #define IPC_CALL_CONN_ME_TO     (1<<4) /* Identify connect_me_to */
+#define IPC_CALL_NOTIF          (1<<5) /* Interrupt notification */
 
 /* Flags for ipc_wait_for_call */
@@ -120,4 +121,6 @@
  */
 #define IPC_M_PHONE_HUNGUP      3
+/** Interrupt notification */
+#define IPC_M_INTERRUPT         4
 
 
@@ -155,4 +158,7 @@
 
 	link_t answers;          /**< Answered calls */
+
+	SPINLOCK_DECLARE(irq_lock);
+	link_t irq_notifs;       /**< Notifications from IRQ handlers */
 };
 
@@ -196,5 +202,5 @@
 extern void ipc_phone_connect(phone_t *phone, answerbox_t *box);
 extern void ipc_call_free(call_t *call);
-extern call_t * ipc_call_alloc(void);
+extern call_t * ipc_call_alloc(int flags);
 extern void ipc_answerbox_init(answerbox_t *box);
 extern void ipc_call_static_init(call_t *call);
@@ -205,4 +211,9 @@
 extern void ipc_backsend_err(phone_t *phone, call_t *call, __native err);
 
+extern int ipc_irq_register(answerbox_t *box, int irq);
+extern void ipc_irq_send_notif(int irq);
+extern void ipc_irq_unregister(answerbox_t *box, int irq);
+
+
 extern answerbox_t *ipc_phone_0;
 
Index: generic/include/ipc/sysipc.h
===================================================================
--- generic/include/ipc/sysipc.h	(revision 429ff2ea63e3dccc351037f1b2f72ee2844ae09d)
+++ generic/include/ipc/sysipc.h	(revision 4fd61ba9ecb8f0f9026f3fa3a2b1cd920756fdb4)
@@ -30,4 +30,6 @@
 #define __SYSIPC_H__
 
+#include <ipc/ipc.h>
+
 __native sys_ipc_call_sync_fast(__native phoneid, __native method, 
 				__native arg1, ipc_data_t *data);
@@ -44,5 +46,8 @@
 			      __native method, __native arg1);
 __native sys_ipc_hangup(int phoneid);
+__native sys_ipc_register_irq(__native irq);
+__native sys_ipc_unregister_irq(__native irq);
 
+void irq_ipc_bind_arch(__native irq);
 
 #endif
Index: generic/include/syscall/syscall.h
===================================================================
--- generic/include/syscall/syscall.h	(revision 429ff2ea63e3dccc351037f1b2f72ee2844ae09d)
+++ generic/include/syscall/syscall.h	(revision 4fd61ba9ecb8f0f9026f3fa3a2b1cd920756fdb4)
@@ -52,4 +52,6 @@
 	SYS_IPC_WAIT,
 	SYS_IPC_HANGUP,
+	SYS_IPC_REGISTER_IRQ,
+	SYS_IPC_UNREGISTER_IRQ,
 	SYS_MAP_PHYSMEM,
 	SYS_IOSPACE_ENABLE,
