Statistics
| Branch: | Revision:

root / hw / pc.h @ 48a18b3c

History | View | Annotate | Download (7.4 kB)

1 87ecb68b pbrook
#ifndef HW_PC_H
2 87ecb68b pbrook
#define HW_PC_H
3 376253ec aliguori
4 376253ec aliguori
#include "qemu-common.h"
5 00cb2a99 Avi Kivity
#include "memory.h"
6 35bed8ee Paul Brook
#include "ioport.h"
7 845773ab Isaku Yamahata
#include "isa.h"
8 845773ab Isaku Yamahata
#include "fdc.h"
9 cd1b8a8b Blue Swirl
#include "net.h"
10 4aa63af1 Avi Kivity
#include "memory.h"
11 b881fbe9 Jan Kiszka
#include "ioapic.h"
12 376253ec aliguori
13 87ecb68b pbrook
/* PC-style peripherals (also used by other machines).  */
14 87ecb68b pbrook
15 87ecb68b pbrook
/* serial.c */
16 87ecb68b pbrook
17 b6cd0ea1 aurel32
SerialState *serial_init(int base, qemu_irq irq, int baudbase,
18 b6cd0ea1 aurel32
                         CharDriverState *chr);
19 39186d8a Richard Henderson
SerialState *serial_mm_init(MemoryRegion *address_space,
20 39186d8a Richard Henderson
                            target_phys_addr_t base, int it_shift,
21 39186d8a Richard Henderson
                            qemu_irq irq, int baudbase,
22 39186d8a Richard Henderson
                            CharDriverState *chr, enum device_endian);
23 48a18b3c Hervé Poussineau
static inline bool serial_isa_init(ISABus *bus, int index,
24 48a18b3c Hervé Poussineau
                                   CharDriverState *chr)
25 e22cf21e Blue Swirl
{
26 e22cf21e Blue Swirl
    ISADevice *dev;
27 e22cf21e Blue Swirl
28 48a18b3c Hervé Poussineau
    dev = isa_try_create(bus, "isa-serial");
29 9b13ef9f Blue Swirl
    if (!dev) {
30 9b13ef9f Blue Swirl
        return false;
31 9b13ef9f Blue Swirl
    }
32 e22cf21e Blue Swirl
    qdev_prop_set_uint32(&dev->qdev, "index", index);
33 e22cf21e Blue Swirl
    qdev_prop_set_chr(&dev->qdev, "chardev", chr);
34 e22cf21e Blue Swirl
    if (qdev_init(&dev->qdev) < 0) {
35 e22cf21e Blue Swirl
        return false;
36 e22cf21e Blue Swirl
    }
37 e22cf21e Blue Swirl
    return true;
38 e22cf21e Blue Swirl
}
39 e22cf21e Blue Swirl
40 038eaf82 Stefan Weil
void serial_set_frequency(SerialState *s, uint32_t frequency);
41 87ecb68b pbrook
42 87ecb68b pbrook
/* parallel.c */
43 48a18b3c Hervé Poussineau
static inline bool parallel_init(ISABus *bus, int index, CharDriverState *chr)
44 defdb20e Blue Swirl
{
45 defdb20e Blue Swirl
    ISADevice *dev;
46 defdb20e Blue Swirl
47 48a18b3c Hervé Poussineau
    dev = isa_try_create(bus, "isa-parallel");
48 73531538 Blue Swirl
    if (!dev) {
49 73531538 Blue Swirl
        return false;
50 73531538 Blue Swirl
    }
51 defdb20e Blue Swirl
    qdev_prop_set_uint32(&dev->qdev, "index", index);
52 defdb20e Blue Swirl
    qdev_prop_set_chr(&dev->qdev, "chardev", chr);
53 defdb20e Blue Swirl
    if (qdev_init(&dev->qdev) < 0) {
54 defdb20e Blue Swirl
        return false;
55 defdb20e Blue Swirl
    }
56 defdb20e Blue Swirl
    return true;
57 defdb20e Blue Swirl
}
58 defdb20e Blue Swirl
59 63858cd9 Avi Kivity
bool parallel_mm_init(MemoryRegion *address_space,
60 63858cd9 Avi Kivity
                      target_phys_addr_t base, int it_shift, qemu_irq irq,
61 defdb20e Blue Swirl
                      CharDriverState *chr);
