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