Lines Matching +full:interrupt +full:- +full:affinity
1 /* SPDX-License-Identifier: GPL-2.0 */
10 * Thanks. --rmk
36 * Bits 0-7 are the same as the IRQF_* bits in linux/interrupt.h
38 * IRQ_TYPE_NONE - default, unspecified type
39 * IRQ_TYPE_EDGE_RISING - rising edge triggered
40 * IRQ_TYPE_EDGE_FALLING - falling edge triggered
41 * IRQ_TYPE_EDGE_BOTH - rising and falling edge triggered
42 * IRQ_TYPE_LEVEL_HIGH - high level triggered
43 * IRQ_TYPE_LEVEL_LOW - low level triggered
44 * IRQ_TYPE_LEVEL_MASK - Mask to filter out the level bits
45 * IRQ_TYPE_SENSE_MASK - Mask for all the above bits
46 * IRQ_TYPE_DEFAULT - For use by some PICs to ask irq_set_type
52 * IRQ_TYPE_PROBE - Special flag for probing in progress
55 * IRQ_LEVEL - Interrupt is level type. Will be also
58 * IRQ_PER_CPU - Mark an interrupt PER_CPU. Will protect
59 * it from affinity setting
60 * IRQ_NOPROBE - Interrupt cannot be probed by autoprobing
61 * IRQ_NOREQUEST - Interrupt cannot be requested via
63 * IRQ_NOTHREAD - Interrupt cannot be threaded
64 * IRQ_NOAUTOEN - Interrupt is not automatically enabled in
66 * IRQ_NO_BALANCING - Interrupt cannot be balanced (affinity set)
67 * IRQ_MOVE_PCNTXT - Interrupt can be migrated from process context
68 * IRQ_NESTED_THREAD - Interrupt nests into another thread
69 * IRQ_PER_CPU_DEVID - Dev_id is a per-cpu variable
70 * IRQ_IS_POLLED - Always polled by another interrupt. Exclude
71 * it from the spurious interrupt detection
73 * IRQ_DISABLE_UNLAZY - Disable lazy irq disable
74 * IRQ_HIDDEN - Don't show up in /proc/interrupts
75 * IRQ_RAW - Skip tick management and irqtime accounting
115 * Return value for chip->irq_set_affinity()
117 * IRQ_SET_MASK_OK - OK, core updates irq_common_data.affinity
118 * IRQ_SET_MASK_NOCPY - OK, chip did update irq_common_data.affinity
119 * IRQ_SET_MASK_OK_DONE - Same as IRQ_SET_MASK_OK for core. Special code to
133 * struct irq_common_data - per irq data shared by all irqchips
137 * @handler_data: per-IRQ data for the irq_chip methods
138 * @affinity: IRQ affinity on SMP. If this is an IPI
141 * @effective_affinity: The effective IRQ affinity on SMP as some irq
143 * A subset of @affinity.
145 * @ipi_offset: Offset of first IPI target cpu in @affinity. Optional.
154 cpumask_var_t affinity; member
164 * struct irq_data - per irq chip data passed down to chip functions
166 * @irq: interrupt number
167 * @hwirq: hardware interrupt number, local to the interrupt domain
169 * @chip: low level interrupt hardware access
170 * @domain: Interrupt translation domain; responsible for mapping
174 * @chip_data: platform-specific per-chip private data for the chip
193 * IRQD_TRIGGER_MASK - Mask for the trigger type bits
194 * IRQD_SETAFFINITY_PENDING - Affinity setting is pending
195 * IRQD_ACTIVATED - Interrupt has already been activated
196 * IRQD_NO_BALANCING - Balancing disabled for this IRQ
197 * IRQD_PER_CPU - Interrupt is per cpu
198 * IRQD_AFFINITY_SET - Interrupt affinity was set
199 * IRQD_LEVEL - Interrupt is level triggered
200 * IRQD_WAKEUP_STATE - Interrupt is configured for wakeup
202 * IRQD_MOVE_PCNTXT - Interrupt can be moved in process
204 * IRQD_IRQ_DISABLED - Disabled state of the interrupt
205 * IRQD_IRQ_MASKED - Masked state of the interrupt
206 * IRQD_IRQ_INPROGRESS - In progress state of the interrupt
207 * IRQD_WAKEUP_ARMED - Wakeup mode armed
208 * IRQD_FORWARDED_TO_VCPU - The interrupt is forwarded to a VCPU
209 * IRQD_AFFINITY_MANAGED - Affinity is auto-managed by the kernel
210 * IRQD_IRQ_STARTED - Startup state of the interrupt
211 * IRQD_MANAGED_SHUTDOWN - Interrupt was shutdown due to empty affinity
212 * mask. Applies only to affinity managed irqs.
213 * IRQD_SINGLE_TARGET - IRQ allows only a single affinity target
214 * IRQD_DEFAULT_TRIGGER_SET - Expected trigger already been set
215 * IRQD_CAN_RESERVE - Can use reservation mode
216 * IRQD_MSI_NOMASK_QUIRK - Non-maskable MSI quirk for affinity change
218 * IRQD_HANDLE_ENFORCE_IRQCTX - Enforce that handle_irq_*() is only invoked
219 * from actual interrupt context.
220 * IRQD_AFFINITY_ON_ACTIVATE - Affinity is set on activation. Don't call
222 * IRQD_IRQ_ENABLED_ON_SUSPEND - Interrupt is enabled on suspend by irq pm if
252 #define __irqd_to_state(d) ACCESS_PRIVATE((d)->common, state_use_accessors)
453 return d->hwirq; in irqd_to_hwirq()
457 * struct irq_chip - hardware interrupt chip descriptor
461 * @irq_startup: start up the interrupt (defaults to ->enable if NULL)
462 * @irq_shutdown: shut down the interrupt (defaults to ->disable if NULL)
463 * @irq_enable: enable the interrupt (defaults to chip->unmask if NULL)
464 * @irq_disable: disable the interrupt
465 * @irq_ack: start of a new interrupt
466 * @irq_mask: mask an interrupt source
467 * @irq_mask_ack: ack and mask an interrupt source
468 * @irq_unmask: unmask an interrupt source
469 * @irq_eoi: end of interrupt
470 * @irq_set_affinity: Set the CPU affinity on SMP machines. If the force
472 * unconditionally apply the affinity setting. Sanity
473 * checks against the supplied affinity mask are not
478 * @irq_set_wake: enable/disable power-management wake-on of an IRQ
481 * @irq_cpu_online: configure an interrupt source for a secondary CPU
482 * @irq_cpu_offline: un-configure an interrupt source for a secondary CPU
496 * @irq_get_irqchip_state: return the internal state of an interrupt
497 * @irq_set_irqchip_state: set the internal state of a interrupt
572 * IRQCHIP_AFFINITY_PRE_STARTUP: Default affinity update before startup
591 * Pick up the arch-dependent methods:
649 * Built-in IRQ handlers for various IRQ types,
650 * callable via desc->handle_irq()
705 /* Checks whether the interrupt can be requested by request_irq(): */
708 /* Dummy irq-chip implementations: */
724 const struct cpumask *affinity);
726 struct cpumask *affinity);
821 return d ? d->chip : NULL; in irq_get_chip()
826 return d->chip; in irq_data_get_irq_chip()
832 return d ? d->chip_data : NULL; in irq_get_chip_data()
837 return d->chip_data; in irq_data_get_irq_chip_data()
843 return d ? d->common->handler_data : NULL; in irq_get_handler_data()
848 return d->common->handler_data; in irq_data_get_irq_handler_data()
854 return d ? d->common->msi_desc : NULL; in irq_get_msi_desc()
859 return d->common->msi_desc; in irq_data_get_msi_desc()
871 return d->node; in irq_common_data_get_node()
879 return irq_common_data_get_node(d->common); in irq_data_get_node()
886 return d ? d->common->affinity : NULL; in irq_get_affinity_mask()
891 return d->common->affinity; in irq_data_get_affinity_mask()
898 return d->common->effective_affinity; in irq_data_get_effective_affinity_mask()
903 cpumask_copy(d->common->effective_affinity, m); in irq_data_update_effective_affinity()
913 return d->common->affinity; in irq_data_get_effective_affinity_mask()
921 const struct irq_affinity_desc *affinity);
925 const struct irq_affinity_desc *affinity);
932 irq_alloc_descs(-1, 1, 1, node)
938 irq_alloc_descs(-1, from, 1, node)
941 irq_alloc_descs(-1, from, cnt, node)
947 devm_irq_alloc_descs(dev, -1, 1, 1, node)
953 devm_irq_alloc_descs(dev, -1, from, 1, node)
956 devm_irq_alloc_descs(dev, -1, from, cnt, node)
984 * struct irq_chip_regs - register offsets for struct irq_gci
1004 * struct irq_chip_type - Generic interrupt chip instance for a flow type
1005 * @chip: The real interrupt chip which provides the callbacks
1026 * struct irq_chip_generic - Generic irq chip data structure
1037 * @irq_base: Interrupt base nr for this chip
1042 * @wake_enabled: Interrupt can wakeup from suspend
1043 * @wake_active: Interrupt is marked as an wakeup from suspend source
1050 * @chip_types: Array of interrupt irq_chip_types
1082 * enum irq_gc_flags - Initialization flags for generic irq chips
1088 * @IRQ_GC_NO_MASK: Do not calculate irq_data->mask
1089 * @IRQ_GC_BE_IO: Use big-endian register accesses (default: LE)
1100 * struct irq_domain_chip_generic - Generic irq chip data structure for irq domains
1106 * @gc: Array of pointers to generic interrupt chips
1181 return container_of(d->chip, struct irq_chip_type, chip); in irq_data_get_chip_type()
1184 #define IRQ_MSK(n) (u32)((n) < 32 ? ((1 << (n)) - 1) : UINT_MAX)
1189 raw_spin_lock(&gc->lock); in irq_gc_lock()
1194 raw_spin_unlock(&gc->lock); in irq_gc_unlock()
1202 * The irqsave variants are for usage in non interrupt code. Do not use
1206 raw_spin_lock_irqsave(&(gc)->lock, flags)
1209 raw_spin_unlock_irqrestore(&(gc)->lock, flags)
1214 if (gc->reg_writel) in irq_reg_writel()
1215 gc->reg_writel(val, gc->reg_base + reg_offset); in irq_reg_writel()
1217 writel(val, gc->reg_base + reg_offset); in irq_reg_writel()
1223 if (gc->reg_readl) in irq_reg_readl()
1224 return gc->reg_readl(gc->reg_base + reg_offset); in irq_reg_readl()
1226 return readl(gc->reg_base + reg_offset); in irq_reg_readl()
1262 * Registers a generic IRQ handling function as the top-level IRQ handler in
1264 * architecture-specific interrupt handler.
1266 * Returns 0 on success, or -EBUSY if an IRQ handler has already been
1272 * Allows interrupt handlers to find the irqchip that's been registered as the
1273 * top-level IRQ handler.