mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
hw: move headers to include/
Many of these should be cleaned up with proper qdev-/QOM-ification. Right now there are many catch-all headers in include/hw/ARCH depending on cpu.h, and this makes it necessary to compile these files per-target. However, fixing this does not belong in these patches. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
bb585a784e
commit
0d09e41a51
511 changed files with 829 additions and 830 deletions
57
include/hw/sh4/sh.h
Normal file
57
include/hw/sh4/sh.h
Normal file
|
@ -0,0 +1,57 @@
|
|||
#ifndef QEMU_SH_H
|
||||
#define QEMU_SH_H
|
||||
/* Definitions for SH board emulation. */
|
||||
|
||||
#include "hw/sh4/sh_intc.h"
|
||||
|
||||
#define A7ADDR(x) ((x) & 0x1fffffff)
|
||||
#define P4ADDR(x) ((x) | 0xe0000000)
|
||||
|
||||
/* sh7750.c */
|
||||
struct SH7750State;
|
||||
struct MemoryRegion;
|
||||
|
||||
struct SH7750State *sh7750_init(CPUSH4State * cpu, struct MemoryRegion *sysmem);
|
||||
|
||||
typedef struct {
|
||||
/* The callback will be triggered if any of the designated lines change */
|
||||
uint16_t portamask_trigger;
|
||||
uint16_t portbmask_trigger;
|
||||
/* Return 0 if no action was taken */
|
||||
int (*port_change_cb) (uint16_t porta, uint16_t portb,
|
||||
uint16_t * periph_pdtra,
|
||||
uint16_t * periph_portdira,
|
||||
uint16_t * periph_pdtrb,
|
||||
uint16_t * periph_portdirb);
|
||||
} sh7750_io_device;
|
||||
|
||||
int sh7750_register_io_device(struct SH7750State *s,
|
||||
sh7750_io_device * device);
|
||||
/* sh_timer.c */
|
||||
#define TMU012_FEAT_TOCR (1 << 0)
|
||||
#define TMU012_FEAT_3CHAN (1 << 1)
|
||||
#define TMU012_FEAT_EXTCLK (1 << 2)
|
||||
void tmu012_init(struct MemoryRegion *sysmem, hwaddr base,
|
||||
int feat, uint32_t freq,
|
||||
qemu_irq ch0_irq, qemu_irq ch1_irq,
|
||||
qemu_irq ch2_irq0, qemu_irq ch2_irq1);
|
||||
|
||||
|
||||
/* sh_serial.c */
|
||||
#define SH_SERIAL_FEAT_SCIF (1 << 0)
|
||||
void sh_serial_init(MemoryRegion *sysmem,
|
||||
hwaddr base, int feat,
|
||||
uint32_t freq, CharDriverState *chr,
|
||||
qemu_irq eri_source,
|
||||
qemu_irq rxi_source,
|
||||
qemu_irq txi_source,
|
||||
qemu_irq tei_source,
|
||||
qemu_irq bri_source);
|
||||
|
||||
/* sh7750.c */
|
||||
qemu_irq sh7750_irl(struct SH7750State *s);
|
||||
|
||||
/* tc58128.c */
|
||||
int tc58128_init(struct SH7750State *s, const char *zone1, const char *zone2);
|
||||
|
||||
#endif
|
83
include/hw/sh4/sh_intc.h
Normal file
83
include/hw/sh4/sh_intc.h
Normal file
|
@ -0,0 +1,83 @@
|
|||
#ifndef __SH_INTC_H__
|
||||
#define __SH_INTC_H__
|
||||
|
||||
#include "qemu-common.h"
|
||||
#include "hw/irq.h"
|
||||
#include "exec/address-spaces.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, ...) { enum_id, { __VA_ARGS__ } }
|
||||
|
||||
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, ARRAY_SIZE(a)
|
||||
|
||||
struct intc_source {
|
||||
unsigned short vect;
|
||||
intc_enum next_enum_id;
|
||||
|
||||
int asserted; /* emulates the interrupt signal line from device to intc */
|
||||
int enable_count;
|
||||
int enable_max;
|
||||
int pending; /* emulates the result of signal and masking */
|
||||
struct intc_desc *parent;
|
||||
};
|
||||
|
||||
struct intc_desc {
|
||||
MemoryRegion iomem;
|
||||
MemoryRegion *iomem_aliases;
|
||||
qemu_irq *irqs;
|
||||
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 pending; /* number of interrupt sources that has pending set */
|
||||
};
|
||||
|
||||
int sh_intc_get_pending_vector(struct intc_desc *desc, int imask);
|
||||
struct intc_source *sh_intc_source(struct intc_desc *desc, intc_enum id);
|
||||
void sh_intc_toggle_source(struct intc_source *source,
|
||||
int enable_adj, int assert_adj);
|
||||
|
||||
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(MemoryRegion *sysmem,
|
||||
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);
|
||||
|
||||
void sh_intc_set_irl(void *opaque, int n, int level);
|
||||
|
||||
#endif /* __SH_INTC_H__ */
|
Loading…
Add table
Add a link
Reference in a new issue