62 87ecb68b pbrook
63 87ecb68b pbrook
/* i8259.c */
64 87ecb68b pbrook
65 c17725f4 Jan Kiszka
typedef struct PicState PicState;
66 c17725f4 Jan Kiszka
extern PicState *isa_pic;
67 48a18b3c Hervé Poussineau
qemu_irq *i8259_init(ISABus *bus, qemu_irq parent_irq);
68 c17725f4 Jan Kiszka
int pic_read_irq(PicState *s);
69 c17725f4 Jan Kiszka
int pic_get_output(PicState *s);
70 376253ec aliguori
void pic_info(Monitor *mon);
71 376253ec aliguori
void irq_info(Monitor *mon);
72 87ecb68b pbrook
73 b881fbe9 Jan Kiszka
/* Global System Interrupts */
74 96051119 Blue Swirl
75 b881fbe9 Jan Kiszka
#define GSI_NUM_PINS IOAPIC_NUM_PINS
76 845773ab Isaku Yamahata
77 b881fbe9 Jan Kiszka
typedef struct GSIState {
78 43a0db35 Jan Kiszka
    qemu_irq i8259_irq[ISA_NUM_IRQS];
79 b881fbe9 Jan Kiszka
    qemu_irq ioapic_irq[IOAPIC_NUM_PINS];
80 b881fbe9 Jan Kiszka
} GSIState;
81 b881fbe9 Jan Kiszka
82 b881fbe9 Jan Kiszka
void gsi_handler(void *opaque, int n, int level);
83 845773ab Isaku Yamahata
84 87ecb68b pbrook
/* i8254.c */
85 87ecb68b pbrook
86 87ecb68b pbrook
#define PIT_FREQ 1193182
87 87ecb68b pbrook
88 48a18b3c Hervé Poussineau
static inline ISADevice *pit_init(ISABus *bus, int base, int irq)
89 64d7e9a4 Blue Swirl
{
90 64d7e9a4 Blue Swirl
    ISADevice *dev;
91 64d7e9a4 Blue Swirl
92 48a18b3c Hervé Poussineau
    dev = isa_create(bus, "isa-pit");
93 64d7e9a4 Blue Swirl
    qdev_prop_set_uint32(&dev->qdev, "iobase", base);
94 64d7e9a4 Blue Swirl
    qdev_prop_set_uint32(&dev->qdev, "irq", irq);
95 64d7e9a4 Blue Swirl
    qdev_init_nofail(&dev->qdev);
96 64d7e9a4 Blue Swirl
97 64d7e9a4 Blue Swirl
    return dev;
98 64d7e9a4 Blue Swirl
}
99 87ecb68b pbrook
100 64d7e9a4 Blue Swirl
void pit_set_gate(ISADevice *dev, int channel, int val);
101 64d7e9a4 Blue Swirl
int pit_get_gate(ISADevice *dev, int channel);
102 64d7e9a4 Blue Swirl
int pit_get_initial_count(ISADevice *dev, int channel);
103 64d7e9a4 Blue Swirl
int pit_get_mode(ISADevice *dev, int channel);
104 64d7e9a4 Blue Swirl
int pit_get_out(ISADevice *dev, int channel, int64_t current_time);
105 87ecb68b pbrook
106 bf4f74c0 aurel32
void hpet_pit_disable(void);
107 bf4f74c0 aurel32
void hpet_pit_enable(void);
108 bf4f74c0 aurel32
109 87ecb68b pbrook
/* vmport.c */
110 48a18b3c Hervé Poussineau
static inline void vmport_init(ISABus *bus)
111 6872ef61 Blue Swirl
{
112 48a18b3c Hervé Poussineau
    isa_create_simple(bus, "vmport");
113 6872ef61 Blue Swirl
}
114 87ecb68b pbrook
void vmport_register(unsigned char command, IOPortReadFunc *func, void *opaque);
115 86d86414 Blue Swirl
void vmmouse_get_data(uint32_t *data);
116 86d86414 Blue Swirl
void vmmouse_set_data(const uint32_t *data);
117 87ecb68b pbrook
118 87ecb68b pbrook
/* pckbd.c */
119 87ecb68b pbrook
120 87ecb68b pbrook
void i8042_init(qemu_irq kbd_irq, qemu_irq mouse_irq, uint32_t io_base);
121 87ecb68b pbrook
void i8042_mm_init(qemu_irq kbd_irq, qemu_irq mouse_irq,
122 dbff76ac Richard Henderson
                   MemoryRegion *region, ram_addr_t size,
123 c227f099 Anthony Liguori
                   target_phys_addr_t mask);
