#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/irqchip/chained_irq.h>
#include <linux/irqdomain.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#define MAX_NUM_HOST_IRQS …
#define FIRST_PRU_HOST_INT …
#define PRU_INTC_REVID …
#define PRU_INTC_CR …
#define PRU_INTC_GER …
#define PRU_INTC_GNLR …
#define PRU_INTC_SISR …
#define PRU_INTC_SICR …
#define PRU_INTC_EISR …
#define PRU_INTC_EICR …
#define PRU_INTC_HIEISR …
#define PRU_INTC_HIDISR …
#define PRU_INTC_GPIR …
#define PRU_INTC_SRSR(x) …
#define PRU_INTC_SECR(x) …
#define PRU_INTC_ESR(x) …
#define PRU_INTC_ECR(x) …
#define PRU_INTC_CMR(x) …
#define PRU_INTC_HMR(x) …
#define PRU_INTC_HIPIR(x) …
#define PRU_INTC_SIPR(x) …
#define PRU_INTC_SITR(x) …
#define PRU_INTC_HINLR(x) …
#define PRU_INTC_HIER …
#define CMR_EVT_MAP_MASK …
#define CMR_EVT_MAP_BITS …
#define CMR_EVT_PER_REG …
#define HMR_CH_MAP_MASK …
#define HMR_CH_MAP_BITS …
#define HMR_CH_PER_REG …
#define INTC_HIPIR_NONE_HINT …
#define MAX_PRU_SYS_EVENTS …
#define MAX_PRU_CHANNELS …
struct pruss_intc_map_record { … };
struct pruss_intc_match_data { … };
struct pruss_intc { … };
struct pruss_host_irq_data { … };
static inline u32 pruss_intc_read_reg(struct pruss_intc *intc, unsigned int reg)
{ … }
static inline void pruss_intc_write_reg(struct pruss_intc *intc,
unsigned int reg, u32 val)
{ … }
static void pruss_intc_update_cmr(struct pruss_intc *intc, unsigned int evt,
u8 ch)
{ … }
static void pruss_intc_update_hmr(struct pruss_intc *intc, u8 ch, u8 host)
{ … }
static void pruss_intc_map(struct pruss_intc *intc, unsigned long hwirq)
{ … }
static void pruss_intc_unmap(struct pruss_intc *intc, unsigned long hwirq)
{ … }
static void pruss_intc_init(struct pruss_intc *intc)
{ … }
static void pruss_intc_irq_ack(struct irq_data *data)
{ … }
static void pruss_intc_irq_mask(struct irq_data *data)
{ … }
static void pruss_intc_irq_unmask(struct irq_data *data)
{ … }
static int pruss_intc_irq_reqres(struct irq_data *data)
{ … }
static void pruss_intc_irq_relres(struct irq_data *data)
{ … }
static int pruss_intc_irq_get_irqchip_state(struct irq_data *data,
enum irqchip_irq_state which,
bool *state)
{ … }
static int pruss_intc_irq_set_irqchip_state(struct irq_data *data,
enum irqchip_irq_state which,
bool state)
{ … }
static struct irq_chip pruss_irqchip = …;
static int pruss_intc_validate_mapping(struct pruss_intc *intc, int event,
int channel, int host)
{ … }
static int
pruss_intc_irq_domain_xlate(struct irq_domain *d, struct device_node *node,
const u32 *intspec, unsigned int intsize,
unsigned long *out_hwirq, unsigned int *out_type)
{ … }
static int pruss_intc_irq_domain_map(struct irq_domain *d, unsigned int virq,
irq_hw_number_t hw)
{ … }
static void pruss_intc_irq_domain_unmap(struct irq_domain *d, unsigned int virq)
{ … }
static const struct irq_domain_ops pruss_intc_irq_domain_ops = …;
static void pruss_intc_irq_handler(struct irq_desc *desc)
{ … }
static const char * const irq_names[MAX_NUM_HOST_IRQS] = …;
static int pruss_intc_probe(struct platform_device *pdev)
{ … }
static void pruss_intc_remove(struct platform_device *pdev)
{ … }
static const struct pruss_intc_match_data pruss_intc_data = …;
static const struct pruss_intc_match_data icssg_intc_data = …;
static const struct of_device_id pruss_intc_of_match[] = …;
MODULE_DEVICE_TABLE(of, pruss_intc_of_match);
static struct platform_driver pruss_intc_driver = …;
module_platform_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_AUTHOR(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;