/* * (C) Copyright 2017 Rockchip Electronics Co., Ltd * * SPDX-License-Identifier: GPL-2.0+ */ #ifndef _IRQ_GIC_H_ #define _IRQ_GIC_H_ #include <asm/io.h> #include <irq-generic.h> #include <irq-platform.h> #include "irq-internal.h" /* * IRQ FLAG */ #define IRQ_FLG_ENABLE BIT(0) /* * IRQ-NUMBERS */ #define PLATFORM_SUSPEND_MAX_IRQ 12 #define PLATFORM_GIC_MAX_IRQ (GIC_IRQS_NR) #define PLATFORM_GPIO_MAX_IRQ (GIC_IRQS_NR + GPIO_IRQS_NR) #define PLATFORM_MAX_IRQ (GIC_IRQS_NR + GPIO_IRQS_NR) /* * IRQ-CHIP */ struct irq_chip *arch_gic_get_irqchip(void); struct irq_chip *arch_gpio_get_irqchip(void); struct irq_chip *arch_virq_get_irqchip(void); /* * IRQ-VIRTUAL */ int bad_virq(int irq); void virqs_show(int pirq); void virq_free_handler(int irq); int virq_install_handler(int irq, interrupt_handler_t *handler, void *data); /* * Other */ int bad_irq(int irq); /* * IRQ-GPIO-SWITCH */ #define GPIO_BANK_MASK 0xFFFFFF00 #define GPIO_BANK_OFFSET 8 #define GPIO_PIN_MASK 0x000000FF #define GPIO_PIN_OFFSET 0 #define EINVAL_GPIO -1 #define PIN_BASE GIC_IRQS_NR struct gpio_bank { char *name; void __iomem *regbase; int id; int irq_base; int ngpio; int use_count; }; #define GPIO_BANK_REGISTER(ID, GPIO_BANK_NUM) \ { \ .name = __stringify(gpio##ID), \ .regbase = (unsigned char __iomem *)GPIO##ID##_PHYS, \ .id = ID, \ .irq_base = PIN_BASE + (ID) * (GPIO_BANK_NUM), \ .ngpio = GPIO_BANK_NUM, \ .use_count = 0 \ } /* gpio bank[31:8] and pin[7:0] */ #define GPIO_BANK(gpio) ((gpio & GPIO_BANK_MASK) >> GPIO_BANK_OFFSET) #define GPIO_PIN(gpio) ((gpio & GPIO_PIN_MASK) >> GPIO_PIN_OFFSET) #define GPIO_BANK_VALID(gpio) (GPIO_BANK(gpio) < GPIO_BANK_NUM) #define GPIO_PIN_VALID(gpio) (GPIO_PIN(gpio) < GPIO_BANK_PINS) int hard_gpio_to_irq(u32 gpio); int irq_to_gpio(int irq); struct gpio_bank *gpio_id_to_bank(unsigned int id); struct gpio_bank *gpio_to_bank(unsigned gpio); void __generic_gpio_handle_irq(int irq); #endif /* _IRQ_GIC_H_ */