static int __init ide_generic_init(void) { struct ide_hw hw, *hws[] = { &hw }; unsigned long io_addr; int i, rc = 0, primary = 0, secondary = 0; ide_generic_check_pci_legacy_iobases(&primary, &secondary); if (!probe_mask) { printk(KERN_INFO DRV_NAME ": please use \"probe_mask=0x3f\" " "module parameter for probing all legacy ISA IDE ports\n"); if (primary == 0) probe_mask |= 0x1; if (secondary == 0) probe_mask |= 0x2; } else printk(KERN_INFO DRV_NAME ": enforcing probing of I/O ports " "upon user request\n"); for (i = 0; i < ARRAY_SIZE(legacy_bases); i++) { io_addr = legacy_bases[i]; if ((probe_mask & (1 << i)) && io_addr) { if (!request_region(io_addr, 8, DRV_NAME)) { printk(KERN_ERR "%s: I/O resource 0x%lX-0x%lX " "not free.\n", DRV_NAME, io_addr, io_addr + 7); rc = -EBUSY; continue; } if (!request_region(io_addr + 0x206, 1, DRV_NAME)) { printk(KERN_ERR "%s: I/O resource 0x%lX " "not free.\n", DRV_NAME, io_addr + 0x206); release_region(io_addr, 8); rc = -EBUSY; continue; } memset(&hw, 0, sizeof(hw)); ide_std_init_ports(&hw, io_addr, io_addr + 0x206); #ifdef CONFIG_IA64 hw.irq = isa_irq_to_vector(legacy_irqs[i]); #else hw.irq = legacy_irqs[i]; #endif rc = ide_host_add(&ide_generic_port_info, hws, 1, NULL); if (rc) { release_region(io_addr + 0x206, 1); release_region(io_addr, 8); } } } return rc; }
int acpi_irq_to_vector (u32 gsi) { if (has_8259 && gsi < 16) return isa_irq_to_vector(gsi); return gsi_to_vector(gsi); }
unsigned int acpi_register_gsi (u32 gsi, int edge_level, int active_high_low) { if (has_8259 && gsi < 16) return isa_irq_to_vector(gsi); return iosapic_register_intr(gsi, (active_high_low == ACPI_ACTIVE_HIGH) ? IOSAPIC_POL_HIGH : IOSAPIC_POL_LOW, (edge_level == ACPI_EDGE_SENSITIVE) ? IOSAPIC_EDGE : IOSAPIC_LEVEL); }
int acpi_register_irq (u32 gsi, u32 polarity, u32 trigger) { if (has_8259 && gsi < 16) return isa_irq_to_vector(gsi); return iosapic_register_intr(gsi, (polarity == ACPI_ACTIVE_HIGH) ? IOSAPIC_POL_HIGH : IOSAPIC_POL_LOW, (trigger == ACPI_EDGE_SENSITIVE) ? IOSAPIC_EDGE : IOSAPIC_LEVEL); }
acpi_status acpi_os_remove_interrupt_handler(u32 irq, OSD_HANDLER handler) { if (acpi_irq_handler) { #ifdef _IA64 irq = isa_irq_to_vector(irq); #endif /*_IA64*/ free_irq(irq, acpi_irq); acpi_irq_handler = NULL; } return AE_OK; }
int acpi_gsi_to_irq(u32 gsi, unsigned int *irq) { int tmp; if (has_8259 && gsi < 16) *irq = isa_irq_to_vector(gsi); else { tmp = gsi_to_irq(gsi); if (tmp == -1) return -1; *irq = tmp; } return 0; }
int acpi_gsi_to_irq(u32 gsi, unsigned int *irq) { int vector; if (has_8259 && gsi < 16) *irq = isa_irq_to_vector(gsi); else { vector = gsi_to_vector(gsi); if (vector == -1) return -1; *irq = vector; } return 0; }
/* * success: return IRQ number (>=0) * failure: return < 0 */ int acpi_register_gsi(u32 gsi, int triggering, int polarity) { if (acpi_irq_model == ACPI_IRQ_MODEL_PLATFORM) return gsi; if (has_8259 && gsi < 16) return isa_irq_to_vector(gsi); return iosapic_register_intr(gsi, (polarity == ACPI_ACTIVE_HIGH) ? IOSAPIC_POL_HIGH : IOSAPIC_POL_LOW, (triggering == ACPI_EDGE_SENSITIVE) ? IOSAPIC_EDGE : IOSAPIC_LEVEL); }
acpi_status acpi_os_install_interrupt_handler(u32 irq, OSD_HANDLER handler, void *context) { #ifdef _IA64 irq = isa_irq_to_vector(irq); #endif /*_IA64*/ acpi_irq_irq = irq; acpi_irq_handler = handler; acpi_irq_context = context; if (request_irq(irq, acpi_irq, SA_SHIRQ, "acpi", acpi_irq)) { printk(KERN_ERR "ACPI: SCI (IRQ%d) allocation failed\n", irq); return AE_ERROR; } return AE_OK; }