hc
2024-08-12 233ab1bd4c5697f5cdec94e60206e8c6ac609b4c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
 * (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_ */