Lines Matching refs:ioapic
103 static struct ioapic { struct
138 static inline int mp_ioapic_pin_count(int ioapic) in mp_ioapic_pin_count() argument
140 struct mp_ioapic_gsi *gsi_cfg = mp_ioapic_gsi_routing(ioapic); in mp_ioapic_pin_count()
145 static inline u32 mp_pin_to_gsi(int ioapic, int pin) in mp_pin_to_gsi() argument
147 return mp_ioapic_gsi_routing(ioapic)->gsi_base + pin; in mp_pin_to_gsi()
160 static inline int mp_init_irq_at_boot(int ioapic, int irq) in mp_init_irq_at_boot() argument
165 return ioapic == 0 || mp_is_legacy_irq(irq); in mp_init_irq_at_boot()
168 static inline struct irq_domain *mp_ioapic_irqdomain(int ioapic) in mp_ioapic_irqdomain() argument
170 return ioapics[ioapic].irqdomain; in mp_ioapic_irqdomain()
955 static int alloc_irq_from_domain(struct irq_domain *domain, int ioapic, u32 gsi, in alloc_irq_from_domain() argument
960 int type = ioapics[ioapic].irqdomain_cfg.type; in alloc_irq_from_domain()
998 int irq, int ioapic, int pin, in alloc_isa_irq_from_domain() argument
1013 if (__add_pin_to_irq_node(irq_data->chip_data, node, ioapic, in alloc_isa_irq_from_domain()
1028 static int mp_map_pin_to_irq(u32 gsi, int idx, int ioapic, int pin, in mp_map_pin_to_irq() argument
1035 struct irq_domain *domain = mp_ioapic_irqdomain(ioapic); in mp_map_pin_to_irq()
1053 ioapic_copy_alloc_attr(&tmp, info, gsi, ioapic, pin); in mp_map_pin_to_irq()
1056 ioapic, pin, &tmp); in mp_map_pin_to_irq()
1058 irq = alloc_irq_from_domain(domain, ioapic, gsi, &tmp); in mp_map_pin_to_irq()
1071 static int pin_2_irq(int idx, int ioapic, int pin, unsigned int flags) in pin_2_irq() argument
1073 u32 gsi = mp_pin_to_gsi(ioapic, pin); in pin_2_irq()
1101 return mp_map_pin_to_irq(gsi, idx, ioapic, pin, flags, NULL); in pin_2_irq()
1106 int ioapic, pin, idx; in mp_map_gsi_to_irq() local
1108 ioapic = mp_find_ioapic(gsi); in mp_map_gsi_to_irq()
1109 if (ioapic < 0) in mp_map_gsi_to_irq()
1112 pin = mp_find_ioapic_pin(ioapic, gsi); in mp_map_gsi_to_irq()
1113 idx = find_irq_entry(ioapic, pin, mp_INT); in mp_map_gsi_to_irq()
1117 return mp_map_pin_to_irq(gsi, idx, ioapic, pin, flags, info); in mp_map_gsi_to_irq()
1227 unsigned int ioapic, pin; in setup_IO_APIC_irqs() local
1232 for_each_ioapic_pin(ioapic, pin) { in setup_IO_APIC_irqs()
1233 idx = find_irq_entry(ioapic, pin, mp_INT); in setup_IO_APIC_irqs()
1237 mpc_ioapic_id(ioapic), pin); in setup_IO_APIC_irqs()
1239 pin_2_irq(idx, ioapic, pin, in setup_IO_APIC_irqs()
1240 ioapic ? 0 : IOAPIC_MAP_ALLOC); in setup_IO_APIC_irqs()
2021 static int mp_alloc_timer_irq(int ioapic, int pin) in mp_alloc_timer_irq() argument
2024 struct irq_domain *domain = mp_ioapic_irqdomain(ioapic); in mp_alloc_timer_irq()
2030 info.ioapic_id = mpc_ioapic_id(ioapic); in mp_alloc_timer_irq()
2033 irq = alloc_isa_irq_from_domain(domain, 0, ioapic, pin, &info); in mp_alloc_timer_irq()
2214 static int mp_irqdomain_create(int ioapic) in mp_irqdomain_create() argument
2218 int hwirqs = mp_ioapic_pin_count(ioapic); in mp_irqdomain_create()
2219 struct ioapic *ip = &ioapics[ioapic]; in mp_irqdomain_create()
2221 struct mp_ioapic_gsi *gsi_cfg = mp_ioapic_gsi_routing(ioapic); in mp_irqdomain_create()
2228 info.ioapic_id = mpc_ioapic_id(ioapic); in mp_irqdomain_create()
2234 (void *)(long)ioapic); in mp_irqdomain_create()
2258 int ioapic; in setup_IO_APIC() local
2266 for_each_ioapic(ioapic) in setup_IO_APIC()
2267 BUG_ON(mp_irqdomain_create(ioapic)); in setup_IO_APIC()
2321 static int io_apic_get_redir_entries(int ioapic) in io_apic_get_redir_entries() argument
2327 reg_01.raw = io_apic_read(ioapic, 1); in io_apic_get_redir_entries()
2347 static int io_apic_get_unique_id(int ioapic, int apic_id) in io_apic_get_unique_id() argument
2368 reg_00.raw = io_apic_read(ioapic, 0); in io_apic_get_unique_id()
2373 "%d\n", ioapic, apic_id, reg_00.bits.ID); in io_apic_get_unique_id()
2392 "trying %d\n", ioapic, apic_id, i); in io_apic_get_unique_id()
2404 io_apic_write(ioapic, 0, reg_00.raw); in io_apic_get_unique_id()
2405 reg_00.raw = io_apic_read(ioapic, 0); in io_apic_get_unique_id()
2411 ioapic); in io_apic_get_unique_id()
2417 "IOAPIC[%d]: Assigned apic_id %d\n", ioapic, apic_id); in io_apic_get_unique_id()
2478 static int io_apic_get_version(int ioapic) in io_apic_get_version() argument
2484 reg_01.raw = io_apic_read(ioapic, 1); in io_apic_get_version()
2492 int ioapic, pin, idx; in acpi_get_override_irq() local
2497 ioapic = mp_find_ioapic(gsi); in acpi_get_override_irq()
2498 if (ioapic < 0) in acpi_get_override_irq()
2501 pin = mp_find_ioapic_pin(ioapic, gsi); in acpi_get_override_irq()
2505 idx = find_irq_entry(ioapic, pin, mp_INT); in acpi_get_override_irq()
2522 int pin, ioapic, irq, irq_entry; in setup_ioapic_dest() local
2531 for_each_ioapic_pin(ioapic, pin) { in setup_ioapic_dest()
2532 irq_entry = find_irq_entry(ioapic, pin, mp_INT); in setup_ioapic_dest()
2536 irq = pin_2_irq(irq_entry, ioapic, pin, 0); in setup_ioapic_dest()
2537 if (irq < 0 || !mp_init_irq_at_boot(ioapic, irq)) in setup_ioapic_dest()
2676 int mp_find_ioapic_pin(int ioapic, u32 gsi) in mp_find_ioapic_pin() argument
2680 if (WARN_ON(ioapic < 0)) in mp_find_ioapic_pin()
2683 gsi_cfg = mp_ioapic_gsi_routing(ioapic); in mp_find_ioapic_pin()
2732 int idx, ioapic, entries; in mp_register_ioapic() local
2739 for_each_ioapic(ioapic) in mp_register_ioapic()
2740 if (ioapics[ioapic].mp_config.apicaddr == address) { in mp_register_ioapic()
2742 address, ioapic); in mp_register_ioapic()
2772 for_each_ioapic(ioapic) { in mp_register_ioapic()
2773 gsi_cfg = mp_ioapic_gsi_routing(ioapic); in mp_register_ioapic()
2823 int ioapic, pin; in mp_unregister_ioapic() local
2826 for_each_ioapic(ioapic) in mp_unregister_ioapic()
2827 if (ioapics[ioapic].gsi_config.gsi_base == gsi_base) { in mp_unregister_ioapic()
2836 for_each_pin(ioapic, pin) { in mp_unregister_ioapic()
2837 u32 gsi = mp_pin_to_gsi(ioapic, pin); in mp_unregister_ioapic()
2845 pin, ioapic); in mp_unregister_ioapic()
2852 ioapics[ioapic].nr_registers = 0; in mp_unregister_ioapic()
2853 ioapic_destroy_irqdomain(ioapic); in mp_unregister_ioapic()
2854 free_ioapic_saved_registers(ioapic); in mp_unregister_ioapic()
2855 if (ioapics[ioapic].iomem_res) in mp_unregister_ioapic()
2856 release_resource(ioapics[ioapic].iomem_res); in mp_unregister_ioapic()
2857 clear_fixmap(FIX_IO_APIC_BASE_0 + ioapic); in mp_unregister_ioapic()
2858 memset(&ioapics[ioapic], 0, sizeof(ioapics[ioapic])); in mp_unregister_ioapic()
2865 int ioapic; in mp_ioapic_registered() local
2867 for_each_ioapic(ioapic) in mp_ioapic_registered()
2868 if (ioapics[ioapic].gsi_config.gsi_base == gsi_base) in mp_ioapic_registered()
2911 int ret, ioapic, pin; in mp_irqdomain_alloc() local
2924 ioapic = mp_irqdomain_ioapic_idx(domain); in mp_irqdomain_alloc()
2945 mp_irqdomain_get_attr(mp_pin_to_gsi(ioapic, pin), data, info); in mp_irqdomain_alloc()
2948 add_pin_to_irq_node(data, ioapic_alloc_attr_node(info), ioapic, pin); in mp_irqdomain_alloc()
2960 ioapic, mpc_ioapic_id(ioapic), pin, cfg->vector, in mp_irqdomain_alloc()