]> Git Repo - qemu.git/blame - vl.h
Dynamically allocate AIO Completion Blocks.
[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>
67b915a5
FB
40
41#ifndef O_LARGEFILE
42#define O_LARGEFILE 0
43#endif
40c3bac3
FB
44#ifndef O_BINARY
45#define O_BINARY 0
46#endif
67b915a5
FB
47
48#ifdef _WIN32
a18e524a 49#include <windows.h>
ac62f715 50#define fsync _commit
57d1a2b6
FB
51#define lseek _lseeki64
52#define ENOTSUP 4096
beac80cd
FB
53extern int qemu_ftruncate64(int, int64_t);
54#define ftruncate qemu_ftruncate64
55
57d1a2b6
FB
56
57static inline char *realpath(const char *path, char *resolved_path)
58{
59 _fullpath(resolved_path, path, _MAX_PATH);
60 return resolved_path;
61}
ec3757de
FB
62
63#define PRId64 "I64d"
26a76461
FB
64#define PRIx64 "I64x"
65#define PRIu64 "I64u"
66#define PRIo64 "I64o"
67b915a5 67#endif
8a7ddc38 68
ea2384d3
FB
69#ifdef QEMU_TOOL
70
71/* we use QEMU_TOOL in the command line tools which do not depend on
72 the target CPU type */
73#include "config-host.h"
74#include <setjmp.h>
75#include "osdep.h"
76#include "bswap.h"
77
78#else
79
4f209290 80#include "audio/audio.h"
16f62432 81#include "cpu.h"
1fddef4b 82#include "gdbstub.h"
16f62432 83
ea2384d3
FB
84#endif /* !defined(QEMU_TOOL) */
85
67b915a5
FB
86#ifndef glue
87#define xglue(x, y) x ## y
88#define glue(x, y) xglue(x, y)
89#define stringify(s) tostring(s)
90#define tostring(s) #s
91#endif
92
24236869
FB
93#ifndef MIN
94#define MIN(a, b) (((a) < (b)) ? (a) : (b))
95#endif
96#ifndef MAX
97#define MAX(a, b) (((a) > (b)) ? (a) : (b))
98#endif
99
33e3963e 100/* vl.c */
80cabfad 101uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c);
313aa567 102
80cabfad
FB
103void hw_error(const char *fmt, ...);
104
80cabfad
FB
105extern const char *bios_dir;
106
107void pstrcpy(char *buf, int buf_size, const char *str);
108char *pstrcat(char *buf, int buf_size, const char *s);
82c643ff 109int strstart(const char *str, const char *val, const char **ptr);
c4b1fcc0 110
8a7ddc38
FB
111extern int vm_running;
112
0bd48850
FB
113typedef struct vm_change_state_entry VMChangeStateEntry;
114typedef void VMChangeStateHandler(void *opaque, int running);
8a7ddc38
FB
115typedef void VMStopHandler(void *opaque, int reason);
116
0bd48850
FB
117VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
118 void *opaque);
119void qemu_del_vm_change_state_handler(VMChangeStateEntry *e);
120
8a7ddc38
FB
121int qemu_add_vm_stop_handler(VMStopHandler *cb, void *opaque);
122void qemu_del_vm_stop_handler(VMStopHandler *cb, void *opaque);
123
124void vm_start(void);
125void vm_stop(int reason);
126
bb0c6722
FB
127typedef void QEMUResetHandler(void *opaque);
128
129void qemu_register_reset(QEMUResetHandler *func, void *opaque);
130void qemu_system_reset_request(void);
131void qemu_system_shutdown_request(void);
3475187d
FB
132void qemu_system_powerdown_request(void);
133#if !defined(TARGET_SPARC)
134// Please implement a power failure function to signal the OS
135#define qemu_system_powerdown() do{}while(0)
136#else
137void qemu_system_powerdown(void);
138#endif
bb0c6722 139
ea2384d3
FB
140void main_loop_wait(int timeout);
141
0ced6589
FB
142extern int ram_size;
143extern int bios_size;
ee22c2f7 144extern int rtc_utc;
1f04275e 145extern int cirrus_vga_enabled;
28b9b5af
FB
146extern int graphic_width;
147extern int graphic_height;
148extern int graphic_depth;
3d11d0eb 149extern const char *keyboard_layout;
d993e026 150extern int kqemu_allowed;
a09db21f 151extern int win2k_install_hack;
bb36d470 152extern int usb_enabled;
6a00d601 153extern int smp_cpus;
0ced6589
FB
154
155/* XXX: make it dynamic */
75956cf0 156#if defined (TARGET_PPC) || defined (TARGET_SPARC64)
d5295253 157#define BIOS_SIZE ((512 + 32) * 1024)
6af0bf9c
FB
158#elif defined(TARGET_MIPS)
159#define BIOS_SIZE (128 * 1024)
0ced6589 160#else
7587cf44 161#define BIOS_SIZE ((256 + 64) * 1024)
0ced6589 162#endif
aaaa7df6 163
63066f4f
FB
164/* keyboard/mouse support */
165
166#define MOUSE_EVENT_LBUTTON 0x01
167#define MOUSE_EVENT_RBUTTON 0x02
168#define MOUSE_EVENT_MBUTTON 0x04
169
170typedef void QEMUPutKBDEvent(void *opaque, int keycode);
171typedef void QEMUPutMouseEvent(void *opaque, int dx, int dy, int dz, int buttons_state);
172
173void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque);
09b26c5e 174void qemu_add_mouse_event_handler(QEMUPutMouseEvent *func, void *opaque, int absolute);
63066f4f
FB
175
176void kbd_put_keycode(int keycode);
177void kbd_mouse_event(int dx, int dy, int dz, int buttons_state);
09b26c5e 178int kbd_mouse_is_absolute(void);
63066f4f 179
82c643ff
FB
180/* keysym is a unicode code except for special keys (see QEMU_KEY_xxx
181 constants) */
182#define QEMU_KEY_ESC1(c) ((c) | 0xe100)
183#define QEMU_KEY_BACKSPACE 0x007f
184#define QEMU_KEY_UP QEMU_KEY_ESC1('A')
185#define QEMU_KEY_DOWN QEMU_KEY_ESC1('B')
186#define QEMU_KEY_RIGHT QEMU_KEY_ESC1('C')
187#define QEMU_KEY_LEFT QEMU_KEY_ESC1('D')
188#define QEMU_KEY_HOME QEMU_KEY_ESC1(1)
189#define QEMU_KEY_END QEMU_KEY_ESC1(4)
190#define QEMU_KEY_PAGEUP QEMU_KEY_ESC1(5)
191#define QEMU_KEY_PAGEDOWN QEMU_KEY_ESC1(6)
192#define QEMU_KEY_DELETE QEMU_KEY_ESC1(3)
193
194#define QEMU_KEY_CTRL_UP 0xe400
195#define QEMU_KEY_CTRL_DOWN 0xe401
196#define QEMU_KEY_CTRL_LEFT 0xe402
197#define QEMU_KEY_CTRL_RIGHT 0xe403
198#define QEMU_KEY_CTRL_HOME 0xe404
199#define QEMU_KEY_CTRL_END 0xe405
200#define QEMU_KEY_CTRL_PAGEUP 0xe406
201#define QEMU_KEY_CTRL_PAGEDOWN 0xe407
202
203void kbd_put_keysym(int keysym);
204
c20709aa
FB
205/* async I/O support */
206
207typedef void IOReadHandler(void *opaque, const uint8_t *buf, int size);
208typedef int IOCanRWHandler(void *opaque);
7c9d8e07 209typedef void IOHandler(void *opaque);
c20709aa 210
7c9d8e07
FB
211int qemu_set_fd_handler2(int fd,
212 IOCanRWHandler *fd_read_poll,
213 IOHandler *fd_read,
214 IOHandler *fd_write,
215 void *opaque);
216int qemu_set_fd_handler(int fd,
217 IOHandler *fd_read,
218 IOHandler *fd_write,
219 void *opaque);
c20709aa 220
f331110f
FB
221/* Polling handling */
222
223/* return TRUE if no sleep should be done afterwards */
224typedef int PollingFunc(void *opaque);
225
226int qemu_add_polling_cb(PollingFunc *func, void *opaque);
227void qemu_del_polling_cb(PollingFunc *func, void *opaque);
228
a18e524a
FB
229#ifdef _WIN32
230/* Wait objects handling */
231typedef void WaitObjectFunc(void *opaque);
232
233int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque);
234void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque);
235#endif
236
82c643ff
FB
237/* character device */
238
239#define CHR_EVENT_BREAK 0 /* serial break char */
ea2384d3 240#define CHR_EVENT_FOCUS 1 /* focus to this terminal (modal input needed) */
82c643ff 241
2122c51a
FB
242
243
244#define CHR_IOCTL_SERIAL_SET_PARAMS 1
245typedef struct {
246 int speed;
247 int parity;
248 int data_bits;
249 int stop_bits;
250} QEMUSerialSetParams;
251
252#define CHR_IOCTL_SERIAL_SET_BREAK 2
253
254#define CHR_IOCTL_PP_READ_DATA 3
255#define CHR_IOCTL_PP_WRITE_DATA 4
256#define CHR_IOCTL_PP_READ_CONTROL 5
257#define CHR_IOCTL_PP_WRITE_CONTROL 6
258#define CHR_IOCTL_PP_READ_STATUS 7
259
82c643ff
FB
260typedef void IOEventHandler(void *opaque, int event);
261
262typedef struct CharDriverState {
263 int (*chr_write)(struct CharDriverState *s, const uint8_t *buf, int len);
264 void (*chr_add_read_handler)(struct CharDriverState *s,
265 IOCanRWHandler *fd_can_read,
266 IOReadHandler *fd_read, void *opaque);
2122c51a 267 int (*chr_ioctl)(struct CharDriverState *s, int cmd, void *arg);
82c643ff 268 IOEventHandler *chr_event;
eb45f5fe 269 void (*chr_send_event)(struct CharDriverState *chr, int event);
f331110f 270 void (*chr_close)(struct CharDriverState *chr);
82c643ff
FB
271 void *opaque;
272} CharDriverState;
273
274void qemu_chr_printf(CharDriverState *s, const char *fmt, ...);
275int qemu_chr_write(CharDriverState *s, const uint8_t *buf, int len);
ea2384d3 276void qemu_chr_send_event(CharDriverState *s, int event);
82c643ff
FB
277void qemu_chr_add_read_handler(CharDriverState *s,
278 IOCanRWHandler *fd_can_read,
279 IOReadHandler *fd_read, void *opaque);
280void qemu_chr_add_event_handler(CharDriverState *s, IOEventHandler *chr_event);
2122c51a 281int qemu_chr_ioctl(CharDriverState *s, int cmd, void *arg);
f8d179e3 282
82c643ff
FB
283/* consoles */
284
285typedef struct DisplayState DisplayState;
286typedef struct TextConsole TextConsole;
287
95219897
PB
288typedef void (*vga_hw_update_ptr)(void *);
289typedef void (*vga_hw_invalidate_ptr)(void *);
290typedef void (*vga_hw_screen_dump_ptr)(void *, const char *);
291
292TextConsole *graphic_console_init(DisplayState *ds, vga_hw_update_ptr update,
293 vga_hw_invalidate_ptr invalidate,
294 vga_hw_screen_dump_ptr screen_dump,
295 void *opaque);
296void vga_hw_update(void);
297void vga_hw_invalidate(void);
298void vga_hw_screen_dump(const char *filename);
299
300int is_graphic_console(void);
82c643ff
FB
301CharDriverState *text_console_init(DisplayState *ds);
302void console_select(unsigned int index);
303
8d11df9e
FB
304/* serial ports */
305
306#define MAX_SERIAL_PORTS 4
307
308extern CharDriverState *serial_hds[MAX_SERIAL_PORTS];
309
6508fe59
FB
310/* parallel ports */
311
312#define MAX_PARALLEL_PORTS 3
313
314extern CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
315
7c9d8e07
FB
316/* VLANs support */
317
318typedef struct VLANClientState VLANClientState;
319
320struct VLANClientState {
321 IOReadHandler *fd_read;
d861b05e
PB
322 /* Packets may still be sent if this returns zero. It's used to
323 rate-limit the slirp code. */
324 IOCanRWHandler *fd_can_read;
7c9d8e07
FB
325 void *opaque;
326 struct VLANClientState *next;
327 struct VLANState *vlan;
328 char info_str[256];
329};
330
331typedef struct VLANState {
332 int id;
333 VLANClientState *first_client;
334 struct VLANState *next;
335} VLANState;
336
337VLANState *qemu_find_vlan(int id);
338VLANClientState *qemu_new_vlan_client(VLANState *vlan,
d861b05e
PB
339 IOReadHandler *fd_read,
340 IOCanRWHandler *fd_can_read,
341 void *opaque);
342int qemu_can_send_packet(VLANClientState *vc);
7c9d8e07 343void qemu_send_packet(VLANClientState *vc, const uint8_t *buf, int size);
d861b05e 344void qemu_handler_true(void *opaque);
7c9d8e07
FB
345
346void do_info_network(void);
347
7fb843f8
FB
348/* TAP win32 */
349int tap_win32_init(VLANState *vlan, const char *ifname);
350void tap_win32_poll(void);
351
7c9d8e07 352/* NIC info */
c4b1fcc0
FB
353
354#define MAX_NICS 8
355
7c9d8e07 356typedef struct NICInfo {
c4b1fcc0 357 uint8_t macaddr[6];
a41b2ff2 358 const char *model;
7c9d8e07
FB
359 VLANState *vlan;
360} NICInfo;
c4b1fcc0
FB
361
362extern int nb_nics;
7c9d8e07 363extern NICInfo nd_table[MAX_NICS];
8a7ddc38
FB
364
365/* timers */
366
367typedef struct QEMUClock QEMUClock;
368typedef struct QEMUTimer QEMUTimer;
369typedef void QEMUTimerCB(void *opaque);
370
371/* The real time clock should be used only for stuff which does not
372 change the virtual machine state, as it is run even if the virtual
69b91039 373 machine is stopped. The real time clock has a frequency of 1000
8a7ddc38
FB
374 Hz. */
375extern QEMUClock *rt_clock;
376
e80cfcfc 377/* The virtual clock is only run during the emulation. It is stopped
8a7ddc38
FB
378 when the virtual machine is stopped. Virtual timers use a high
379 precision clock, usually cpu cycles (use ticks_per_sec). */
380extern QEMUClock *vm_clock;
381
382int64_t qemu_get_clock(QEMUClock *clock);
383
384QEMUTimer *qemu_new_timer(QEMUClock *clock, QEMUTimerCB *cb, void *opaque);
385void qemu_free_timer(QEMUTimer *ts);
386void qemu_del_timer(QEMUTimer *ts);
387void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time);
388int qemu_timer_pending(QEMUTimer *ts);
389
390extern int64_t ticks_per_sec;
391extern int pit_min_timer_count;
392
1dce7c3c 393int64_t cpu_get_ticks(void);
8a7ddc38
FB
394void cpu_enable_ticks(void);
395void cpu_disable_ticks(void);
396
397/* VM Load/Save */
398
faea38e7 399typedef struct QEMUFile QEMUFile;
8a7ddc38 400
faea38e7
FB
401QEMUFile *qemu_fopen(const char *filename, const char *mode);
402void qemu_fflush(QEMUFile *f);
403void qemu_fclose(QEMUFile *f);
8a7ddc38
FB
404void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size);
405void qemu_put_byte(QEMUFile *f, int v);
406void qemu_put_be16(QEMUFile *f, unsigned int v);
407void qemu_put_be32(QEMUFile *f, unsigned int v);
408void qemu_put_be64(QEMUFile *f, uint64_t v);
409int qemu_get_buffer(QEMUFile *f, uint8_t *buf, int size);
410int qemu_get_byte(QEMUFile *f);
411unsigned int qemu_get_be16(QEMUFile *f);
412unsigned int qemu_get_be32(QEMUFile *f);
413uint64_t qemu_get_be64(QEMUFile *f);
414
415static inline void qemu_put_be64s(QEMUFile *f, const uint64_t *pv)
416{
417 qemu_put_be64(f, *pv);
418}
419
420static inline void qemu_put_be32s(QEMUFile *f, const uint32_t *pv)
421{
422 qemu_put_be32(f, *pv);
423}
424
425static inline void qemu_put_be16s(QEMUFile *f, const uint16_t *pv)
426{
427 qemu_put_be16(f, *pv);
428}
429
430static inline void qemu_put_8s(QEMUFile *f, const uint8_t *pv)
431{
432 qemu_put_byte(f, *pv);
433}
434
435static inline void qemu_get_be64s(QEMUFile *f, uint64_t *pv)
436{
437 *pv = qemu_get_be64(f);
438}
439
440static inline void qemu_get_be32s(QEMUFile *f, uint32_t *pv)
441{
442 *pv = qemu_get_be32(f);
443}
444
445static inline void qemu_get_be16s(QEMUFile *f, uint16_t *pv)
446{
447 *pv = qemu_get_be16(f);
448}
449
450static inline void qemu_get_8s(QEMUFile *f, uint8_t *pv)
451{
452 *pv = qemu_get_byte(f);
453}
454
c27004ec
FB
455#if TARGET_LONG_BITS == 64
456#define qemu_put_betl qemu_put_be64
457#define qemu_get_betl qemu_get_be64
458#define qemu_put_betls qemu_put_be64s
459#define qemu_get_betls qemu_get_be64s
460#else
461#define qemu_put_betl qemu_put_be32
462#define qemu_get_betl qemu_get_be32
463#define qemu_put_betls qemu_put_be32s
464#define qemu_get_betls qemu_get_be32s
465#endif
466
8a7ddc38
FB
467int64_t qemu_ftell(QEMUFile *f);
468int64_t qemu_fseek(QEMUFile *f, int64_t pos, int whence);
469
470typedef void SaveStateHandler(QEMUFile *f, void *opaque);
471typedef int LoadStateHandler(QEMUFile *f, void *opaque, int version_id);
472
8a7ddc38
FB
473int register_savevm(const char *idstr,
474 int instance_id,
475 int version_id,
476 SaveStateHandler *save_state,
477 LoadStateHandler *load_state,
478 void *opaque);
479void qemu_get_timer(QEMUFile *f, QEMUTimer *ts);
480void qemu_put_timer(QEMUFile *f, QEMUTimer *ts);
c4b1fcc0 481
6a00d601
FB
482void cpu_save(QEMUFile *f, void *opaque);
483int cpu_load(QEMUFile *f, void *opaque, int version_id);
484
faea38e7
FB
485void do_savevm(const char *name);
486void do_loadvm(const char *name);
487void do_delvm(const char *name);
488void do_info_snapshots(void);
489
83f64091
FB
490/* bottom halves */
491typedef struct QEMUBH QEMUBH;
492typedef void QEMUBHFunc(void *opaque);
493
494QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque);
495void qemu_bh_schedule(QEMUBH *bh);
496void qemu_bh_cancel(QEMUBH *bh);
497void qemu_bh_delete(QEMUBH *bh);
6eb5733a 498int qemu_bh_poll(void);
83f64091 499
fc01f7e7
FB
500/* block.c */
501typedef struct BlockDriverState BlockDriverState;
ea2384d3
FB
502typedef struct BlockDriver BlockDriver;
503
504extern BlockDriver bdrv_raw;
505extern BlockDriver bdrv_cow;
506extern BlockDriver bdrv_qcow;
507extern BlockDriver bdrv_vmdk;
3c56521b 508extern BlockDriver bdrv_cloop;
585d0ed9 509extern BlockDriver bdrv_dmg;
a8753c34 510extern BlockDriver bdrv_bochs;
6a0f9e82 511extern BlockDriver bdrv_vpc;
de167e41 512extern BlockDriver bdrv_vvfat;
faea38e7
FB
513extern BlockDriver bdrv_qcow2;
514
515typedef struct BlockDriverInfo {
516 /* in bytes, 0 if irrelevant */
517 int cluster_size;
518 /* offset at which the VM state can be saved (0 if not possible) */
519 int64_t vm_state_offset;
520} BlockDriverInfo;
521
522typedef struct QEMUSnapshotInfo {
523 char id_str[128]; /* unique snapshot id */
524 /* the following fields are informative. They are not needed for
525 the consistency of the snapshot */
526 char name[256]; /* user choosen name */
527 uint32_t vm_state_size; /* VM state info size */
528 uint32_t date_sec; /* UTC date of the snapshot */
529 uint32_t date_nsec;
530 uint64_t vm_clock_nsec; /* VM clock relative to boot */
531} QEMUSnapshotInfo;
ea2384d3 532
83f64091
FB
533#define BDRV_O_RDONLY 0x0000
534#define BDRV_O_RDWR 0x0002
535#define BDRV_O_ACCESS 0x0003
536#define BDRV_O_CREAT 0x0004 /* create an empty file */
537#define BDRV_O_SNAPSHOT 0x0008 /* open the file read only and save writes in a snapshot */
538#define BDRV_O_FILE 0x0010 /* open as a raw file (do not try to
539 use a disk image format on top of
540 it (default for
541 bdrv_file_open()) */
542
ea2384d3
FB
543void bdrv_init(void);
544BlockDriver *bdrv_find_format(const char *format_name);
545int bdrv_create(BlockDriver *drv,
546 const char *filename, int64_t size_in_sectors,
547 const char *backing_file, int flags);
c4b1fcc0
FB
548BlockDriverState *bdrv_new(const char *device_name);
549void bdrv_delete(BlockDriverState *bs);
83f64091
FB
550int bdrv_file_open(BlockDriverState **pbs, const char *filename, int flags);
551int bdrv_open(BlockDriverState *bs, const char *filename, int flags);
552int bdrv_open2(BlockDriverState *bs, const char *filename, int flags,
ea2384d3 553 BlockDriver *drv);
fc01f7e7
FB
554void bdrv_close(BlockDriverState *bs);
555int bdrv_read(BlockDriverState *bs, int64_t sector_num,
556 uint8_t *buf, int nb_sectors);
557int bdrv_write(BlockDriverState *bs, int64_t sector_num,
558 const uint8_t *buf, int nb_sectors);
83f64091
FB
559int bdrv_pread(BlockDriverState *bs, int64_t offset,
560 void *buf, int count);
561int bdrv_pwrite(BlockDriverState *bs, int64_t offset,
562 const void *buf, int count);
563int bdrv_truncate(BlockDriverState *bs, int64_t offset);
564int64_t bdrv_getlength(BlockDriverState *bs);
fc01f7e7 565void bdrv_get_geometry(BlockDriverState *bs, int64_t *nb_sectors_ptr);
33e3963e 566int bdrv_commit(BlockDriverState *bs);
77fef8c1 567void bdrv_set_boot_sector(BlockDriverState *bs, const uint8_t *data, int size);
83f64091
FB
568/* async block I/O */
569typedef struct BlockDriverAIOCB BlockDriverAIOCB;
570typedef void BlockDriverCompletionFunc(void *opaque, int ret);
571
ce1a14dc
PB
572BlockDriverAIOCB *bdrv_aio_read(BlockDriverState *bs, int64_t sector_num,
573 uint8_t *buf, int nb_sectors,
574 BlockDriverCompletionFunc *cb, void *opaque);
575BlockDriverAIOCB *bdrv_aio_write(BlockDriverState *bs, int64_t sector_num,
576 const uint8_t *buf, int nb_sectors,
577 BlockDriverCompletionFunc *cb, void *opaque);
83f64091 578void bdrv_aio_cancel(BlockDriverAIOCB *acb);
83f64091
FB
579
580void qemu_aio_init(void);
581void qemu_aio_poll(void);
582void qemu_aio_wait_start(void);
583void qemu_aio_wait(void);
584void qemu_aio_wait_end(void);
585
7a6cba61
PB
586/* Ensure contents are flushed to disk. */
587void bdrv_flush(BlockDriverState *bs);
33e3963e 588
c4b1fcc0
FB
589#define BDRV_TYPE_HD 0
590#define BDRV_TYPE_CDROM 1
591#define BDRV_TYPE_FLOPPY 2
46d4767d
FB
592#define BIOS_ATA_TRANSLATION_AUTO 0
593#define BIOS_ATA_TRANSLATION_NONE 1
594#define BIOS_ATA_TRANSLATION_LBA 2
c4b1fcc0
FB
595
596void bdrv_set_geometry_hint(BlockDriverState *bs,
597 int cyls, int heads, int secs);
598void bdrv_set_type_hint(BlockDriverState *bs, int type);
46d4767d 599void bdrv_set_translation_hint(BlockDriverState *bs, int translation);
c4b1fcc0
FB
600void bdrv_get_geometry_hint(BlockDriverState *bs,
601 int *pcyls, int *pheads, int *psecs);
602int bdrv_get_type_hint(BlockDriverState *bs);
46d4767d 603int bdrv_get_translation_hint(BlockDriverState *bs);
c4b1fcc0
FB
604int bdrv_is_removable(BlockDriverState *bs);
605int bdrv_is_read_only(BlockDriverState *bs);
606int bdrv_is_inserted(BlockDriverState *bs);
607int bdrv_is_locked(BlockDriverState *bs);
608void bdrv_set_locked(BlockDriverState *bs, int locked);
609void bdrv_set_change_cb(BlockDriverState *bs,
610 void (*change_cb)(void *opaque), void *opaque);
ea2384d3 611void bdrv_get_format(BlockDriverState *bs, char *buf, int buf_size);
c4b1fcc0
FB
612void bdrv_info(void);
613BlockDriverState *bdrv_find(const char *name);
82c643ff 614void bdrv_iterate(void (*it)(void *opaque, const char *name), void *opaque);
ea2384d3
FB
615int bdrv_is_encrypted(BlockDriverState *bs);
616int bdrv_set_key(BlockDriverState *bs, const char *key);
617void bdrv_iterate_format(void (*it)(void *opaque, const char *name),
618 void *opaque);
619const char *bdrv_get_device_name(BlockDriverState *bs);
faea38e7
FB
620int bdrv_write_compressed(BlockDriverState *bs, int64_t sector_num,
621 const uint8_t *buf, int nb_sectors);
622int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi);
c4b1fcc0 623
83f64091
FB
624void bdrv_get_backing_filename(BlockDriverState *bs,
625 char *filename, int filename_size);
faea38e7
FB
626int bdrv_snapshot_create(BlockDriverState *bs,
627 QEMUSnapshotInfo *sn_info);
628int bdrv_snapshot_goto(BlockDriverState *bs,
629 const char *snapshot_id);
630int bdrv_snapshot_delete(BlockDriverState *bs, const char *snapshot_id);
631int bdrv_snapshot_list(BlockDriverState *bs,
632 QEMUSnapshotInfo **psn_info);
633char *bdrv_snapshot_dump(char *buf, int buf_size, QEMUSnapshotInfo *sn);
634
635char *get_human_readable_size(char *buf, int buf_size, int64_t size);
83f64091
FB
636int path_is_absolute(const char *path);
637void path_combine(char *dest, int dest_size,
638 const char *base_path,
639 const char *filename);
ea2384d3
FB
640
641#ifndef QEMU_TOOL
54fa5af5
FB
642
643typedef void QEMUMachineInitFunc(int ram_size, int vga_ram_size,
644 int boot_device,
645 DisplayState *ds, const char **fd_filename, int snapshot,
646 const char *kernel_filename, const char *kernel_cmdline,
647 const char *initrd_filename);
648
649typedef struct QEMUMachine {
650 const char *name;
651 const char *desc;
652 QEMUMachineInitFunc *init;
653 struct QEMUMachine *next;
654} QEMUMachine;
655
656int qemu_register_machine(QEMUMachine *m);
657
658typedef void SetIRQFunc(void *opaque, int irq_num, int level);
3de388f6 659typedef void IRQRequestFunc(void *opaque, int level);
54fa5af5 660
26aa7d72
FB
661/* ISA bus */
662
663extern target_phys_addr_t isa_mem_base;
664
665typedef void (IOPortWriteFunc)(void *opaque, uint32_t address, uint32_t data);
666typedef uint32_t (IOPortReadFunc)(void *opaque, uint32_t address);
667
668int register_ioport_read(int start, int length, int size,
669 IOPortReadFunc *func, void *opaque);
670int register_ioport_write(int start, int length, int size,
671 IOPortWriteFunc *func, void *opaque);
69b91039
FB
672void isa_unassign_ioport(int start, int length);
673
674/* PCI bus */
675
69b91039
FB
676extern target_phys_addr_t pci_mem_base;
677
46e50e9d 678typedef struct PCIBus PCIBus;
69b91039
FB
679typedef struct PCIDevice PCIDevice;
680
681typedef void PCIConfigWriteFunc(PCIDevice *pci_dev,
682 uint32_t address, uint32_t data, int len);
683typedef uint32_t PCIConfigReadFunc(PCIDevice *pci_dev,
684 uint32_t address, int len);
685typedef void PCIMapIORegionFunc(PCIDevice *pci_dev, int region_num,
686 uint32_t addr, uint32_t size, int type);
687
688#define PCI_ADDRESS_SPACE_MEM 0x00
689#define PCI_ADDRESS_SPACE_IO 0x01
690#define PCI_ADDRESS_SPACE_MEM_PREFETCH 0x08
691
692typedef struct PCIIORegion {
5768f5ac 693 uint32_t addr; /* current PCI mapping address. -1 means not mapped */
69b91039
FB
694 uint32_t size;
695 uint8_t type;
696 PCIMapIORegionFunc *map_func;
697} PCIIORegion;
698
8a8696a3
FB
699#define PCI_ROM_SLOT 6
700#define PCI_NUM_REGIONS 7
502a5395
PB
701
702#define PCI_DEVICES_MAX 64
703
704#define PCI_VENDOR_ID 0x00 /* 16 bits */
705#define PCI_DEVICE_ID 0x02 /* 16 bits */
706#define PCI_COMMAND 0x04 /* 16 bits */
707#define PCI_COMMAND_IO 0x1 /* Enable response in I/O space */
708#define PCI_COMMAND_MEMORY 0x2 /* Enable response in Memory space */
709#define PCI_CLASS_DEVICE 0x0a /* Device class */
710#define PCI_INTERRUPT_LINE 0x3c /* 8 bits */
711#define PCI_INTERRUPT_PIN 0x3d /* 8 bits */
712#define PCI_MIN_GNT 0x3e /* 8 bits */
713#define PCI_MAX_LAT 0x3f /* 8 bits */
714
69b91039
FB
715struct PCIDevice {
716 /* PCI config space */
717 uint8_t config[256];
718
719 /* the following fields are read only */
46e50e9d 720 PCIBus *bus;
69b91039
FB
721 int devfn;
722 char name[64];
8a8696a3 723 PCIIORegion io_regions[PCI_NUM_REGIONS];
69b91039
FB
724
725 /* do not access the following fields */
726 PCIConfigReadFunc *config_read;
727 PCIConfigWriteFunc *config_write;
502a5395 728 /* ??? This is a PC-specific hack, and should be removed. */
5768f5ac 729 int irq_index;
69b91039
FB
730};
731
46e50e9d
FB
732PCIDevice *pci_register_device(PCIBus *bus, const char *name,
733 int instance_size, int devfn,
69b91039
FB
734 PCIConfigReadFunc *config_read,
735 PCIConfigWriteFunc *config_write);
736
737void pci_register_io_region(PCIDevice *pci_dev, int region_num,
738 uint32_t size, int type,
739 PCIMapIORegionFunc *map_func);
740
5768f5ac
FB
741void pci_set_irq(PCIDevice *pci_dev, int irq_num, int level);
742
743uint32_t pci_default_read_config(PCIDevice *d,
744 uint32_t address, int len);
745void pci_default_write_config(PCIDevice *d,
746 uint32_t address, uint32_t val, int len);
30ca2aab
FB
747void generic_pci_save(QEMUFile* f, void *opaque);
748int generic_pci_load(QEMUFile* f, void *opaque, int version_id);
5768f5ac 749
502a5395
PB
750typedef void (*pci_set_irq_fn)(PCIDevice *pci_dev, void *pic,
751 int irq_num, int level);
752PCIBus *pci_register_bus(pci_set_irq_fn set_irq, void *pic, int devfn_min);
753
754void pci_nic_init(PCIBus *bus, NICInfo *nd);
755void pci_data_write(void *opaque, uint32_t addr, uint32_t val, int len);
756uint32_t pci_data_read(void *opaque, uint32_t addr, int len);
757int pci_bus_num(PCIBus *s);
758void pci_for_each_device(void (*fn)(PCIDevice *d));
9995c51f 759
5768f5ac 760void pci_info(void);
26aa7d72 761
502a5395 762/* prep_pci.c */
46e50e9d 763PCIBus *pci_prep_init(void);
77d4bc34 764
502a5395
PB
765/* grackle_pci.c */
766PCIBus *pci_grackle_init(uint32_t base, void *pic);
767
768/* unin_pci.c */
769PCIBus *pci_pmac_init(void *pic);
770
771/* apb_pci.c */
772PCIBus *pci_apb_init(target_ulong special_base, target_ulong mem_base,
773 void *pic);
774
775PCIBus *pci_vpb_init(void *pic);
776
777/* piix_pci.c */
778PCIBus *i440fx_init(void);
779int piix3_init(PCIBus *bus);
780void pci_bios_init(void);
a41b2ff2 781
28b9b5af
FB
782/* openpic.c */
783typedef struct openpic_t openpic_t;
54fa5af5 784void openpic_set_irq(void *opaque, int n_IRQ, int level);
7668a27f
FB
785openpic_t *openpic_init (PCIBus *bus, int *pmem_index, int nb_cpus,
786 CPUState **envp);
28b9b5af 787
54fa5af5
FB
788/* heathrow_pic.c */
789typedef struct HeathrowPICS HeathrowPICS;
790void heathrow_pic_set_irq(void *opaque, int num, int level);
791HeathrowPICS *heathrow_pic_init(int *pmem_index);
792
6a36d84e
FB
793#ifdef HAS_AUDIO
794struct soundhw {
795 const char *name;
796 const char *descr;
797 int enabled;
798 int isa;
799 union {
800 int (*init_isa) (AudioState *s);
801 int (*init_pci) (PCIBus *bus, AudioState *s);
802 } init;
803};
804
805extern struct soundhw soundhw[];
806#endif
807
313aa567
FB
808/* vga.c */
809
74a14f22 810#define VGA_RAM_SIZE (8192 * 1024)
313aa567 811
82c643ff 812struct DisplayState {
313aa567
FB
813 uint8_t *data;
814 int linesize;
815 int depth;
d3079cd2 816 int bgr; /* BGR color order instead of RGB. Only valid for depth == 32 */
82c643ff
FB
817 int width;
818 int height;
24236869
FB
819 void *opaque;
820
313aa567
FB
821 void (*dpy_update)(struct DisplayState *s, int x, int y, int w, int h);
822 void (*dpy_resize)(struct DisplayState *s, int w, int h);
823 void (*dpy_refresh)(struct DisplayState *s);
24236869 824 void (*dpy_copy)(struct DisplayState *s, int src_x, int src_y, int dst_x, int dst_y, int w, int h);
82c643ff 825};
313aa567
FB
826
827static inline void dpy_update(DisplayState *s, int x, int y, int w, int h)
828{
829 s->dpy_update(s, x, y, w, h);
830}
831
832static inline void dpy_resize(DisplayState *s, int w, int h)
833{
834 s->dpy_resize(s, w, h);
835}
836
46e50e9d 837int vga_initialize(PCIBus *bus, DisplayState *ds, uint8_t *vga_ram_base,
d5295253
FB
838 unsigned long vga_ram_offset, int vga_ram_size,
839 unsigned long vga_bios_offset, int vga_bios_size);
313aa567 840
d6bfa22f 841/* cirrus_vga.c */
46e50e9d 842void pci_cirrus_vga_init(PCIBus *bus, DisplayState *ds, uint8_t *vga_ram_base,
d6bfa22f 843 unsigned long vga_ram_offset, int vga_ram_size);
d6bfa22f
FB
844void isa_cirrus_vga_init(DisplayState *ds, uint8_t *vga_ram_base,
845 unsigned long vga_ram_offset, int vga_ram_size);
846
313aa567 847/* sdl.c */
d63d307f 848void sdl_display_init(DisplayState *ds, int full_screen);
313aa567 849
da4dbf74
FB
850/* cocoa.m */
851void cocoa_display_init(DisplayState *ds, int full_screen);
852
24236869
FB
853/* vnc.c */
854void vnc_display_init(DisplayState *ds, int display);
855
5391d806
FB
856/* ide.c */
857#define MAX_DISKS 4
858
faea38e7 859extern BlockDriverState *bs_table[MAX_DISKS + 1];
5391d806 860
69b91039
FB
861void isa_ide_init(int iobase, int iobase2, int irq,
862 BlockDriverState *hd0, BlockDriverState *hd1);
54fa5af5
FB
863void pci_cmd646_ide_init(PCIBus *bus, BlockDriverState **hd_table,
864 int secondary_ide_enabled);
502a5395 865void pci_piix3_ide_init(PCIBus *bus, BlockDriverState **hd_table, int devfn);
28b9b5af 866int pmac_ide_init (BlockDriverState **hd_table,
54fa5af5 867 SetIRQFunc *set_irq, void *irq_opaque, int irq);
5391d806 868
2e5d83bb
PB
869/* cdrom.c */
870int cdrom_read_toc(int nb_sectors, uint8_t *buf, int msf, int start_track);
871int cdrom_read_toc_raw(int nb_sectors, uint8_t *buf, int msf, int session_num);
872
1d14ffa9 873/* es1370.c */
c0fe3827 874int es1370_init (PCIBus *bus, AudioState *s);
1d14ffa9 875
fb065187 876/* sb16.c */
c0fe3827 877int SB16_init (AudioState *s);
fb065187
FB
878
879/* adlib.c */
c0fe3827 880int Adlib_init (AudioState *s);
fb065187
FB
881
882/* gus.c */
c0fe3827 883int GUS_init (AudioState *s);
27503323
FB
884
885/* dma.c */
85571bc7 886typedef int (*DMA_transfer_handler) (void *opaque, int nchan, int pos, int size);
27503323 887int DMA_get_channel_mode (int nchan);
85571bc7
FB
888int DMA_read_memory (int nchan, void *buf, int pos, int size);
889int DMA_write_memory (int nchan, void *buf, int pos, int size);
27503323
FB
890void DMA_hold_DREQ (int nchan);
891void DMA_release_DREQ (int nchan);
16f62432 892void DMA_schedule(int nchan);
27503323 893void DMA_run (void);
28b9b5af 894void DMA_init (int high_page_enable);
27503323 895void DMA_register_channel (int nchan,
85571bc7
FB
896 DMA_transfer_handler transfer_handler,
897 void *opaque);
7138fcfb
FB
898/* fdc.c */
899#define MAX_FD 2
900extern BlockDriverState *fd_table[MAX_FD];
901
baca51fa
FB
902typedef struct fdctrl_t fdctrl_t;
903
904fdctrl_t *fdctrl_init (int irq_lvl, int dma_chann, int mem_mapped,
905 uint32_t io_base,
906 BlockDriverState **fds);
907int fdctrl_get_drive_type(fdctrl_t *fdctrl, int drive_num);
7138fcfb 908
80cabfad
FB
909/* ne2000.c */
910
7c9d8e07
FB
911void isa_ne2000_init(int base, int irq, NICInfo *nd);
912void pci_ne2000_init(PCIBus *bus, NICInfo *nd);
80cabfad 913
a41b2ff2
PB
914/* rtl8139.c */
915
916void pci_rtl8139_init(PCIBus *bus, NICInfo *nd);
917
e3c2613f
FB
918/* pcnet.c */
919
920void pci_pcnet_init(PCIBus *bus, NICInfo *nd);
921
80cabfad
FB
922/* pckbd.c */
923
80cabfad
FB
924void kbd_init(void);
925
926/* mc146818rtc.c */
927
8a7ddc38 928typedef struct RTCState RTCState;
80cabfad 929
8a7ddc38
FB
930RTCState *rtc_init(int base, int irq);
931void rtc_set_memory(RTCState *s, int addr, int val);
932void rtc_set_date(RTCState *s, const struct tm *tm);
80cabfad
FB
933
934/* serial.c */
935
c4b1fcc0 936typedef struct SerialState SerialState;
e5d13e2f
FB
937SerialState *serial_init(SetIRQFunc *set_irq, void *opaque,
938 int base, int irq, CharDriverState *chr);
939SerialState *serial_mm_init (SetIRQFunc *set_irq, void *opaque,
940 target_ulong base, int it_shift,
941 int irq, CharDriverState *chr);
80cabfad 942
6508fe59
FB
943/* parallel.c */
944
945typedef struct ParallelState ParallelState;
946ParallelState *parallel_init(int base, int irq, CharDriverState *chr);
947
80cabfad
FB
948/* i8259.c */
949
3de388f6
FB
950typedef struct PicState2 PicState2;
951extern PicState2 *isa_pic;
80cabfad 952void pic_set_irq(int irq, int level);
54fa5af5 953void pic_set_irq_new(void *opaque, int irq, int level);
3de388f6 954PicState2 *pic_init(IRQRequestFunc *irq_request, void *irq_request_opaque);
d592d303
FB
955void pic_set_alt_irq_func(PicState2 *s, SetIRQFunc *alt_irq_func,
956 void *alt_irq_opaque);
3de388f6
FB
957int pic_read_irq(PicState2 *s);
958void pic_update_irq(PicState2 *s);
959uint32_t pic_intack_read(PicState2 *s);
c20709aa 960void pic_info(void);
4a0fb71e 961void irq_info(void);
80cabfad 962
c27004ec 963/* APIC */
d592d303
FB
964typedef struct IOAPICState IOAPICState;
965
c27004ec
FB
966int apic_init(CPUState *env);
967int apic_get_interrupt(CPUState *env);
d592d303
FB
968IOAPICState *ioapic_init(void);
969void ioapic_set_irq(void *opaque, int vector, int level);
c27004ec 970
80cabfad
FB
971/* i8254.c */
972
973#define PIT_FREQ 1193182
974
ec844b96
FB
975typedef struct PITState PITState;
976
977PITState *pit_init(int base, int irq);
978void pit_set_gate(PITState *pit, int channel, int val);
979int pit_get_gate(PITState *pit, int channel);
fd06c375
FB
980int pit_get_initial_count(PITState *pit, int channel);
981int pit_get_mode(PITState *pit, int channel);
ec844b96 982int pit_get_out(PITState *pit, int channel, int64_t current_time);
80cabfad 983
fd06c375
FB
984/* pcspk.c */
985void pcspk_init(PITState *);
986int pcspk_audio_init(AudioState *);
987
6515b203
FB
988/* acpi.c */
989extern int acpi_enabled;
502a5395 990void piix4_pm_init(PCIBus *bus, int devfn);
6515b203
FB
991void acpi_bios_init(void);
992
80cabfad 993/* pc.c */
54fa5af5 994extern QEMUMachine pc_machine;
3dbbdc25 995extern QEMUMachine isapc_machine;
52ca8d6a 996extern int fd_bootchk;
80cabfad 997
6a00d601
FB
998void ioport_set_a20(int enable);
999int ioport_get_a20(void);
1000
26aa7d72 1001/* ppc.c */
54fa5af5
FB
1002extern QEMUMachine prep_machine;
1003extern QEMUMachine core99_machine;
1004extern QEMUMachine heathrow_machine;
1005
6af0bf9c
FB
1006/* mips_r4k.c */
1007extern QEMUMachine mips_machine;
1008
27c7ca7e
FB
1009/* shix.c */
1010extern QEMUMachine shix_machine;
1011
8cc43fef
FB
1012#ifdef TARGET_PPC
1013ppc_tb_t *cpu_ppc_tb_init (CPUState *env, uint32_t freq);
1014#endif
64201201 1015void PREP_debug_write (void *opaque, uint32_t addr, uint32_t val);
77d4bc34
FB
1016
1017extern CPUWriteMemoryFunc *PPC_io_write[];
1018extern CPUReadMemoryFunc *PPC_io_read[];
54fa5af5 1019void PPC_debug_write (void *opaque, uint32_t addr, uint32_t val);
26aa7d72 1020
e95c8d51 1021/* sun4m.c */
54fa5af5 1022extern QEMUMachine sun4m_machine;
e80cfcfc 1023uint32_t iommu_translate(uint32_t addr);
ba3c64fb 1024void pic_set_irq_cpu(int irq, int level, unsigned int cpu);
e95c8d51
FB
1025
1026/* iommu.c */
e80cfcfc
FB
1027void *iommu_init(uint32_t addr);
1028uint32_t iommu_translate_local(void *opaque, uint32_t addr);
e95c8d51
FB
1029
1030/* lance.c */
7c9d8e07 1031void lance_init(NICInfo *nd, int irq, uint32_t leaddr, uint32_t ledaddr);
e95c8d51
FB
1032
1033/* tcx.c */
95219897 1034void tcx_init(DisplayState *ds, uint32_t addr, uint8_t *vram_base,
6f7e9aec 1035 unsigned long vram_offset, int vram_size, int width, int height);
e80cfcfc
FB
1036
1037/* slavio_intctl.c */
1038void *slavio_intctl_init();
ba3c64fb 1039void slavio_intctl_set_cpu(void *opaque, unsigned int cpu, CPUState *env);
e80cfcfc
FB
1040void slavio_pic_info(void *opaque);
1041void slavio_irq_info(void *opaque);
1042void slavio_pic_set_irq(void *opaque, int irq, int level);
ba3c64fb 1043void slavio_pic_set_irq_cpu(void *opaque, int irq, int level, unsigned int cpu);
e95c8d51 1044
5fe141fd
FB
1045/* loader.c */
1046int get_image_size(const char *filename);
1047int load_image(const char *filename, uint8_t *addr);
9ee3c029 1048int load_elf(const char *filename, int64_t virt_to_phys_addend, uint64_t *pentry);
e80cfcfc
FB
1049int load_aout(const char *filename, uint8_t *addr);
1050
1051/* slavio_timer.c */
ba3c64fb 1052void slavio_timer_init(uint32_t addr, int irq, int mode, unsigned int cpu);
8d5f07fa 1053
e80cfcfc
FB
1054/* slavio_serial.c */
1055SerialState *slavio_serial_init(int base, int irq, CharDriverState *chr1, CharDriverState *chr2);
1056void slavio_serial_ms_kbd_init(int base, int irq);
e95c8d51 1057
3475187d
FB
1058/* slavio_misc.c */
1059void *slavio_misc_init(uint32_t base, int irq);
1060void slavio_set_power_fail(void *opaque, int power_failing);
1061
6f7e9aec
FB
1062/* esp.c */
1063void esp_init(BlockDriverState **bd, int irq, uint32_t espaddr, uint32_t espdaddr);
1064
3475187d
FB
1065/* sun4u.c */
1066extern QEMUMachine sun4u_machine;
1067
64201201
FB
1068/* NVRAM helpers */
1069#include "hw/m48t59.h"
1070
1071void NVRAM_set_byte (m48t59_t *nvram, uint32_t addr, uint8_t value);
1072uint8_t NVRAM_get_byte (m48t59_t *nvram, uint32_t addr);
1073void NVRAM_set_word (m48t59_t *nvram, uint32_t addr, uint16_t value);
1074uint16_t NVRAM_get_word (m48t59_t *nvram, uint32_t addr);
1075void NVRAM_set_lword (m48t59_t *nvram, uint32_t addr, uint32_t value);
1076uint32_t NVRAM_get_lword (m48t59_t *nvram, uint32_t addr);
1077void NVRAM_set_string (m48t59_t *nvram, uint32_t addr,
1078 const unsigned char *str, uint32_t max);
1079int NVRAM_get_string (m48t59_t *nvram, uint8_t *dst, uint16_t addr, int max);
1080void NVRAM_set_crc (m48t59_t *nvram, uint32_t addr,
1081 uint32_t start, uint32_t count);
1082int PPC_NVRAM_set_params (m48t59_t *nvram, uint16_t NVRAM_size,
1083 const unsigned char *arch,
1084 uint32_t RAM_size, int boot_device,
1085 uint32_t kernel_image, uint32_t kernel_size,
28b9b5af 1086 const char *cmdline,
64201201 1087 uint32_t initrd_image, uint32_t initrd_size,
28b9b5af
FB
1088 uint32_t NVRAM_image,
1089 int width, int height, int depth);
64201201 1090
63066f4f
FB
1091/* adb.c */
1092
1093#define MAX_ADB_DEVICES 16
1094
e2733d20 1095#define ADB_MAX_OUT_LEN 16
63066f4f 1096
e2733d20 1097typedef struct ADBDevice ADBDevice;
63066f4f 1098
e2733d20
FB
1099/* buf = NULL means polling */
1100typedef int ADBDeviceRequest(ADBDevice *d, uint8_t *buf_out,
1101 const uint8_t *buf, int len);
12c28fed
FB
1102typedef int ADBDeviceReset(ADBDevice *d);
1103
63066f4f
FB
1104struct ADBDevice {
1105 struct ADBBusState *bus;
1106 int devaddr;
1107 int handler;
e2733d20 1108 ADBDeviceRequest *devreq;
12c28fed 1109 ADBDeviceReset *devreset;
63066f4f
FB
1110 void *opaque;
1111};
1112
1113typedef struct ADBBusState {
1114 ADBDevice devices[MAX_ADB_DEVICES];
1115 int nb_devices;
e2733d20 1116 int poll_index;
63066f4f
FB
1117} ADBBusState;
1118
e2733d20
FB
1119int adb_request(ADBBusState *s, uint8_t *buf_out,
1120 const uint8_t *buf, int len);
1121int adb_poll(ADBBusState *s, uint8_t *buf_out);
63066f4f
FB
1122
1123ADBDevice *adb_register_device(ADBBusState *s, int devaddr,
e2733d20 1124 ADBDeviceRequest *devreq,
12c28fed 1125 ADBDeviceReset *devreset,
63066f4f
FB
1126 void *opaque);
1127void adb_kbd_init(ADBBusState *bus);
1128void adb_mouse_init(ADBBusState *bus);
1129
1130/* cuda.c */
1131
1132extern ADBBusState adb_bus;
54fa5af5 1133int cuda_init(SetIRQFunc *set_irq, void *irq_opaque, int irq);
63066f4f 1134
bb36d470
FB
1135#include "hw/usb.h"
1136
a594cfbf
FB
1137/* usb ports of the VM */
1138
0d92ed30
PB
1139void qemu_register_usb_port(USBPort *port, void *opaque, int index,
1140 usb_attachfn attach);
a594cfbf 1141
0d92ed30 1142#define VM_USB_HUB_SIZE 8
a594cfbf
FB
1143
1144void do_usb_add(const char *devname);
1145void do_usb_del(const char *devname);
1146void usb_info(void);
1147
2e5d83bb
PB
1148/* scsi-disk.c */
1149typedef struct SCSIDevice SCSIDevice;
1150typedef void (*scsi_completionfn)(void *, uint32_t, int);
1151
1152SCSIDevice *scsi_disk_init(BlockDriverState *bdrv,
1153 scsi_completionfn completion,
1154 void *opaque);
1155void scsi_disk_destroy(SCSIDevice *s);
1156
0fc5c15a 1157int32_t scsi_send_command(SCSIDevice *s, uint32_t tag, uint8_t *buf, int lun);
2e5d83bb
PB
1158int scsi_read_data(SCSIDevice *s, uint8_t *data, uint32_t len);
1159int scsi_write_data(SCSIDevice *s, uint8_t *data, uint32_t len);
1160
7d8406be
PB
1161/* lsi53c895a.c */
1162void lsi_scsi_attach(void *opaque, BlockDriverState *bd, int id);
1163void *lsi_scsi_init(PCIBus *bus, int devfn);
1164
b5ff1b31 1165/* integratorcp.c */
40f137e1
PB
1166extern QEMUMachine integratorcp926_machine;
1167extern QEMUMachine integratorcp1026_machine;
b5ff1b31 1168
cdbdb648
PB
1169/* versatilepb.c */
1170extern QEMUMachine versatilepb_machine;
16406950 1171extern QEMUMachine versatileab_machine;
cdbdb648 1172
daa57963
FB
1173/* ps2.c */
1174void *ps2_kbd_init(void (*update_irq)(void *, int), void *update_arg);
1175void *ps2_mouse_init(void (*update_irq)(void *, int), void *update_arg);
1176void ps2_write_mouse(void *, int val);
1177void ps2_write_keyboard(void *, int val);
1178uint32_t ps2_read_data(void *);
1179void ps2_queue(void *, int b);
f94f5d71 1180void ps2_keyboard_set_translation(void *opaque, int mode);
daa57963 1181
80337b66
FB
1182/* smc91c111.c */
1183void smc91c111_init(NICInfo *, uint32_t, void *, int);
1184
bdd5003a 1185/* pl110.c */
95219897 1186void *pl110_init(DisplayState *ds, uint32_t base, void *pic, int irq, int);
bdd5003a 1187
cdbdb648
PB
1188/* pl011.c */
1189void pl011_init(uint32_t base, void *pic, int irq, CharDriverState *chr);
1190
1191/* pl050.c */
1192void pl050_init(uint32_t base, void *pic, int irq, int is_mouse);
1193
1194/* pl080.c */
1195void *pl080_init(uint32_t base, void *pic, int irq);
1196
1197/* pl190.c */
1198void *pl190_init(uint32_t base, void *parent, int irq, int fiq);
1199
1200/* arm-timer.c */
1201void sp804_init(uint32_t base, void *pic, int irq);
1202void icp_pit_init(uint32_t base, void *pic, int irq);
1203
16406950
PB
1204/* arm_boot.c */
1205
1206void arm_load_kernel(int ram_size, const char *kernel_filename,
1207 const char *kernel_cmdline, const char *initrd_filename,
1208 int board_id);
1209
27c7ca7e
FB
1210/* sh7750.c */
1211struct SH7750State;
1212
008a8818 1213struct SH7750State *sh7750_init(CPUState * cpu);
27c7ca7e
FB
1214
1215typedef struct {
1216 /* The callback will be triggered if any of the designated lines change */
1217 uint16_t portamask_trigger;
1218 uint16_t portbmask_trigger;
1219 /* Return 0 if no action was taken */
1220 int (*port_change_cb) (uint16_t porta, uint16_t portb,
1221 uint16_t * periph_pdtra,
1222 uint16_t * periph_portdira,
1223 uint16_t * periph_pdtrb,
1224 uint16_t * periph_portdirb);
1225} sh7750_io_device;
1226
1227int sh7750_register_io_device(struct SH7750State *s,
1228 sh7750_io_device * device);
1229/* tc58128.c */
1230int tc58128_init(struct SH7750State *s, char *zone1, char *zone2);
1231
29133e9a
FB
1232/* NOR flash devices */
1233typedef struct pflash_t pflash_t;
1234
1235pflash_t *pflash_register (target_ulong base, ram_addr_t off,
1236 BlockDriverState *bs,
1237 target_ulong sector_len, int nb_blocs, int width,
1238 uint16_t id0, uint16_t id1,
1239 uint16_t id2, uint16_t id3);
1240
ea2384d3
FB
1241#endif /* defined(QEMU_TOOL) */
1242
c4b1fcc0 1243/* monitor.c */
82c643ff 1244void monitor_init(CharDriverState *hd, int show_banner);
ea2384d3
FB
1245void term_puts(const char *str);
1246void term_vprintf(const char *fmt, va_list ap);
40c3bac3 1247void term_printf(const char *fmt, ...) __attribute__ ((__format__ (__printf__, 1, 2)));
c4b1fcc0
FB
1248void term_flush(void);
1249void term_print_help(void);
ea2384d3
FB
1250void monitor_readline(const char *prompt, int is_password,
1251 char *buf, int buf_size);
1252
1253/* readline.c */
1254typedef void ReadLineFunc(void *opaque, const char *str);
1255
1256extern int completion_index;
1257void add_completion(const char *str);
1258void readline_handle_byte(int ch);
1259void readline_find_completion(const char *cmdline);
1260const char *readline_get_history(unsigned int index);
1261void readline_start(const char *prompt, int is_password,
1262 ReadLineFunc *readline_func, void *opaque);
c4b1fcc0 1263
5e6ad6f9
FB
1264void kqemu_record_dump(void);
1265
fc01f7e7 1266#endif /* VL_H */
This page took 0.304709 seconds and 4 git commands to generate.