124 956a3e6b Blue Swirl
void i8042_isa_mouse_fake_event(void *opaque);
125 956a3e6b Blue Swirl
void i8042_setup_a20_line(ISADevice *dev, qemu_irq *a20_out);
126 87ecb68b pbrook
127 87ecb68b pbrook
/* pc.c */
128 87ecb68b pbrook
extern int fd_bootchk;
129 87ecb68b pbrook
130 8e78eb28 Isaku Yamahata
void pc_register_ferr_irq(qemu_irq irq);
131 845773ab Isaku Yamahata
void pc_cmos_set_s3_resume(void *opaque, int irq, int level);
132 845773ab Isaku Yamahata
void pc_acpi_smi_interrupt(void *opaque, int irq, int level);
133 845773ab Isaku Yamahata
134 845773ab Isaku Yamahata
void pc_cpus_init(const char *cpu_model);
135 4aa63af1 Avi Kivity
void pc_memory_init(MemoryRegion *system_memory,
136 4aa63af1 Avi Kivity
                    const char *kernel_filename,
137 845773ab Isaku Yamahata
                    const char *kernel_cmdline,
138 845773ab Isaku Yamahata
                    const char *initrd_filename,
139 e0e7e67b Anthony PERARD
                    ram_addr_t below_4g_mem_size,
140 ae0a5466 Avi Kivity
                    ram_addr_t above_4g_mem_size,
141 4463aee6 Jan Kiszka
                    MemoryRegion *rom_memory,
142 ae0a5466 Avi Kivity
                    MemoryRegion **ram_memory);
143 845773ab Isaku Yamahata
qemu_irq *pc_allocate_cpu_irq(void);
144 48a18b3c Hervé Poussineau
DeviceState *pc_vga_init(ISABus *isa_bus, PCIBus *pci_bus);
145 48a18b3c Hervé Poussineau
void pc_basic_device_init(ISABus *isa_bus, qemu_irq *gsi,
146 1611977c Anthony PERARD
                          ISADevice **rtc_state,
147 34d4260e Kevin Wolf
                          ISADevice **floppy,
148 1611977c Anthony PERARD
                          bool no_vmport);
149 48a18b3c Hervé Poussineau
void pc_init_ne2k_isa(ISABus *bus, NICInfo *nd);
150 845773ab Isaku Yamahata
void pc_cmos_init(ram_addr_t ram_size, ram_addr_t above_4g_mem_size,
151 c0897e0c Markus Armbruster
                  const char *boot_device,
152 34d4260e Kevin Wolf
                  ISADevice *floppy, BusState *ide0, BusState *ide1,
153 63ffb564 Blue Swirl
                  ISADevice *s);
