1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#ifndef QEMU_I8259_INTERNAL_H
26#define QEMU_I8259_INTERNAL_H
27
28#include "hw/hw.h"
29#include "hw/i386/pc.h"
30#include "hw/isa/isa.h"
31#include "hw/intc/intc.h"
32
33typedef struct PICCommonState PICCommonState;
34
35#define TYPE_PIC_COMMON "pic-common"
36#define PIC_COMMON(obj) \
37 OBJECT_CHECK(PICCommonState, (obj), TYPE_PIC_COMMON)
38#define PIC_COMMON_CLASS(klass) \
39 OBJECT_CLASS_CHECK(PICCommonClass, (klass), TYPE_PIC_COMMON)
40#define PIC_COMMON_GET_CLASS(obj) \
41 OBJECT_GET_CLASS(PICCommonClass, (obj), TYPE_PIC_COMMON)
42
43typedef struct PICCommonClass
44{
45 ISADeviceClass parent_class;
46
47 void (*pre_save)(PICCommonState *s);
48 void (*post_load)(PICCommonState *s);
49} PICCommonClass;
50
51struct PICCommonState {
52 ISADevice parent_obj;
53
54 uint8_t last_irr;
55 uint8_t irr;
56 uint8_t imr;
57 uint8_t isr;
58 uint8_t priority_add;
59 uint8_t irq_base;
60 uint8_t read_reg_select;
61 uint8_t poll;
62 uint8_t special_mask;
63 uint8_t init_state;
64 uint8_t auto_eoi;
65 uint8_t rotate_on_auto_eoi;
66 uint8_t special_fully_nested_mode;
67 uint8_t init4;
68 uint8_t single_mode;
69 uint8_t elcr;
70 uint8_t elcr_mask;
71 qemu_irq int_out[1];
72 uint32_t master;
73 uint32_t iobase;
74 uint32_t elcr_addr;
75 MemoryRegion base_io;
76 MemoryRegion elcr_io;
77};
78
79void pic_reset_common(PICCommonState *s);
80ISADevice *i8259_init_chip(const char *name, ISABus *bus, bool master);
81void pic_stat_update_irq(int irq, int level);
82bool pic_get_statistics(InterruptStatsProvider *obj,
83 uint64_t **irq_counts, unsigned int *nb_irqs);
84void pic_print_info(InterruptStatsProvider *obj, Monitor *mon);
85
86#endif
87