Home | History | Annotate | Line # | Download | only in rmi
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