154 845773ab Isaku Yamahata
void pc_pci_device_init(PCIBus *pci_bus);
155 8e78eb28 Isaku Yamahata
156 f885f1ea Isaku Yamahata
typedef void (*cpu_set_smm_t)(int smm, void *arg);
157 f885f1ea Isaku Yamahata
void cpu_smm_register(cpu_set_smm_t callback, void *arg);
158 f885f1ea Isaku Yamahata
159 87ecb68b pbrook
/* acpi.c */
160 87ecb68b pbrook
extern int acpi_enabled;
161 80deece2 blueswir1
extern char *acpi_tables;
162 80deece2 blueswir1
extern size_t acpi_tables_len;
163 80deece2 blueswir1
164 9d5e77a2 Isaku Yamahata
void acpi_bios_init(void);
165 9d5e77a2 Isaku Yamahata
int acpi_table_add(const char *table_desc);
166 9d5e77a2 Isaku Yamahata
167 9d5e77a2 Isaku Yamahata
/* acpi_piix.c */
168 53b67b30 Blue Swirl
169 cf7a2fe2 aurel32
i2c_bus *piix4_pm_init(PCIBus *bus, int devfn, uint32_t smb_io_base,
170 53b67b30 Blue Swirl
                       qemu_irq sci_irq, qemu_irq cmos_s3, qemu_irq smi_irq,
171 53b67b30 Blue Swirl
                       int kvm_enabled);
172 87ecb68b pbrook
void piix4_smbus_register_device(SMBusDevice *dev, uint8_t addr);
173 87ecb68b pbrook
174 16b29ae1 aliguori
/* hpet.c */
175 16b29ae1 aliguori
extern int no_hpet;
176 16b29ae1 aliguori
177 87ecb68b pbrook
/* pcspk.c */
178 64d7e9a4 Blue Swirl
void pcspk_init(ISADevice *pit);
179 48a18b3c Hervé Poussineau
int pcspk_audio_init(ISABus *bus, qemu_irq *pic);
180 87ecb68b pbrook
181 87ecb68b pbrook
/* piix_pci.c */
182 0a3bacf3 Juan Quintela
struct PCII440FXState;
183 0a3bacf3 Juan Quintela
typedef struct PCII440FXState PCII440FXState;
184 0a3bacf3 Juan Quintela
185 1e39101c Avi Kivity
PCIBus *i440fx_init(PCII440FXState **pi440fx_state, int *piix_devfn,
186 aee97b84 Avi Kivity
                    qemu_irq *pic,
187 aee97b84 Avi Kivity
                    MemoryRegion *address_space_mem,
188 aee97b84 Avi Kivity
                    MemoryRegion *address_space_io,
189 ae0a5466 Avi Kivity
                    ram_addr_t ram_size,
190 ae0a5466 Avi Kivity
                    target_phys_addr_t pci_hole_start,
191 ae0a5466 Avi Kivity
                    target_phys_addr_t pci_hole_size,
192 ae0a5466 Avi Kivity
                    target_phys_addr_t pci_hole64_start,
193 ae0a5466 Avi Kivity
                    target_phys_addr_t pci_hole64_size,
194 ae0a5466 Avi Kivity
                    MemoryRegion *pci_memory,
195 ae0a5466 Avi Kivity
                    MemoryRegion *ram_memory);
