rmixl_intr.h revision 1.1.2.1 1 1.1.2.1 cliff /* $NetBSD: rmixl_intr.h,v 1.1.2.1 2010/03/21 19:28:01 cliff Exp $ */
2 1.1.2.1 cliff
3 1.1.2.1 cliff #ifndef _MIPS_RMI_RMIXL_INTR_H_
4 1.1.2.1 cliff #define _MIPS_RMI_RMIXL_INTR_H_
5 1.1.2.1 cliff
6 1.1.2.1 cliff /*
7 1.1.2.1 cliff * An 'irq' is an EIRR bit numbers or 'vector' as used in the PRM
8 1.1.2.1 cliff * - PIC-based irqs are in the range 0..31 and index into the IRT
9 1.1.2.1 cliff * - IRT entry <n> always routes to vector <n>
10 1.1.2.1 cliff * - non-PIC-based irqs are in the range 32..63
11 1.1.2.1 cliff * - only 1 intrhand_t per irq/vector
12 1.1.2.1 cliff */
13 1.1.2.1 cliff #define NINTRVECS 64 /* bit width of the EIRR */
14 1.1.2.1 cliff #define NIRTS 32 /* #entries in the Interrupt Redirection Table */
15 1.1.2.1 cliff
16 1.1.2.1 cliff /*
17 1.1.2.1 cliff * reserved vectors >=32
18 1.1.2.1 cliff */
19 1.1.2.1 cliff #define RMIXL_INTRVEC_IPI 32
20 1.1.2.1 cliff #define RMIXL_INTRVEC_FMN 33
21 1.1.2.1 cliff
22 1.1.2.1 cliff typedef enum {
23 1.1.2.1 cliff RMIXL_TRIG_NONE=0,
24 1.1.2.1 cliff RMIXL_TRIG_EDGE,
25 1.1.2.1 cliff RMIXL_TRIG_LEVEL,
26 1.1.2.1 cliff } rmixl_intr_trigger_t;
27 1.1.2.1 cliff
28 1.1.2.1 cliff typedef enum {
29 1.1.2.1 cliff RMIXL_POLR_NONE=0,
30 1.1.2.1 cliff RMIXL_POLR_RISING,
31 1.1.2.1 cliff RMIXL_POLR_HIGH,
32 1.1.2.1 cliff RMIXL_POLR_FALLING,
33 1.1.2.1 cliff RMIXL_POLR_LOW,
34 1.1.2.1 cliff } rmixl_intr_polarity_t;
35 1.1.2.1 cliff
36 1.1.2.1 cliff
37 1.1.2.1 cliff /*
38 1.1.2.1 cliff * iv_list and ref count manage sharing of each vector
39 1.1.2.1 cliff */
40 1.1.2.1 cliff typedef struct rmixl_intrhand {
41 1.1.2.1 cliff int (*ih_func)(void *);
42 1.1.2.1 cliff void *ih_arg;
43 1.1.2.1 cliff int ih_irq; /* >=32 if not-PIC-based */
44 1.1.2.1 cliff int ih_ipl; /* interrupt priority */
45 1.1.2.1 cliff int ih_cpumask; /* CPUs which may handle this irpt */
46 1.1.2.1 cliff } rmixl_intrhand_t;
47 1.1.2.1 cliff
48 1.1.2.1 cliff /*
49 1.1.2.1 cliff * stuff exported from rmixl_spl.S
50 1.1.2.1 cliff */
51 1.1.2.1 cliff extern const struct splsw rmixl_splsw;
52 1.1.2.1 cliff extern uint64_t ipl_eimr_map[];
53 1.1.2.1 cliff
54 1.1.2.1 cliff extern void *rmixl_intr_establish(int, int, int,
55 1.1.2.1 cliff rmixl_intr_trigger_t, rmixl_intr_polarity_t,
56 1.1.2.1 cliff int (*)(void *), void *);
57 1.1.2.1 cliff extern void rmixl_intr_disestablish(void *);
58 1.1.2.1 cliff extern void *rmixl_vec_establish(int, int, int,
59 1.1.2.1 cliff int (*)(void *), void *);
60 1.1.2.1 cliff extern void rmixl_vec_disestablish(void *);
61 1.1.2.1 cliff extern const char *rmixl_intr_string(int);
62 1.1.2.1 cliff extern void rmixl_intr_init_cpu(struct cpu_info *);
63 1.1.2.1 cliff extern void *rmixl_intr_init_clk(void);
64 1.1.2.1 cliff #ifdef MULTIPROCESSOR
65 1.1.2.1 cliff extern void *rmixl_intr_init_ipi(void);
66 1.1.2.1 cliff #endif
67 1.1.2.1 cliff
68 1.1.2.1 cliff #endif /* _MIPS_RMI_RMIXL_INTR_H_ */
69