OpenCores
URL https://opencores.org/ocsvn/c0or1k/c0or1k/trunk

Subversion Repositories c0or1k

[/] [c0or1k/] [trunk/] [include/] [l4/] [drivers/] [irq/] [gic/] [gic.h] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 drasko
/*
2
 * Generic Interrupt Controller offsets
3
 *
4
 * Copyright (C) 2009 B Labs Ltd.
5
 *
6
 */
7
 
8
#ifndef __ARM_GIC_H__
9
#define __ARM_GIC_H__
10
 
11
#include <l4/types.h>
12
#include INC_PLAT(platform.h)
13
#include INC_PLAT(offsets.h)
14
 
15
/* CPU registers */
16
struct gic_cpu
17
{
18
        u32       control;              /* Control Register */
19
        u32       prio_mask;            /* Priority Mask */
20
        u32       bin_point;            /* Binary Point Register */
21
        u32       ack;                  /* Interrupt */
22
        u32       eoi;                  /* End of Interrupt */
23
        u32       running;              /* Running Priority register */
24
        u32       high_pending;         /* Highest Pending Register */
25
};
26
 
27
#define NIRQ                            1024
28
#define NREGS_1_BIT_PER_INT             32      /* when 1 bit per interrupt  */
29
#define NREGS_4_BIT_PER_INT             256
30
#define NREGS_4_BIT_PER_INT             256
31
#define NREGS_2_BIT_PER_INT             64
32
#define NID             4
33
 
34
/* Distributor registers */
35
/* -r- -- reserved */
36
struct  gic_dist{
37
        u32       control;                              /* Control Register */
38
        u32       const   type;                         /* Type Register */
39
        u32       dummy1[62];                           /* -r- */
40
        u32       set_en[NREGS_1_BIT_PER_INT];          /* Enable Set */
41
        u32       clr_en[NREGS_1_BIT_PER_INT];          /* Enable Clear */
42
        u32       set_pending[NREGS_1_BIT_PER_INT];     /* Set Pending */
43
        u32       clr_pending[NREGS_1_BIT_PER_INT];     /* Clear Pending */
44
        u32       active[NREGS_1_BIT_PER_INT];          /* Active Bit registers */
45
        u32       dummy2[32];                           /* -r- */
46
        u32       priority[NREGS_4_BIT_PER_INT];        /* Interrupt Priority */
47
        u32       target[NREGS_4_BIT_PER_INT];          /* CPU Target Registers */
48
        u32       config[NREGS_2_BIT_PER_INT];          /* Interrupt Config */
49
        u32       level[NREGS_2_BIT_PER_INT];           /* Interrupt Line Level */
50
        u32       dummy3[64];                           /* -r- */
51
        u32       soft_int;                             /* Software Interrupts */
52
        u32       dummy4[55];                           /* -r- */
53
        u32       id[NID];                              /* Primecell ID registers */
54
};
55
 
56
 
57
struct gic_data {
58
        struct gic_cpu *cpu;
59
        struct gic_dist *dist;
60
};
61
 
62
 
63
l4id_t gic_read_irq(void *data);
64
 
65
void gic_mask_irq(l4id_t irq);
66
 
67
void gic_unmask_irq(l4id_t irq);
68
 
69
void gic_ack_irq(l4id_t irq);
70
 
71
void gic_ack_and_mask(l4id_t irq);
72
 
73
void gic_clear_pending(l4id_t irq);
74
 
75
void gic_cpu_init(int idx, unsigned long base);
76
 
77
void gic_dist_init(int idx, unsigned long base);
78
 
79
void gic_send_ipi(int cpu, int ipi_cmd);
80
 
81
void gic_set_target(u32 irq, u32 cpu);
82
 
83
u32 gic_get_target(u32 irq);
84
 
85
void gic_set_priority(u32 irq, u32 prio);
86
 
87
u32 gic_get_priority(u32 irq);
88
 
89
void gic_dummy_init(void);
90
 
91
void gic_eoi_irq(l4id_t irq);
92
 
93
void gic_print_cpu(void);
94
 
95
#endif /* __GIC_H__ */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.