Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc

* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc: (21 commits)
[POWERPC] spusched: Fix initial timeslice calculation
[POWERPC] spufs: Fix incorrect initialization of cbe_spu_info.spus
[POWERPC] Fix Maple platform ISA bus
[POWERPC] Make pci_iounmap actually unmap things
[POWERPC] Add function to check if address is an IO port
[POWERPC] Fix Pegasos keyboard detection
[POWERPC] iSeries: Fix section mismatch warning in lpevents
[POWERPC] iSeries: Fix section mismatch warnings
[POWERPC] iSeries: We need vio_enable_interrupts
[POWERPC] Fix RTC and device tree on linkstation machines
[POWERPC] Add of_register_i2c_devices()
[POWERPC] Fix loop with unsigned long counter variable
[POWERPC] Fix register labels on show_regs() message for 4xx/Book-E
[POWERPC] Only allow building of BootX text support on PPC_MULTIPLATFORM
[POWERPC] Fix the ability to reset on MPC8544 DS and MPC8568 MDS boards
[POWERPC] Fix mpc7448hpc2 tsi108 device_type bug
[POWREPC] Fixup a number of modpost warnings on ppc32
[POWERPC] Fix ethernet PHY support on MPC8544 DS
[POWERPC] Don't try to allocate resources for a Freescale POWERPC PHB
Revert "[POWERPC] Don't complain if size-cells == 0 in prom_parse()"
...

