2 * QEMU System Emulator header
4 * Copyright (c) 2003 Fabrice Bellard
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:
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
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
27 /* we put basic includes here to avoid repeating them in device drivers */
40 #include "audio/audio.h"
50 #define lseek _lseeki64
52 /* XXX: find 64 bit version */
53 #define ftruncate chsize
55 static inline char *realpath(const char *path, char *resolved_path)
57 _fullpath(resolved_path, path, _MAX_PATH);
64 /* we use QEMU_TOOL in the command line tools which do not depend on
65 the target CPU type */
66 #include "config-host.h"
76 #endif /* !defined(QEMU_TOOL) */
79 #define xglue(x, y) x ## y
80 #define glue(x, y) xglue(x, y)
81 #define stringify(s) tostring(s)
82 #define tostring(s) #s
86 uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c);
88 void hw_error(const char *fmt, ...);
90 int get_image_size(const char *filename);
91 int load_image(const char *filename, uint8_t *addr);
92 extern const char *bios_dir;
94 void pstrcpy(char *buf, int buf_size, const char *str);
95 char *pstrcat(char *buf, int buf_size, const char *s);
96 int strstart(const char *str, const char *val, const char **ptr);
98 extern int vm_running;
100 typedef void VMStopHandler(void *opaque, int reason);
102 int qemu_add_vm_stop_handler(VMStopHandler *cb, void *opaque);
103 void qemu_del_vm_stop_handler(VMStopHandler *cb, void *opaque);
106 void vm_stop(int reason);
108 typedef void QEMUResetHandler(void *opaque);
110 void qemu_register_reset(QEMUResetHandler *func, void *opaque);
111 void qemu_system_reset_request(void);
112 void qemu_system_shutdown_request(void);
113 void qemu_system_powerdown_request(void);
114 #if !defined(TARGET_SPARC)
115 // Please implement a power failure function to signal the OS
116 #define qemu_system_powerdown() do{}while(0)
118 void qemu_system_powerdown(void);
121 void main_loop_wait(int timeout);
123 extern int audio_enabled;
124 extern int sb16_enabled;
125 extern int adlib_enabled;
126 extern int gus_enabled;
127 extern int es1370_enabled;
129 extern int bios_size;
131 extern int cirrus_vga_enabled;
132 extern int graphic_width;
133 extern int graphic_height;
134 extern int graphic_depth;
135 extern const char *keyboard_layout;
136 extern int kqemu_allowed;
137 extern int win2k_install_hack;
138 extern int usb_enabled;
140 /* XXX: make it dynamic */
141 #if defined (TARGET_PPC)
142 #define BIOS_SIZE ((512 + 32) * 1024)
143 #elif defined(TARGET_MIPS)
144 #define BIOS_SIZE (128 * 1024)
146 #define BIOS_SIZE ((256 + 64) * 1024)
149 /* keyboard/mouse support */
151 #define MOUSE_EVENT_LBUTTON 0x01
152 #define MOUSE_EVENT_RBUTTON 0x02
153 #define MOUSE_EVENT_MBUTTON 0x04
155 typedef void QEMUPutKBDEvent(void *opaque, int keycode);
156 typedef void QEMUPutMouseEvent(void *opaque, int dx, int dy, int dz, int buttons_state);
158 void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque);
159 void qemu_add_mouse_event_handler(QEMUPutMouseEvent *func, void *opaque);
161 void kbd_put_keycode(int keycode);
162 void kbd_mouse_event(int dx, int dy, int dz, int buttons_state);
164 /* keysym is a unicode code except for special keys (see QEMU_KEY_xxx
166 #define QEMU_KEY_ESC1(c) ((c) | 0xe100)
167 #define QEMU_KEY_BACKSPACE 0x007f
168 #define QEMU_KEY_UP QEMU_KEY_ESC1('A')
169 #define QEMU_KEY_DOWN QEMU_KEY_ESC1('B')
170 #define QEMU_KEY_RIGHT QEMU_KEY_ESC1('C')
171 #define QEMU_KEY_LEFT QEMU_KEY_ESC1('D')
172 #define QEMU_KEY_HOME QEMU_KEY_ESC1(1)
173 #define QEMU_KEY_END QEMU_KEY_ESC1(4)
174 #define QEMU_KEY_PAGEUP QEMU_KEY_ESC1(5)
175 #define QEMU_KEY_PAGEDOWN QEMU_KEY_ESC1(6)
176 #define QEMU_KEY_DELETE QEMU_KEY_ESC1(3)
178 #define QEMU_KEY_CTRL_UP 0xe400
179 #define QEMU_KEY_CTRL_DOWN 0xe401
180 #define QEMU_KEY_CTRL_LEFT 0xe402
181 #define QEMU_KEY_CTRL_RIGHT 0xe403
182 #define QEMU_KEY_CTRL_HOME 0xe404
183 #define QEMU_KEY_CTRL_END 0xe405
184 #define QEMU_KEY_CTRL_PAGEUP 0xe406
185 #define QEMU_KEY_CTRL_PAGEDOWN 0xe407
187 void kbd_put_keysym(int keysym);
189 /* async I/O support */
191 typedef void IOReadHandler(void *opaque, const uint8_t *buf, int size);
192 typedef int IOCanRWHandler(void *opaque);
194 int qemu_add_fd_read_handler(int fd, IOCanRWHandler *fd_can_read,
195 IOReadHandler *fd_read, void *opaque);
196 void qemu_del_fd_read_handler(int fd);
198 /* character device */
200 #define CHR_EVENT_BREAK 0 /* serial break char */
201 #define CHR_EVENT_FOCUS 1 /* focus to this terminal (modal input needed) */
205 #define CHR_IOCTL_SERIAL_SET_PARAMS 1
211 } QEMUSerialSetParams;
213 #define CHR_IOCTL_SERIAL_SET_BREAK 2
215 #define CHR_IOCTL_PP_READ_DATA 3
216 #define CHR_IOCTL_PP_WRITE_DATA 4
217 #define CHR_IOCTL_PP_READ_CONTROL 5
218 #define CHR_IOCTL_PP_WRITE_CONTROL 6
219 #define CHR_IOCTL_PP_READ_STATUS 7
221 typedef void IOEventHandler(void *opaque, int event);
223 typedef struct CharDriverState {
224 int (*chr_write)(struct CharDriverState *s, const uint8_t *buf, int len);
225 void (*chr_add_read_handler)(struct CharDriverState *s,
226 IOCanRWHandler *fd_can_read,
227 IOReadHandler *fd_read, void *opaque);
228 int (*chr_ioctl)(struct CharDriverState *s, int cmd, void *arg);
229 IOEventHandler *chr_event;
230 void (*chr_send_event)(struct CharDriverState *chr, int event);
234 void qemu_chr_printf(CharDriverState *s, const char *fmt, ...);
235 int qemu_chr_write(CharDriverState *s, const uint8_t *buf, int len);
236 void qemu_chr_send_event(CharDriverState *s, int event);
237 void qemu_chr_add_read_handler(CharDriverState *s,
238 IOCanRWHandler *fd_can_read,
239 IOReadHandler *fd_read, void *opaque);
240 void qemu_chr_add_event_handler(CharDriverState *s, IOEventHandler *chr_event);
241 int qemu_chr_ioctl(CharDriverState *s, int cmd, void *arg);
245 typedef struct DisplayState DisplayState;
246 typedef struct TextConsole TextConsole;
248 extern TextConsole *vga_console;
250 TextConsole *graphic_console_init(DisplayState *ds);
251 int is_active_console(TextConsole *s);
252 CharDriverState *text_console_init(DisplayState *ds);
253 void console_select(unsigned int index);
257 #define MAX_SERIAL_PORTS 4
259 extern CharDriverState *serial_hds[MAX_SERIAL_PORTS];
263 #define MAX_PARALLEL_PORTS 3
265 extern CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
267 /* network redirectors support */
271 typedef struct NetDriverState {
272 int index; /* index number in QEMU */
275 void (*send_packet)(struct NetDriverState *nd,
276 const uint8_t *buf, int size);
277 void (*add_read_packet)(struct NetDriverState *nd,
278 IOCanRWHandler *fd_can_read,
279 IOReadHandler *fd_read, void *opaque);
280 /* tun specific data */
282 /* slirp specific data */
286 extern NetDriverState nd_table[MAX_NICS];
288 void qemu_send_packet(NetDriverState *nd, const uint8_t *buf, int size);
289 void qemu_add_read_packet(NetDriverState *nd, IOCanRWHandler *fd_can_read,
290 IOReadHandler *fd_read, void *opaque);
294 typedef struct QEMUClock QEMUClock;
295 typedef struct QEMUTimer QEMUTimer;
296 typedef void QEMUTimerCB(void *opaque);
298 /* The real time clock should be used only for stuff which does not
299 change the virtual machine state, as it is run even if the virtual
300 machine is stopped. The real time clock has a frequency of 1000
302 extern QEMUClock *rt_clock;
304 /* The virtual clock is only run during the emulation. It is stopped
305 when the virtual machine is stopped. Virtual timers use a high
306 precision clock, usually cpu cycles (use ticks_per_sec). */
307 extern QEMUClock *vm_clock;
309 int64_t qemu_get_clock(QEMUClock *clock);
311 QEMUTimer *qemu_new_timer(QEMUClock *clock, QEMUTimerCB *cb, void *opaque);
312 void qemu_free_timer(QEMUTimer *ts);
313 void qemu_del_timer(QEMUTimer *ts);
314 void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time);
315 int qemu_timer_pending(QEMUTimer *ts);
317 extern int64_t ticks_per_sec;
318 extern int pit_min_timer_count;
320 void cpu_enable_ticks(void);
321 void cpu_disable_ticks(void);
325 typedef FILE QEMUFile;
327 void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size);
328 void qemu_put_byte(QEMUFile *f, int v);
329 void qemu_put_be16(QEMUFile *f, unsigned int v);
330 void qemu_put_be32(QEMUFile *f, unsigned int v);
331 void qemu_put_be64(QEMUFile *f, uint64_t v);
332 int qemu_get_buffer(QEMUFile *f, uint8_t *buf, int size);
333 int qemu_get_byte(QEMUFile *f);
334 unsigned int qemu_get_be16(QEMUFile *f);
335 unsigned int qemu_get_be32(QEMUFile *f);
336 uint64_t qemu_get_be64(QEMUFile *f);
338 static inline void qemu_put_be64s(QEMUFile *f, const uint64_t *pv)
340 qemu_put_be64(f, *pv);
343 static inline void qemu_put_be32s(QEMUFile *f, const uint32_t *pv)
345 qemu_put_be32(f, *pv);
348 static inline void qemu_put_be16s(QEMUFile *f, const uint16_t *pv)
350 qemu_put_be16(f, *pv);
353 static inline void qemu_put_8s(QEMUFile *f, const uint8_t *pv)
355 qemu_put_byte(f, *pv);
358 static inline void qemu_get_be64s(QEMUFile *f, uint64_t *pv)
360 *pv = qemu_get_be64(f);
363 static inline void qemu_get_be32s(QEMUFile *f, uint32_t *pv)
365 *pv = qemu_get_be32(f);
368 static inline void qemu_get_be16s(QEMUFile *f, uint16_t *pv)
370 *pv = qemu_get_be16(f);
373 static inline void qemu_get_8s(QEMUFile *f, uint8_t *pv)
375 *pv = qemu_get_byte(f);
378 #if TARGET_LONG_BITS == 64
379 #define qemu_put_betl qemu_put_be64
380 #define qemu_get_betl qemu_get_be64
381 #define qemu_put_betls qemu_put_be64s
382 #define qemu_get_betls qemu_get_be64s
384 #define qemu_put_betl qemu_put_be32
385 #define qemu_get_betl qemu_get_be32
386 #define qemu_put_betls qemu_put_be32s
387 #define qemu_get_betls qemu_get_be32s
390 int64_t qemu_ftell(QEMUFile *f);
391 int64_t qemu_fseek(QEMUFile *f, int64_t pos, int whence);
393 typedef void SaveStateHandler(QEMUFile *f, void *opaque);
394 typedef int LoadStateHandler(QEMUFile *f, void *opaque, int version_id);
396 int qemu_loadvm(const char *filename);
397 int qemu_savevm(const char *filename);
398 int register_savevm(const char *idstr,
401 SaveStateHandler *save_state,
402 LoadStateHandler *load_state,
404 void qemu_get_timer(QEMUFile *f, QEMUTimer *ts);
405 void qemu_put_timer(QEMUFile *f, QEMUTimer *ts);
408 typedef struct BlockDriverState BlockDriverState;
409 typedef struct BlockDriver BlockDriver;
411 extern BlockDriver bdrv_raw;
412 extern BlockDriver bdrv_cow;
413 extern BlockDriver bdrv_qcow;
414 extern BlockDriver bdrv_vmdk;
415 extern BlockDriver bdrv_cloop;
416 extern BlockDriver bdrv_dmg;
417 extern BlockDriver bdrv_bochs;
418 extern BlockDriver bdrv_vpc;
419 extern BlockDriver bdrv_vvfat;
421 void bdrv_init(void);
422 BlockDriver *bdrv_find_format(const char *format_name);
423 int bdrv_create(BlockDriver *drv,
424 const char *filename, int64_t size_in_sectors,
425 const char *backing_file, int flags);
426 BlockDriverState *bdrv_new(const char *device_name);
427 void bdrv_delete(BlockDriverState *bs);
428 int bdrv_open(BlockDriverState *bs, const char *filename, int snapshot);
429 int bdrv_open2(BlockDriverState *bs, const char *filename, int snapshot,
431 void bdrv_close(BlockDriverState *bs);
432 int bdrv_read(BlockDriverState *bs, int64_t sector_num,
433 uint8_t *buf, int nb_sectors);
434 int bdrv_write(BlockDriverState *bs, int64_t sector_num,
435 const uint8_t *buf, int nb_sectors);
436 void bdrv_get_geometry(BlockDriverState *bs, int64_t *nb_sectors_ptr);
437 int bdrv_commit(BlockDriverState *bs);
438 void bdrv_set_boot_sector(BlockDriverState *bs, const uint8_t *data, int size);
440 #define BDRV_TYPE_HD 0
441 #define BDRV_TYPE_CDROM 1
442 #define BDRV_TYPE_FLOPPY 2
443 #define BIOS_ATA_TRANSLATION_AUTO 0
444 #define BIOS_ATA_TRANSLATION_NONE 1
445 #define BIOS_ATA_TRANSLATION_LBA 2
447 void bdrv_set_geometry_hint(BlockDriverState *bs,
448 int cyls, int heads, int secs);
449 void bdrv_set_type_hint(BlockDriverState *bs, int type);
450 void bdrv_set_translation_hint(BlockDriverState *bs, int translation);
451 void bdrv_get_geometry_hint(BlockDriverState *bs,
452 int *pcyls, int *pheads, int *psecs);
453 int bdrv_get_type_hint(BlockDriverState *bs);
454 int bdrv_get_translation_hint(BlockDriverState *bs);
455 int bdrv_is_removable(BlockDriverState *bs);
456 int bdrv_is_read_only(BlockDriverState *bs);
457 int bdrv_is_inserted(BlockDriverState *bs);
458 int bdrv_is_locked(BlockDriverState *bs);
459 void bdrv_set_locked(BlockDriverState *bs, int locked);
460 void bdrv_set_change_cb(BlockDriverState *bs,
461 void (*change_cb)(void *opaque), void *opaque);
462 void bdrv_get_format(BlockDriverState *bs, char *buf, int buf_size);
463 void bdrv_info(void);
464 BlockDriverState *bdrv_find(const char *name);
465 void bdrv_iterate(void (*it)(void *opaque, const char *name), void *opaque);
466 int bdrv_is_encrypted(BlockDriverState *bs);
467 int bdrv_set_key(BlockDriverState *bs, const char *key);
468 void bdrv_iterate_format(void (*it)(void *opaque, const char *name),
470 const char *bdrv_get_device_name(BlockDriverState *bs);
472 int qcow_get_cluster_size(BlockDriverState *bs);
473 int qcow_compress_cluster(BlockDriverState *bs, int64_t sector_num,
478 typedef void QEMUMachineInitFunc(int ram_size, int vga_ram_size,
480 DisplayState *ds, const char **fd_filename, int snapshot,
481 const char *kernel_filename, const char *kernel_cmdline,
482 const char *initrd_filename);
484 typedef struct QEMUMachine {
487 QEMUMachineInitFunc *init;
488 struct QEMUMachine *next;
491 int qemu_register_machine(QEMUMachine *m);
493 typedef void SetIRQFunc(void *opaque, int irq_num, int level);
494 typedef void IRQRequestFunc(void *opaque, int level);
498 extern target_phys_addr_t isa_mem_base;
500 typedef void (IOPortWriteFunc)(void *opaque, uint32_t address, uint32_t data);
501 typedef uint32_t (IOPortReadFunc)(void *opaque, uint32_t address);
503 int register_ioport_read(int start, int length, int size,
504 IOPortReadFunc *func, void *opaque);
505 int register_ioport_write(int start, int length, int size,
506 IOPortWriteFunc *func, void *opaque);
507 void isa_unassign_ioport(int start, int length);
511 extern target_phys_addr_t pci_mem_base;
513 typedef struct PCIBus PCIBus;
514 typedef struct PCIDevice PCIDevice;
516 typedef void PCIConfigWriteFunc(PCIDevice *pci_dev,
517 uint32_t address, uint32_t data, int len);
518 typedef uint32_t PCIConfigReadFunc(PCIDevice *pci_dev,
519 uint32_t address, int len);
520 typedef void PCIMapIORegionFunc(PCIDevice *pci_dev, int region_num,
521 uint32_t addr, uint32_t size, int type);
523 #define PCI_ADDRESS_SPACE_MEM 0x00
524 #define PCI_ADDRESS_SPACE_IO 0x01
525 #define PCI_ADDRESS_SPACE_MEM_PREFETCH 0x08
527 typedef struct PCIIORegion {
528 uint32_t addr; /* current PCI mapping address. -1 means not mapped */
531 PCIMapIORegionFunc *map_func;
534 #define PCI_ROM_SLOT 6
535 #define PCI_NUM_REGIONS 7
537 /* PCI config space */
540 /* the following fields are read only */
544 PCIIORegion io_regions[PCI_NUM_REGIONS];
546 /* do not access the following fields */
547 PCIConfigReadFunc *config_read;
548 PCIConfigWriteFunc *config_write;
552 PCIDevice *pci_register_device(PCIBus *bus, const char *name,
553 int instance_size, int devfn,
554 PCIConfigReadFunc *config_read,
555 PCIConfigWriteFunc *config_write);
557 void pci_register_io_region(PCIDevice *pci_dev, int region_num,
558 uint32_t size, int type,
559 PCIMapIORegionFunc *map_func);
561 void pci_set_irq(PCIDevice *pci_dev, int irq_num, int level);
563 uint32_t pci_default_read_config(PCIDevice *d,
564 uint32_t address, int len);
565 void pci_default_write_config(PCIDevice *d,
566 uint32_t address, uint32_t val, int len);
567 void generic_pci_save(QEMUFile* f, void *opaque);
568 int generic_pci_load(QEMUFile* f, void *opaque, int version_id);
570 extern struct PIIX3State *piix3_state;
572 PCIBus *i440fx_init(void);
573 void piix3_init(PCIBus *bus);
574 void pci_bios_init(void);
577 /* temporary: will be moved in platform specific file */
578 void pci_set_pic(PCIBus *bus, SetIRQFunc *set_irq, void *irq_opaque);
579 PCIBus *pci_prep_init(void);
580 PCIBus *pci_grackle_init(uint32_t base);
581 PCIBus *pci_pmac_init(void);
582 PCIBus *pci_apb_init(target_ulong special_base, target_ulong mem_base);
585 typedef struct openpic_t openpic_t;
586 void openpic_set_irq(void *opaque, int n_IRQ, int level);
587 openpic_t *openpic_init (PCIBus *bus, int *pmem_index, int nb_cpus);
590 typedef struct HeathrowPICS HeathrowPICS;
591 void heathrow_pic_set_irq(void *opaque, int num, int level);
592 HeathrowPICS *heathrow_pic_init(int *pmem_index);
596 #define VGA_RAM_SIZE (4096 * 1024)
598 struct DisplayState {
604 void (*dpy_update)(struct DisplayState *s, int x, int y, int w, int h);
605 void (*dpy_resize)(struct DisplayState *s, int w, int h);
606 void (*dpy_refresh)(struct DisplayState *s);
609 static inline void dpy_update(DisplayState *s, int x, int y, int w, int h)
611 s->dpy_update(s, x, y, w, h);
614 static inline void dpy_resize(DisplayState *s, int w, int h)
616 s->dpy_resize(s, w, h);
619 int vga_initialize(PCIBus *bus, DisplayState *ds, uint8_t *vga_ram_base,
620 unsigned long vga_ram_offset, int vga_ram_size,
621 unsigned long vga_bios_offset, int vga_bios_size);
622 void vga_update_display(void);
623 void vga_invalidate_display(void);
624 void vga_screen_dump(const char *filename);
627 void pci_cirrus_vga_init(PCIBus *bus, DisplayState *ds, uint8_t *vga_ram_base,
628 unsigned long vga_ram_offset, int vga_ram_size);
629 void isa_cirrus_vga_init(DisplayState *ds, uint8_t *vga_ram_base,
630 unsigned long vga_ram_offset, int vga_ram_size);
633 void sdl_display_init(DisplayState *ds, int full_screen);
636 void cocoa_display_init(DisplayState *ds, int full_screen);
641 extern BlockDriverState *bs_table[MAX_DISKS];
643 void isa_ide_init(int iobase, int iobase2, int irq,
644 BlockDriverState *hd0, BlockDriverState *hd1);
645 void pci_cmd646_ide_init(PCIBus *bus, BlockDriverState **hd_table,
646 int secondary_ide_enabled);
647 void pci_piix3_ide_init(PCIBus *bus, BlockDriverState **hd_table);
648 int pmac_ide_init (BlockDriverState **hd_table,
649 SetIRQFunc *set_irq, void *irq_opaque, int irq);
652 int es1370_init (PCIBus *bus, AudioState *s);
655 int SB16_init (AudioState *s);
658 int Adlib_init (AudioState *s);
661 int GUS_init (AudioState *s);
664 typedef int (*DMA_transfer_handler) (void *opaque, int nchan, int pos, int size);
665 int DMA_get_channel_mode (int nchan);
666 int DMA_read_memory (int nchan, void *buf, int pos, int size);
667 int DMA_write_memory (int nchan, void *buf, int pos, int size);
668 void DMA_hold_DREQ (int nchan);
669 void DMA_release_DREQ (int nchan);
670 void DMA_schedule(int nchan);
672 void DMA_init (int high_page_enable);
673 void DMA_register_channel (int nchan,
674 DMA_transfer_handler transfer_handler,
678 extern BlockDriverState *fd_table[MAX_FD];
680 typedef struct fdctrl_t fdctrl_t;
682 fdctrl_t *fdctrl_init (int irq_lvl, int dma_chann, int mem_mapped,
684 BlockDriverState **fds);
685 int fdctrl_get_drive_type(fdctrl_t *fdctrl, int drive_num);
689 void isa_ne2000_init(int base, int irq, NetDriverState *nd);
690 void pci_ne2000_init(PCIBus *bus, NetDriverState *nd);
698 typedef struct RTCState RTCState;
700 RTCState *rtc_init(int base, int irq);
701 void rtc_set_memory(RTCState *s, int addr, int val);
702 void rtc_set_date(RTCState *s, const struct tm *tm);
706 typedef struct SerialState SerialState;
707 SerialState *serial_init(int base, int irq, CharDriverState *chr);
711 typedef struct ParallelState ParallelState;
712 ParallelState *parallel_init(int base, int irq, CharDriverState *chr);
716 typedef struct PicState2 PicState2;
717 extern PicState2 *isa_pic;
718 void pic_set_irq(int irq, int level);
719 void pic_set_irq_new(void *opaque, int irq, int level);
720 PicState2 *pic_init(IRQRequestFunc *irq_request, void *irq_request_opaque);
721 void pic_set_alt_irq_func(PicState2 *s, SetIRQFunc *alt_irq_func,
722 void *alt_irq_opaque);
723 int pic_read_irq(PicState2 *s);
724 void pic_update_irq(PicState2 *s);
725 uint32_t pic_intack_read(PicState2 *s);
730 typedef struct IOAPICState IOAPICState;
732 int apic_init(CPUState *env);
733 int apic_get_interrupt(CPUState *env);
734 IOAPICState *ioapic_init(void);
735 void ioapic_set_irq(void *opaque, int vector, int level);
739 #define PIT_FREQ 1193182
741 typedef struct PITState PITState;
743 PITState *pit_init(int base, int irq);
744 void pit_set_gate(PITState *pit, int channel, int val);
745 int pit_get_gate(PITState *pit, int channel);
746 int pit_get_out(PITState *pit, int channel, int64_t current_time);
749 extern QEMUMachine pc_machine;
750 extern QEMUMachine isapc_machine;
753 extern QEMUMachine prep_machine;
754 extern QEMUMachine core99_machine;
755 extern QEMUMachine heathrow_machine;
758 extern QEMUMachine mips_machine;
761 ppc_tb_t *cpu_ppc_tb_init (CPUState *env, uint32_t freq);
763 void PREP_debug_write (void *opaque, uint32_t addr, uint32_t val);
765 extern CPUWriteMemoryFunc *PPC_io_write[];
766 extern CPUReadMemoryFunc *PPC_io_read[];
767 void PPC_debug_write (void *opaque, uint32_t addr, uint32_t val);
770 extern QEMUMachine sun4m_machine;
771 uint32_t iommu_translate(uint32_t addr);
774 void *iommu_init(uint32_t addr);
775 uint32_t iommu_translate_local(void *opaque, uint32_t addr);
778 void lance_init(NetDriverState *nd, int irq, uint32_t leaddr, uint32_t ledaddr);
781 void *tcx_init(DisplayState *ds, uint32_t addr, uint8_t *vram_base,
782 unsigned long vram_offset, int vram_size, int width, int height);
783 void tcx_update_display(void *opaque);
784 void tcx_invalidate_display(void *opaque);
785 void tcx_screen_dump(void *opaque, const char *filename);
787 /* slavio_intctl.c */
788 void *slavio_intctl_init();
789 void slavio_pic_info(void *opaque);
790 void slavio_irq_info(void *opaque);
791 void slavio_pic_set_irq(void *opaque, int irq, int level);
794 int load_elf(const char *filename, uint8_t *addr);
795 int load_aout(const char *filename, uint8_t *addr);
798 void slavio_timer_init(uint32_t addr1, int irq1, uint32_t addr2, int irq2);
800 /* slavio_serial.c */
801 SerialState *slavio_serial_init(int base, int irq, CharDriverState *chr1, CharDriverState *chr2);
802 void slavio_serial_ms_kbd_init(int base, int irq);
805 void *slavio_misc_init(uint32_t base, int irq);
806 void slavio_set_power_fail(void *opaque, int power_failing);
809 void esp_init(BlockDriverState **bd, int irq, uint32_t espaddr, uint32_t espdaddr);
812 extern QEMUMachine sun4u_machine;
815 #include "hw/m48t59.h"
817 void NVRAM_set_byte (m48t59_t *nvram, uint32_t addr, uint8_t value);
818 uint8_t NVRAM_get_byte (m48t59_t *nvram, uint32_t addr);
819 void NVRAM_set_word (m48t59_t *nvram, uint32_t addr, uint16_t value);
820 uint16_t NVRAM_get_word (m48t59_t *nvram, uint32_t addr);
821 void NVRAM_set_lword (m48t59_t *nvram, uint32_t addr, uint32_t value);
822 uint32_t NVRAM_get_lword (m48t59_t *nvram, uint32_t addr);
823 void NVRAM_set_string (m48t59_t *nvram, uint32_t addr,
824 const unsigned char *str, uint32_t max);
825 int NVRAM_get_string (m48t59_t *nvram, uint8_t *dst, uint16_t addr, int max);
826 void NVRAM_set_crc (m48t59_t *nvram, uint32_t addr,
827 uint32_t start, uint32_t count);
828 int PPC_NVRAM_set_params (m48t59_t *nvram, uint16_t NVRAM_size,
829 const unsigned char *arch,
830 uint32_t RAM_size, int boot_device,
831 uint32_t kernel_image, uint32_t kernel_size,
833 uint32_t initrd_image, uint32_t initrd_size,
834 uint32_t NVRAM_image,
835 int width, int height, int depth);
839 #define MAX_ADB_DEVICES 16
841 #define ADB_MAX_OUT_LEN 16
843 typedef struct ADBDevice ADBDevice;
845 /* buf = NULL means polling */
846 typedef int ADBDeviceRequest(ADBDevice *d, uint8_t *buf_out,
847 const uint8_t *buf, int len);
848 typedef int ADBDeviceReset(ADBDevice *d);
851 struct ADBBusState *bus;
854 ADBDeviceRequest *devreq;
855 ADBDeviceReset *devreset;
859 typedef struct ADBBusState {
860 ADBDevice devices[MAX_ADB_DEVICES];
865 int adb_request(ADBBusState *s, uint8_t *buf_out,
866 const uint8_t *buf, int len);
867 int adb_poll(ADBBusState *s, uint8_t *buf_out);
869 ADBDevice *adb_register_device(ADBBusState *s, int devaddr,
870 ADBDeviceRequest *devreq,
871 ADBDeviceReset *devreset,
873 void adb_kbd_init(ADBBusState *bus);
874 void adb_mouse_init(ADBBusState *bus);
878 extern ADBBusState adb_bus;
879 int cuda_init(SetIRQFunc *set_irq, void *irq_opaque, int irq);
883 /* usb ports of the VM */
885 #define MAX_VM_USB_PORTS 8
887 extern USBPort *vm_usb_ports[MAX_VM_USB_PORTS];
888 extern USBDevice *vm_usb_hub;
890 void do_usb_add(const char *devname);
891 void do_usb_del(const char *devname);
894 #endif /* defined(QEMU_TOOL) */
897 void monitor_init(CharDriverState *hd, int show_banner);
898 void term_puts(const char *str);
899 void term_vprintf(const char *fmt, va_list ap);
900 void term_printf(const char *fmt, ...) __attribute__ ((__format__ (__printf__, 1, 2)));
901 void term_flush(void);
902 void term_print_help(void);
903 void monitor_readline(const char *prompt, int is_password,
904 char *buf, int buf_size);
907 typedef void ReadLineFunc(void *opaque, const char *str);
909 extern int completion_index;
910 void add_completion(const char *str);
911 void readline_handle_byte(int ch);
912 void readline_find_completion(const char *cmdline);
913 const char *readline_get_history(unsigned int index);
914 void readline_start(const char *prompt, int is_password,
915 ReadLineFunc *readline_func, void *opaque);
917 void kqemu_record_dump(void);