diff options
author | balrog <balrog@c046a42c-6fe2-441c-8c8c-71466251a162> | 2007-10-04 21:53:55 +0000 |
---|---|---|
committer | balrog <balrog@c046a42c-6fe2-441c-8c8c-71466251a162> | 2007-10-04 21:53:55 +0000 |
commit | 80f515e63688f43b7800027c233ec7139cf3375b (patch) | |
tree | 0a56a7bc29d0c668c39eaf3abd1e3dc543d0ef65 /hw/sh_intc.h | |
parent | 30d6eaca96a4f9fd93e42267dceff70d421d6f9e (diff) | |
download | qemu-80f515e63688f43b7800027c233ec7139cf3375b.tar.gz qemu-80f515e63688f43b7800027c233ec7139cf3375b.tar.bz2 qemu-80f515e63688f43b7800027c233ec7139cf3375b.zip |
sh775x interrupt controller by Magnus Damm.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3327 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'hw/sh_intc.h')
-rw-r--r-- | hw/sh_intc.h | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/hw/sh_intc.h b/hw/sh_intc.h new file mode 100644 index 0000000000..991e991f97 --- /dev/null +++ b/hw/sh_intc.h @@ -0,0 +1,69 @@ +#ifndef __SH_INTC_H__ +#define __SH_INTC_H__ + +typedef unsigned char intc_enum; + +struct intc_vect { + intc_enum enum_id; + unsigned short vect; +}; + +#define INTC_VECT(enum_id, vect) { enum_id, vect } + +struct intc_group { + intc_enum enum_id; + intc_enum enum_ids[32]; +}; + +#define INTC_GROUP(enum_id, ids...) { enum_id, { ids } } + +struct intc_mask_reg { + unsigned long set_reg, clr_reg, reg_width; + intc_enum enum_ids[32]; + unsigned long value; +}; + +struct intc_prio_reg { + unsigned long set_reg, clr_reg, reg_width, field_width; + intc_enum enum_ids[16]; + unsigned long value; +}; + +#define _INTC_ARRAY(a) a, sizeof(a)/sizeof(*a) + +struct intc_source { + unsigned short vect; + intc_enum next_enum_id; + + int asserted; + int enable_count; + int enable_max; +}; + +struct intc_desc { + struct intc_source *sources; + int nr_sources; + struct intc_mask_reg *mask_regs; + int nr_mask_regs; + struct intc_prio_reg *prio_regs; + int nr_prio_regs; + + int iomemtype; +}; + +struct intc_source *sh_intc_source(struct intc_desc *desc, intc_enum id); + +void sh_intc_register_sources(struct intc_desc *desc, + struct intc_vect *vectors, + int nr_vectors, + struct intc_group *groups, + int nr_groups); + +int sh_intc_init(struct intc_desc *desc, + int nr_sources, + struct intc_mask_reg *mask_regs, + int nr_mask_regs, + struct intc_prio_reg *prio_regs, + int nr_prio_regs); + +#endif /* __SH_INTC_H__ */ |