+221 -37
+1 -1
arch/powerpc/Kconfig.debug
··· 134 134 135 135 config BOOTX_TEXT 136 136 bool "Support for early boot text console (BootX or OpenFirmware only)" 137 - depends PPC_OF 137 + depends PPC_OF && PPC_MULTIPLATFORM 138 138 help 139 139 Say Y here to see progress messages from the boot firmware in text 140 140 mode. Requires either BootX or Open Firmware.
+12 -6
arch/powerpc/boot/dts/kuroboxHD.dts
··· 33 33 PowerPC,603e { /* Really 8241 */ 34 34 device_type = "cpu"; 35 35 reg = <0>; 36 - clock-frequency = <bebc200>; /* Fixed by bootwrapper */ 37 - timebase-frequency = <1743000>; /* Fixed by bootwrapper */ 38 - bus-frequency = <0>; /* From bootloader */ 36 + clock-frequency = <bebc200>; /* Fixed by bootloader */ 37 + timebase-frequency = <1743000>; /* Fixed by bootloader */ 38 + bus-frequency = <0>; /* Fixed by bootloader */ 39 39 /* Following required by dtc but not used */ 40 - i-cache-line-size = <0>; 41 - d-cache-line-size = <0>; 42 40 i-cache-size = <4000>; 43 41 d-cache-size = <4000>; 44 42 }; ··· 62 64 fef00000 fef00000 00100000>; /* pci iack */ 63 65 64 66 i2c@80003000 { 67 + #address-cells = <1>; 68 + #size-cells = <0>; 65 69 device_type = "i2c"; 66 70 compatible = "fsl-i2c"; 67 71 reg = <80003000 1000>; 68 72 interrupts = <5 2>; 69 73 interrupt-parent = <&mpic>; 74 + 75 + rtc@32 { 76 + device_type = "rtc"; 77 + compatible = "ricoh,rs5c372b"; 78 + reg = <32>; 79 + }; 70 80 }; 71 81 72 82 serial@80004500 { ··· 97 91 interrupt-parent = <&mpic>; 98 92 }; 99 93 100 - mpic: pic@80040000 { 94 + mpic: interrupt-controller@80040000 { 101 95 #interrupt-cells = <2>; 102 96 #address-cells = <0>; 103 97 device_type = "open-pic";
+12 -7
arch/powerpc/boot/dts/kuroboxHG.dts
··· 33 33 PowerPC,603e { /* Really 8241 */ 34 34 device_type = "cpu"; 35 35 reg = <0>; 36 - clock-frequency = <fdad680>; /* Fixed by bootwrapper */ 37 - timebase-frequency = <1F04000>; /* Fixed by bootwrapper */ 38 - bus-frequency = <0>; /* From bootloader */ 36 + clock-frequency = <fdad680>; /* Fixed by bootloader */ 37 + timebase-frequency = <1F04000>; /* Fixed by bootloader */ 38 + bus-frequency = <0>; /* Fixed by bootloader */ 39 39 /* Following required by dtc but not used */ 40 - i-cache-line-size = <0>; 41 - d-cache-line-size = <0>; 42 40 i-cache-size = <4000>; 43 41 d-cache-size = <4000>; 44 42 }; ··· 62 64 fef00000 fef00000 00100000>; /* pci iack */ 63 65 64 66 i2c@80003000 { 67 + #address-cells = <1>; 68 + #size-cells = <0>; 65 69 device_type = "i2c"; 66 70 compatible = "fsl-i2c"; 67 71 reg = <80003000 1000>; 68 72 interrupts = <5 2>; 69 73 interrupt-parent = <&mpic>; 74 + 75 + rtc@32 { 76 + device_type = "rtc"; 77 + compatible = "ricoh,rs5c372b"; 78 + reg = <32>; 79 + }; 70 80 }; 71 81 72 82 serial@80004500 { ··· 97 91 interrupt-parent = <&mpic>; 98 92 }; 99 93 100 - mpic: pic@80040000 { 101 - interrupt-parent = <&mpic>; 94 + mpic: interrupt-controller@80040000 { 102 95 #interrupt-cells = <2>; 103 96 #address-cells = <0>; 104 97 device_type = "open-pic";
+1 -1
arch/powerpc/boot/dts/mpc7448hpc2.dts
··· 45 45 #address-cells = <1>; 46 46 #size-cells = <1>; 47 47 #interrupt-cells = <2>; 48 - device_type = "tsi108-bridge"; 48 + device_type = "tsi-bridge"; 49 49 ranges = <00000000 c0000000 00010000>; 50 50 reg = <c0000000 00010000>; 51 51 bus-frequency = <0>;
+8
arch/powerpc/boot/dts/mpc8544ds.dts
··· 104 104 interrupts = <1d 2 1e 2 22 2>; 105 105 interrupt-parent = <&mpic>; 106 106 phy-handle = <&phy0>; 107 + phy-connection-type = "rgmii-id"; 107 108 }; 108 109 109 110 ethernet@26000 { ··· 118 117 interrupts = <1f 2 20 2 21 2>; 119 118 interrupt-parent = <&mpic>; 120 119 phy-handle = <&phy1>; 120 + phy-connection-type = "rgmii-id"; 121 121 }; 122 122 123 123 serial@4500 { ··· 348 346 }; 349 347 }; 350 348 349 + }; 350 + 351 + global-utilities@e0000 { //global utilities block 352 + compatible = "fsl,mpc8548-guts"; 353 + reg = <e0000 1000>; 354 + fsl,has-rstcr; 351 355 }; 352 356 353 357 mpic: pic@40000 {
+6
arch/powerpc/boot/dts/mpc8568mds.dts
··· 170 170 interrupt-parent = <&mpic>; 171 171 }; 172 172 173 + global-utilities@e0000 { //global utilities block 174 + compatible = "fsl,mpc8548-guts"; 175 + reg = <e0000 1000>; 176 + fsl,has-rstcr; 177 + }; 178 + 173 179 pci@8000 { 174 180 interrupt-map-mask = <f800 0 0 7>; 175 181 interrupt-map = <
+4 -3
arch/powerpc/kernel/head_64.S
··· 809 809 mtmsrd r24 /* RI on */ 810 810 lhz r24,PACAPACAINDEX(r13) /* Get processor # */ 811 811 cmpwi 0,r24,0 /* Are we processor 0? */ 812 - beq .__start_initialization_iSeries /* Start up the first processor */ 813 - mfspr r4,SPRN_CTRLF 812 + bne 1f 813 + b .__start_initialization_iSeries /* Start up the first processor */ 814 + 1: mfspr r4,SPRN_CTRLF 814 815 li r5,CTRL_RUNLATCH /* Turn off the run light */ 815 816 andc r4,r4,r5 816 817 mtspr SPRN_CTRLT,r4 ··· 1612 1611 #endif 1613 1612 1614 1613 #ifdef CONFIG_PPC_ISERIES 1615 - _STATIC(__start_initialization_iSeries) 1614 + _INIT_STATIC(__start_initialization_iSeries) 1616 1615 /* Clear out the BSS */ 1617 1616 LOAD_REG_IMMEDIATE(r11,__bss_stop) 1618 1617 LOAD_REG_IMMEDIATE(r8,__bss_start)
+7 -1
arch/powerpc/kernel/iomap.c
··· 7 7 #include <linux/pci.h> 8 8 #include <linux/mm.h> 9 9 #include <asm/io.h> 10 + #include <asm/pci-bridge.h> 10 11 11 12 /* 12 13 * Here comes the ppc64 implementation of the IOMAP ··· 137 136 138 137 void pci_iounmap(struct pci_dev *dev, void __iomem *addr) 139 138 { 140 - /* Nothing to do */ 139 + if (isa_vaddr_is_ioport(addr)) 140 + return; 141 + if (pcibios_vaddr_is_ioport(addr)) 142 + return; 143 + iounmap(addr); 141 144 } 145 + 142 146 EXPORT_SYMBOL(pci_iomap); 143 147 EXPORT_SYMBOL(pci_iounmap);
+4 -4
arch/powerpc/kernel/irq.c
··· 418 418 } 419 419 EXPORT_SYMBOL_GPL(virq_to_hw); 420 420 421 - struct irq_host *irq_alloc_host(unsigned int revmap_type, 422 - unsigned int revmap_arg, 423 - struct irq_host_ops *ops, 424 - irq_hw_number_t inval_irq) 421 + __init_refok struct irq_host *irq_alloc_host(unsigned int revmap_type, 422 + unsigned int revmap_arg, 423 + struct irq_host_ops *ops, 424 + irq_hw_number_t inval_irq) 425 425 { 426 426 struct irq_host *host; 427 427 unsigned int size = sizeof(struct irq_host);
+24 -1
arch/powerpc/kernel/pci-common.c
··· 65 65 spin_unlock(&hose_spinlock); 66 66 } 67 67 68 - struct pci_controller * pcibios_alloc_controller(struct device_node *dev) 68 + __init_refok struct pci_controller * pcibios_alloc_controller(struct device_node *dev) 69 69 { 70 70 struct pci_controller *phb; 71 71 ··· 99 99 100 100 if (phb->is_dynamic) 101 101 kfree(phb); 102 + } 103 + 104 + int pcibios_vaddr_is_ioport(void __iomem *address) 105 + { 106 + int ret = 0; 107 + struct pci_controller *hose; 108 + unsigned long size; 109 + 110 + spin_lock(&hose_spinlock); 111 + list_for_each_entry(hose, &hose_list, list_node) { 112 + #ifdef CONFIG_PPC64 113 + size = hose->pci_io_size; 114 + #else 115 + size = hose->io_resource.end - hose->io_resource.start + 1; 116 + #endif 117 + if (address >= hose->io_base_virt && 118 + address < (hose->io_base_virt + size)) { 119 + ret = 1; 120 + break; 121 + } 122 + } 123 + spin_unlock(&hose_spinlock); 124 + return ret; 102 125 } 103 126 104 127 /*
+19 -1
arch/powerpc/kernel/pci_32.c
··· 60 60 static int pci_bus_count; 61 61 62 62 static void 63 + fixup_hide_host_resource_fsl(struct pci_dev* dev) 64 + { 65 + int i, class = dev->class >> 8; 66 + 67 + if ((class == PCI_CLASS_PROCESSOR_POWERPC) && 68 + (dev->hdr_type == PCI_HEADER_TYPE_NORMAL) && 69 + (dev->bus->parent == NULL)) { 70 + for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) { 71 + dev->resource[i].start = 0; 72 + dev->resource[i].end = 0; 73 + dev->resource[i].flags = 0; 74 + } 75 + } 76 + } 77 + DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MOTOROLA, PCI_ANY_ID, fixup_hide_host_resource_fsl); 78 + DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_FREESCALE, PCI_ANY_ID, fixup_hide_host_resource_fsl); 79 + 80 + static void 63 81 fixup_broken_pcnet32(struct pci_dev* dev) 64 82 { 65 83 if ((dev->class>>8 == PCI_CLASS_NETWORK_ETHERNET)) { ··· 1247 1229 1248 1230 subsys_initcall(pcibios_init); 1249 1231 1250 - void __init pcibios_fixup_bus(struct pci_bus *bus) 1232 + void pcibios_fixup_bus(struct pci_bus *bus) 1251 1233 { 1252 1234 struct pci_controller *hose = (struct pci_controller *) bus->sysdata; 1253 1235 unsigned long io_offset;
+4
arch/powerpc/kernel/process.c
··· 423 423 printk(" CR: %08lx XER: %08lx\n", regs->ccr, regs->xer); 424 424 trap = TRAP(regs); 425 425 if (trap == 0x300 || trap == 0x600) 426 + #if defined(CONFIG_4xx) || defined(CONFIG_BOOKE) 427 + printk("DEAR: "REG", ESR: "REG"\n", regs->dar, regs->dsisr); 428 + #else 426 429 printk("DAR: "REG", DSISR: "REG"\n", regs->dar, regs->dsisr); 430 + #endif 427 431 printk("TASK = %p[%d] '%s' THREAD: %p", 428 432 current, current->pid, current->comm, task_thread_info(current)); 429 433
+1 -1
arch/powerpc/kernel/prom_parse.c
··· 24 24 /* Max address size we deal with */ 25 25 #define OF_MAX_ADDR_CELLS 4 26 26 #define OF_CHECK_COUNTS(na, ns) ((na) > 0 && (na) <= OF_MAX_ADDR_CELLS && \ 27 - (ns) >= 0) 27 + (ns) > 0) 28 28 29 29 static struct of_bus *of_match_bus(struct device_node *np); 30 30 static int __of_address_to_resource(struct device_node *dev,
+4
arch/powerpc/kernel/setup-common.c
··· 496 496 break; 497 497 } 498 498 np = of_find_node_by_type(NULL, "8042"); 499 + /* Pegasos has no device_type on its 8042 node, look for the 500 + * name instead */ 501 + if (!np) 502 + np = of_find_node_by_name(NULL, "8042"); 499 503 break; 500 504 case FDC_BASE: /* FDC1 */ 501 505 np = of_find_node_by_type(NULL, "fdc");
+1 -1
arch/powerpc/kernel/udbg.c
··· 155 155 * Called by setup_system after ppc_md->probe and ppc_md->early_init. 156 156 * Call it again after setting udbg_putc in ppc_md->setup_arch. 157 157 */ 158 - void register_early_udbg_console(void) 158 + void __init register_early_udbg_console(void) 159 159 { 160 160 if (early_console_initialized) 161 161 return;
+2 -2
arch/powerpc/mm/lmb.c
··· 138 138 static long __init lmb_add_region(struct lmb_region *rgn, unsigned long base, 139 139 unsigned long size) 140 140 { 141 - unsigned long i, coalesced = 0; 142 - long adjacent; 141 + unsigned long coalesced = 0; 142 + long adjacent, i; 143 143 144 144 /* First try and coalesce this LMB with another. */ 145 145 for (i=0; i < rgn->cnt; i++) {
+2 -1
arch/powerpc/platforms/cell/spufs/context.c
··· 59 59 INIT_LIST_HEAD(&ctx->aff_list); 60 60 if (gang) 61 61 spu_gang_add_ctx(gang, ctx); 62 - ctx->cpus_allowed = current->cpus_allowed; 62 + 63 + __spu_update_sched_info(ctx); 63 64 spu_set_timeslice(ctx); 64 65 ctx->stats.util_state = SPU_UTIL_IDLE_LOADED; 65 66
+4
arch/powerpc/platforms/cell/spufs/run.c
··· 312 312 spu_acquire(ctx); 313 313 if (ctx->state == SPU_STATE_SAVED) { 314 314 __spu_update_sched_info(ctx); 315 + spu_set_timeslice(ctx); 315 316 316 317 ret = spu_activate(ctx, 0); 317 318 if (ret) { ··· 323 322 /* 324 323 * We have to update the scheduling priority under active_mutex 325 324 * to protect against find_victim(). 325 + * 326 + * No need to update the timeslice ASAP, it will get updated 327 + * once the current one has expired. 326 328 */ 327 329 spu_update_sched_info(ctx); 328 330 }
-4
arch/powerpc/platforms/cell/spufs/sched.c
··· 927 927 INIT_LIST_HEAD(&spu_prio->runq[i]); 928 928 __clear_bit(i, spu_prio->bitmap); 929 929 } 930 - for (i = 0; i < MAX_NUMNODES; i++) { 931 - mutex_init(&cbe_spu_info[i].list_mutex); 932 - INIT_LIST_HEAD(&cbe_spu_info[i].spus); 933 - } 934 930 spin_lock_init(&spu_prio->runq_lock); 935 931 936 932 setup_timer(&spusched_timer, spusched_wake, 0);
+1 -1
arch/powerpc/platforms/iseries/lpevents.c
··· 182 182 } 183 183 __setup("spread_lpevents=", set_spread_lpevents); 184 184 185 - void setup_hvlpevent_queue(void) 185 + void __init setup_hvlpevent_queue(void) 186 186 { 187 187 void *eventStack; 188 188
+3
arch/powerpc/platforms/maple/pci.c
··· 490 490 /* Fixup "bus-range" OF property */ 491 491 fixup_bus_range(dev); 492 492 493 + /* Check for legacy IOs */ 494 + isa_bridge_find_early(hose); 495 + 493 496 return 0; 494 497 } 495 498
+2 -2
arch/powerpc/sysdev/fsl_pci.c
··· 107 107 } 108 108 } 109 109 110 - static void __devinit quirk_fsl_pcie_transparent(struct pci_dev *dev) 110 + static void __init quirk_fsl_pcie_transparent(struct pci_dev *dev) 111 111 { 112 112 struct resource *res; 113 113 int i, res_idx = PCI_BRIDGE_RESOURCES; ··· 216 216 217 217 /* check PCI express link status */ 218 218 if (early_find_capability(hose, 0, 0, PCI_CAP_ID_EXP)) { 219 - hose->indirect_type = PPC_INDIRECT_TYPE_EXT_REG | 219 + hose->indirect_type |= PPC_INDIRECT_TYPE_EXT_REG | 220 220 PPC_INDIRECT_TYPE_SURPRESS_PRIMARY_BUS; 221 221 if (fsl_pcie_check_link(hose)) 222 222 hose->indirect_type |= PPC_INDIRECT_TYPE_NO_PCIE_LINK;
+61
arch/powerpc/sysdev/fsl_soc.c
··· 305 305 306 306 arch_initcall(gfar_of_init); 307 307 308 + #ifdef CONFIG_I2C_BOARDINFO 309 + #include <linux/i2c.h> 310 + struct i2c_driver_device { 311 + char *of_device; 312 + char *i2c_driver; 313 + char *i2c_type; 314 + }; 315 + 316 + static struct i2c_driver_device i2c_devices[] __initdata = { 317 + {"ricoh,rs5c372a", "rtc-rs5c372", "rs5c372a",}, 318 + {"ricoh,rs5c372b", "rtc-rs5c372", "rs5c372b",}, 319 + {"ricoh,rv5c386", "rtc-rs5c372", "rv5c386",}, 320 + {"ricoh,rv5c387a", "rtc-rs5c372", "rv5c387a",}, 321 + }; 322 + 323 + static int __init of_find_i2c_driver(struct device_node *node, struct i2c_board_info *info) 324 + { 325 + int i; 326 + 327 + for (i = 0; i < ARRAY_SIZE(i2c_devices); i++) { 328 + if (!of_device_is_compatible(node, i2c_devices[i].of_device)) 329 + continue; 330 + strncpy(info->driver_name, i2c_devices[i].i2c_driver, KOBJ_NAME_LEN); 331 + strncpy(info->type, i2c_devices[i].i2c_type, I2C_NAME_SIZE); 332 + return 0; 333 + } 334 + return -ENODEV; 335 + } 336 + 337 + static void __init of_register_i2c_devices(struct device_node *adap_node, int bus_num) 338 + { 339 + struct device_node *node = NULL; 340 + 341 + while ((node = of_get_next_child(adap_node, node))) { 342 + struct i2c_board_info info; 343 + const u32 *addr; 344 + int len; 345 + 346 + addr = of_get_property(node, "reg", &len); 347 + if (!addr || len < sizeof(int) || *addr > (1 << 10) - 1) { 348 + printk(KERN_WARNING "fsl_ioc.c: invalid i2c device entry\n"); 349 + continue; 350 + } 351 + 352 + info.irq = irq_of_parse_and_map(node, 0); 353 + if (info.irq == NO_IRQ) 354 + info.irq = -1; 355 + 356 + if (of_find_i2c_driver(node, &info) < 0) 357 + continue; 358 + 359 + info.platform_data = NULL; 360 + info.addr = *addr; 361 + 362 + i2c_register_board_info(bus_num, &info, 1); 363 + } 364 + } 365 + 308 366 static int __init fsl_i2c_of_init(void) 309 367 { 310 368 struct device_node *np; ··· 407 349 fsl_i2c_platform_data)); 408 350 if (ret) 409 351 goto unreg; 352 + 353 + of_register_i2c_devices(np, i); 410 354 } 411 355 412 356 return 0; ··· 420 360 } 421 361 422 362 arch_initcall(fsl_i2c_of_init); 363 + #endif 423 364 424 365 #ifdef CONFIG_PPC_83xx 425 366 static int __init mpc83xx_wdt_init(void)
+1
arch/powerpc/sysdev/indirect_pci.c
··· 160 160 mbase = ioremap(cfg_data & PAGE_MASK, PAGE_SIZE); 161 161 hose->cfg_data = mbase + (cfg_data & ~PAGE_MASK); 162 162 hose->ops = &indirect_pci_ops; 163 + hose->indirect_type = flags; 163 164 }
+20
include/asm-powerpc/pci-bridge.h
··· 71 71 return bus->sysdata; 72 72 } 73 73 74 + static inline int isa_vaddr_is_ioport(void __iomem *address) 75 + { 76 + /* No specific ISA handling on ppc32 at this stage, it 77 + * all goes through PCI 78 + */ 79 + return 0; 80 + } 81 + 74 82 /* These are used for config access before all the PCI probing 75 83 has been done. */ 76 84 int early_read_config_byte(struct pci_controller *hose, int bus, int dev_fn, ··· 249 241 250 242 extern void isa_bridge_find_early(struct pci_controller *hose); 251 243 244 + static inline int isa_vaddr_is_ioport(void __iomem *address) 245 + { 246 + /* Check if address hits the reserved legacy IO range */ 247 + unsigned long ea = (unsigned long)address; 248 + return ea >= ISA_IO_BASE && ea < ISA_IO_END; 249 + } 250 + 252 251 extern int pcibios_unmap_io_space(struct pci_bus *bus); 253 252 extern int pcibios_map_io_space(struct pci_bus *bus); 254 253 ··· 286 271 pcibios_alloc_controller(struct device_node *dev); 287 272 #ifdef CONFIG_PCI 288 273 extern unsigned long pci_address_to_pio(phys_addr_t address); 274 + extern int pcibios_vaddr_is_ioport(void __iomem *address); 289 275 #else 290 276 static inline unsigned long pci_address_to_pio(phys_addr_t address) 291 277 { 292 278 return (unsigned long)-1; 279 + } 280 + static inline int pcibios_vaddr_is_ioport(void __iomem *address) 281 + { 282 + return 0; 293 283 } 294 284 #endif 295 285
+12
include/asm-powerpc/ppc_asm.h
··· 181 181 .type GLUE(.,name),@function; \ 182 182 GLUE(.,name): 183 183 184 + #define _INIT_STATIC(name) \ 185 + .section ".text.init.refok"; \ 186 + .align 2 ; \ 187 + .section ".opd","aw"; \ 188 + name: \ 189 + .quad GLUE(.,name); \ 190 + .quad .TOC.@tocbase; \ 191 + .quad 0; \ 192 + .previous; \ 193 + .type GLUE(.,name),@function; \ 194 + GLUE(.,name): 195 + 184 196 #else /* 32-bit */ 185 197 186 198 #define _GLOBAL(n) \
+5
include/asm-powerpc/vio.h
··· 80 80 extern struct vio_dev *vio_find_node(struct device_node *vnode); 81 81 extern int vio_enable_interrupts(struct vio_dev *dev); 82 82 extern int vio_disable_interrupts(struct vio_dev *dev); 83 + #else 84 + static inline int vio_enable_interrupts(struct vio_dev *dev) 85 + { 86 + return 0; 87 + } 83 88 #endif 84 89 85 90 static inline struct vio_driver *to_vio_driver(struct device_driver *drv)