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