]> git.proxmox.com Git - mirror_qemu.git/blame - vl.h
MIPS, ARM and SMP updates
[mirror_qemu.git] / vl.h
CommitLineData
fc01f7e7
FB
1/*
2 * QEMU System Emulator header
3 *
4 * Copyright (c) 2003 Fabrice Bellard
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * THE SOFTWARE.
23 */
24#ifndef VL_H
25#define VL_H
26
67b915a5
FB
27/* we put basic includes here to avoid repeating them in device drivers */
28#include <stdlib.h>
29#include <stdio.h>
30#include <stdarg.h>
31#include <string.h>
32#include <inttypes.h>
85571bc7 33#include <limits.h>
8a7ddc38 34#include <time.h>
67b915a5
FB
35#include <ctype.h>
36#include <errno.h>
37#include <unistd.h>
38#include <fcntl.h>
7d3505c5 39#include <sys/stat.h>
fb065187 40#include "audio/audio.h"
67b915a5
FB
41
42#ifndef O_LARGEFILE
43#define O_LARGEFILE 0
44#endif
40c3bac3
FB
45#ifndef O_BINARY
46#define O_BINARY 0
47#endif
67b915a5
FB
48
49#ifdef _WIN32
57d1a2b6
FB
50#define lseek _lseeki64
51#define ENOTSUP 4096
52/* XXX: find 64 bit version */
53#define ftruncate chsize
54
55static inline char *realpath(const char *path, char *resolved_path)
56{
57 _fullpath(resolved_path, path, _MAX_PATH);
58 return resolved_path;
59}
67b915a5 60#endif
8a7ddc38 61
ea2384d3
FB
62#ifdef QEMU_TOOL
63
64/* we use QEMU_TOOL in the command line tools which do not depend on
65 the target CPU type */
66#include "config-host.h"
67#include <setjmp.h>
68#include "osdep.h"
69#include "bswap.h"
70
71#else
72
16f62432 73#include "cpu.h"
1fddef4b 74#include "gdbstub.h"
16f62432 75
ea2384d3
FB
76#endif /* !defined(QEMU_TOOL) */
77
67b915a5
FB
78#ifndef glue
79#define xglue(x, y) x ## y
80#define glue(x, y) xglue(x, y)
81#define stringify(s) tostring(s)
82#define tostring(s) #s
83#endif
84
33e3963e 85/* vl.c */
80cabfad 86uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c);
313aa567 87
80cabfad
FB
88void hw_error(const char *fmt, ...);
89
7587cf44 90int get_image_size(const char *filename);
80cabfad
FB
91int load_image(const char *filename, uint8_t *addr);
92extern const char *bios_dir;
93
94void pstrcpy(char *buf, int buf_size, const char *str);
95char *pstrcat(char *buf, int buf_size, const char *s);
82c643ff 96int strstart(const char *str, const char *val, const char **ptr);
c4b1fcc0 97
8a7ddc38
FB
98extern int vm_running;
99
0bd48850
FB
100typedef struct vm_change_state_entry VMChangeStateEntry;
101typedef void VMChangeStateHandler(void *opaque, int running);
8a7ddc38
FB
102typedef void VMStopHandler(void *opaque, int reason);
103
0bd48850
FB
104VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
105 void *opaque);
106void qemu_del_vm_change_state_handler(VMChangeStateEntry *e);
107
8a7ddc38
FB
108int qemu_add_vm_stop_handler(VMStopHandler *cb, void *opaque);
109void qemu_del_vm_stop_handler(VMStopHandler *cb, void *opaque);
110
111void vm_start(void);
112void vm_stop(int reason);
113
bb0c6722
FB
114typedef void QEMUResetHandler(void *opaque);
115
116void qemu_register_reset(QEMUResetHandler *func, void *opaque);
117void qemu_system_reset_request(void);
118void qemu_system_shutdown_request(void);
3475187d
FB
119void qemu_system_powerdown_request(void);
120#if !defined(TARGET_SPARC)
121// Please implement a power failure function to signal the OS
122#define qemu_system_powerdown() do{}while(0)
123#else
124void qemu_system_powerdown(void);
125#endif
bb0c6722 126
ea2384d3
FB
127void main_loop_wait(int timeout);
128
aaaa7df6 129extern int audio_enabled;
fb065187
FB
130extern int sb16_enabled;
131extern int adlib_enabled;
132extern int gus_enabled;
1d14ffa9 133extern int es1370_enabled;
0ced6589
FB
134extern int ram_size;
135extern int bios_size;
ee22c2f7 136extern int rtc_utc;
1f04275e 137extern int cirrus_vga_enabled;
28b9b5af
FB
138extern int graphic_width;
139extern int graphic_height;
140extern int graphic_depth;
3d11d0eb 141extern const char *keyboard_layout;
d993e026 142extern int kqemu_allowed;
a09db21f 143extern int win2k_install_hack;
bb36d470 144extern int usb_enabled;
6a00d601 145extern int smp_cpus;
0ced6589
FB
146
147/* XXX: make it dynamic */
148#if defined (TARGET_PPC)
d5295253 149#define BIOS_SIZE ((512 + 32) * 1024)
6af0bf9c
FB
150#elif defined(TARGET_MIPS)
151#define BIOS_SIZE (128 * 1024)
0ced6589 152#else
7587cf44 153#define BIOS_SIZE ((256 + 64) * 1024)
0ced6589 154#endif
aaaa7df6 155
63066f4f
FB
156/* keyboard/mouse support */
157
158#define MOUSE_EVENT_LBUTTON 0x01
159#define MOUSE_EVENT_RBUTTON 0x02
160#define MOUSE_EVENT_MBUTTON 0x04
161
162typedef void QEMUPutKBDEvent(void *opaque, int keycode);
163typedef void QEMUPutMouseEvent(void *opaque, int dx, int dy, int dz, int buttons_state);
164
165void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque);
166void qemu_add_mouse_event_handler(QEMUPutMouseEvent *func, void *opaque);
167
168void kbd_put_keycode(int keycode);
169void kbd_mouse_event(int dx, int dy, int dz, int buttons_state);
170
82c643ff
FB
171/* keysym is a unicode code except for special keys (see QEMU_KEY_xxx
172 constants) */
173#define QEMU_KEY_ESC1(c) ((c) | 0xe100)
174#define QEMU_KEY_BACKSPACE 0x007f
175#define QEMU_KEY_UP QEMU_KEY_ESC1('A')
176#define QEMU_KEY_DOWN QEMU_KEY_ESC1('B')
177#define QEMU_KEY_RIGHT QEMU_KEY_ESC1('C')
178#define QEMU_KEY_LEFT QEMU_KEY_ESC1('D')
179#define QEMU_KEY_HOME QEMU_KEY_ESC1(1)
180#define QEMU_KEY_END QEMU_KEY_ESC1(4)
181#define QEMU_KEY_PAGEUP QEMU_KEY_ESC1(5)
182#define QEMU_KEY_PAGEDOWN QEMU_KEY_ESC1(6)
183#define QEMU_KEY_DELETE QEMU_KEY_ESC1(3)
184
185#define QEMU_KEY_CTRL_UP 0xe400
186#define QEMU_KEY_CTRL_DOWN 0xe401
187#define QEMU_KEY_CTRL_LEFT 0xe402
188#define QEMU_KEY_CTRL_RIGHT 0xe403
189#define QEMU_KEY_CTRL_HOME 0xe404
190#define QEMU_KEY_CTRL_END 0xe405
191#define QEMU_KEY_CTRL_PAGEUP 0xe406
192#define QEMU_KEY_CTRL_PAGEDOWN 0xe407
193
194void kbd_put_keysym(int keysym);
195
c20709aa
FB
196/* async I/O support */
197
198typedef void IOReadHandler(void *opaque, const uint8_t *buf, int size);
199typedef int IOCanRWHandler(void *opaque);
7c9d8e07 200typedef void IOHandler(void *opaque);
c20709aa 201
7c9d8e07
FB
202int qemu_set_fd_handler2(int fd,
203 IOCanRWHandler *fd_read_poll,
204 IOHandler *fd_read,
205 IOHandler *fd_write,
206 void *opaque);
207int qemu_set_fd_handler(int fd,
208 IOHandler *fd_read,
209 IOHandler *fd_write,
210 void *opaque);
c20709aa 211
82c643ff
FB
212/* character device */
213
214#define CHR_EVENT_BREAK 0 /* serial break char */
ea2384d3 215#define CHR_EVENT_FOCUS 1 /* focus to this terminal (modal input needed) */
82c643ff 216
2122c51a
FB
217
218
219#define CHR_IOCTL_SERIAL_SET_PARAMS 1
220typedef struct {
221 int speed;
222 int parity;
223 int data_bits;
224 int stop_bits;
225} QEMUSerialSetParams;
226
227#define CHR_IOCTL_SERIAL_SET_BREAK 2
228
229#define CHR_IOCTL_PP_READ_DATA 3
230#define CHR_IOCTL_PP_WRITE_DATA 4
231#define CHR_IOCTL_PP_READ_CONTROL 5
232#define CHR_IOCTL_PP_WRITE_CONTROL 6
233#define CHR_IOCTL_PP_READ_STATUS 7
234
82c643ff
FB
235typedef void IOEventHandler(void *opaque, int event);
236
237typedef struct CharDriverState {
238 int (*chr_write)(struct CharDriverState *s, const uint8_t *buf, int len);
239 void (*chr_add_read_handler)(struct CharDriverState *s,
240 IOCanRWHandler *fd_can_read,
241 IOReadHandler *fd_read, void *opaque);
2122c51a 242 int (*chr_ioctl)(struct CharDriverState *s, int cmd, void *arg);
82c643ff 243 IOEventHandler *chr_event;
eb45f5fe 244 void (*chr_send_event)(struct CharDriverState *chr, int event);
82c643ff
FB
245 void *opaque;
246} CharDriverState;
247
248void qemu_chr_printf(CharDriverState *s, const char *fmt, ...);
249int qemu_chr_write(CharDriverState *s, const uint8_t *buf, int len);
ea2384d3 250void qemu_chr_send_event(CharDriverState *s, int event);
82c643ff
FB
251void qemu_chr_add_read_handler(CharDriverState *s,
252 IOCanRWHandler *fd_can_read,
253 IOReadHandler *fd_read, void *opaque);
254void qemu_chr_add_event_handler(CharDriverState *s, IOEventHandler *chr_event);
2122c51a 255int qemu_chr_ioctl(CharDriverState *s, int cmd, void *arg);
f8d179e3 256
82c643ff
FB
257/* consoles */
258
259typedef struct DisplayState DisplayState;
260typedef struct TextConsole TextConsole;
261
262extern TextConsole *vga_console;
263
264TextConsole *graphic_console_init(DisplayState *ds);
265int is_active_console(TextConsole *s);
266CharDriverState *text_console_init(DisplayState *ds);
267void console_select(unsigned int index);
268
8d11df9e
FB
269/* serial ports */
270
271#define MAX_SERIAL_PORTS 4
272
273extern CharDriverState *serial_hds[MAX_SERIAL_PORTS];
274
6508fe59
FB
275/* parallel ports */
276
277#define MAX_PARALLEL_PORTS 3
278
279extern CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
280
7c9d8e07
FB
281/* VLANs support */
282
283typedef struct VLANClientState VLANClientState;
284
285struct VLANClientState {
286 IOReadHandler *fd_read;
287 void *opaque;
288 struct VLANClientState *next;
289 struct VLANState *vlan;
290 char info_str[256];
291};
292
293typedef struct VLANState {
294 int id;
295 VLANClientState *first_client;
296 struct VLANState *next;
297} VLANState;
298
299VLANState *qemu_find_vlan(int id);
300VLANClientState *qemu_new_vlan_client(VLANState *vlan,
301 IOReadHandler *fd_read, void *opaque);
302void qemu_send_packet(VLANClientState *vc, const uint8_t *buf, int size);
303
304void do_info_network(void);
305
306/* NIC info */
c4b1fcc0
FB
307
308#define MAX_NICS 8
309
7c9d8e07 310typedef struct NICInfo {
c4b1fcc0 311 uint8_t macaddr[6];
7c9d8e07
FB
312 VLANState *vlan;
313} NICInfo;
c4b1fcc0
FB
314
315extern int nb_nics;
7c9d8e07 316extern NICInfo nd_table[MAX_NICS];
8a7ddc38
FB
317
318/* timers */
319
320typedef struct QEMUClock QEMUClock;
321typedef struct QEMUTimer QEMUTimer;
322typedef void QEMUTimerCB(void *opaque);
323
324/* The real time clock should be used only for stuff which does not
325 change the virtual machine state, as it is run even if the virtual
69b91039 326 machine is stopped. The real time clock has a frequency of 1000
8a7ddc38
FB
327 Hz. */
328extern QEMUClock *rt_clock;
329
e80cfcfc 330/* The virtual clock is only run during the emulation. It is stopped
8a7ddc38
FB
331 when the virtual machine is stopped. Virtual timers use a high
332 precision clock, usually cpu cycles (use ticks_per_sec). */
333extern QEMUClock *vm_clock;
334
335int64_t qemu_get_clock(QEMUClock *clock);
336
337QEMUTimer *qemu_new_timer(QEMUClock *clock, QEMUTimerCB *cb, void *opaque);
338void qemu_free_timer(QEMUTimer *ts);
339void qemu_del_timer(QEMUTimer *ts);
340void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time);
341int qemu_timer_pending(QEMUTimer *ts);
342
343extern int64_t ticks_per_sec;
344extern int pit_min_timer_count;
345
346void cpu_enable_ticks(void);
347void cpu_disable_ticks(void);
348
349/* VM Load/Save */
350
351typedef FILE QEMUFile;
352
353void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size);
354void qemu_put_byte(QEMUFile *f, int v);
355void qemu_put_be16(QEMUFile *f, unsigned int v);
356void qemu_put_be32(QEMUFile *f, unsigned int v);
357void qemu_put_be64(QEMUFile *f, uint64_t v);
358int qemu_get_buffer(QEMUFile *f, uint8_t *buf, int size);
359int qemu_get_byte(QEMUFile *f);
360unsigned int qemu_get_be16(QEMUFile *f);
361unsigned int qemu_get_be32(QEMUFile *f);
362uint64_t qemu_get_be64(QEMUFile *f);
363
364static inline void qemu_put_be64s(QEMUFile *f, const uint64_t *pv)
365{
366 qemu_put_be64(f, *pv);
367}
368
369static inline void qemu_put_be32s(QEMUFile *f, const uint32_t *pv)
370{
371 qemu_put_be32(f, *pv);
372}
373
374static inline void qemu_put_be16s(QEMUFile *f, const uint16_t *pv)
375{
376 qemu_put_be16(f, *pv);
377}
378
379static inline void qemu_put_8s(QEMUFile *f, const uint8_t *pv)
380{
381 qemu_put_byte(f, *pv);
382}
383
384static inline void qemu_get_be64s(QEMUFile *f, uint64_t *pv)
385{
386 *pv = qemu_get_be64(f);
387}
388
389static inline void qemu_get_be32s(QEMUFile *f, uint32_t *pv)
390{
391 *pv = qemu_get_be32(f);
392}
393
394static inline void qemu_get_be16s(QEMUFile *f, uint16_t *pv)
395{
396 *pv = qemu_get_be16(f);
397}
398
399static inline void qemu_get_8s(QEMUFile *f, uint8_t *pv)
400{
401 *pv = qemu_get_byte(f);
402}
403
c27004ec
FB
404#if TARGET_LONG_BITS == 64
405#define qemu_put_betl qemu_put_be64
406#define qemu_get_betl qemu_get_be64
407#define qemu_put_betls qemu_put_be64s
408#define qemu_get_betls qemu_get_be64s
409#else
410#define qemu_put_betl qemu_put_be32
411#define qemu_get_betl qemu_get_be32
412#define qemu_put_betls qemu_put_be32s
413#define qemu_get_betls qemu_get_be32s
414#endif
415
8a7ddc38
FB
416int64_t qemu_ftell(QEMUFile *f);
417int64_t qemu_fseek(QEMUFile *f, int64_t pos, int whence);
418
419typedef void SaveStateHandler(QEMUFile *f, void *opaque);
420typedef int LoadStateHandler(QEMUFile *f, void *opaque, int version_id);
421
422int qemu_loadvm(const char *filename);
423int qemu_savevm(const char *filename);
424int register_savevm(const char *idstr,
425 int instance_id,
426 int version_id,
427 SaveStateHandler *save_state,
428 LoadStateHandler *load_state,
429 void *opaque);
430void qemu_get_timer(QEMUFile *f, QEMUTimer *ts);
431void qemu_put_timer(QEMUFile *f, QEMUTimer *ts);
c4b1fcc0 432
6a00d601
FB
433void cpu_save(QEMUFile *f, void *opaque);
434int cpu_load(QEMUFile *f, void *opaque, int version_id);
435
fc01f7e7
FB
436/* block.c */
437typedef struct BlockDriverState BlockDriverState;
ea2384d3
FB
438typedef struct BlockDriver BlockDriver;
439
440extern BlockDriver bdrv_raw;
441extern BlockDriver bdrv_cow;
442extern BlockDriver bdrv_qcow;
443extern BlockDriver bdrv_vmdk;
3c56521b 444extern BlockDriver bdrv_cloop;
585d0ed9 445extern BlockDriver bdrv_dmg;
a8753c34 446extern BlockDriver bdrv_bochs;
6a0f9e82 447extern BlockDriver bdrv_vpc;
de167e41 448extern BlockDriver bdrv_vvfat;
ea2384d3
FB
449
450void bdrv_init(void);
451BlockDriver *bdrv_find_format(const char *format_name);
452int bdrv_create(BlockDriver *drv,
453 const char *filename, int64_t size_in_sectors,
454 const char *backing_file, int flags);
c4b1fcc0
FB
455BlockDriverState *bdrv_new(const char *device_name);
456void bdrv_delete(BlockDriverState *bs);
457int bdrv_open(BlockDriverState *bs, const char *filename, int snapshot);
ea2384d3
FB
458int bdrv_open2(BlockDriverState *bs, const char *filename, int snapshot,
459 BlockDriver *drv);
fc01f7e7
FB
460void bdrv_close(BlockDriverState *bs);
461int bdrv_read(BlockDriverState *bs, int64_t sector_num,
462 uint8_t *buf, int nb_sectors);
463int bdrv_write(BlockDriverState *bs, int64_t sector_num,
464 const uint8_t *buf, int nb_sectors);
465void bdrv_get_geometry(BlockDriverState *bs, int64_t *nb_sectors_ptr);
33e3963e 466int bdrv_commit(BlockDriverState *bs);
77fef8c1 467void bdrv_set_boot_sector(BlockDriverState *bs, const uint8_t *data, int size);
33e3963e 468
c4b1fcc0
FB
469#define BDRV_TYPE_HD 0
470#define BDRV_TYPE_CDROM 1
471#define BDRV_TYPE_FLOPPY 2
46d4767d
FB
472#define BIOS_ATA_TRANSLATION_AUTO 0
473#define BIOS_ATA_TRANSLATION_NONE 1
474#define BIOS_ATA_TRANSLATION_LBA 2
c4b1fcc0
FB
475
476void bdrv_set_geometry_hint(BlockDriverState *bs,
477 int cyls, int heads, int secs);
478void bdrv_set_type_hint(BlockDriverState *bs, int type);
46d4767d 479void bdrv_set_translation_hint(BlockDriverState *bs, int translation);
c4b1fcc0
FB
480void bdrv_get_geometry_hint(BlockDriverState *bs,
481 int *pcyls, int *pheads, int *psecs);
482int bdrv_get_type_hint(BlockDriverState *bs);
46d4767d 483int bdrv_get_translation_hint(BlockDriverState *bs);
c4b1fcc0
FB
484int bdrv_is_removable(BlockDriverState *bs);
485int bdrv_is_read_only(BlockDriverState *bs);
486int bdrv_is_inserted(BlockDriverState *bs);
487int bdrv_is_locked(BlockDriverState *bs);
488void bdrv_set_locked(BlockDriverState *bs, int locked);
489void bdrv_set_change_cb(BlockDriverState *bs,
490 void (*change_cb)(void *opaque), void *opaque);
ea2384d3 491void bdrv_get_format(BlockDriverState *bs, char *buf, int buf_size);
c4b1fcc0
FB
492void bdrv_info(void);
493BlockDriverState *bdrv_find(const char *name);
82c643ff 494void bdrv_iterate(void (*it)(void *opaque, const char *name), void *opaque);
ea2384d3
FB
495int bdrv_is_encrypted(BlockDriverState *bs);
496int bdrv_set_key(BlockDriverState *bs, const char *key);
497void bdrv_iterate_format(void (*it)(void *opaque, const char *name),
498 void *opaque);
499const char *bdrv_get_device_name(BlockDriverState *bs);
c4b1fcc0 500
ea2384d3
FB
501int qcow_get_cluster_size(BlockDriverState *bs);
502int qcow_compress_cluster(BlockDriverState *bs, int64_t sector_num,
503 const uint8_t *buf);
504
505#ifndef QEMU_TOOL
54fa5af5
FB
506
507typedef void QEMUMachineInitFunc(int ram_size, int vga_ram_size,
508 int boot_device,
509 DisplayState *ds, const char **fd_filename, int snapshot,
510 const char *kernel_filename, const char *kernel_cmdline,
511 const char *initrd_filename);
512
513typedef struct QEMUMachine {
514 const char *name;
515 const char *desc;
516 QEMUMachineInitFunc *init;
517 struct QEMUMachine *next;
518} QEMUMachine;
519
520int qemu_register_machine(QEMUMachine *m);
521
522typedef void SetIRQFunc(void *opaque, int irq_num, int level);
3de388f6 523typedef void IRQRequestFunc(void *opaque, int level);
54fa5af5 524
26aa7d72
FB
525/* ISA bus */
526
527extern target_phys_addr_t isa_mem_base;
528
529typedef void (IOPortWriteFunc)(void *opaque, uint32_t address, uint32_t data);
530typedef uint32_t (IOPortReadFunc)(void *opaque, uint32_t address);
531
532int register_ioport_read(int start, int length, int size,
533 IOPortReadFunc *func, void *opaque);
534int register_ioport_write(int start, int length, int size,
535 IOPortWriteFunc *func, void *opaque);
69b91039
FB
536void isa_unassign_ioport(int start, int length);
537
538/* PCI bus */
539
69b91039
FB
540extern target_phys_addr_t pci_mem_base;
541
46e50e9d 542typedef struct PCIBus PCIBus;
69b91039
FB
543typedef struct PCIDevice PCIDevice;
544
545typedef void PCIConfigWriteFunc(PCIDevice *pci_dev,
546 uint32_t address, uint32_t data, int len);
547typedef uint32_t PCIConfigReadFunc(PCIDevice *pci_dev,
548 uint32_t address, int len);
549typedef void PCIMapIORegionFunc(PCIDevice *pci_dev, int region_num,
550 uint32_t addr, uint32_t size, int type);
551
552#define PCI_ADDRESS_SPACE_MEM 0x00
553#define PCI_ADDRESS_SPACE_IO 0x01
554#define PCI_ADDRESS_SPACE_MEM_PREFETCH 0x08
555
556typedef struct PCIIORegion {
5768f5ac 557 uint32_t addr; /* current PCI mapping address. -1 means not mapped */
69b91039
FB
558 uint32_t size;
559 uint8_t type;
560 PCIMapIORegionFunc *map_func;
561} PCIIORegion;
562
8a8696a3
FB
563#define PCI_ROM_SLOT 6
564#define PCI_NUM_REGIONS 7
69b91039
FB
565struct PCIDevice {
566 /* PCI config space */
567 uint8_t config[256];
568
569 /* the following fields are read only */
46e50e9d 570 PCIBus *bus;
69b91039
FB
571 int devfn;
572 char name[64];
8a8696a3 573 PCIIORegion io_regions[PCI_NUM_REGIONS];
69b91039
FB
574
575 /* do not access the following fields */
576 PCIConfigReadFunc *config_read;
577 PCIConfigWriteFunc *config_write;
5768f5ac 578 int irq_index;
69b91039
FB
579};
580
46e50e9d
FB
581PCIDevice *pci_register_device(PCIBus *bus, const char *name,
582 int instance_size, int devfn,
69b91039
FB
583 PCIConfigReadFunc *config_read,
584 PCIConfigWriteFunc *config_write);
585
586void pci_register_io_region(PCIDevice *pci_dev, int region_num,
587 uint32_t size, int type,
588 PCIMapIORegionFunc *map_func);
589
5768f5ac
FB
590void pci_set_irq(PCIDevice *pci_dev, int irq_num, int level);
591
592uint32_t pci_default_read_config(PCIDevice *d,
593 uint32_t address, int len);
594void pci_default_write_config(PCIDevice *d,
595 uint32_t address, uint32_t val, int len);
30ca2aab
FB
596void generic_pci_save(QEMUFile* f, void *opaque);
597int generic_pci_load(QEMUFile* f, void *opaque, int version_id);
5768f5ac 598
9995c51f
FB
599extern struct PIIX3State *piix3_state;
600
46e50e9d
FB
601PCIBus *i440fx_init(void);
602void piix3_init(PCIBus *bus);
69b91039 603void pci_bios_init(void);
5768f5ac 604void pci_info(void);
26aa7d72 605
77d4bc34 606/* temporary: will be moved in platform specific file */
54fa5af5 607void pci_set_pic(PCIBus *bus, SetIRQFunc *set_irq, void *irq_opaque);
46e50e9d 608PCIBus *pci_prep_init(void);
54fa5af5 609PCIBus *pci_grackle_init(uint32_t base);
46e50e9d 610PCIBus *pci_pmac_init(void);
83469015 611PCIBus *pci_apb_init(target_ulong special_base, target_ulong mem_base);
77d4bc34 612
28b9b5af
FB
613/* openpic.c */
614typedef struct openpic_t openpic_t;
54fa5af5 615void openpic_set_irq(void *opaque, int n_IRQ, int level);
7668a27f
FB
616openpic_t *openpic_init (PCIBus *bus, int *pmem_index, int nb_cpus,
617 CPUState **envp);
28b9b5af 618
54fa5af5
FB
619/* heathrow_pic.c */
620typedef struct HeathrowPICS HeathrowPICS;
621void heathrow_pic_set_irq(void *opaque, int num, int level);
622HeathrowPICS *heathrow_pic_init(int *pmem_index);
623
313aa567
FB
624/* vga.c */
625
4fa0f5d2 626#define VGA_RAM_SIZE (4096 * 1024)
313aa567 627
82c643ff 628struct DisplayState {
313aa567
FB
629 uint8_t *data;
630 int linesize;
631 int depth;
82c643ff
FB
632 int width;
633 int height;
313aa567
FB
634 void (*dpy_update)(struct DisplayState *s, int x, int y, int w, int h);
635 void (*dpy_resize)(struct DisplayState *s, int w, int h);
636 void (*dpy_refresh)(struct DisplayState *s);
82c643ff 637};
313aa567
FB
638
639static inline void dpy_update(DisplayState *s, int x, int y, int w, int h)
640{
641 s->dpy_update(s, x, y, w, h);
642}
643
644static inline void dpy_resize(DisplayState *s, int w, int h)
645{
646 s->dpy_resize(s, w, h);
647}
648
46e50e9d 649int vga_initialize(PCIBus *bus, DisplayState *ds, uint8_t *vga_ram_base,
d5295253
FB
650 unsigned long vga_ram_offset, int vga_ram_size,
651 unsigned long vga_bios_offset, int vga_bios_size);
313aa567 652void vga_update_display(void);
ee38b4c8 653void vga_invalidate_display(void);
59a983b9 654void vga_screen_dump(const char *filename);
313aa567 655
d6bfa22f 656/* cirrus_vga.c */
46e50e9d 657void pci_cirrus_vga_init(PCIBus *bus, DisplayState *ds, uint8_t *vga_ram_base,
d6bfa22f 658 unsigned long vga_ram_offset, int vga_ram_size);
d6bfa22f
FB
659void isa_cirrus_vga_init(DisplayState *ds, uint8_t *vga_ram_base,
660 unsigned long vga_ram_offset, int vga_ram_size);
661
313aa567 662/* sdl.c */
d63d307f 663void sdl_display_init(DisplayState *ds, int full_screen);
313aa567 664
da4dbf74
FB
665/* cocoa.m */
666void cocoa_display_init(DisplayState *ds, int full_screen);
667
5391d806
FB
668/* ide.c */
669#define MAX_DISKS 4
670
671extern BlockDriverState *bs_table[MAX_DISKS];
672
69b91039
FB
673void isa_ide_init(int iobase, int iobase2, int irq,
674 BlockDriverState *hd0, BlockDriverState *hd1);
54fa5af5
FB
675void pci_cmd646_ide_init(PCIBus *bus, BlockDriverState **hd_table,
676 int secondary_ide_enabled);
46e50e9d 677void pci_piix3_ide_init(PCIBus *bus, BlockDriverState **hd_table);
28b9b5af 678int pmac_ide_init (BlockDriverState **hd_table,
54fa5af5 679 SetIRQFunc *set_irq, void *irq_opaque, int irq);
5391d806 680
1d14ffa9 681/* es1370.c */
c0fe3827 682int es1370_init (PCIBus *bus, AudioState *s);
1d14ffa9 683
fb065187 684/* sb16.c */
c0fe3827 685int SB16_init (AudioState *s);
fb065187
FB
686
687/* adlib.c */
c0fe3827 688int Adlib_init (AudioState *s);
fb065187
FB
689
690/* gus.c */
c0fe3827 691int GUS_init (AudioState *s);
27503323
FB
692
693/* dma.c */
85571bc7 694typedef int (*DMA_transfer_handler) (void *opaque, int nchan, int pos, int size);
27503323 695int DMA_get_channel_mode (int nchan);
85571bc7
FB
696int DMA_read_memory (int nchan, void *buf, int pos, int size);
697int DMA_write_memory (int nchan, void *buf, int pos, int size);
27503323
FB
698void DMA_hold_DREQ (int nchan);
699void DMA_release_DREQ (int nchan);
16f62432 700void DMA_schedule(int nchan);
27503323 701void DMA_run (void);
28b9b5af 702void DMA_init (int high_page_enable);
27503323 703void DMA_register_channel (int nchan,
85571bc7
FB
704 DMA_transfer_handler transfer_handler,
705 void *opaque);
7138fcfb
FB
706/* fdc.c */
707#define MAX_FD 2
708extern BlockDriverState *fd_table[MAX_FD];
709
baca51fa
FB
710typedef struct fdctrl_t fdctrl_t;
711
712fdctrl_t *fdctrl_init (int irq_lvl, int dma_chann, int mem_mapped,
713 uint32_t io_base,
714 BlockDriverState **fds);
715int fdctrl_get_drive_type(fdctrl_t *fdctrl, int drive_num);
7138fcfb 716
80cabfad
FB
717/* ne2000.c */
718
7c9d8e07
FB
719void isa_ne2000_init(int base, int irq, NICInfo *nd);
720void pci_ne2000_init(PCIBus *bus, NICInfo *nd);
80cabfad
FB
721
722/* pckbd.c */
723
80cabfad
FB
724void kbd_init(void);
725
726/* mc146818rtc.c */
727
8a7ddc38 728typedef struct RTCState RTCState;
80cabfad 729
8a7ddc38
FB
730RTCState *rtc_init(int base, int irq);
731void rtc_set_memory(RTCState *s, int addr, int val);
732void rtc_set_date(RTCState *s, const struct tm *tm);
80cabfad
FB
733
734/* serial.c */
735
c4b1fcc0 736typedef struct SerialState SerialState;
e5d13e2f
FB
737SerialState *serial_init(SetIRQFunc *set_irq, void *opaque,
738 int base, int irq, CharDriverState *chr);
739SerialState *serial_mm_init (SetIRQFunc *set_irq, void *opaque,
740 target_ulong base, int it_shift,
741 int irq, CharDriverState *chr);
80cabfad 742
6508fe59
FB
743/* parallel.c */
744
745typedef struct ParallelState ParallelState;
746ParallelState *parallel_init(int base, int irq, CharDriverState *chr);
747
80cabfad
FB
748/* i8259.c */
749
3de388f6
FB
750typedef struct PicState2 PicState2;
751extern PicState2 *isa_pic;
80cabfad 752void pic_set_irq(int irq, int level);
54fa5af5 753void pic_set_irq_new(void *opaque, int irq, int level);
3de388f6 754PicState2 *pic_init(IRQRequestFunc *irq_request, void *irq_request_opaque);
d592d303
FB
755void pic_set_alt_irq_func(PicState2 *s, SetIRQFunc *alt_irq_func,
756 void *alt_irq_opaque);
3de388f6
FB
757int pic_read_irq(PicState2 *s);
758void pic_update_irq(PicState2 *s);
759uint32_t pic_intack_read(PicState2 *s);
c20709aa 760void pic_info(void);
4a0fb71e 761void irq_info(void);
80cabfad 762
c27004ec 763/* APIC */
d592d303
FB
764typedef struct IOAPICState IOAPICState;
765
c27004ec
FB
766int apic_init(CPUState *env);
767int apic_get_interrupt(CPUState *env);
d592d303
FB
768IOAPICState *ioapic_init(void);
769void ioapic_set_irq(void *opaque, int vector, int level);
c27004ec 770
80cabfad
FB
771/* i8254.c */
772
773#define PIT_FREQ 1193182
774
ec844b96
FB
775typedef struct PITState PITState;
776
777PITState *pit_init(int base, int irq);
778void pit_set_gate(PITState *pit, int channel, int val);
779int pit_get_gate(PITState *pit, int channel);
780int pit_get_out(PITState *pit, int channel, int64_t current_time);
80cabfad
FB
781
782/* pc.c */
54fa5af5 783extern QEMUMachine pc_machine;
3dbbdc25 784extern QEMUMachine isapc_machine;
80cabfad 785
6a00d601
FB
786void ioport_set_a20(int enable);
787int ioport_get_a20(void);
788
26aa7d72 789/* ppc.c */
54fa5af5
FB
790extern QEMUMachine prep_machine;
791extern QEMUMachine core99_machine;
792extern QEMUMachine heathrow_machine;
793
6af0bf9c
FB
794/* mips_r4k.c */
795extern QEMUMachine mips_machine;
796
8cc43fef
FB
797#ifdef TARGET_PPC
798ppc_tb_t *cpu_ppc_tb_init (CPUState *env, uint32_t freq);
799#endif
64201201 800void PREP_debug_write (void *opaque, uint32_t addr, uint32_t val);
77d4bc34
FB
801
802extern CPUWriteMemoryFunc *PPC_io_write[];
803extern CPUReadMemoryFunc *PPC_io_read[];
54fa5af5 804void PPC_debug_write (void *opaque, uint32_t addr, uint32_t val);
26aa7d72 805
e95c8d51 806/* sun4m.c */
54fa5af5 807extern QEMUMachine sun4m_machine;
e80cfcfc 808uint32_t iommu_translate(uint32_t addr);
ba3c64fb 809void pic_set_irq_cpu(int irq, int level, unsigned int cpu);
e95c8d51
FB
810
811/* iommu.c */
e80cfcfc
FB
812void *iommu_init(uint32_t addr);
813uint32_t iommu_translate_local(void *opaque, uint32_t addr);
e95c8d51
FB
814
815/* lance.c */
7c9d8e07 816void lance_init(NICInfo *nd, int irq, uint32_t leaddr, uint32_t ledaddr);
e95c8d51
FB
817
818/* tcx.c */
e80cfcfc 819void *tcx_init(DisplayState *ds, uint32_t addr, uint8_t *vram_base,
6f7e9aec 820 unsigned long vram_offset, int vram_size, int width, int height);
e80cfcfc
FB
821void tcx_update_display(void *opaque);
822void tcx_invalidate_display(void *opaque);
823void tcx_screen_dump(void *opaque, const char *filename);
824
825/* slavio_intctl.c */
826void *slavio_intctl_init();
ba3c64fb 827void slavio_intctl_set_cpu(void *opaque, unsigned int cpu, CPUState *env);
e80cfcfc
FB
828void slavio_pic_info(void *opaque);
829void slavio_irq_info(void *opaque);
830void slavio_pic_set_irq(void *opaque, int irq, int level);
ba3c64fb 831void slavio_pic_set_irq_cpu(void *opaque, int irq, int level, unsigned int cpu);
e95c8d51
FB
832
833/* magic-load.c */
e80cfcfc
FB
834int load_elf(const char *filename, uint8_t *addr);
835int load_aout(const char *filename, uint8_t *addr);
836
837/* slavio_timer.c */
ba3c64fb 838void slavio_timer_init(uint32_t addr, int irq, int mode, unsigned int cpu);
8d5f07fa 839
e80cfcfc
FB
840/* slavio_serial.c */
841SerialState *slavio_serial_init(int base, int irq, CharDriverState *chr1, CharDriverState *chr2);
842void slavio_serial_ms_kbd_init(int base, int irq);
e95c8d51 843
3475187d
FB
844/* slavio_misc.c */
845void *slavio_misc_init(uint32_t base, int irq);
846void slavio_set_power_fail(void *opaque, int power_failing);
847
6f7e9aec
FB
848/* esp.c */
849void esp_init(BlockDriverState **bd, int irq, uint32_t espaddr, uint32_t espdaddr);
850
3475187d
FB
851/* sun4u.c */
852extern QEMUMachine sun4u_machine;
853
64201201
FB
854/* NVRAM helpers */
855#include "hw/m48t59.h"
856
857void NVRAM_set_byte (m48t59_t *nvram, uint32_t addr, uint8_t value);
858uint8_t NVRAM_get_byte (m48t59_t *nvram, uint32_t addr);
859void NVRAM_set_word (m48t59_t *nvram, uint32_t addr, uint16_t value);
860uint16_t NVRAM_get_word (m48t59_t *nvram, uint32_t addr);
861void NVRAM_set_lword (m48t59_t *nvram, uint32_t addr, uint32_t value);
862uint32_t NVRAM_get_lword (m48t59_t *nvram, uint32_t addr);
863void NVRAM_set_string (m48t59_t *nvram, uint32_t addr,
864 const unsigned char *str, uint32_t max);
865int NVRAM_get_string (m48t59_t *nvram, uint8_t *dst, uint16_t addr, int max);
866void NVRAM_set_crc (m48t59_t *nvram, uint32_t addr,
867 uint32_t start, uint32_t count);
868int PPC_NVRAM_set_params (m48t59_t *nvram, uint16_t NVRAM_size,
869 const unsigned char *arch,
870 uint32_t RAM_size, int boot_device,
871 uint32_t kernel_image, uint32_t kernel_size,
28b9b5af 872 const char *cmdline,
64201201 873 uint32_t initrd_image, uint32_t initrd_size,
28b9b5af
FB
874 uint32_t NVRAM_image,
875 int width, int height, int depth);
64201201 876
63066f4f
FB
877/* adb.c */
878
879#define MAX_ADB_DEVICES 16
880
e2733d20 881#define ADB_MAX_OUT_LEN 16
63066f4f 882
e2733d20 883typedef struct ADBDevice ADBDevice;
63066f4f 884
e2733d20
FB
885/* buf = NULL means polling */
886typedef int ADBDeviceRequest(ADBDevice *d, uint8_t *buf_out,
887 const uint8_t *buf, int len);
12c28fed
FB
888typedef int ADBDeviceReset(ADBDevice *d);
889
63066f4f
FB
890struct ADBDevice {
891 struct ADBBusState *bus;
892 int devaddr;
893 int handler;
e2733d20 894 ADBDeviceRequest *devreq;
12c28fed 895 ADBDeviceReset *devreset;
63066f4f
FB
896 void *opaque;
897};
898
899typedef struct ADBBusState {
900 ADBDevice devices[MAX_ADB_DEVICES];
901 int nb_devices;
e2733d20 902 int poll_index;
63066f4f
FB
903} ADBBusState;
904
e2733d20
FB
905int adb_request(ADBBusState *s, uint8_t *buf_out,
906 const uint8_t *buf, int len);
907int adb_poll(ADBBusState *s, uint8_t *buf_out);
63066f4f
FB
908
909ADBDevice *adb_register_device(ADBBusState *s, int devaddr,
e2733d20 910 ADBDeviceRequest *devreq,
12c28fed 911 ADBDeviceReset *devreset,
63066f4f
FB
912 void *opaque);
913void adb_kbd_init(ADBBusState *bus);
914void adb_mouse_init(ADBBusState *bus);
915
916/* cuda.c */
917
918extern ADBBusState adb_bus;
54fa5af5 919int cuda_init(SetIRQFunc *set_irq, void *irq_opaque, int irq);
63066f4f 920
bb36d470
FB
921#include "hw/usb.h"
922
a594cfbf
FB
923/* usb ports of the VM */
924
925#define MAX_VM_USB_PORTS 8
926
927extern USBPort *vm_usb_ports[MAX_VM_USB_PORTS];
928extern USBDevice *vm_usb_hub;
929
930void do_usb_add(const char *devname);
931void do_usb_del(const char *devname);
932void usb_info(void);
933
b5ff1b31
FB
934/* integratorcp.c */
935extern QEMUMachine integratorcp_machine;
936
daa57963
FB
937/* ps2.c */
938void *ps2_kbd_init(void (*update_irq)(void *, int), void *update_arg);
939void *ps2_mouse_init(void (*update_irq)(void *, int), void *update_arg);
940void ps2_write_mouse(void *, int val);
941void ps2_write_keyboard(void *, int val);
942uint32_t ps2_read_data(void *);
943void ps2_queue(void *, int b);
944
80337b66
FB
945/* smc91c111.c */
946void smc91c111_init(NICInfo *, uint32_t, void *, int);
947
ea2384d3
FB
948#endif /* defined(QEMU_TOOL) */
949
c4b1fcc0 950/* monitor.c */
82c643ff 951void monitor_init(CharDriverState *hd, int show_banner);
ea2384d3
FB
952void term_puts(const char *str);
953void term_vprintf(const char *fmt, va_list ap);
40c3bac3 954void term_printf(const char *fmt, ...) __attribute__ ((__format__ (__printf__, 1, 2)));
c4b1fcc0
FB
955void term_flush(void);
956void term_print_help(void);
ea2384d3
FB
957void monitor_readline(const char *prompt, int is_password,
958 char *buf, int buf_size);
959
960/* readline.c */
961typedef void ReadLineFunc(void *opaque, const char *str);
962
963extern int completion_index;
964void add_completion(const char *str);
965void readline_handle_byte(int ch);
966void readline_find_completion(const char *cmdline);
967const char *readline_get_history(unsigned int index);
968void readline_start(const char *prompt, int is_password,
969 ReadLineFunc *readline_func, void *opaque);
c4b1fcc0 970
5e6ad6f9
FB
971void kqemu_record_dump(void);
972
fc01f7e7 973#endif /* VL_H */