Lines Matching refs:pin
71 #define for_each_pin(idx, pin) \ argument
72 for ((pin) = 0; (pin) < ioapics[(idx)].nr_registers; (pin)++)
73 #define for_each_ioapic_pin(idx, pin) \ argument
75 for_each_pin((idx), (pin))
86 int apic, pin; member
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()
305 static struct IO_APIC_route_entry __ioapic_read_entry(int apic, int pin) in __ioapic_read_entry() argument
309 eu.w1 = io_apic_read(apic, 0x10 + 2 * pin); in __ioapic_read_entry()
310 eu.w2 = io_apic_read(apic, 0x11 + 2 * pin); in __ioapic_read_entry()
315 static struct IO_APIC_route_entry ioapic_read_entry(int apic, int pin) in ioapic_read_entry() argument
321 eu.entry = __ioapic_read_entry(apic, pin); in ioapic_read_entry()
333 static void __ioapic_write_entry(int apic, int pin, struct IO_APIC_route_entry e) in __ioapic_write_entry() argument
338 io_apic_write(apic, 0x11 + 2*pin, eu.w2); in __ioapic_write_entry()
339 io_apic_write(apic, 0x10 + 2*pin, eu.w1); in __ioapic_write_entry()
342 static void ioapic_write_entry(int apic, int pin, struct IO_APIC_route_entry e) in ioapic_write_entry() argument
347 __ioapic_write_entry(apic, pin, e); in ioapic_write_entry()
356 static void ioapic_mask_entry(int apic, int pin) in ioapic_mask_entry() argument
362 io_apic_write(apic, 0x10 + 2*pin, eu.w1); in ioapic_mask_entry()
363 io_apic_write(apic, 0x11 + 2*pin, eu.w2); in ioapic_mask_entry()
373 int node, int apic, int pin) in __add_pin_to_irq_node() argument
379 if (entry->apic == apic && entry->pin == pin) in __add_pin_to_irq_node()
385 node, apic, pin); in __add_pin_to_irq_node()
389 entry->pin = pin; in __add_pin_to_irq_node()
395 static void __remove_pin_from_irq(struct mp_chip_data *data, int apic, int pin) in __remove_pin_from_irq() argument
400 if (entry->apic == apic && entry->pin == pin) { in __remove_pin_from_irq()
408 int node, int apic, int pin) in add_pin_to_irq_node() argument
410 if (__add_pin_to_irq_node(data, node, apic, pin)) in add_pin_to_irq_node()
424 if (entry->apic == oldapic && entry->pin == oldpin) { in replace_pin_at_irq_node()
426 entry->pin = newpin; in replace_pin_at_irq_node()
449 io_apic_write(entry->apic, 0x10 + 2 * entry->pin, eu.w1); in io_apic_modify_irq()
508 static void __eoi_ioapic_pin(int apic, int pin, int vector) in __eoi_ioapic_pin() argument
515 entry = entry1 = __ioapic_read_entry(apic, pin); in __eoi_ioapic_pin()
523 __ioapic_write_entry(apic, pin, entry1); in __eoi_ioapic_pin()
528 __ioapic_write_entry(apic, pin, entry); in __eoi_ioapic_pin()
539 __eoi_ioapic_pin(entry->apic, entry->pin, vector); in eoi_ioapic_pin()
543 static void clear_IO_APIC_pin(unsigned int apic, unsigned int pin) in clear_IO_APIC_pin() argument
548 entry = ioapic_read_entry(apic, pin); in clear_IO_APIC_pin()
558 ioapic_write_entry(apic, pin, entry); in clear_IO_APIC_pin()
559 entry = ioapic_read_entry(apic, pin); in clear_IO_APIC_pin()
572 ioapic_write_entry(apic, pin, entry); in clear_IO_APIC_pin()
575 __eoi_ioapic_pin(apic, pin, entry.vector); in clear_IO_APIC_pin()
583 ioapic_mask_entry(apic, pin); in clear_IO_APIC_pin()
584 entry = ioapic_read_entry(apic, pin); in clear_IO_APIC_pin()
587 mpc_ioapic_id(apic), pin); in clear_IO_APIC_pin()
592 int apic, pin; in clear_IO_APIC() local
594 for_each_ioapic_pin(apic, pin) in clear_IO_APIC()
595 clear_IO_APIC_pin(apic, pin); in clear_IO_APIC()
641 int apic, pin; in save_ioapic_entries() local
650 for_each_pin(apic, pin) in save_ioapic_entries()
651 ioapics[apic].saved_registers[pin] = in save_ioapic_entries()
652 ioapic_read_entry(apic, pin); in save_ioapic_entries()
663 int apic, pin; in mask_ioapic_entries() local
669 for_each_pin(apic, pin) { in mask_ioapic_entries()
672 entry = ioapics[apic].saved_registers[pin]; in mask_ioapic_entries()
675 ioapic_write_entry(apic, pin, entry); in mask_ioapic_entries()
686 int apic, pin; in restore_ioapic_entries() local
692 for_each_pin(apic, pin) in restore_ioapic_entries()
693 ioapic_write_entry(apic, pin, in restore_ioapic_entries()
694 ioapics[apic].saved_registers[pin]); in restore_ioapic_entries()
702 static int find_irq_entry(int ioapic_idx, int pin, int type) in find_irq_entry() argument
710 mp_irqs[i].dstirq == pin) in find_irq_entry()
884 u32 gsi, int ioapic_idx, int pin) in ioapic_copy_alloc_attr() argument
891 dst->ioapic_pin = pin; in ioapic_copy_alloc_attr()
998 int irq, int ioapic, int pin, in alloc_isa_irq_from_domain() argument
1028 static int mp_map_pin_to_irq(u32 gsi, int idx, int ioapic, int pin, in mp_map_pin_to_irq() argument
1048 irq = irq_find_mapping(domain, pin); 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()
1057 else if ((irq = irq_find_mapping(domain, pin)) == 0) 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()
1078 if (mp_irqs[idx].dstirq != pin) in pin_2_irq()
1085 if ((pin >= 16) && (pin <= 23)) { in pin_2_irq()
1086 if (pirq_entries[pin-16] != -1) { in pin_2_irq()
1087 if (!pirq_entries[pin-16]) { in pin_2_irq()
1089 "disabling PIRQ%d\n", pin-16); in pin_2_irq()
1091 int irq = pirq_entries[pin-16]; in pin_2_irq()
1094 pin-16, irq); 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
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()
1142 int IO_APIC_get_PCI_irq_vector(int bus, int slot, int pin) in IO_APIC_get_PCI_irq_vector() argument
1148 bus, slot, pin); in IO_APIC_get_PCI_irq_vector()
1177 if (pin == (mp_irqs[i].srcbusirq & 3)) { in IO_APIC_get_PCI_irq_vector()
1206 int apic, idx, pin; in IO_APIC_irq_trigger() local
1208 for_each_ioapic_pin(apic, pin) { in IO_APIC_irq_trigger()
1209 idx = find_irq_entry(apic, pin, mp_INT); in IO_APIC_irq_trigger()
1210 if ((idx != -1) && (irq == pin_2_irq(idx, apic, pin, 0))) in IO_APIC_irq_trigger()
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()
1372 pr_cont("-> %d:%d", entry->apic, entry->pin); in print_IO_APICs()
1380 static struct { int pin, apic; } ioapic_i8259 = { -1, -1 }; member
1385 int apic, pin; in enable_IO_APIC() local
1393 for_each_ioapic_pin(apic, pin) { in enable_IO_APIC()
1395 struct IO_APIC_route_entry entry = ioapic_read_entry(apic, pin); in enable_IO_APIC()
1402 ioapic_i8259.pin = pin; in enable_IO_APIC()
1415 if ((ioapic_i8259.pin == -1) && (i8259_pin >= 0)) { in enable_IO_APIC()
1417 ioapic_i8259.pin = i8259_pin; in enable_IO_APIC()
1421 if (((ioapic_i8259.apic != i8259_apic) || (ioapic_i8259.pin != i8259_pin)) && in enable_IO_APIC()
1422 (i8259_pin >= 0) && (ioapic_i8259.pin >= 0)) in enable_IO_APIC()
1440 if (ioapic_i8259.pin != -1) { in native_disable_io_apic()
1454 ioapic_write_entry(ioapic_i8259.apic, ioapic_i8259.pin, entry); in native_disable_io_apic()
1458 disconnect_bsp_APIC(ioapic_i8259.pin != -1); in native_disable_io_apic()
1696 int pin; in io_apic_level_ack_pending() local
1698 pin = entry->pin; in io_apic_level_ack_pending()
1699 reg = io_apic_read(entry->apic, 0x10 + pin*2); in io_apic_level_ack_pending()
1862 __ioapic_write_entry(entry->apic, entry->pin, in ioapic_set_affinity()
1962 int apic, pin, i; in unlock_ExtINT_logic() local
1966 pin = find_isa_irq_pin(8, mp_INT); in unlock_ExtINT_logic()
1967 if (pin == -1) { in unlock_ExtINT_logic()
1977 entry0 = ioapic_read_entry(apic, pin); in unlock_ExtINT_logic()
1978 clear_IO_APIC_pin(apic, pin); in unlock_ExtINT_logic()
1990 ioapic_write_entry(apic, pin, entry1); in unlock_ExtINT_logic()
2007 clear_IO_APIC_pin(apic, pin); in unlock_ExtINT_logic()
2009 ioapic_write_entry(apic, pin, entry0); in unlock_ExtINT_logic()
2021 static int mp_alloc_timer_irq(int ioapic, int pin) in mp_alloc_timer_irq() argument
2031 info.ioapic_pin = pin; in mp_alloc_timer_irq()
2033 irq = alloc_isa_irq_from_domain(domain, 0, ioapic, pin, &info); in mp_alloc_timer_irq()
2079 pin2 = ioapic_i8259.pin; in check_timer()
2492 int ioapic, pin, idx; in acpi_get_override_irq() local
2501 pin = mp_find_ioapic_pin(ioapic, gsi); in acpi_get_override_irq()
2502 if (pin < 0) 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()
2823 int ioapic, pin; in mp_unregister_ioapic() local
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()
2911 int ret, ioapic, pin; in mp_irqdomain_alloc() local
2925 pin = info->ioapic_pin; in mp_irqdomain_alloc()
2926 if (irq_find_mapping(domain, (irq_hw_number_t)pin) > 0) 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()
2993 __ioapic_write_entry(entry->apic, entry->pin, data->entry); in mp_irqdomain_activate()