/* SPDX-License-Identifier: GPL-2.0 */ /* * IRQ is a type of interrupt controller used on recent Intel SoC. * * Copyright 2019 Google LLC */ #ifndef __irq_H #define __irq_H /** * struct irq_ops - Operations for the IRQ */ struct irq_ops { /** * route_pmc_gpio_gpe() - Get the GPIO for an event * * @dev: IRQ device * @pmc_gpe_num: Event number to check * @returns GPIO for the event, or -ENOENT if none */ int (*route_pmc_gpio_gpe)(struct udevice *dev, uint pmc_gpe_num); /** * set_polarity() - Set the IRQ polarity * * @dev: IRQ device * @irq: Interrupt number to set * @active_low: true if active low, false for active high * @return 0 if OK, -EINVAL if @irq is invalid */ int (*set_polarity)(struct udevice *dev, uint irq, bool active_low); /** * snapshot_polarities() - record IRQ polarities for later restore * * @dev: IRQ device * @return 0 */ int (*snapshot_polarities)(struct udevice *dev); /** * restore_polarities() - restore IRQ polarities * * @dev: IRQ device * @return 0 */ int (*restore_polarities)(struct udevice *dev); }; #define irq_get_ops(dev) ((struct irq_ops *)(dev)->driver->ops) /** * irq_route_pmc_gpio_gpe() - Get the GPIO for an event * * @dev: IRQ device * @pmc_gpe_num: Event number to check * @returns GPIO for the event, or -ENOENT if none */ int irq_route_pmc_gpio_gpe(struct udevice *dev, uint pmc_gpe_num); /** * irq_set_polarity() - Set the IRQ polarity * * @dev: IRQ device * @irq: Interrupt number to set * @active_low: true if active low, false for active high * @return 0 if OK, -EINVAL if @irq is invalid */ int irq_set_polarity(struct udevice *dev, uint irq, bool active_low); /** * irq_snapshot_polarities() - record IRQ polarities for later restore * * @dev: IRQ device * @return 0 */ int irq_snapshot_polarities(struct udevice *dev); /** * irq_restore_polarities() - restore IRQ polarities * * @dev: IRQ device * @return 0 */ int irq_restore_polarities(struct udevice *dev); #endif