196 87ecb68b pbrook
197 823e675a Juan Quintela
/* piix4.c */
198 b1d8e52e blueswir1
extern PCIDevice *piix4_dev;
199 87ecb68b pbrook
int piix4_init(PCIBus *bus, int devfn);
200 87ecb68b pbrook
201 87ecb68b pbrook
/* vga.c */
202 cb5a7aa8 malc
enum vga_retrace_method {
203 cb5a7aa8 malc
    VGA_RETRACE_DUMB,
204 cb5a7aa8 malc
    VGA_RETRACE_PRECISE
205 cb5a7aa8 malc
};
206 cb5a7aa8 malc
207 cb5a7aa8 malc
extern enum vga_retrace_method vga_retrace_method;
208 87ecb68b pbrook
209 48a18b3c Hervé Poussineau
static inline DeviceState *isa_vga_init(ISABus *bus)
210 7435b791 Blue Swirl
{
211 c74b88df Blue Swirl
    ISADevice *dev;
212 7435b791 Blue Swirl
213 48a18b3c Hervé Poussineau
    dev = isa_try_create(bus, "isa-vga");
214 c74b88df Blue Swirl
    if (!dev) {
215 c74b88df Blue Swirl
        fprintf(stderr, "Warning: isa-vga not available\n");
216 ad6d45fa Anthony Liguori
        return NULL;
217 c74b88df Blue Swirl
    }
218 c74b88df Blue Swirl
    qdev_init_nofail(&dev->qdev);
219 ad6d45fa Anthony Liguori
    return &dev->qdev;
220 7435b791 Blue Swirl
}
221 7435b791 Blue Swirl
222 ad6d45fa Anthony Liguori
DeviceState *pci_vga_init(PCIBus *bus);
223 c227f099 Anthony Liguori
int isa_vga_mm_init(target_phys_addr_t vram_base,
224 be20f9e9 Avi Kivity
                    target_phys_addr_t ctrl_base, int it_shift,
225 be20f9e9 Avi Kivity
                    MemoryRegion *address_space);
226 87ecb68b pbrook
227 87ecb68b pbrook
/* cirrus_vga.c */
228 ad6d45fa Anthony Liguori
DeviceState *pci_cirrus_vga_init(PCIBus *bus);
229 ad6d45fa Anthony Liguori
DeviceState *isa_cirrus_vga_init(MemoryRegion *address_space);
230 87ecb68b pbrook
231 87ecb68b pbrook
/* ne2000.c */
232 48a18b3c Hervé Poussineau
static inline bool isa_ne2000_init(ISABus *bus, int base, int irq, NICInfo *nd)
233 60a14ad3 Blue Swirl
{
234 60a14ad3 Blue Swirl
    ISADevice *dev;
235 87ecb68b pbrook
236 60a14ad3 Blue Swirl
    qemu_check_nic_model(nd, "ne2k_isa");
237 60a14ad3 Blue Swirl
238 48a18b3c Hervé Poussineau
    dev = isa_try_create(bus, "ne2k_isa");
239 cd1b8a8b Blue Swirl
    if (!dev) {
240 cd1b8a8b Blue Swirl
        return false;
241 cd1b8a8b Blue Swirl
    }
242 60a14ad3 Blue Swirl
    qdev_prop_set_uint32(&dev->qdev, "iobase", base);
243 60a14ad3 Blue Swirl
    qdev_prop_set_uint32(&dev->qdev, "irq",    irq);
244 60a14ad3 Blue Swirl
    qdev_set_nic_properties(&dev->qdev, nd);
245 60a14ad3 Blue Swirl
    qdev_init_nofail(&dev->qdev);
246 cd1b8a8b Blue Swirl
    return true;
247 60a14ad3 Blue Swirl
}
248 87ecb68b pbrook
249 4c5b10b7 Jes Sorensen
/* e820 types */
250 4c5b10b7 Jes Sorensen
#define E820_RAM        1
251 4c5b10b7 Jes Sorensen
#define E820_RESERVED   2
252 4c5b10b7 Jes Sorensen
#define E820_ACPI       3
253 4c5b10b7 Jes Sorensen
#define E820_NVS        4
254 4c5b10b7 Jes Sorensen
#define E820_UNUSABLE   5
255 4c5b10b7 Jes Sorensen
256 4c5b10b7 Jes Sorensen
int e820_add_entry(uint64_t, uint64_t, uint32_t);
257 4c5b10b7 Jes Sorensen
258 87ecb68b pbrook
#endif