]> git.proxmox.com Git - qemu.git/blame - vl.h
Implement power state changes (IDLE and SLEEP) for PXA.
[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 47
71c2fd5c
TS
48#ifndef ENOMEDIUM
49#define ENOMEDIUM ENODEV
50#endif
2e9671da 51
67b915a5 52#ifdef _WIN32
a18e524a 53#include <windows.h>
ac62f715 54#define fsync _commit
57d1a2b6
FB
55#define lseek _lseeki64
56#define ENOTSUP 4096
beac80cd
FB
57extern int qemu_ftruncate64(int, int64_t);
58#define ftruncate qemu_ftruncate64
59
57d1a2b6
FB
60
61static inline char *realpath(const char *path, char *resolved_path)
62{
63 _fullpath(resolved_path, path, _MAX_PATH);
64 return resolved_path;
65}
ec3757de
FB
66
67#define PRId64 "I64d"
26a76461
FB
68#define PRIx64 "I64x"
69#define PRIu64 "I64u"
70#define PRIo64 "I64o"
67b915a5 71#endif
8a7ddc38 72
ea2384d3
FB
73#ifdef QEMU_TOOL
74
75/* we use QEMU_TOOL in the command line tools which do not depend on
76 the target CPU type */
77#include "config-host.h"
78#include <setjmp.h>
79#include "osdep.h"
80#include "bswap.h"
81
82#else
83
4f209290 84#include "audio/audio.h"
16f62432
FB
85#include "cpu.h"
86
ea2384d3
FB
87#endif /* !defined(QEMU_TOOL) */
88
67b915a5
FB
89#ifndef glue
90#define xglue(x, y) x ## y
91#define glue(x, y) xglue(x, y)
92#define stringify(s) tostring(s)
93#define tostring(s) #s
94#endif
95
24236869
FB
96#ifndef MIN
97#define MIN(a, b) (((a) < (b)) ? (a) : (b))
98#endif
99#ifndef MAX
100#define MAX(a, b) (((a) > (b)) ? (a) : (b))
101#endif
102
18607dcb
FB
103/* cutils.c */
104void pstrcpy(char *buf, int buf_size, const char *str);
105char *pstrcat(char *buf, int buf_size, const char *s);
106int strstart(const char *str, const char *val, const char **ptr);
107int stristart(const char *str, const char *val, const char **ptr);
108
33e3963e 109/* vl.c */
80cabfad 110uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c);
313aa567 111
80cabfad
FB
112void hw_error(const char *fmt, ...);
113
80cabfad
FB
114extern const char *bios_dir;
115
8a7ddc38 116extern int vm_running;
c35734b2 117extern const char *qemu_name;
8a7ddc38 118
0bd48850
FB
119typedef struct vm_change_state_entry VMChangeStateEntry;
120typedef void VMChangeStateHandler(void *opaque, int running);
8a7ddc38
FB
121typedef void VMStopHandler(void *opaque, int reason);
122
0bd48850
FB
123VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
124 void *opaque);
125void qemu_del_vm_change_state_handler(VMChangeStateEntry *e);
126
8a7ddc38
FB
127int qemu_add_vm_stop_handler(VMStopHandler *cb, void *opaque);
128void qemu_del_vm_stop_handler(VMStopHandler *cb, void *opaque);
129
130void vm_start(void);
131void vm_stop(int reason);
132
bb0c6722
FB
133typedef void QEMUResetHandler(void *opaque);
134
135void qemu_register_reset(QEMUResetHandler *func, void *opaque);
136void qemu_system_reset_request(void);
137void qemu_system_shutdown_request(void);
3475187d
FB
138void qemu_system_powerdown_request(void);
139#if !defined(TARGET_SPARC)
140// Please implement a power failure function to signal the OS
141#define qemu_system_powerdown() do{}while(0)
142#else
143void qemu_system_powerdown(void);
144#endif
bb0c6722 145
ea2384d3
FB
146void main_loop_wait(int timeout);
147
0ced6589
FB
148extern int ram_size;
149extern int bios_size;
ee22c2f7 150extern int rtc_utc;
1f04275e 151extern int cirrus_vga_enabled;
d34cab9f 152extern int vmsvga_enabled;
28b9b5af
FB
153extern int graphic_width;
154extern int graphic_height;
155extern int graphic_depth;
3d11d0eb 156extern const char *keyboard_layout;
d993e026 157extern int kqemu_allowed;
a09db21f 158extern int win2k_install_hack;
bb36d470 159extern int usb_enabled;
6a00d601 160extern int smp_cpus;
a171fe39 161extern int graphic_rotate;
667accab 162extern int no_quit;
8e71621f 163extern int semihosting_enabled;
3c07f8e8 164extern int autostart;
47d5d01a 165extern const char *bootp_filename;
0ced6589 166
9ae02555
TS
167#define MAX_OPTION_ROMS 16
168extern const char *option_rom[MAX_OPTION_ROMS];
169extern int nb_option_roms;
170
0ced6589 171/* XXX: make it dynamic */
970ac5a3 172#define MAX_BIOS_SIZE (4 * 1024 * 1024)
75956cf0 173#if defined (TARGET_PPC) || defined (TARGET_SPARC64)
d5295253 174#define BIOS_SIZE ((512 + 32) * 1024)
6af0bf9c 175#elif defined(TARGET_MIPS)
567daa49 176#define BIOS_SIZE (4 * 1024 * 1024)
0ced6589 177#endif
aaaa7df6 178
63066f4f
FB
179/* keyboard/mouse support */
180
181#define MOUSE_EVENT_LBUTTON 0x01
182#define MOUSE_EVENT_RBUTTON 0x02
183#define MOUSE_EVENT_MBUTTON 0x04
184
185typedef void QEMUPutKBDEvent(void *opaque, int keycode);
186typedef void QEMUPutMouseEvent(void *opaque, int dx, int dy, int dz, int buttons_state);
187
455204eb
TS
188typedef struct QEMUPutMouseEntry {
189 QEMUPutMouseEvent *qemu_put_mouse_event;
190 void *qemu_put_mouse_event_opaque;
191 int qemu_put_mouse_event_absolute;
192 char *qemu_put_mouse_event_name;
193
194 /* used internally by qemu for handling mice */
195 struct QEMUPutMouseEntry *next;
196} QEMUPutMouseEntry;
197
63066f4f 198void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque);
455204eb
TS
199QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
200 void *opaque, int absolute,
201 const char *name);
202void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry);
63066f4f
FB
203
204void kbd_put_keycode(int keycode);
205void kbd_mouse_event(int dx, int dy, int dz, int buttons_state);
09b26c5e 206int kbd_mouse_is_absolute(void);
63066f4f 207
455204eb
TS
208void do_info_mice(void);
209void do_mouse_set(int index);
210
82c643ff
FB
211/* keysym is a unicode code except for special keys (see QEMU_KEY_xxx
212 constants) */
213#define QEMU_KEY_ESC1(c) ((c) | 0xe100)
214#define QEMU_KEY_BACKSPACE 0x007f
215#define QEMU_KEY_UP QEMU_KEY_ESC1('A')
216#define QEMU_KEY_DOWN QEMU_KEY_ESC1('B')
217#define QEMU_KEY_RIGHT QEMU_KEY_ESC1('C')
218#define QEMU_KEY_LEFT QEMU_KEY_ESC1('D')
219#define QEMU_KEY_HOME QEMU_KEY_ESC1(1)
220#define QEMU_KEY_END QEMU_KEY_ESC1(4)
221#define QEMU_KEY_PAGEUP QEMU_KEY_ESC1(5)
222#define QEMU_KEY_PAGEDOWN QEMU_KEY_ESC1(6)
223#define QEMU_KEY_DELETE QEMU_KEY_ESC1(3)
224
225#define QEMU_KEY_CTRL_UP 0xe400
226#define QEMU_KEY_CTRL_DOWN 0xe401
227#define QEMU_KEY_CTRL_LEFT 0xe402
228#define QEMU_KEY_CTRL_RIGHT 0xe403
229#define QEMU_KEY_CTRL_HOME 0xe404
230#define QEMU_KEY_CTRL_END 0xe405
231#define QEMU_KEY_CTRL_PAGEUP 0xe406
232#define QEMU_KEY_CTRL_PAGEDOWN 0xe407
233
234void kbd_put_keysym(int keysym);
235
c20709aa
FB
236/* async I/O support */
237
238typedef void IOReadHandler(void *opaque, const uint8_t *buf, int size);
239typedef int IOCanRWHandler(void *opaque);
7c9d8e07 240typedef void IOHandler(void *opaque);
c20709aa 241
7c9d8e07
FB
242int qemu_set_fd_handler2(int fd,
243 IOCanRWHandler *fd_read_poll,
244 IOHandler *fd_read,
245 IOHandler *fd_write,
246 void *opaque);
247int qemu_set_fd_handler(int fd,
248 IOHandler *fd_read,
249 IOHandler *fd_write,
250 void *opaque);
c20709aa 251
f331110f
FB
252/* Polling handling */
253
254/* return TRUE if no sleep should be done afterwards */
255typedef int PollingFunc(void *opaque);
256
257int qemu_add_polling_cb(PollingFunc *func, void *opaque);
258void qemu_del_polling_cb(PollingFunc *func, void *opaque);
259
a18e524a
FB
260#ifdef _WIN32
261/* Wait objects handling */
262typedef void WaitObjectFunc(void *opaque);
263
264int qemu_add_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque);
265void qemu_del_wait_object(HANDLE handle, WaitObjectFunc *func, void *opaque);
266#endif
267
86e94dea
TS
268typedef struct QEMUBH QEMUBH;
269
82c643ff
FB
270/* character device */
271
272#define CHR_EVENT_BREAK 0 /* serial break char */
ea2384d3 273#define CHR_EVENT_FOCUS 1 /* focus to this terminal (modal input needed) */
86e94dea 274#define CHR_EVENT_RESET 2 /* new connection established */
2122c51a
FB
275
276
277#define CHR_IOCTL_SERIAL_SET_PARAMS 1
278typedef struct {
279 int speed;
280 int parity;
281 int data_bits;
282 int stop_bits;
283} QEMUSerialSetParams;
284
285#define CHR_IOCTL_SERIAL_SET_BREAK 2
286
287#define CHR_IOCTL_PP_READ_DATA 3
288#define CHR_IOCTL_PP_WRITE_DATA 4
289#define CHR_IOCTL_PP_READ_CONTROL 5
290#define CHR_IOCTL_PP_WRITE_CONTROL 6
291#define CHR_IOCTL_PP_READ_STATUS 7
5867c88a
TS
292#define CHR_IOCTL_PP_EPP_READ_ADDR 8
293#define CHR_IOCTL_PP_EPP_READ 9
294#define CHR_IOCTL_PP_EPP_WRITE_ADDR 10
295#define CHR_IOCTL_PP_EPP_WRITE 11
2122c51a 296
82c643ff
FB
297typedef void IOEventHandler(void *opaque, int event);
298
299typedef struct CharDriverState {
300 int (*chr_write)(struct CharDriverState *s, const uint8_t *buf, int len);
e5b0bc44 301 void (*chr_update_read_handler)(struct CharDriverState *s);
2122c51a 302 int (*chr_ioctl)(struct CharDriverState *s, int cmd, void *arg);
82c643ff 303 IOEventHandler *chr_event;
e5b0bc44
PB
304 IOCanRWHandler *chr_can_read;
305 IOReadHandler *chr_read;
306 void *handler_opaque;
eb45f5fe 307 void (*chr_send_event)(struct CharDriverState *chr, int event);
f331110f 308 void (*chr_close)(struct CharDriverState *chr);
82c643ff 309 void *opaque;
20d8a3ed 310 int focus;
86e94dea 311 QEMUBH *bh;
82c643ff
FB
312} CharDriverState;
313
5856de80 314CharDriverState *qemu_chr_open(const char *filename);
82c643ff
FB
315void qemu_chr_printf(CharDriverState *s, const char *fmt, ...);
316int qemu_chr_write(CharDriverState *s, const uint8_t *buf, int len);
ea2384d3 317void qemu_chr_send_event(CharDriverState *s, int event);
e5b0bc44
PB
318void qemu_chr_add_handlers(CharDriverState *s,
319 IOCanRWHandler *fd_can_read,
320 IOReadHandler *fd_read,
321 IOEventHandler *fd_event,
322 void *opaque);
2122c51a 323int qemu_chr_ioctl(CharDriverState *s, int cmd, void *arg);
86e94dea 324void qemu_chr_reset(CharDriverState *s);
e5b0bc44
PB
325int qemu_chr_can_read(CharDriverState *s);
326void qemu_chr_read(CharDriverState *s, uint8_t *buf, int len);
f8d179e3 327
82c643ff
FB
328/* consoles */
329
330typedef struct DisplayState DisplayState;
331typedef struct TextConsole TextConsole;
332
95219897
PB
333typedef void (*vga_hw_update_ptr)(void *);
334typedef void (*vga_hw_invalidate_ptr)(void *);
335typedef void (*vga_hw_screen_dump_ptr)(void *, const char *);
336
337TextConsole *graphic_console_init(DisplayState *ds, vga_hw_update_ptr update,
338 vga_hw_invalidate_ptr invalidate,
339 vga_hw_screen_dump_ptr screen_dump,
340 void *opaque);
341void vga_hw_update(void);
342void vga_hw_invalidate(void);
343void vga_hw_screen_dump(const char *filename);
344
345int is_graphic_console(void);
82c643ff
FB
346CharDriverState *text_console_init(DisplayState *ds);
347void console_select(unsigned int index);
348
8d11df9e
FB
349/* serial ports */
350
351#define MAX_SERIAL_PORTS 4
352
353extern CharDriverState *serial_hds[MAX_SERIAL_PORTS];
354
6508fe59
FB
355/* parallel ports */
356
357#define MAX_PARALLEL_PORTS 3
358
359extern CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
360
5867c88a
TS
361struct ParallelIOArg {
362 void *buffer;
363 int count;
364};
365
7c9d8e07
FB
366/* VLANs support */
367
368typedef struct VLANClientState VLANClientState;
369
370struct VLANClientState {
371 IOReadHandler *fd_read;
d861b05e
PB
372 /* Packets may still be sent if this returns zero. It's used to
373 rate-limit the slirp code. */
374 IOCanRWHandler *fd_can_read;
7c9d8e07
FB
375 void *opaque;
376 struct VLANClientState *next;
377 struct VLANState *vlan;
378 char info_str[256];
379};
380
381typedef struct VLANState {
382 int id;
383 VLANClientState *first_client;
384 struct VLANState *next;
385} VLANState;
386
387VLANState *qemu_find_vlan(int id);
388VLANClientState *qemu_new_vlan_client(VLANState *vlan,
d861b05e
PB
389 IOReadHandler *fd_read,
390 IOCanRWHandler *fd_can_read,
391 void *opaque);
392int qemu_can_send_packet(VLANClientState *vc);
7c9d8e07 393void qemu_send_packet(VLANClientState *vc, const uint8_t *buf, int size);
d861b05e 394void qemu_handler_true(void *opaque);
7c9d8e07
FB
395
396void do_info_network(void);
397
7fb843f8
FB
398/* TAP win32 */
399int tap_win32_init(VLANState *vlan, const char *ifname);
7fb843f8 400
7c9d8e07 401/* NIC info */
c4b1fcc0
FB
402
403#define MAX_NICS 8
404
7c9d8e07 405typedef struct NICInfo {
c4b1fcc0 406 uint8_t macaddr[6];
a41b2ff2 407 const char *model;
7c9d8e07
FB
408 VLANState *vlan;
409} NICInfo;
c4b1fcc0
FB
410
411extern int nb_nics;
7c9d8e07 412extern NICInfo nd_table[MAX_NICS];
8a7ddc38
FB
413
414/* timers */
415
416typedef struct QEMUClock QEMUClock;
417typedef struct QEMUTimer QEMUTimer;
418typedef void QEMUTimerCB(void *opaque);
419
420/* The real time clock should be used only for stuff which does not
421 change the virtual machine state, as it is run even if the virtual
69b91039 422 machine is stopped. The real time clock has a frequency of 1000
8a7ddc38
FB
423 Hz. */
424extern QEMUClock *rt_clock;
425
e80cfcfc 426/* The virtual clock is only run during the emulation. It is stopped
8a7ddc38
FB
427 when the virtual machine is stopped. Virtual timers use a high
428 precision clock, usually cpu cycles (use ticks_per_sec). */
429extern QEMUClock *vm_clock;
430
431int64_t qemu_get_clock(QEMUClock *clock);
432
433QEMUTimer *qemu_new_timer(QEMUClock *clock, QEMUTimerCB *cb, void *opaque);
434void qemu_free_timer(QEMUTimer *ts);
435void qemu_del_timer(QEMUTimer *ts);
436void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time);
437int qemu_timer_pending(QEMUTimer *ts);
438
439extern int64_t ticks_per_sec;
440extern int pit_min_timer_count;
441
1dce7c3c 442int64_t cpu_get_ticks(void);
8a7ddc38
FB
443void cpu_enable_ticks(void);
444void cpu_disable_ticks(void);
445
446/* VM Load/Save */
447
faea38e7 448typedef struct QEMUFile QEMUFile;
8a7ddc38 449
faea38e7
FB
450QEMUFile *qemu_fopen(const char *filename, const char *mode);
451void qemu_fflush(QEMUFile *f);
452void qemu_fclose(QEMUFile *f);
8a7ddc38
FB
453void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size);
454void qemu_put_byte(QEMUFile *f, int v);
455void qemu_put_be16(QEMUFile *f, unsigned int v);
456void qemu_put_be32(QEMUFile *f, unsigned int v);
457void qemu_put_be64(QEMUFile *f, uint64_t v);
458int qemu_get_buffer(QEMUFile *f, uint8_t *buf, int size);
459int qemu_get_byte(QEMUFile *f);
460unsigned int qemu_get_be16(QEMUFile *f);
461unsigned int qemu_get_be32(QEMUFile *f);
462uint64_t qemu_get_be64(QEMUFile *f);
463
464static inline void qemu_put_be64s(QEMUFile *f, const uint64_t *pv)
465{
466 qemu_put_be64(f, *pv);
467}
468
469static inline void qemu_put_be32s(QEMUFile *f, const uint32_t *pv)
470{
471 qemu_put_be32(f, *pv);
472}
473
474static inline void qemu_put_be16s(QEMUFile *f, const uint16_t *pv)
475{
476 qemu_put_be16(f, *pv);
477}
478
479static inline void qemu_put_8s(QEMUFile *f, const uint8_t *pv)
480{
481 qemu_put_byte(f, *pv);
482}
483
484static inline void qemu_get_be64s(QEMUFile *f, uint64_t *pv)
485{
486 *pv = qemu_get_be64(f);
487}
488
489static inline void qemu_get_be32s(QEMUFile *f, uint32_t *pv)
490{
491 *pv = qemu_get_be32(f);
492}
493
494static inline void qemu_get_be16s(QEMUFile *f, uint16_t *pv)
495{
496 *pv = qemu_get_be16(f);
497}
498
499static inline void qemu_get_8s(QEMUFile *f, uint8_t *pv)
500{
501 *pv = qemu_get_byte(f);
502}
503
c27004ec
FB
504#if TARGET_LONG_BITS == 64
505#define qemu_put_betl qemu_put_be64
506#define qemu_get_betl qemu_get_be64
507#define qemu_put_betls qemu_put_be64s
508#define qemu_get_betls qemu_get_be64s
509#else
510#define qemu_put_betl qemu_put_be32
511#define qemu_get_betl qemu_get_be32
512#define qemu_put_betls qemu_put_be32s
513#define qemu_get_betls qemu_get_be32s
514#endif
515
8a7ddc38
FB
516int64_t qemu_ftell(QEMUFile *f);
517int64_t qemu_fseek(QEMUFile *f, int64_t pos, int whence);
518
519typedef void SaveStateHandler(QEMUFile *f, void *opaque);
520typedef int LoadStateHandler(QEMUFile *f, void *opaque, int version_id);
521
8a7ddc38
FB
522int register_savevm(const char *idstr,
523 int instance_id,
524 int version_id,
525 SaveStateHandler *save_state,
526 LoadStateHandler *load_state,
527 void *opaque);
528void qemu_get_timer(QEMUFile *f, QEMUTimer *ts);
529void qemu_put_timer(QEMUFile *f, QEMUTimer *ts);
c4b1fcc0 530
6a00d601
FB
531void cpu_save(QEMUFile *f, void *opaque);
532int cpu_load(QEMUFile *f, void *opaque, int version_id);
533
faea38e7
FB
534void do_savevm(const char *name);
535void do_loadvm(const char *name);
536void do_delvm(const char *name);
537void do_info_snapshots(void);
538
83f64091 539/* bottom halves */
83f64091
FB
540typedef void QEMUBHFunc(void *opaque);
541
542QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque);
543void qemu_bh_schedule(QEMUBH *bh);
544void qemu_bh_cancel(QEMUBH *bh);
545void qemu_bh_delete(QEMUBH *bh);
6eb5733a 546int qemu_bh_poll(void);
83f64091 547
fc01f7e7
FB
548/* block.c */
549typedef struct BlockDriverState BlockDriverState;
ea2384d3
FB
550typedef struct BlockDriver BlockDriver;
551
552extern BlockDriver bdrv_raw;
19cb3738 553extern BlockDriver bdrv_host_device;
ea2384d3
FB
554extern BlockDriver bdrv_cow;
555extern BlockDriver bdrv_qcow;
556extern BlockDriver bdrv_vmdk;
3c56521b 557extern BlockDriver bdrv_cloop;
585d0ed9 558extern BlockDriver bdrv_dmg;
a8753c34 559extern BlockDriver bdrv_bochs;
6a0f9e82 560extern BlockDriver bdrv_vpc;
de167e41 561extern BlockDriver bdrv_vvfat;
faea38e7
FB
562extern BlockDriver bdrv_qcow2;
563
564typedef struct BlockDriverInfo {
565 /* in bytes, 0 if irrelevant */
566 int cluster_size;
567 /* offset at which the VM state can be saved (0 if not possible) */
568 int64_t vm_state_offset;
569} BlockDriverInfo;
570
571typedef struct QEMUSnapshotInfo {
572 char id_str[128]; /* unique snapshot id */
573 /* the following fields are informative. They are not needed for
574 the consistency of the snapshot */
575 char name[256]; /* user choosen name */
576 uint32_t vm_state_size; /* VM state info size */
577 uint32_t date_sec; /* UTC date of the snapshot */
578 uint32_t date_nsec;
579 uint64_t vm_clock_nsec; /* VM clock relative to boot */
580} QEMUSnapshotInfo;
ea2384d3 581
83f64091
FB
582#define BDRV_O_RDONLY 0x0000
583#define BDRV_O_RDWR 0x0002
584#define BDRV_O_ACCESS 0x0003
585#define BDRV_O_CREAT 0x0004 /* create an empty file */
586#define BDRV_O_SNAPSHOT 0x0008 /* open the file read only and save writes in a snapshot */
587#define BDRV_O_FILE 0x0010 /* open as a raw file (do not try to
588 use a disk image format on top of
589 it (default for
590 bdrv_file_open()) */
591
ea2384d3
FB
592void bdrv_init(void);
593BlockDriver *bdrv_find_format(const char *format_name);
594int bdrv_create(BlockDriver *drv,
595 const char *filename, int64_t size_in_sectors,
596 const char *backing_file, int flags);
c4b1fcc0
FB
597BlockDriverState *bdrv_new(const char *device_name);
598void bdrv_delete(BlockDriverState *bs);
83f64091
FB
599int bdrv_file_open(BlockDriverState **pbs, const char *filename, int flags);
600int bdrv_open(BlockDriverState *bs, const char *filename, int flags);
601int bdrv_open2(BlockDriverState *bs, const char *filename, int flags,
ea2384d3 602 BlockDriver *drv);
fc01f7e7
FB
603void bdrv_close(BlockDriverState *bs);
604int bdrv_read(BlockDriverState *bs, int64_t sector_num,
605 uint8_t *buf, int nb_sectors);
606int bdrv_write(BlockDriverState *bs, int64_t sector_num,
607 const uint8_t *buf, int nb_sectors);
83f64091
FB
608int bdrv_pread(BlockDriverState *bs, int64_t offset,
609 void *buf, int count);
610int bdrv_pwrite(BlockDriverState *bs, int64_t offset,
611 const void *buf, int count);
612int bdrv_truncate(BlockDriverState *bs, int64_t offset);
613int64_t bdrv_getlength(BlockDriverState *bs);
fc01f7e7 614void bdrv_get_geometry(BlockDriverState *bs, int64_t *nb_sectors_ptr);
33e3963e 615int bdrv_commit(BlockDriverState *bs);
77fef8c1 616void bdrv_set_boot_sector(BlockDriverState *bs, const uint8_t *data, int size);
83f64091
FB
617/* async block I/O */
618typedef struct BlockDriverAIOCB BlockDriverAIOCB;
619typedef void BlockDriverCompletionFunc(void *opaque, int ret);
620
ce1a14dc
PB
621BlockDriverAIOCB *bdrv_aio_read(BlockDriverState *bs, int64_t sector_num,
622 uint8_t *buf, int nb_sectors,
623 BlockDriverCompletionFunc *cb, void *opaque);
624BlockDriverAIOCB *bdrv_aio_write(BlockDriverState *bs, int64_t sector_num,
625 const uint8_t *buf, int nb_sectors,
626 BlockDriverCompletionFunc *cb, void *opaque);
83f64091 627void bdrv_aio_cancel(BlockDriverAIOCB *acb);
83f64091
FB
628
629void qemu_aio_init(void);
630void qemu_aio_poll(void);
6192bc37 631void qemu_aio_flush(void);
83f64091
FB
632void qemu_aio_wait_start(void);
633void qemu_aio_wait(void);
634void qemu_aio_wait_end(void);
635
2bac6019
AZ
636int qemu_key_check(BlockDriverState *bs, const char *name);
637
7a6cba61
PB
638/* Ensure contents are flushed to disk. */
639void bdrv_flush(BlockDriverState *bs);
33e3963e 640
c4b1fcc0
FB
641#define BDRV_TYPE_HD 0
642#define BDRV_TYPE_CDROM 1
643#define BDRV_TYPE_FLOPPY 2
4dbb0f50
TS
644#define BIOS_ATA_TRANSLATION_AUTO 0
645#define BIOS_ATA_TRANSLATION_NONE 1
646#define BIOS_ATA_TRANSLATION_LBA 2
647#define BIOS_ATA_TRANSLATION_LARGE 3
648#define BIOS_ATA_TRANSLATION_RECHS 4
c4b1fcc0
FB
649
650void bdrv_set_geometry_hint(BlockDriverState *bs,
651 int cyls, int heads, int secs);
652void bdrv_set_type_hint(BlockDriverState *bs, int type);
46d4767d 653void bdrv_set_translation_hint(BlockDriverState *bs, int translation);
c4b1fcc0
FB
654void bdrv_get_geometry_hint(BlockDriverState *bs,
655 int *pcyls, int *pheads, int *psecs);
656int bdrv_get_type_hint(BlockDriverState *bs);
46d4767d 657int bdrv_get_translation_hint(BlockDriverState *bs);
c4b1fcc0
FB
658int bdrv_is_removable(BlockDriverState *bs);
659int bdrv_is_read_only(BlockDriverState *bs);
660int bdrv_is_inserted(BlockDriverState *bs);
19cb3738 661int bdrv_media_changed(BlockDriverState *bs);
c4b1fcc0
FB
662int bdrv_is_locked(BlockDriverState *bs);
663void bdrv_set_locked(BlockDriverState *bs, int locked);
19cb3738 664void bdrv_eject(BlockDriverState *bs, int eject_flag);
c4b1fcc0
FB
665void bdrv_set_change_cb(BlockDriverState *bs,
666 void (*change_cb)(void *opaque), void *opaque);
ea2384d3 667void bdrv_get_format(BlockDriverState *bs, char *buf, int buf_size);
c4b1fcc0
FB
668void bdrv_info(void);
669BlockDriverState *bdrv_find(const char *name);
82c643ff 670void bdrv_iterate(void (*it)(void *opaque, const char *name), void *opaque);
ea2384d3
FB
671int bdrv_is_encrypted(BlockDriverState *bs);
672int bdrv_set_key(BlockDriverState *bs, const char *key);
673void bdrv_iterate_format(void (*it)(void *opaque, const char *name),
674 void *opaque);
675const char *bdrv_get_device_name(BlockDriverState *bs);
faea38e7
FB
676int bdrv_write_compressed(BlockDriverState *bs, int64_t sector_num,
677 const uint8_t *buf, int nb_sectors);
678int bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi);
c4b1fcc0 679
83f64091
FB
680void bdrv_get_backing_filename(BlockDriverState *bs,
681 char *filename, int filename_size);
faea38e7
FB
682int bdrv_snapshot_create(BlockDriverState *bs,
683 QEMUSnapshotInfo *sn_info);
684int bdrv_snapshot_goto(BlockDriverState *bs,
685 const char *snapshot_id);
686int bdrv_snapshot_delete(BlockDriverState *bs, const char *snapshot_id);
687int bdrv_snapshot_list(BlockDriverState *bs,
688 QEMUSnapshotInfo **psn_info);
689char *bdrv_snapshot_dump(char *buf, int buf_size, QEMUSnapshotInfo *sn);
690
691char *get_human_readable_size(char *buf, int buf_size, int64_t size);
83f64091
FB
692int path_is_absolute(const char *path);
693void path_combine(char *dest, int dest_size,
694 const char *base_path,
695 const char *filename);
ea2384d3
FB
696
697#ifndef QEMU_TOOL
54fa5af5
FB
698
699typedef void QEMUMachineInitFunc(int ram_size, int vga_ram_size,
700 int boot_device,
701 DisplayState *ds, const char **fd_filename, int snapshot,
702 const char *kernel_filename, const char *kernel_cmdline,
94fc95cd 703 const char *initrd_filename, const char *cpu_model);
54fa5af5
FB
704
705typedef struct QEMUMachine {
706 const char *name;
707 const char *desc;
708 QEMUMachineInitFunc *init;
709 struct QEMUMachine *next;
710} QEMUMachine;
711
712int qemu_register_machine(QEMUMachine *m);
713
714typedef void SetIRQFunc(void *opaque, int irq_num, int level);
715
94fc95cd
JM
716#if defined(TARGET_PPC)
717void ppc_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...));
718#endif
719
33d68b5f
TS
720#if defined(TARGET_MIPS)
721void mips_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...));
722#endif
723
d537cf6c
PB
724#include "hw/irq.h"
725
26aa7d72
FB
726/* ISA bus */
727
728extern target_phys_addr_t isa_mem_base;
729
730typedef void (IOPortWriteFunc)(void *opaque, uint32_t address, uint32_t data);
731typedef uint32_t (IOPortReadFunc)(void *opaque, uint32_t address);
732
733int register_ioport_read(int start, int length, int size,
734 IOPortReadFunc *func, void *opaque);
735int register_ioport_write(int start, int length, int size,
736 IOPortWriteFunc *func, void *opaque);
69b91039
FB
737void isa_unassign_ioport(int start, int length);
738
aef445bd
PB
739void isa_mmio_init(target_phys_addr_t base, target_phys_addr_t size);
740
69b91039
FB
741/* PCI bus */
742
69b91039
FB
743extern target_phys_addr_t pci_mem_base;
744
46e50e9d 745typedef struct PCIBus PCIBus;
69b91039
FB
746typedef struct PCIDevice PCIDevice;
747
748typedef void PCIConfigWriteFunc(PCIDevice *pci_dev,
749 uint32_t address, uint32_t data, int len);
750typedef uint32_t PCIConfigReadFunc(PCIDevice *pci_dev,
751 uint32_t address, int len);
752typedef void PCIMapIORegionFunc(PCIDevice *pci_dev, int region_num,
753 uint32_t addr, uint32_t size, int type);
754
755#define PCI_ADDRESS_SPACE_MEM 0x00
756#define PCI_ADDRESS_SPACE_IO 0x01
757#define PCI_ADDRESS_SPACE_MEM_PREFETCH 0x08
758
759typedef struct PCIIORegion {
5768f5ac 760 uint32_t addr; /* current PCI mapping address. -1 means not mapped */
69b91039
FB
761 uint32_t size;
762 uint8_t type;
763 PCIMapIORegionFunc *map_func;
764} PCIIORegion;
765
8a8696a3
FB
766#define PCI_ROM_SLOT 6
767#define PCI_NUM_REGIONS 7
502a5395
PB
768
769#define PCI_DEVICES_MAX 64
770
771#define PCI_VENDOR_ID 0x00 /* 16 bits */
772#define PCI_DEVICE_ID 0x02 /* 16 bits */
773#define PCI_COMMAND 0x04 /* 16 bits */
774#define PCI_COMMAND_IO 0x1 /* Enable response in I/O space */
775#define PCI_COMMAND_MEMORY 0x2 /* Enable response in Memory space */
776#define PCI_CLASS_DEVICE 0x0a /* Device class */
777#define PCI_INTERRUPT_LINE 0x3c /* 8 bits */
778#define PCI_INTERRUPT_PIN 0x3d /* 8 bits */
779#define PCI_MIN_GNT 0x3e /* 8 bits */
780#define PCI_MAX_LAT 0x3f /* 8 bits */
781
69b91039
FB
782struct PCIDevice {
783 /* PCI config space */
784 uint8_t config[256];
785
786 /* the following fields are read only */
46e50e9d 787 PCIBus *bus;
69b91039
FB
788 int devfn;
789 char name[64];
8a8696a3 790 PCIIORegion io_regions[PCI_NUM_REGIONS];
69b91039
FB
791
792 /* do not access the following fields */
793 PCIConfigReadFunc *config_read;
794 PCIConfigWriteFunc *config_write;
502a5395 795 /* ??? This is a PC-specific hack, and should be removed. */
5768f5ac 796 int irq_index;
d2b59317 797
d537cf6c
PB
798 /* IRQ objects for the INTA-INTD pins. */
799 qemu_irq *irq;
800
d2b59317
PB
801 /* Current IRQ levels. Used internally by the generic PCI code. */
802 int irq_state[4];
69b91039
FB
803};
804
46e50e9d
FB
805PCIDevice *pci_register_device(PCIBus *bus, const char *name,
806 int instance_size, int devfn,
69b91039
FB
807 PCIConfigReadFunc *config_read,
808 PCIConfigWriteFunc *config_write);
809
810void pci_register_io_region(PCIDevice *pci_dev, int region_num,
811 uint32_t size, int type,
812 PCIMapIORegionFunc *map_func);
813
5768f5ac
FB
814uint32_t pci_default_read_config(PCIDevice *d,
815 uint32_t address, int len);
816void pci_default_write_config(PCIDevice *d,
817 uint32_t address, uint32_t val, int len);
89b6b508
FB
818void pci_device_save(PCIDevice *s, QEMUFile *f);
819int pci_device_load(PCIDevice *s, QEMUFile *f);
5768f5ac 820
d537cf6c 821typedef void (*pci_set_irq_fn)(qemu_irq *pic, int irq_num, int level);
d2b59317
PB
822typedef int (*pci_map_irq_fn)(PCIDevice *pci_dev, int irq_num);
823PCIBus *pci_register_bus(pci_set_irq_fn set_irq, pci_map_irq_fn map_irq,
d537cf6c 824 qemu_irq *pic, int devfn_min, int nirq);
502a5395 825
abcebc7e 826void pci_nic_init(PCIBus *bus, NICInfo *nd, int devfn);
502a5395
PB
827void pci_data_write(void *opaque, uint32_t addr, uint32_t val, int len);
828uint32_t pci_data_read(void *opaque, uint32_t addr, int len);
829int pci_bus_num(PCIBus *s);
80b3ada7 830void pci_for_each_device(int bus_num, void (*fn)(PCIDevice *d));
9995c51f 831
5768f5ac 832void pci_info(void);
80b3ada7
PB
833PCIBus *pci_bridge_init(PCIBus *bus, int devfn, uint32_t id,
834 pci_map_irq_fn map_irq, const char *name);
26aa7d72 835
502a5395 836/* prep_pci.c */
d537cf6c 837PCIBus *pci_prep_init(qemu_irq *pic);
77d4bc34 838
502a5395 839/* grackle_pci.c */
d537cf6c 840PCIBus *pci_grackle_init(uint32_t base, qemu_irq *pic);
502a5395
PB
841
842/* unin_pci.c */
d537cf6c 843PCIBus *pci_pmac_init(qemu_irq *pic);
502a5395
PB
844
845/* apb_pci.c */
846PCIBus *pci_apb_init(target_ulong special_base, target_ulong mem_base,
d537cf6c 847 qemu_irq *pic);
502a5395 848
d537cf6c 849PCIBus *pci_vpb_init(qemu_irq *pic, int irq, int realview);
502a5395
PB
850
851/* piix_pci.c */
d537cf6c 852PCIBus *i440fx_init(PCIDevice **pi440fx_state, qemu_irq *pic);
f00fc47c 853void i440fx_set_smm(PCIDevice *d, int val);
8f1c91d8 854int piix3_init(PCIBus *bus, int devfn);
f00fc47c 855void i440fx_init_memory_mappings(PCIDevice *d);
a41b2ff2 856
5856de80
TS
857int piix4_init(PCIBus *bus, int devfn);
858
28b9b5af 859/* openpic.c */
e9df014c 860/* OpenPIC have 5 outputs per CPU connected and one IRQ out single output */
47103572 861enum {
e9df014c
JM
862 OPENPIC_OUTPUT_INT = 0, /* IRQ */
863 OPENPIC_OUTPUT_CINT, /* critical IRQ */
864 OPENPIC_OUTPUT_MCK, /* Machine check event */
865 OPENPIC_OUTPUT_DEBUG, /* Inconditional debug event */
866 OPENPIC_OUTPUT_RESET, /* Core reset event */
867 OPENPIC_OUTPUT_NB,
47103572 868};
e9df014c
JM
869qemu_irq *openpic_init (PCIBus *bus, int *pmem_index, int nb_cpus,
870 qemu_irq **irqs, qemu_irq irq_out);
28b9b5af 871
54fa5af5 872/* heathrow_pic.c */
d537cf6c 873qemu_irq *heathrow_pic_init(int *pmem_index);
54fa5af5 874
fde7d5bd 875/* gt64xxx.c */
d537cf6c 876PCIBus *pci_gt64120_init(qemu_irq *pic);
fde7d5bd 877
6a36d84e
FB
878#ifdef HAS_AUDIO
879struct soundhw {
880 const char *name;
881 const char *descr;
882 int enabled;
883 int isa;
884 union {
d537cf6c 885 int (*init_isa) (AudioState *s, qemu_irq *pic);
6a36d84e
FB
886 int (*init_pci) (PCIBus *bus, AudioState *s);
887 } init;
888};
889
890extern struct soundhw soundhw[];
891#endif
892
313aa567
FB
893/* vga.c */
894
eee0b836 895#ifndef TARGET_SPARC
74a14f22 896#define VGA_RAM_SIZE (8192 * 1024)
eee0b836
BS
897#else
898#define VGA_RAM_SIZE (9 * 1024 * 1024)
899#endif
313aa567 900
82c643ff 901struct DisplayState {
313aa567
FB
902 uint8_t *data;
903 int linesize;
904 int depth;
d3079cd2 905 int bgr; /* BGR color order instead of RGB. Only valid for depth == 32 */
82c643ff
FB
906 int width;
907 int height;
24236869
FB
908 void *opaque;
909
313aa567
FB
910 void (*dpy_update)(struct DisplayState *s, int x, int y, int w, int h);
911 void (*dpy_resize)(struct DisplayState *s, int w, int h);
912 void (*dpy_refresh)(struct DisplayState *s);
d34cab9f
TS
913 void (*dpy_copy)(struct DisplayState *s, int src_x, int src_y,
914 int dst_x, int dst_y, int w, int h);
915 void (*dpy_fill)(struct DisplayState *s, int x, int y,
916 int w, int h, uint32_t c);
917 void (*mouse_set)(int x, int y, int on);
918 void (*cursor_define)(int width, int height, int bpp, int hot_x, int hot_y,
919 uint8_t *image, uint8_t *mask);
82c643ff 920};
313aa567
FB
921
922static inline void dpy_update(DisplayState *s, int x, int y, int w, int h)
923{
924 s->dpy_update(s, x, y, w, h);
925}
926
927static inline void dpy_resize(DisplayState *s, int w, int h)
928{
929 s->dpy_resize(s, w, h);
930}
931
89b6b508
FB
932int isa_vga_init(DisplayState *ds, uint8_t *vga_ram_base,
933 unsigned long vga_ram_offset, int vga_ram_size);
934int pci_vga_init(PCIBus *bus, DisplayState *ds, uint8_t *vga_ram_base,
935 unsigned long vga_ram_offset, int vga_ram_size,
936 unsigned long vga_bios_offset, int vga_bios_size);
2abec30b
TS
937int isa_vga_mm_init(DisplayState *ds, uint8_t *vga_ram_base,
938 unsigned long vga_ram_offset, int vga_ram_size,
939 target_phys_addr_t vram_base, target_phys_addr_t ctrl_base,
940 int it_shift);
313aa567 941
d6bfa22f 942/* cirrus_vga.c */
46e50e9d 943void pci_cirrus_vga_init(PCIBus *bus, DisplayState *ds, uint8_t *vga_ram_base,
d6bfa22f 944 unsigned long vga_ram_offset, int vga_ram_size);
d6bfa22f
FB
945void isa_cirrus_vga_init(DisplayState *ds, uint8_t *vga_ram_base,
946 unsigned long vga_ram_offset, int vga_ram_size);
947
d34cab9f
TS
948/* vmware_vga.c */
949void pci_vmsvga_init(PCIBus *bus, DisplayState *ds, uint8_t *vga_ram_base,
950 unsigned long vga_ram_offset, int vga_ram_size);
951
313aa567 952/* sdl.c */
43523e93 953void sdl_display_init(DisplayState *ds, int full_screen, int no_frame);
313aa567 954
da4dbf74
FB
955/* cocoa.m */
956void cocoa_display_init(DisplayState *ds, int full_screen);
957
24236869 958/* vnc.c */
73fc9742 959void vnc_display_init(DisplayState *ds, const char *display);
a9ce8590 960void do_info_vnc(void);
24236869 961
6070dd07
TS
962/* x_keymap.c */
963extern uint8_t _translate_keycode(const int key);
964
5391d806
FB
965/* ide.c */
966#define MAX_DISKS 4
967
faea38e7 968extern BlockDriverState *bs_table[MAX_DISKS + 1];
a1bb27b1 969extern BlockDriverState *sd_bdrv;
3e3d5815 970extern BlockDriverState *mtd_bdrv;
5391d806 971
d537cf6c 972void isa_ide_init(int iobase, int iobase2, qemu_irq irq,
69b91039 973 BlockDriverState *hd0, BlockDriverState *hd1);
54fa5af5
FB
974void pci_cmd646_ide_init(PCIBus *bus, BlockDriverState **hd_table,
975 int secondary_ide_enabled);
d537cf6c
PB
976void pci_piix3_ide_init(PCIBus *bus, BlockDriverState **hd_table, int devfn,
977 qemu_irq *pic);
978int pmac_ide_init (BlockDriverState **hd_table, qemu_irq irq);
5391d806 979
2e5d83bb
PB
980/* cdrom.c */
981int cdrom_read_toc(int nb_sectors, uint8_t *buf, int msf, int start_track);
982int cdrom_read_toc_raw(int nb_sectors, uint8_t *buf, int msf, int session_num);
983
9542611a
TS
984/* ds1225y.c */
985typedef struct ds1225y_t ds1225y_t;
986ds1225y_t *ds1225y_init(target_ulong mem_base, const char *filename);
987
1d14ffa9 988/* es1370.c */
c0fe3827 989int es1370_init (PCIBus *bus, AudioState *s);
1d14ffa9 990
fb065187 991/* sb16.c */
d537cf6c 992int SB16_init (AudioState *s, qemu_irq *pic);
fb065187
FB
993
994/* adlib.c */
d537cf6c 995int Adlib_init (AudioState *s, qemu_irq *pic);
fb065187
FB
996
997/* gus.c */
d537cf6c 998int GUS_init (AudioState *s, qemu_irq *pic);
27503323
FB
999
1000/* dma.c */
85571bc7 1001typedef int (*DMA_transfer_handler) (void *opaque, int nchan, int pos, int size);
27503323 1002int DMA_get_channel_mode (int nchan);
85571bc7
FB
1003int DMA_read_memory (int nchan, void *buf, int pos, int size);
1004int DMA_write_memory (int nchan, void *buf, int pos, int size);
27503323
FB
1005void DMA_hold_DREQ (int nchan);
1006void DMA_release_DREQ (int nchan);
16f62432 1007void DMA_schedule(int nchan);
27503323 1008void DMA_run (void);
28b9b5af 1009void DMA_init (int high_page_enable);
27503323 1010void DMA_register_channel (int nchan,
85571bc7
FB
1011 DMA_transfer_handler transfer_handler,
1012 void *opaque);
7138fcfb
FB
1013/* fdc.c */
1014#define MAX_FD 2
1015extern BlockDriverState *fd_table[MAX_FD];
1016
baca51fa
FB
1017typedef struct fdctrl_t fdctrl_t;
1018
d537cf6c 1019fdctrl_t *fdctrl_init (qemu_irq irq, int dma_chann, int mem_mapped,
baca51fa
FB
1020 uint32_t io_base,
1021 BlockDriverState **fds);
1022int fdctrl_get_drive_type(fdctrl_t *fdctrl, int drive_num);
7138fcfb 1023
663e8e51
TS
1024/* eepro100.c */
1025
1026void pci_i82551_init(PCIBus *bus, NICInfo *nd, int devfn);
1027void pci_i82557b_init(PCIBus *bus, NICInfo *nd, int devfn);
1028void pci_i82559er_init(PCIBus *bus, NICInfo *nd, int devfn);
1029
80cabfad
FB
1030/* ne2000.c */
1031
d537cf6c 1032void isa_ne2000_init(int base, qemu_irq irq, NICInfo *nd);
abcebc7e 1033void pci_ne2000_init(PCIBus *bus, NICInfo *nd, int devfn);
80cabfad 1034
a41b2ff2
PB
1035/* rtl8139.c */
1036
abcebc7e 1037void pci_rtl8139_init(PCIBus *bus, NICInfo *nd, int devfn);
a41b2ff2 1038
e3c2613f
FB
1039/* pcnet.c */
1040
abcebc7e 1041void pci_pcnet_init(PCIBus *bus, NICInfo *nd, int devfn);
67e999be 1042void pcnet_h_reset(void *opaque);
d537cf6c 1043void *lance_init(NICInfo *nd, uint32_t leaddr, void *dma_opaque, qemu_irq irq);
67e999be 1044
548df2ac
TS
1045/* vmmouse.c */
1046void *vmmouse_init(void *m);
e3c2613f 1047
80cabfad
FB
1048/* pckbd.c */
1049
b92bb99b
TS
1050void i8042_init(qemu_irq kbd_irq, qemu_irq mouse_irq, uint32_t io_base);
1051void i8042_mm_init(qemu_irq kbd_irq, qemu_irq mouse_irq, target_ulong base, int it_shift);
80cabfad
FB
1052
1053/* mc146818rtc.c */
1054
8a7ddc38 1055typedef struct RTCState RTCState;
80cabfad 1056
d537cf6c 1057RTCState *rtc_init(int base, qemu_irq irq);
18c6e2ff 1058RTCState *rtc_mm_init(target_phys_addr_t base, int it_shift, qemu_irq irq);
8a7ddc38
FB
1059void rtc_set_memory(RTCState *s, int addr, int val);
1060void rtc_set_date(RTCState *s, const struct tm *tm);
80cabfad
FB
1061
1062/* serial.c */
1063
c4b1fcc0 1064typedef struct SerialState SerialState;
d537cf6c
PB
1065SerialState *serial_init(int base, qemu_irq irq, CharDriverState *chr);
1066SerialState *serial_mm_init (target_ulong base, int it_shift,
1067 qemu_irq irq, CharDriverState *chr,
a4bc3afc
TS
1068 int ioregister);
1069uint32_t serial_mm_readb (void *opaque, target_phys_addr_t addr);
1070void serial_mm_writeb (void *opaque, target_phys_addr_t addr, uint32_t value);
1071uint32_t serial_mm_readw (void *opaque, target_phys_addr_t addr);
1072void serial_mm_writew (void *opaque, target_phys_addr_t addr, uint32_t value);
1073uint32_t serial_mm_readl (void *opaque, target_phys_addr_t addr);
1074void serial_mm_writel (void *opaque, target_phys_addr_t addr, uint32_t value);
80cabfad 1075
6508fe59
FB
1076/* parallel.c */
1077
1078typedef struct ParallelState ParallelState;
d537cf6c 1079ParallelState *parallel_init(int base, qemu_irq irq, CharDriverState *chr);
6508fe59 1080
80cabfad
FB
1081/* i8259.c */
1082
3de388f6
FB
1083typedef struct PicState2 PicState2;
1084extern PicState2 *isa_pic;
80cabfad 1085void pic_set_irq(int irq, int level);
54fa5af5 1086void pic_set_irq_new(void *opaque, int irq, int level);
d537cf6c 1087qemu_irq *i8259_init(qemu_irq parent_irq);
d592d303
FB
1088void pic_set_alt_irq_func(PicState2 *s, SetIRQFunc *alt_irq_func,
1089 void *alt_irq_opaque);
3de388f6
FB
1090int pic_read_irq(PicState2 *s);
1091void pic_update_irq(PicState2 *s);
1092uint32_t pic_intack_read(PicState2 *s);
c20709aa 1093void pic_info(void);
4a0fb71e 1094void irq_info(void);
80cabfad 1095
c27004ec 1096/* APIC */
d592d303
FB
1097typedef struct IOAPICState IOAPICState;
1098
c27004ec
FB
1099int apic_init(CPUState *env);
1100int apic_get_interrupt(CPUState *env);
d592d303
FB
1101IOAPICState *ioapic_init(void);
1102void ioapic_set_irq(void *opaque, int vector, int level);
c27004ec 1103
80cabfad
FB
1104/* i8254.c */
1105
1106#define PIT_FREQ 1193182
1107
ec844b96
FB
1108typedef struct PITState PITState;
1109
d537cf6c 1110PITState *pit_init(int base, qemu_irq irq);
ec844b96
FB
1111void pit_set_gate(PITState *pit, int channel, int val);
1112int pit_get_gate(PITState *pit, int channel);
fd06c375
FB
1113int pit_get_initial_count(PITState *pit, int channel);
1114int pit_get_mode(PITState *pit, int channel);
ec844b96 1115int pit_get_out(PITState *pit, int channel, int64_t current_time);
80cabfad 1116
fd06c375
FB
1117/* pcspk.c */
1118void pcspk_init(PITState *);
d537cf6c 1119int pcspk_audio_init(AudioState *, qemu_irq *pic);
fd06c375 1120
3fffc223
TS
1121#include "hw/smbus.h"
1122
6515b203
FB
1123/* acpi.c */
1124extern int acpi_enabled;
502a5395 1125void piix4_pm_init(PCIBus *bus, int devfn);
3fffc223 1126void piix4_smbus_register_device(SMBusDevice *dev, uint8_t addr);
6515b203
FB
1127void acpi_bios_init(void);
1128
3fffc223
TS
1129/* smbus_eeprom.c */
1130SMBusDevice *smbus_eeprom_device_init(uint8_t addr, uint8_t *buf);
1131
80cabfad 1132/* pc.c */
54fa5af5 1133extern QEMUMachine pc_machine;
3dbbdc25 1134extern QEMUMachine isapc_machine;
52ca8d6a 1135extern int fd_bootchk;
80cabfad 1136
6a00d601
FB
1137void ioport_set_a20(int enable);
1138int ioport_get_a20(void);
1139
26aa7d72 1140/* ppc.c */
54fa5af5
FB
1141extern QEMUMachine prep_machine;
1142extern QEMUMachine core99_machine;
1143extern QEMUMachine heathrow_machine;
1a6c0886
JM
1144extern QEMUMachine ref405ep_machine;
1145extern QEMUMachine taihu_machine;
54fa5af5 1146
6af0bf9c
FB
1147/* mips_r4k.c */
1148extern QEMUMachine mips_machine;
1149
5856de80
TS
1150/* mips_malta.c */
1151extern QEMUMachine mips_malta_machine;
1152
ad6fe1d2 1153/* mips_int.c */
d537cf6c 1154extern void cpu_mips_irq_init_cpu(CPUState *env);
4de9b249 1155
ad6fe1d2
TS
1156/* mips_pica61.c */
1157extern QEMUMachine mips_pica61_machine;
1158
e16fe40c
TS
1159/* mips_timer.c */
1160extern void cpu_mips_clock_init(CPUState *);
1161extern void cpu_mips_irqctrl_init (void);
1162
27c7ca7e
FB
1163/* shix.c */
1164extern QEMUMachine shix_machine;
1165
8cc43fef 1166#ifdef TARGET_PPC
47103572 1167/* PowerPC hardware exceptions management helpers */
8ecc7913
JM
1168typedef void (*clk_setup_cb)(void *opaque, uint32_t freq);
1169typedef struct clk_setup_t clk_setup_t;
1170struct clk_setup_t {
1171 clk_setup_cb cb;
1172 void *opaque;
1173};
1174static inline void clk_setup (clk_setup_t *clk, uint32_t freq)
1175{
1176 if (clk->cb != NULL)
1177 (*clk->cb)(clk->opaque, freq);
1178}
1179
1180clk_setup_cb cpu_ppc_tb_init (CPUState *env, uint32_t freq);
2e719ba3
JM
1181/* Embedded PowerPC DCR management */
1182typedef target_ulong (*dcr_read_cb)(void *opaque, int dcrn);
1183typedef void (*dcr_write_cb)(void *opaque, int dcrn, target_ulong val);
1184int ppc_dcr_init (CPUState *env, int (*dcr_read_error)(int dcrn),
1185 int (*dcr_write_error)(int dcrn));
1186int ppc_dcr_register (CPUState *env, int dcrn, void *opaque,
1187 dcr_read_cb drc_read, dcr_write_cb dcr_write);
8ecc7913 1188clk_setup_cb ppc_emb_timers_init (CPUState *env, uint32_t freq);
4a057712
JM
1189/* Embedded PowerPC reset */
1190void ppc40x_core_reset (CPUState *env);
1191void ppc40x_chip_reset (CPUState *env);
1192void ppc40x_system_reset (CPUState *env);
8cc43fef 1193#endif
64201201 1194void PREP_debug_write (void *opaque, uint32_t addr, uint32_t val);
77d4bc34
FB
1195
1196extern CPUWriteMemoryFunc *PPC_io_write[];
1197extern CPUReadMemoryFunc *PPC_io_read[];
54fa5af5 1198void PPC_debug_write (void *opaque, uint32_t addr, uint32_t val);
26aa7d72 1199
e95c8d51 1200/* sun4m.c */
e0353fe2 1201extern QEMUMachine ss5_machine, ss10_machine;
e95c8d51
FB
1202
1203/* iommu.c */
e80cfcfc 1204void *iommu_init(uint32_t addr);
67e999be 1205void sparc_iommu_memory_rw(void *opaque, target_phys_addr_t addr,
a917d384 1206 uint8_t *buf, int len, int is_write);
67e999be
FB
1207static inline void sparc_iommu_memory_read(void *opaque,
1208 target_phys_addr_t addr,
1209 uint8_t *buf, int len)
1210{
1211 sparc_iommu_memory_rw(opaque, addr, buf, len, 0);
1212}
e95c8d51 1213
67e999be
FB
1214static inline void sparc_iommu_memory_write(void *opaque,
1215 target_phys_addr_t addr,
1216 uint8_t *buf, int len)
1217{
1218 sparc_iommu_memory_rw(opaque, addr, buf, len, 1);
1219}
e95c8d51
FB
1220
1221/* tcx.c */
95219897 1222void tcx_init(DisplayState *ds, uint32_t addr, uint8_t *vram_base,
eee0b836
BS
1223 unsigned long vram_offset, int vram_size, int width, int height,
1224 int depth);
e80cfcfc
FB
1225
1226/* slavio_intctl.c */
52cc07d0 1227void pic_set_irq_cpu(void *opaque, int irq, int level, unsigned int cpu);
e0353fe2 1228void *slavio_intctl_init(uint32_t addr, uint32_t addrg,
d537cf6c
PB
1229 const uint32_t *intbit_to_level,
1230 qemu_irq **irq);
ba3c64fb 1231void slavio_intctl_set_cpu(void *opaque, unsigned int cpu, CPUState *env);
e80cfcfc
FB
1232void slavio_pic_info(void *opaque);
1233void slavio_irq_info(void *opaque);
e95c8d51 1234
5fe141fd
FB
1235/* loader.c */
1236int get_image_size(const char *filename);
1237int load_image(const char *filename, uint8_t *addr);
74287114
TS
1238int load_elf(const char *filename, int64_t virt_to_phys_addend,
1239 uint64_t *pentry, uint64_t *lowaddr, uint64_t *highaddr);
e80cfcfc 1240int load_aout(const char *filename, uint8_t *addr);
1c7b3754 1241int load_uboot(const char *filename, target_ulong *ep, int *is_linux);
e80cfcfc
FB
1242
1243/* slavio_timer.c */
52cc07d0
BS
1244void slavio_timer_init(uint32_t addr, int irq, int mode, unsigned int cpu,
1245 void *intctl);
8d5f07fa 1246
e80cfcfc 1247/* slavio_serial.c */
d537cf6c
PB
1248SerialState *slavio_serial_init(int base, qemu_irq irq, CharDriverState *chr1,
1249 CharDriverState *chr2);
1250void slavio_serial_ms_kbd_init(int base, qemu_irq);
e95c8d51 1251
3475187d 1252/* slavio_misc.c */
d537cf6c 1253void *slavio_misc_init(uint32_t base, qemu_irq irq);
3475187d
FB
1254void slavio_set_power_fail(void *opaque, int power_failing);
1255
6f7e9aec 1256/* esp.c */
fa1fb14c 1257void esp_scsi_attach(void *opaque, BlockDriverState *bd, int id);
67e999be
FB
1258void *esp_init(BlockDriverState **bd, uint32_t espaddr, void *dma_opaque);
1259void esp_reset(void *opaque);
1260
1261/* sparc32_dma.c */
d537cf6c
PB
1262void *sparc32_dma_init(uint32_t daddr, qemu_irq espirq, qemu_irq leirq,
1263 void *iommu);
67e999be 1264void ledma_set_irq(void *opaque, int isr);
9b94dc32
FB
1265void ledma_memory_read(void *opaque, target_phys_addr_t addr,
1266 uint8_t *buf, int len, int do_bswap);
1267void ledma_memory_write(void *opaque, target_phys_addr_t addr,
1268 uint8_t *buf, int len, int do_bswap);
67e999be
FB
1269void espdma_raise_irq(void *opaque);
1270void espdma_clear_irq(void *opaque);
1271void espdma_memory_read(void *opaque, uint8_t *buf, int len);
1272void espdma_memory_write(void *opaque, uint8_t *buf, int len);
1273void sparc32_dma_set_reset_data(void *opaque, void *esp_opaque,
1274 void *lance_opaque);
6f7e9aec 1275
b8174937
FB
1276/* cs4231.c */
1277void cs_init(target_phys_addr_t base, int irq, void *intctl);
1278
3475187d
FB
1279/* sun4u.c */
1280extern QEMUMachine sun4u_machine;
1281
64201201
FB
1282/* NVRAM helpers */
1283#include "hw/m48t59.h"
1284
1285void NVRAM_set_byte (m48t59_t *nvram, uint32_t addr, uint8_t value);
1286uint8_t NVRAM_get_byte (m48t59_t *nvram, uint32_t addr);
1287void NVRAM_set_word (m48t59_t *nvram, uint32_t addr, uint16_t value);
1288uint16_t NVRAM_get_word (m48t59_t *nvram, uint32_t addr);
1289void NVRAM_set_lword (m48t59_t *nvram, uint32_t addr, uint32_t value);
1290uint32_t NVRAM_get_lword (m48t59_t *nvram, uint32_t addr);
1291void NVRAM_set_string (m48t59_t *nvram, uint32_t addr,
1292 const unsigned char *str, uint32_t max);
1293int NVRAM_get_string (m48t59_t *nvram, uint8_t *dst, uint16_t addr, int max);
1294void NVRAM_set_crc (m48t59_t *nvram, uint32_t addr,
1295 uint32_t start, uint32_t count);
1296int PPC_NVRAM_set_params (m48t59_t *nvram, uint16_t NVRAM_size,
1297 const unsigned char *arch,
1298 uint32_t RAM_size, int boot_device,
1299 uint32_t kernel_image, uint32_t kernel_size,
28b9b5af 1300 const char *cmdline,
64201201 1301 uint32_t initrd_image, uint32_t initrd_size,
28b9b5af
FB
1302 uint32_t NVRAM_image,
1303 int width, int height, int depth);
64201201 1304
63066f4f
FB
1305/* adb.c */
1306
1307#define MAX_ADB_DEVICES 16
1308
e2733d20 1309#define ADB_MAX_OUT_LEN 16
63066f4f 1310
e2733d20 1311typedef struct ADBDevice ADBDevice;
63066f4f 1312
e2733d20
FB
1313/* buf = NULL means polling */
1314typedef int ADBDeviceRequest(ADBDevice *d, uint8_t *buf_out,
1315 const uint8_t *buf, int len);
12c28fed
FB
1316typedef int ADBDeviceReset(ADBDevice *d);
1317
63066f4f
FB
1318struct ADBDevice {
1319 struct ADBBusState *bus;
1320 int devaddr;
1321 int handler;
e2733d20 1322 ADBDeviceRequest *devreq;
12c28fed 1323 ADBDeviceReset *devreset;
63066f4f
FB
1324 void *opaque;
1325};
1326
1327typedef struct ADBBusState {
1328 ADBDevice devices[MAX_ADB_DEVICES];
1329 int nb_devices;
e2733d20 1330 int poll_index;
63066f4f
FB
1331} ADBBusState;
1332
e2733d20
FB
1333int adb_request(ADBBusState *s, uint8_t *buf_out,
1334 const uint8_t *buf, int len);
1335int adb_poll(ADBBusState *s, uint8_t *buf_out);
63066f4f
FB
1336
1337ADBDevice *adb_register_device(ADBBusState *s, int devaddr,
e2733d20 1338 ADBDeviceRequest *devreq,
12c28fed 1339 ADBDeviceReset *devreset,
63066f4f
FB
1340 void *opaque);
1341void adb_kbd_init(ADBBusState *bus);
1342void adb_mouse_init(ADBBusState *bus);
1343
1344/* cuda.c */
1345
1346extern ADBBusState adb_bus;
d537cf6c 1347int cuda_init(qemu_irq irq);
63066f4f 1348
bb36d470
FB
1349#include "hw/usb.h"
1350
a594cfbf
FB
1351/* usb ports of the VM */
1352
0d92ed30
PB
1353void qemu_register_usb_port(USBPort *port, void *opaque, int index,
1354 usb_attachfn attach);
a594cfbf 1355
0d92ed30 1356#define VM_USB_HUB_SIZE 8
a594cfbf
FB
1357
1358void do_usb_add(const char *devname);
1359void do_usb_del(const char *devname);
1360void usb_info(void);
1361
2e5d83bb 1362/* scsi-disk.c */
4d611c9a
PB
1363enum scsi_reason {
1364 SCSI_REASON_DONE, /* Command complete. */
1365 SCSI_REASON_DATA /* Transfer complete, more data required. */
1366};
1367
2e5d83bb 1368typedef struct SCSIDevice SCSIDevice;
a917d384
PB
1369typedef void (*scsi_completionfn)(void *opaque, int reason, uint32_t tag,
1370 uint32_t arg);
2e5d83bb
PB
1371
1372SCSIDevice *scsi_disk_init(BlockDriverState *bdrv,
a917d384 1373 int tcq,
2e5d83bb
PB
1374 scsi_completionfn completion,
1375 void *opaque);
1376void scsi_disk_destroy(SCSIDevice *s);
1377
0fc5c15a 1378int32_t scsi_send_command(SCSIDevice *s, uint32_t tag, uint8_t *buf, int lun);
4d611c9a
PB
1379/* SCSI data transfers are asynchrnonous. However, unlike the block IO
1380 layer the completion routine may be called directly by
1381 scsi_{read,write}_data. */
a917d384
PB
1382void scsi_read_data(SCSIDevice *s, uint32_t tag);
1383int scsi_write_data(SCSIDevice *s, uint32_t tag);
1384void scsi_cancel_io(SCSIDevice *s, uint32_t tag);
1385uint8_t *scsi_get_buf(SCSIDevice *s, uint32_t tag);
2e5d83bb 1386
7d8406be
PB
1387/* lsi53c895a.c */
1388void lsi_scsi_attach(void *opaque, BlockDriverState *bd, int id);
1389void *lsi_scsi_init(PCIBus *bus, int devfn);
1390
b5ff1b31 1391/* integratorcp.c */
3371d272 1392extern QEMUMachine integratorcp_machine;
b5ff1b31 1393
cdbdb648
PB
1394/* versatilepb.c */
1395extern QEMUMachine versatilepb_machine;
16406950 1396extern QEMUMachine versatileab_machine;
cdbdb648 1397
e69954b9
PB
1398/* realview.c */
1399extern QEMUMachine realview_machine;
1400
b00052e4
AZ
1401/* spitz.c */
1402extern QEMUMachine akitapda_machine;
1403extern QEMUMachine spitzpda_machine;
1404extern QEMUMachine borzoipda_machine;
1405extern QEMUMachine terrierpda_machine;
1406
daa57963
FB
1407/* ps2.c */
1408void *ps2_kbd_init(void (*update_irq)(void *, int), void *update_arg);
1409void *ps2_mouse_init(void (*update_irq)(void *, int), void *update_arg);
1410void ps2_write_mouse(void *, int val);
1411void ps2_write_keyboard(void *, int val);
1412uint32_t ps2_read_data(void *);
1413void ps2_queue(void *, int b);
f94f5d71 1414void ps2_keyboard_set_translation(void *opaque, int mode);
548df2ac 1415void ps2_mouse_fake_event(void *opaque);
daa57963 1416
80337b66 1417/* smc91c111.c */
d537cf6c 1418void smc91c111_init(NICInfo *, uint32_t, qemu_irq);
80337b66 1419
bdd5003a 1420/* pl110.c */
d537cf6c 1421void *pl110_init(DisplayState *ds, uint32_t base, qemu_irq irq, int);
bdd5003a 1422
cdbdb648 1423/* pl011.c */
d537cf6c 1424void pl011_init(uint32_t base, qemu_irq irq, CharDriverState *chr);
cdbdb648
PB
1425
1426/* pl050.c */
d537cf6c 1427void pl050_init(uint32_t base, qemu_irq irq, int is_mouse);
cdbdb648
PB
1428
1429/* pl080.c */
d537cf6c 1430void *pl080_init(uint32_t base, qemu_irq irq, int nchannels);
cdbdb648 1431
a1bb27b1
PB
1432/* pl181.c */
1433void pl181_init(uint32_t base, BlockDriverState *bd,
d537cf6c 1434 qemu_irq irq0, qemu_irq irq1);
a1bb27b1 1435
cdbdb648 1436/* pl190.c */
d537cf6c 1437qemu_irq *pl190_init(uint32_t base, qemu_irq irq, qemu_irq fiq);
cdbdb648
PB
1438
1439/* arm-timer.c */
d537cf6c
PB
1440void sp804_init(uint32_t base, qemu_irq irq);
1441void icp_pit_init(uint32_t base, qemu_irq *pic, int irq);
cdbdb648 1442
e69954b9
PB
1443/* arm_sysctl.c */
1444void arm_sysctl_init(uint32_t base, uint32_t sys_id);
1445
1446/* arm_gic.c */
d537cf6c 1447qemu_irq *arm_gic_init(uint32_t base, qemu_irq parent_irq);
e69954b9 1448
16406950
PB
1449/* arm_boot.c */
1450
daf90626 1451void arm_load_kernel(CPUState *env, int ram_size, const char *kernel_filename,
16406950 1452 const char *kernel_cmdline, const char *initrd_filename,
9d551997 1453 int board_id, target_phys_addr_t loader_start);
16406950 1454
27c7ca7e
FB
1455/* sh7750.c */
1456struct SH7750State;
1457
008a8818 1458struct SH7750State *sh7750_init(CPUState * cpu);
27c7ca7e
FB
1459
1460typedef struct {
1461 /* The callback will be triggered if any of the designated lines change */
1462 uint16_t portamask_trigger;
1463 uint16_t portbmask_trigger;
1464 /* Return 0 if no action was taken */
1465 int (*port_change_cb) (uint16_t porta, uint16_t portb,
1466 uint16_t * periph_pdtra,
1467 uint16_t * periph_portdira,
1468 uint16_t * periph_pdtrb,
1469 uint16_t * periph_portdirb);
1470} sh7750_io_device;
1471
1472int sh7750_register_io_device(struct SH7750State *s,
1473 sh7750_io_device * device);
1474/* tc58128.c */
1475int tc58128_init(struct SH7750State *s, char *zone1, char *zone2);
1476
29133e9a 1477/* NOR flash devices */
86f55663
JM
1478#define MAX_PFLASH 4
1479extern BlockDriverState *pflash_table[MAX_PFLASH];
29133e9a
FB
1480typedef struct pflash_t pflash_t;
1481
1482pflash_t *pflash_register (target_ulong base, ram_addr_t off,
1483 BlockDriverState *bs,
1484 target_ulong sector_len, int nb_blocs, int width,
1485 uint16_t id0, uint16_t id1,
1486 uint16_t id2, uint16_t id3);
1487
3e3d5815
AZ
1488/* nand.c */
1489struct nand_flash_s;
1490struct nand_flash_s *nand_init(int manf_id, int chip_id);
1491void nand_done(struct nand_flash_s *s);
1492void nand_setpins(struct nand_flash_s *s,
1493 int cle, int ale, int ce, int wp, int gnd);
1494void nand_getpins(struct nand_flash_s *s, int *rb);
1495void nand_setio(struct nand_flash_s *s, uint8_t value);
1496uint8_t nand_getio(struct nand_flash_s *s);
1497
1498#define NAND_MFR_TOSHIBA 0x98
1499#define NAND_MFR_SAMSUNG 0xec
1500#define NAND_MFR_FUJITSU 0x04
1501#define NAND_MFR_NATIONAL 0x8f
1502#define NAND_MFR_RENESAS 0x07
1503#define NAND_MFR_STMICRO 0x20
1504#define NAND_MFR_HYNIX 0xad
1505#define NAND_MFR_MICRON 0x2c
1506
1507#include "ecc.h"
1508
2a1d1880
AZ
1509/* GPIO */
1510typedef void (*gpio_handler_t)(int line, int level, void *opaque);
1511
fd5a3b33
AZ
1512/* ads7846.c */
1513struct ads7846_state_s;
1514uint32_t ads7846_read(void *opaque);
1515void ads7846_write(void *opaque, uint32_t value);
1516struct ads7846_state_s *ads7846_init(qemu_irq penirq);
1517
c824cacd
AZ
1518/* max111x.c */
1519struct max111x_s;
1520uint32_t max111x_read(void *opaque);
1521void max111x_write(void *opaque, uint32_t value);
1522struct max111x_s *max1110_init(qemu_irq cb);
1523struct max111x_s *max1111_init(qemu_irq cb);
1524void max111x_set_input(struct max111x_s *s, int line, uint8_t value);
1525
201a51fc
AZ
1526/* PCMCIA/Cardbus */
1527
1528struct pcmcia_socket_s {
1529 qemu_irq irq;
1530 int attached;
1531 const char *slot_string;
1532 const char *card_string;
1533};
1534
1535void pcmcia_socket_register(struct pcmcia_socket_s *socket);
1536void pcmcia_socket_unregister(struct pcmcia_socket_s *socket);
1537void pcmcia_info(void);
1538
1539struct pcmcia_card_s {
1540 void *state;
1541 struct pcmcia_socket_s *slot;
1542 int (*attach)(void *state);
1543 int (*detach)(void *state);
1544 const uint8_t *cis;
1545 int cis_len;
1546
1547 /* Only valid if attached */
1548 uint8_t (*attr_read)(void *state, uint16_t address);
1549 void (*attr_write)(void *state, uint16_t address, uint8_t value);
1550 uint16_t (*common_read)(void *state, uint16_t address);
1551 void (*common_write)(void *state, uint16_t address, uint16_t value);
1552 uint16_t (*io_read)(void *state, uint16_t address);
1553 void (*io_write)(void *state, uint16_t address, uint16_t value);
1554};
1555
1556#define CISTPL_DEVICE 0x01 /* 5V Device Information Tuple */
1557#define CISTPL_NO_LINK 0x14 /* No Link Tuple */
1558#define CISTPL_VERS_1 0x15 /* Level 1 Version Tuple */
1559#define CISTPL_JEDEC_C 0x18 /* JEDEC ID Tuple */
1560#define CISTPL_JEDEC_A 0x19 /* JEDEC ID Tuple */
1561#define CISTPL_CONFIG 0x1a /* Configuration Tuple */
1562#define CISTPL_CFTABLE_ENTRY 0x1b /* 16-bit PCCard Configuration */
1563#define CISTPL_DEVICE_OC 0x1c /* Additional Device Information */
1564#define CISTPL_DEVICE_OA 0x1d /* Additional Device Information */
1565#define CISTPL_DEVICE_GEO 0x1e /* Additional Device Information */
1566#define CISTPL_DEVICE_GEO_A 0x1f /* Additional Device Information */
1567#define CISTPL_MANFID 0x20 /* Manufacture ID Tuple */
1568#define CISTPL_FUNCID 0x21 /* Function ID Tuple */
1569#define CISTPL_FUNCE 0x22 /* Function Extension Tuple */
1570#define CISTPL_END 0xff /* Tuple End */
1571#define CISTPL_ENDMARK 0xff
1572
1573/* dscm1xxxx.c */
1574struct pcmcia_card_s *dscm1xxxx_init(BlockDriverState *bdrv);
1575
c1713132
AZ
1576#include "hw/pxa.h"
1577
4046d913
PB
1578#include "gdbstub.h"
1579
ea2384d3
FB
1580#endif /* defined(QEMU_TOOL) */
1581
c4b1fcc0 1582/* monitor.c */
82c643ff 1583void monitor_init(CharDriverState *hd, int show_banner);
ea2384d3
FB
1584void term_puts(const char *str);
1585void term_vprintf(const char *fmt, va_list ap);
40c3bac3 1586void term_printf(const char *fmt, ...) __attribute__ ((__format__ (__printf__, 1, 2)));
fef30743 1587void term_print_filename(const char *filename);
c4b1fcc0
FB
1588void term_flush(void);
1589void term_print_help(void);
ea2384d3
FB
1590void monitor_readline(const char *prompt, int is_password,
1591 char *buf, int buf_size);
1592
1593/* readline.c */
1594typedef void ReadLineFunc(void *opaque, const char *str);
1595
1596extern int completion_index;
1597void add_completion(const char *str);
1598void readline_handle_byte(int ch);
1599void readline_find_completion(const char *cmdline);
1600const char *readline_get_history(unsigned int index);
1601void readline_start(const char *prompt, int is_password,
1602 ReadLineFunc *readline_func, void *opaque);
c4b1fcc0 1603
5e6ad6f9
FB
1604void kqemu_record_dump(void);
1605
fc01f7e7 1606#endif /* VL_H */