Lines Matching refs:ioapic

105 static struct ioapic {  struct
140 static inline int mp_ioapic_pin_count(int ioapic) in mp_ioapic_pin_count() argument
142 struct mp_ioapic_gsi *gsi_cfg = mp_ioapic_gsi_routing(ioapic); in mp_ioapic_pin_count()
147 static inline u32 mp_pin_to_gsi(int ioapic, int pin) in mp_pin_to_gsi() argument
149 return mp_ioapic_gsi_routing(ioapic)->gsi_base + pin; in mp_pin_to_gsi()
157 static inline struct irq_domain *mp_ioapic_irqdomain(int ioapic) in mp_ioapic_irqdomain() argument
159 return ioapics[ioapic].irqdomain; in mp_ioapic_irqdomain()
863 info->ioapic.node = node; in ioapic_set_alloc_attr()
864 info->ioapic.trigger = trigger; in ioapic_set_alloc_attr()
865 info->ioapic.polarity = polarity; in ioapic_set_alloc_attr()
866 info->ioapic.valid = 1; in ioapic_set_alloc_attr()
882 dst->ioapic.pin = pin; in ioapic_copy_alloc_attr()
883 dst->ioapic.valid = 1; in ioapic_copy_alloc_attr()
884 if (src && src->ioapic.valid) { in ioapic_copy_alloc_attr()
885 dst->ioapic.node = src->ioapic.node; in ioapic_copy_alloc_attr()
886 dst->ioapic.trigger = src->ioapic.trigger; in ioapic_copy_alloc_attr()
887 dst->ioapic.polarity = src->ioapic.polarity; in ioapic_copy_alloc_attr()
889 dst->ioapic.node = NUMA_NO_NODE; in ioapic_copy_alloc_attr()
891 dst->ioapic.trigger = trigger; in ioapic_copy_alloc_attr()
892 dst->ioapic.polarity = polarity; in ioapic_copy_alloc_attr()
898 dst->ioapic.trigger = IOAPIC_LEVEL; in ioapic_copy_alloc_attr()
899 dst->ioapic.polarity = IOAPIC_POL_LOW; in ioapic_copy_alloc_attr()
906 return (info && info->ioapic.valid) ? info->ioapic.node : NUMA_NO_NODE; in ioapic_alloc_attr_node()
936 if (info->ioapic.trigger != data->trigger) in mp_check_pin_attr()
937 mp_register_handler(irq, info->ioapic.trigger); in mp_check_pin_attr()
938 data->entry.trigger = data->trigger = info->ioapic.trigger; in mp_check_pin_attr()
939 data->entry.polarity = data->polarity = info->ioapic.polarity; in mp_check_pin_attr()
942 return data->trigger == info->ioapic.trigger && in mp_check_pin_attr()
943 data->polarity == info->ioapic.polarity; in mp_check_pin_attr()
946 static int alloc_irq_from_domain(struct irq_domain *domain, int ioapic, u32 gsi, in alloc_irq_from_domain() argument
951 int type = ioapics[ioapic].irqdomain_cfg.type; in alloc_irq_from_domain()
989 int irq, int ioapic, int pin, in alloc_isa_irq_from_domain() argument
1004 if (__add_pin_to_irq_node(irq_data->chip_data, node, ioapic, in alloc_isa_irq_from_domain()
1005 info->ioapic.pin)) in alloc_isa_irq_from_domain()
1021 static int mp_map_pin_to_irq(u32 gsi, int idx, int ioapic, int pin, in mp_map_pin_to_irq() argument
1028 struct irq_domain *domain = mp_ioapic_irqdomain(ioapic); in mp_map_pin_to_irq()
1046 ioapic_copy_alloc_attr(&tmp, info, gsi, ioapic, pin); in mp_map_pin_to_irq()
1049 ioapic, pin, &tmp); in mp_map_pin_to_irq()
1051 irq = alloc_irq_from_domain(domain, ioapic, gsi, &tmp); in mp_map_pin_to_irq()
1064 static int pin_2_irq(int idx, int ioapic, int pin, unsigned int flags) in pin_2_irq() argument
1066 u32 gsi = mp_pin_to_gsi(ioapic, pin); in pin_2_irq()
1094 return mp_map_pin_to_irq(gsi, idx, ioapic, pin, flags, NULL); in pin_2_irq()
1099 int ioapic, pin, idx; in mp_map_gsi_to_irq() local
1101 ioapic = mp_find_ioapic(gsi); in mp_map_gsi_to_irq()
1102 if (ioapic < 0) in mp_map_gsi_to_irq()
1105 pin = mp_find_ioapic_pin(ioapic, gsi); in mp_map_gsi_to_irq()
1106 idx = find_irq_entry(ioapic, pin, mp_INT); in mp_map_gsi_to_irq()
1110 return mp_map_pin_to_irq(gsi, idx, ioapic, pin, flags, info); in mp_map_gsi_to_irq()
1198 unsigned int ioapic, pin; in setup_IO_APIC_irqs() local
1203 for_each_ioapic_pin(ioapic, pin) { in setup_IO_APIC_irqs()
1204 idx = find_irq_entry(ioapic, pin, mp_INT); in setup_IO_APIC_irqs()
1208 mpc_ioapic_id(ioapic), pin); in setup_IO_APIC_irqs()
1210 pin_2_irq(idx, ioapic, pin, in setup_IO_APIC_irqs()
1211 ioapic ? 0 : IOAPIC_MAP_ALLOC); in setup_IO_APIC_irqs()
2086 static int mp_alloc_timer_irq(int ioapic, int pin) in mp_alloc_timer_irq() argument
2089 struct irq_domain *domain = mp_ioapic_irqdomain(ioapic); in mp_alloc_timer_irq()
2095 info.devid = mpc_ioapic_id(ioapic); in mp_alloc_timer_irq()
2096 info.ioapic.pin = pin; in mp_alloc_timer_irq()
2098 irq = alloc_isa_irq_from_domain(domain, 0, ioapic, pin, &info); in mp_alloc_timer_irq()
2285 static int mp_irqdomain_create(int ioapic) in mp_irqdomain_create() argument
2289 int hwirqs = mp_ioapic_pin_count(ioapic); in mp_irqdomain_create()
2290 struct ioapic *ip = &ioapics[ioapic]; in mp_irqdomain_create()
2292 struct mp_ioapic_gsi *gsi_cfg = mp_ioapic_gsi_routing(ioapic); in mp_irqdomain_create()
2301 info.devid = mpc_ioapic_id(ioapic); in mp_irqdomain_create()
2312 fn = irq_domain_alloc_named_id_fwnode(name, ioapic); in mp_irqdomain_create()
2318 (void *)(long)ioapic); in mp_irqdomain_create()
2352 int ioapic; in setup_IO_APIC() local
2360 for_each_ioapic(ioapic) in setup_IO_APIC()
2361 BUG_ON(mp_irqdomain_create(ioapic)); in setup_IO_APIC()
2415 static int io_apic_get_redir_entries(int ioapic) in io_apic_get_redir_entries() argument
2421 reg_01.raw = io_apic_read(ioapic, 1); in io_apic_get_redir_entries()
2447 static int io_apic_get_unique_id(int ioapic, int apic_id) in io_apic_get_unique_id() argument
2468 reg_00.raw = io_apic_read(ioapic, 0); in io_apic_get_unique_id()
2473 "%d\n", ioapic, apic_id, reg_00.bits.ID); in io_apic_get_unique_id()
2492 "trying %d\n", ioapic, apic_id, i); in io_apic_get_unique_id()
2504 io_apic_write(ioapic, 0, reg_00.raw); in io_apic_get_unique_id()
2505 reg_00.raw = io_apic_read(ioapic, 0); in io_apic_get_unique_id()
2511 ioapic); in io_apic_get_unique_id()
2517 "IOAPIC[%d]: Assigned apic_id %d\n", ioapic, apic_id); in io_apic_get_unique_id()
2578 static int io_apic_get_version(int ioapic) in io_apic_get_version() argument
2584 reg_01.raw = io_apic_read(ioapic, 1); in io_apic_get_version()
2592 int ioapic, pin, idx; in acpi_get_override_irq() local
2597 ioapic = mp_find_ioapic(gsi); in acpi_get_override_irq()
2598 if (ioapic < 0) in acpi_get_override_irq()
2601 pin = mp_find_ioapic_pin(ioapic, gsi); in acpi_get_override_irq()
2605 idx = find_irq_entry(ioapic, pin, mp_INT); in acpi_get_override_irq()
2735 int mp_find_ioapic_pin(int ioapic, u32 gsi) in mp_find_ioapic_pin() argument
2739 if (WARN_ON(ioapic < 0)) in mp_find_ioapic_pin()
2742 gsi_cfg = mp_ioapic_gsi_routing(ioapic); in mp_find_ioapic_pin()
2791 int idx, ioapic, entries; in mp_register_ioapic() local
2798 for_each_ioapic(ioapic) in mp_register_ioapic()
2799 if (ioapics[ioapic].mp_config.apicaddr == address) { in mp_register_ioapic()
2801 address, ioapic); in mp_register_ioapic()
2831 for_each_ioapic(ioapic) { in mp_register_ioapic()
2832 gsi_cfg = mp_ioapic_gsi_routing(ioapic); in mp_register_ioapic()
2882 int ioapic, pin; in mp_unregister_ioapic() local
2885 for_each_ioapic(ioapic) in mp_unregister_ioapic()
2886 if (ioapics[ioapic].gsi_config.gsi_base == gsi_base) { in mp_unregister_ioapic()
2895 for_each_pin(ioapic, pin) { in mp_unregister_ioapic()
2896 u32 gsi = mp_pin_to_gsi(ioapic, pin); in mp_unregister_ioapic()
2904 pin, ioapic); in mp_unregister_ioapic()
2911 ioapics[ioapic].nr_registers = 0; in mp_unregister_ioapic()
2912 ioapic_destroy_irqdomain(ioapic); in mp_unregister_ioapic()
2913 free_ioapic_saved_registers(ioapic); in mp_unregister_ioapic()
2914 if (ioapics[ioapic].iomem_res) in mp_unregister_ioapic()
2915 release_resource(ioapics[ioapic].iomem_res); in mp_unregister_ioapic()
2916 clear_fixmap(FIX_IO_APIC_BASE_0 + ioapic); in mp_unregister_ioapic()
2917 memset(&ioapics[ioapic], 0, sizeof(ioapics[ioapic])); in mp_unregister_ioapic()
2924 int ioapic; in mp_ioapic_registered() local
2926 for_each_ioapic(ioapic) in mp_ioapic_registered()
2927 if (ioapics[ioapic].gsi_config.gsi_base == gsi_base) in mp_ioapic_registered()
2936 if (info && info->ioapic.valid) { in mp_irqdomain_get_attr()
2937 data->trigger = info->ioapic.trigger; in mp_irqdomain_get_attr()
2938 data->polarity = info->ioapic.polarity; in mp_irqdomain_get_attr()
2970 int ret, ioapic, pin; in mp_irqdomain_alloc() local
2983 ioapic = mp_irqdomain_ioapic_idx(domain); in mp_irqdomain_alloc()
2984 pin = info->ioapic.pin; in mp_irqdomain_alloc()
2992 info->ioapic.entry = &data->entry; in mp_irqdomain_alloc()
3000 irq_data->hwirq = info->ioapic.pin; in mp_irqdomain_alloc()
3004 mp_irqdomain_get_attr(mp_pin_to_gsi(ioapic, pin), data, info); in mp_irqdomain_alloc()
3007 add_pin_to_irq_node(data, ioapic_alloc_attr_node(info), ioapic, pin); in mp_irqdomain_alloc()
3010 if (info->ioapic.entry) in mp_irqdomain_alloc()
3011 mp_setup_entry(cfg, data, info->ioapic.entry); in mp_irqdomain_alloc()
3019 ioapic, mpc_ioapic_id(ioapic), pin, cfg->vector, in mp_irqdomain_alloc()