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