xref: /OK3568_Linux_fs/u-boot/drivers/irq/irq-internal.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  * (C) Copyright 2017 Rockchip Electronics Co., Ltd
3  *
4  * SPDX-License-Identifier:     GPL-2.0+
5  */
6 
7 #ifndef _IRQ_GIC_H_
8 #define _IRQ_GIC_H_
9 
10 #include <asm/io.h>
11 #include <irq-generic.h>
12 #include <irq-platform.h>
13 #include "irq-internal.h"
14 
15 /*
16  * IRQ FLAG
17  */
18 #define IRQ_FLG_ENABLE			BIT(0)
19 
20 /*
21  * IRQ-NUMBERS
22  */
23 #define PLATFORM_SUSPEND_MAX_IRQ	12
24 #define PLATFORM_GIC_MAX_IRQ		(GIC_IRQS_NR)
25 #define PLATFORM_GPIO_MAX_IRQ		(GIC_IRQS_NR + GPIO_IRQS_NR)
26 #define PLATFORM_MAX_IRQ		(GIC_IRQS_NR + GPIO_IRQS_NR)
27 
28 /*
29  * IRQ-CHIP
30  */
31 struct irq_chip *arch_gic_get_irqchip(void);
32 struct irq_chip *arch_gpio_get_irqchip(void);
33 struct irq_chip *arch_virq_get_irqchip(void);
34 
35 /*
36  * IRQ-VIRTUAL
37  */
38 int bad_virq(int irq);
39 void virqs_show(int pirq);
40 void virq_free_handler(int irq);
41 int virq_install_handler(int irq, interrupt_handler_t *handler, void *data);
42 
43 /*
44  * Other
45  */
46 int bad_irq(int irq);
47 
48 /*
49  * IRQ-GPIO-SWITCH
50  */
51 #define GPIO_BANK_MASK		0xFFFFFF00
52 #define GPIO_BANK_OFFSET	8
53 #define GPIO_PIN_MASK		0x000000FF
54 #define GPIO_PIN_OFFSET		0
55 #define EINVAL_GPIO		-1
56 #define PIN_BASE		GIC_IRQS_NR
57 
58 struct gpio_bank {
59 	char *name;
60 	void __iomem *regbase;
61 	int id;
62 	int irq_base;
63 	int ngpio;
64 	int use_count;
65 };
66 
67 #define GPIO_BANK_REGISTER(ID, GPIO_BANK_NUM)			\
68 {								\
69 	.name	  = __stringify(gpio##ID),			\
70 	.regbase  = (unsigned char __iomem *)GPIO##ID##_PHYS,	\
71 	.id	  = ID,						\
72 	.irq_base = PIN_BASE + (ID) * (GPIO_BANK_NUM),		\
73 	.ngpio    = GPIO_BANK_NUM,				\
74 	.use_count = 0						\
75 }
76 
77 /* gpio bank[31:8] and pin[7:0] */
78 #define GPIO_BANK(gpio)		((gpio & GPIO_BANK_MASK) >> GPIO_BANK_OFFSET)
79 #define GPIO_PIN(gpio)		((gpio & GPIO_PIN_MASK) >> GPIO_PIN_OFFSET)
80 #define GPIO_BANK_VALID(gpio)	(GPIO_BANK(gpio) < GPIO_BANK_NUM)
81 #define GPIO_PIN_VALID(gpio)	(GPIO_PIN(gpio) < GPIO_BANK_PINS)
82 
83 int hard_gpio_to_irq(u32 gpio);
84 int irq_to_gpio(int irq);
85 struct gpio_bank *gpio_id_to_bank(unsigned int id);
86 struct gpio_bank *gpio_to_bank(unsigned gpio);
87 
88 void __generic_gpio_handle_irq(int irq);
89 
90 #endif /* _IRQ_GIC_H_ */
91