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