Index: kernel/genarch/src/ofw/ebus.c
===================================================================
--- kernel/genarch/src/ofw/ebus.c	(revision 6c441cf8f35799043d891a3a77032e1b0e49112b)
+++ kernel/genarch/src/ofw/ebus.c	(revision 36b8c5a6b2be4f6f3666d42dc1f09331f05f7a8b)
@@ -45,5 +45,6 @@
 
 /** Apply EBUS ranges to EBUS register. */
-bool ofw_ebus_apply_ranges(ofw_tree_node_t *node, ofw_ebus_reg_t *reg, uintptr_t *pa)
+bool
+ofw_ebus_apply_ranges(ofw_tree_node_t *node, ofw_ebus_reg_t *reg, uintptr_t *pa)
 {
 	ofw_tree_property_t *prop;
@@ -63,9 +64,11 @@
 		if (reg->space != range[i].child_space)
 			continue;
-		if (overlaps(reg->addr, reg->size, range[i].child_base, range[i].size)) {
+		if (overlaps(reg->addr, reg->size, range[i].child_base,
+		    range[i].size)) {
 			ofw_pci_reg_t pci_reg;
 			
 			pci_reg.space = range[i].parent_space;
-			pci_reg.addr = range[i].parent_base + (reg->addr - range[i].child_base);
+			pci_reg.addr = range[i].parent_base +
+			    (reg->addr - range[i].child_base);
 			pci_reg.size = reg->size;
 			
@@ -77,5 +80,7 @@
 }
 
-bool ofw_ebus_map_interrupt(ofw_tree_node_t *node, ofw_ebus_reg_t *reg, uint32_t interrupt, int *inr)
+bool
+ofw_ebus_map_interrupt(ofw_tree_node_t *node, ofw_ebus_reg_t *reg,
+    uint32_t interrupt, int *inr, cir_t *cir, void **cir_arg)
 {
 	ofw_tree_property_t *prop;
@@ -105,6 +110,6 @@
 	unsigned int i;
 	for (i = 0; i < count; i++) {
-		if ((intr_map[i].space == space) && (intr_map[i].addr == addr)
-			&& (intr_map[i].intr == intr))
+		if ((intr_map[i].space == space) &&
+		    (intr_map[i].addr == addr) && (intr_map[i].intr == intr))
 			goto found;
 	}
@@ -114,8 +119,10 @@
 	/*
 	 * We found the device that functions as an interrupt controller
-	 * for the interrupt. We also found partial mapping from interrupt to INO.
+	 * for the interrupt. We also found partial mapping from interrupt to
+	 * INO.
 	 */
 
-	controller = ofw_tree_find_node_by_handle(ofw_tree_lookup("/"), intr_map[i].controller_handle);
+	controller = ofw_tree_find_node_by_handle(ofw_tree_lookup("/"),
+	    intr_map[i].controller_handle);
 	if (!controller)
 		return false;
@@ -131,5 +138,6 @@
 	 * Let the PCI do the next step in mapping the interrupt.
 	 */
-	if (!ofw_pci_map_interrupt(controller, NULL, intr_map[i].controller_ino, inr))
+	if (!ofw_pci_map_interrupt(controller, NULL, intr_map[i].controller_ino,
+	    inr, cir, cir_arg))
 		return false;
 
Index: kernel/genarch/src/ofw/fhc.c
===================================================================
--- kernel/genarch/src/ofw/fhc.c	(revision 6c441cf8f35799043d891a3a77032e1b0e49112b)
+++ kernel/genarch/src/ofw/fhc.c	(revision 36b8c5a6b2be4f6f3666d42dc1f09331f05f7a8b)
@@ -110,5 +110,7 @@
 }
 
-bool ofw_fhc_map_interrupt(ofw_tree_node_t *node, ofw_fhc_reg_t *reg, uint32_t interrupt, int *inr)
+bool
+ofw_fhc_map_interrupt(ofw_tree_node_t *node, ofw_fhc_reg_t *reg,
+    uint32_t interrupt, int *inr, cir_t *cir, void **cir_arg)
 {
 	fhc_t *fhc = NULL;
@@ -127,4 +129,6 @@
 	
 	*inr = interrupt;
+	*cir = fhc_clear_interrupt;
+	*cir_arg = fhc;
 	return true;
 }
Index: kernel/genarch/src/ofw/pci.c
===================================================================
--- kernel/genarch/src/ofw/pci.c	(revision 6c441cf8f35799043d891a3a77032e1b0e49112b)
+++ kernel/genarch/src/ofw/pci.c	(revision 36b8c5a6b2be4f6f3666d42dc1f09331f05f7a8b)
@@ -50,5 +50,6 @@
 #define PCI_IGN			0x1f
 
-bool ofw_pci_apply_ranges(ofw_tree_node_t *node, ofw_pci_reg_t *reg, uintptr_t *pa)
+bool
+ofw_pci_apply_ranges(ofw_tree_node_t *node, ofw_pci_reg_t *reg, uintptr_t *pa)
 {
 	ofw_tree_property_t *prop;
@@ -69,8 +70,11 @@
 	
 	for (i = 0; i < ranges; i++) {
-		if ((reg->space & PCI_SPACE_MASK) != (range[i].space & PCI_SPACE_MASK))
+		if ((reg->space & PCI_SPACE_MASK) !=
+		    (range[i].space & PCI_SPACE_MASK))
 			continue;
-		if (overlaps(reg->addr, reg->size, range[i].child_base, range[i].size)) {
-			*pa = range[i].parent_base + (reg->addr - range[i].child_base);
+		if (overlaps(reg->addr, reg->size, range[i].child_base,
+		    range[i].size)) {
+			*pa = range[i].parent_base +
+			    (reg->addr - range[i].child_base);
 			return true;
 		}
@@ -80,5 +84,7 @@
 }
 
-bool ofw_pci_reg_absolutize(ofw_tree_node_t *node, ofw_pci_reg_t *reg, ofw_pci_reg_t *out)
+bool
+ofw_pci_reg_absolutize(ofw_tree_node_t *node, ofw_pci_reg_t *reg,
+    ofw_pci_reg_t *out)
 {
 	if (reg->space & PCI_ABS_MASK) {
@@ -104,5 +110,6 @@
 	
 	for (i = 0; i < assigned_addresses; i++) {
-		if ((assigned_address[i].space & PCI_REG_MASK) == (reg->space & PCI_REG_MASK)) {
+		if ((assigned_address[i].space & PCI_REG_MASK) ==
+		    (reg->space & PCI_REG_MASK)) {
 			out->space = assigned_address[i].space;
 			out->addr = reg->addr + assigned_address[i].addr;
@@ -120,5 +127,7 @@
  * to a PCI bridge.
  */
-bool ofw_pci_map_interrupt(ofw_tree_node_t *node, ofw_pci_reg_t *reg, int ino, int *inr)
+bool
+ofw_pci_map_interrupt(ofw_tree_node_t *node, ofw_pci_reg_t *reg, int ino,
+    int *inr, cir_t *cir, void **cir_arg)
 {
 	pci_t *pci = node->device;
@@ -133,4 +142,6 @@
 
 	*inr = (PCI_IGN << IGN_SHIFT) | ino;
+	*cir = pci_clear_interrupt;
+	*cir_arg = pci;
 
 	return true;
