picvar.h revision 1.1.2.2 1 1.1.2.1 matt #ifndef _ARM_PIC31_PICVAR_H_
2 1.1.2.1 matt #define _ARM_PIC31_PICVAR_H_
3 1.1.2.1 matt
4 1.1.2.1 matt struct pic_softc;
5 1.1.2.1 matt struct intrsource;
6 1.1.2.1 matt
7 1.1.2.1 matt int pic_handle_intr(void *);
8 1.1.2.1 matt void pic_mark_pending(struct pic_softc *pic, int irq);
9 1.1.2.1 matt void pic_mark_pending_source(struct pic_softc *pic, struct intrsource *is);
10 1.1.2.1 matt void *pic_establish_intr(struct pic_softc *pic, int irq, int ipl, int type,
11 1.1.2.1 matt int (*func)(void *), void *arg);
12 1.1.2.1 matt int pic_alloc_irq(struct pic_softc *pic);
13 1.1.2.1 matt void pic_disestablish_source(struct intrsource *is);
14 1.1.2.1 matt void pic_do_pending_ints(register_t psw, int newipl);
15 1.1.2.2 matt void pic_dispatch(struct intrsource *is, void *frame);
16 1.1.2.1 matt
17 1.1.2.1 matt #ifdef _INTR_PRIVATE
18 1.1.2.1 matt
19 1.1.2.1 matt #ifndef PIC_MAXPICS
20 1.1.2.1 matt #define PIC_MAXPICS 32
21 1.1.2.1 matt #endif
22 1.1.2.1 matt #ifndef PIC_MAXSOURCES
23 1.1.2.1 matt #define PIC_MAXSOURCES 64
24 1.1.2.1 matt #endif
25 1.1.2.1 matt
26 1.1.2.1 matt struct intrsource {
27 1.1.2.1 matt int (*is_func)(void *);
28 1.1.2.1 matt void *is_arg;
29 1.1.2.1 matt struct pic_softc *is_pic; /* owning PIC */
30 1.1.2.1 matt uint8_t is_type; /* IST_xxx */
31 1.1.2.1 matt uint8_t is_ipl; /* IPL_xxx */
32 1.1.2.1 matt uint8_t is_irq; /* local to pic */
33 1.1.2.1 matt struct evcnt is_ev;
34 1.1.2.1 matt char is_source[16];
35 1.1.2.1 matt };
36 1.1.2.1 matt
37 1.1.2.1 matt struct pic_softc {
38 1.1.2.1 matt const struct pic_ops *pic_ops;
39 1.1.2.1 matt struct intrsource **pic_sources;
40 1.1.2.1 matt uint32_t pic_pending_irqs[(PIC_MAXSOURCES + 31) / 32];
41 1.1.2.1 matt uint32_t pic_pending_ipls;
42 1.1.2.1 matt size_t pic_maxsources;
43 1.1.2.1 matt uint8_t pic_id;
44 1.1.2.1 matt uint16_t pic_irqbase;
45 1.1.2.1 matt char pic_name[14];
46 1.1.2.1 matt };
47 1.1.2.1 matt
48 1.1.2.1 matt struct pic_ops {
49 1.1.2.1 matt void (*pic_unblock_irqs)(struct pic_softc *, size_t, uint32_t);
50 1.1.2.1 matt void (*pic_block_irqs)(struct pic_softc *, size_t, uint32_t);
51 1.1.2.1 matt int (*pic_find_pending_irqs)(struct pic_softc *);
52 1.1.2.1 matt
53 1.1.2.1 matt void (*pic_establish_irq)(struct pic_softc *, int, int, int);
54 1.1.2.1 matt void (*pic_source_name)(struct pic_softc *, int, char *, size_t);
55 1.1.2.1 matt };
56 1.1.2.1 matt
57 1.1.2.1 matt
58 1.1.2.1 matt bool pic_add(struct pic_softc *, int);
59 1.1.2.1 matt void pic_do_pending_int(void);
60 1.1.2.1 matt
61 1.1.2.1 matt extern struct pic_softc * pic_list[PIC_MAXPICS];
62 1.1.2.1 matt extern volatile uint32_t pic_pending_pics[(PIC_MAXPICS + 31) / 32];
63 1.1.2.1 matt extern volatile uint32_t pic_pending_ipls;
64 1.1.2.1 matt extern int pic_pending_ipl_refcnt[NIPL];
65 1.1.2.1 matt
66 1.1.2.1 matt #endif /* _INTR_PRIVATE */
67 1.1.2.1 matt
68 1.1.2.1 matt #endif /* _ARM_PIC_PICVAR_H_ */
69