|
|
1.1 ! root 1: #ifndef __SH_INTC_H__ ! 2: #define __SH_INTC_H__ ! 3: ! 4: typedef unsigned char intc_enum; ! 5: ! 6: struct intc_vect { ! 7: intc_enum enum_id; ! 8: unsigned short vect; ! 9: }; ! 10: ! 11: #define INTC_VECT(enum_id, vect) { enum_id, vect } ! 12: ! 13: struct intc_group { ! 14: intc_enum enum_id; ! 15: intc_enum enum_ids[32]; ! 16: }; ! 17: ! 18: #define INTC_GROUP(enum_id, ids...) { enum_id, { ids } } ! 19: ! 20: struct intc_mask_reg { ! 21: unsigned long set_reg, clr_reg, reg_width; ! 22: intc_enum enum_ids[32]; ! 23: unsigned long value; ! 24: }; ! 25: ! 26: struct intc_prio_reg { ! 27: unsigned long set_reg, clr_reg, reg_width, field_width; ! 28: intc_enum enum_ids[16]; ! 29: unsigned long value; ! 30: }; ! 31: ! 32: #define _INTC_ARRAY(a) a, sizeof(a)/sizeof(*a) ! 33: ! 34: struct intc_source { ! 35: unsigned short vect; ! 36: intc_enum next_enum_id; ! 37: ! 38: int asserted; /* emulates the interrupt signal line from device to intc */ ! 39: int enable_count; ! 40: int enable_max; ! 41: int pending; /* emulates the result of signal and masking */ ! 42: struct intc_desc *parent; ! 43: }; ! 44: ! 45: struct intc_desc { ! 46: struct intc_source *sources; ! 47: int nr_sources; ! 48: struct intc_mask_reg *mask_regs; ! 49: int nr_mask_regs; ! 50: struct intc_prio_reg *prio_regs; ! 51: int nr_prio_regs; ! 52: ! 53: int iomemtype; ! 54: int pending; /* number of interrupt sources that has pending set */ ! 55: }; ! 56: ! 57: int sh_intc_get_pending_vector(struct intc_desc *desc, int imask); ! 58: struct intc_source *sh_intc_source(struct intc_desc *desc, intc_enum id); ! 59: void sh_intc_toggle_source(struct intc_source *source, ! 60: int enable_adj, int assert_adj); ! 61: ! 62: void sh_intc_register_sources(struct intc_desc *desc, ! 63: struct intc_vect *vectors, ! 64: int nr_vectors, ! 65: struct intc_group *groups, ! 66: int nr_groups); ! 67: ! 68: int sh_intc_init(struct intc_desc *desc, ! 69: int nr_sources, ! 70: struct intc_mask_reg *mask_regs, ! 71: int nr_mask_regs, ! 72: struct intc_prio_reg *prio_regs, ! 73: int nr_prio_regs); ! 74: ! 75: #endif /* __SH_INTC_H__ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.