]> git.proxmox.com Git - qemu.git/blob - vl.h
better BIOS ATA translation support
[qemu.git] / 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 #include "audio/audio.h"
41
42 #ifndef O_LARGEFILE
43 #define O_LARGEFILE 0
44 #endif
45 #ifndef O_BINARY
46 #define O_BINARY 0
47 #endif
48
49 #ifdef _WIN32
50 #define lseek _lseeki64
51 #define ENOTSUP 4096
52 /* XXX: find 64 bit version */
53 #define ftruncate chsize
54
55 static inline char *realpath(const char *path, char *resolved_path)
56 {
57 _fullpath(resolved_path, path, _MAX_PATH);
58 return resolved_path;
59 }
60 #endif
61
62 #ifdef QEMU_TOOL
63
64 /* we use QEMU_TOOL in the command line tools which do not depend on
65 the target CPU type */
66 #include "config-host.h"
67 #include <setjmp.h>
68 #include "osdep.h"
69 #include "bswap.h"
70
71 #else
72
73 #include "cpu.h"
74
75 #endif /* !defined(QEMU_TOOL) */
76
77 #ifndef glue
78 #define xglue(x, y) x ## y
79 #define glue(x, y) xglue(x, y)
80 #define stringify(s) tostring(s)
81 #define tostring(s) #s
82 #endif
83
84 /* vl.c */
85 uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c);
86
87 void hw_error(const char *fmt, ...);
88
89 int get_image_size(const char *filename);
90 int load_image(const char *filename, uint8_t *addr);
91 extern const char *bios_dir;
92
93 void pstrcpy(char *buf, int buf_size, const char *str);
94 char *pstrcat(char *buf, int buf_size, const char *s);
95 int strstart(const char *str, const char *val, const char **ptr);
96
97 extern int vm_running;
98
99 typedef void VMStopHandler(void *opaque, int reason);
100
101 int qemu_add_vm_stop_handler(VMStopHandler *cb, void *opaque);
102 void qemu_del_vm_stop_handler(VMStopHandler *cb, void *opaque);
103
104 void vm_start(void);
105 void vm_stop(int reason);
106
107 typedef void QEMUResetHandler(void *opaque);
108
109 void qemu_register_reset(QEMUResetHandler *func, void *opaque);
110 void qemu_system_reset_request(void);
111 void qemu_system_shutdown_request(void);
112
113 void main_loop_wait(int timeout);
114
115 extern int audio_enabled;
116 extern int sb16_enabled;
117 extern int adlib_enabled;
118 extern int gus_enabled;
119 extern int ram_size;
120 extern int bios_size;
121 extern int rtc_utc;
122 extern int cirrus_vga_enabled;
123 extern int graphic_width;
124 extern int graphic_height;
125 extern int graphic_depth;
126
127 /* XXX: make it dynamic */
128 #if defined (TARGET_PPC)
129 #define BIOS_SIZE (512 * 1024)
130 #else
131 #define BIOS_SIZE ((256 + 64) * 1024)
132 #endif
133
134 /* keyboard/mouse support */
135
136 #define MOUSE_EVENT_LBUTTON 0x01
137 #define MOUSE_EVENT_RBUTTON 0x02
138 #define MOUSE_EVENT_MBUTTON 0x04
139
140 typedef void QEMUPutKBDEvent(void *opaque, int keycode);
141 typedef void QEMUPutMouseEvent(void *opaque, int dx, int dy, int dz, int buttons_state);
142
143 void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque);
144 void qemu_add_mouse_event_handler(QEMUPutMouseEvent *func, void *opaque);
145
146 void kbd_put_keycode(int keycode);
147 void kbd_mouse_event(int dx, int dy, int dz, int buttons_state);
148
149 /* keysym is a unicode code except for special keys (see QEMU_KEY_xxx
150 constants) */
151 #define QEMU_KEY_ESC1(c) ((c) | 0xe100)
152 #define QEMU_KEY_BACKSPACE 0x007f
153 #define QEMU_KEY_UP QEMU_KEY_ESC1('A')
154 #define QEMU_KEY_DOWN QEMU_KEY_ESC1('B')
155 #define QEMU_KEY_RIGHT QEMU_KEY_ESC1('C')
156 #define QEMU_KEY_LEFT QEMU_KEY_ESC1('D')
157 #define QEMU_KEY_HOME QEMU_KEY_ESC1(1)
158 #define QEMU_KEY_END QEMU_KEY_ESC1(4)
159 #define QEMU_KEY_PAGEUP QEMU_KEY_ESC1(5)
160 #define QEMU_KEY_PAGEDOWN QEMU_KEY_ESC1(6)
161 #define QEMU_KEY_DELETE QEMU_KEY_ESC1(3)
162
163 #define QEMU_KEY_CTRL_UP 0xe400
164 #define QEMU_KEY_CTRL_DOWN 0xe401
165 #define QEMU_KEY_CTRL_LEFT 0xe402
166 #define QEMU_KEY_CTRL_RIGHT 0xe403
167 #define QEMU_KEY_CTRL_HOME 0xe404
168 #define QEMU_KEY_CTRL_END 0xe405
169 #define QEMU_KEY_CTRL_PAGEUP 0xe406
170 #define QEMU_KEY_CTRL_PAGEDOWN 0xe407
171
172 void kbd_put_keysym(int keysym);
173
174 /* async I/O support */
175
176 typedef void IOReadHandler(void *opaque, const uint8_t *buf, int size);
177 typedef int IOCanRWHandler(void *opaque);
178
179 int qemu_add_fd_read_handler(int fd, IOCanRWHandler *fd_can_read,
180 IOReadHandler *fd_read, void *opaque);
181 void qemu_del_fd_read_handler(int fd);
182
183 /* character device */
184
185 #define CHR_EVENT_BREAK 0 /* serial break char */
186 #define CHR_EVENT_FOCUS 1 /* focus to this terminal (modal input needed) */
187
188 typedef void IOEventHandler(void *opaque, int event);
189
190 typedef struct CharDriverState {
191 int (*chr_write)(struct CharDriverState *s, const uint8_t *buf, int len);
192 void (*chr_add_read_handler)(struct CharDriverState *s,
193 IOCanRWHandler *fd_can_read,
194 IOReadHandler *fd_read, void *opaque);
195 IOEventHandler *chr_event;
196 void (*chr_send_event)(struct CharDriverState *chr, int event);
197 void *opaque;
198 } CharDriverState;
199
200 void qemu_chr_printf(CharDriverState *s, const char *fmt, ...);
201 int qemu_chr_write(CharDriverState *s, const uint8_t *buf, int len);
202 void qemu_chr_send_event(CharDriverState *s, int event);
203 void qemu_chr_add_read_handler(CharDriverState *s,
204 IOCanRWHandler *fd_can_read,
205 IOReadHandler *fd_read, void *opaque);
206 void qemu_chr_add_event_handler(CharDriverState *s, IOEventHandler *chr_event);
207
208 /* consoles */
209
210 typedef struct DisplayState DisplayState;
211 typedef struct TextConsole TextConsole;
212
213 extern TextConsole *vga_console;
214
215 TextConsole *graphic_console_init(DisplayState *ds);
216 int is_active_console(TextConsole *s);
217 CharDriverState *text_console_init(DisplayState *ds);
218 void console_select(unsigned int index);
219
220 /* serial ports */
221
222 #define MAX_SERIAL_PORTS 4
223
224 extern CharDriverState *serial_hds[MAX_SERIAL_PORTS];
225
226 /* network redirectors support */
227
228 #define MAX_NICS 8
229
230 typedef struct NetDriverState {
231 int index; /* index number in QEMU */
232 uint8_t macaddr[6];
233 char ifname[16];
234 void (*send_packet)(struct NetDriverState *nd,
235 const uint8_t *buf, int size);
236 void (*add_read_packet)(struct NetDriverState *nd,
237 IOCanRWHandler *fd_can_read,
238 IOReadHandler *fd_read, void *opaque);
239 /* tun specific data */
240 int fd;
241 /* slirp specific data */
242 } NetDriverState;
243
244 extern int nb_nics;
245 extern NetDriverState nd_table[MAX_NICS];
246
247 void qemu_send_packet(NetDriverState *nd, const uint8_t *buf, int size);
248 void qemu_add_read_packet(NetDriverState *nd, IOCanRWHandler *fd_can_read,
249 IOReadHandler *fd_read, void *opaque);
250
251 /* timers */
252
253 typedef struct QEMUClock QEMUClock;
254 typedef struct QEMUTimer QEMUTimer;
255 typedef void QEMUTimerCB(void *opaque);
256
257 /* The real time clock should be used only for stuff which does not
258 change the virtual machine state, as it is run even if the virtual
259 machine is stopped. The real time clock has a frequency of 1000
260 Hz. */
261 extern QEMUClock *rt_clock;
262
263 /* Rge virtual clock is only run during the emulation. It is stopped
264 when the virtual machine is stopped. Virtual timers use a high
265 precision clock, usually cpu cycles (use ticks_per_sec). */
266 extern QEMUClock *vm_clock;
267
268 int64_t qemu_get_clock(QEMUClock *clock);
269
270 QEMUTimer *qemu_new_timer(QEMUClock *clock, QEMUTimerCB *cb, void *opaque);
271 void qemu_free_timer(QEMUTimer *ts);
272 void qemu_del_timer(QEMUTimer *ts);
273 void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time);
274 int qemu_timer_pending(QEMUTimer *ts);
275
276 extern int64_t ticks_per_sec;
277 extern int pit_min_timer_count;
278
279 void cpu_enable_ticks(void);
280 void cpu_disable_ticks(void);
281
282 /* VM Load/Save */
283
284 typedef FILE QEMUFile;
285
286 void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size);
287 void qemu_put_byte(QEMUFile *f, int v);
288 void qemu_put_be16(QEMUFile *f, unsigned int v);
289 void qemu_put_be32(QEMUFile *f, unsigned int v);
290 void qemu_put_be64(QEMUFile *f, uint64_t v);
291 int qemu_get_buffer(QEMUFile *f, uint8_t *buf, int size);
292 int qemu_get_byte(QEMUFile *f);
293 unsigned int qemu_get_be16(QEMUFile *f);
294 unsigned int qemu_get_be32(QEMUFile *f);
295 uint64_t qemu_get_be64(QEMUFile *f);
296
297 static inline void qemu_put_be64s(QEMUFile *f, const uint64_t *pv)
298 {
299 qemu_put_be64(f, *pv);
300 }
301
302 static inline void qemu_put_be32s(QEMUFile *f, const uint32_t *pv)
303 {
304 qemu_put_be32(f, *pv);
305 }
306
307 static inline void qemu_put_be16s(QEMUFile *f, const uint16_t *pv)
308 {
309 qemu_put_be16(f, *pv);
310 }
311
312 static inline void qemu_put_8s(QEMUFile *f, const uint8_t *pv)
313 {
314 qemu_put_byte(f, *pv);
315 }
316
317 static inline void qemu_get_be64s(QEMUFile *f, uint64_t *pv)
318 {
319 *pv = qemu_get_be64(f);
320 }
321
322 static inline void qemu_get_be32s(QEMUFile *f, uint32_t *pv)
323 {
324 *pv = qemu_get_be32(f);
325 }
326
327 static inline void qemu_get_be16s(QEMUFile *f, uint16_t *pv)
328 {
329 *pv = qemu_get_be16(f);
330 }
331
332 static inline void qemu_get_8s(QEMUFile *f, uint8_t *pv)
333 {
334 *pv = qemu_get_byte(f);
335 }
336
337 int64_t qemu_ftell(QEMUFile *f);
338 int64_t qemu_fseek(QEMUFile *f, int64_t pos, int whence);
339
340 typedef void SaveStateHandler(QEMUFile *f, void *opaque);
341 typedef int LoadStateHandler(QEMUFile *f, void *opaque, int version_id);
342
343 int qemu_loadvm(const char *filename);
344 int qemu_savevm(const char *filename);
345 int register_savevm(const char *idstr,
346 int instance_id,
347 int version_id,
348 SaveStateHandler *save_state,
349 LoadStateHandler *load_state,
350 void *opaque);
351 void qemu_get_timer(QEMUFile *f, QEMUTimer *ts);
352 void qemu_put_timer(QEMUFile *f, QEMUTimer *ts);
353
354 /* block.c */
355 typedef struct BlockDriverState BlockDriverState;
356 typedef struct BlockDriver BlockDriver;
357
358 extern BlockDriver bdrv_raw;
359 extern BlockDriver bdrv_cow;
360 extern BlockDriver bdrv_qcow;
361 extern BlockDriver bdrv_vmdk;
362 extern BlockDriver bdrv_cloop;
363
364 void bdrv_init(void);
365 BlockDriver *bdrv_find_format(const char *format_name);
366 int bdrv_create(BlockDriver *drv,
367 const char *filename, int64_t size_in_sectors,
368 const char *backing_file, int flags);
369 BlockDriverState *bdrv_new(const char *device_name);
370 void bdrv_delete(BlockDriverState *bs);
371 int bdrv_open(BlockDriverState *bs, const char *filename, int snapshot);
372 int bdrv_open2(BlockDriverState *bs, const char *filename, int snapshot,
373 BlockDriver *drv);
374 void bdrv_close(BlockDriverState *bs);
375 int bdrv_read(BlockDriverState *bs, int64_t sector_num,
376 uint8_t *buf, int nb_sectors);
377 int bdrv_write(BlockDriverState *bs, int64_t sector_num,
378 const uint8_t *buf, int nb_sectors);
379 void bdrv_get_geometry(BlockDriverState *bs, int64_t *nb_sectors_ptr);
380 int bdrv_commit(BlockDriverState *bs);
381 void bdrv_set_boot_sector(BlockDriverState *bs, const uint8_t *data, int size);
382
383 #define BDRV_TYPE_HD 0
384 #define BDRV_TYPE_CDROM 1
385 #define BDRV_TYPE_FLOPPY 2
386 #define BIOS_ATA_TRANSLATION_AUTO 0
387 #define BIOS_ATA_TRANSLATION_NONE 1
388 #define BIOS_ATA_TRANSLATION_LBA 2
389
390 void bdrv_set_geometry_hint(BlockDriverState *bs,
391 int cyls, int heads, int secs);
392 void bdrv_set_type_hint(BlockDriverState *bs, int type);
393 void bdrv_set_translation_hint(BlockDriverState *bs, int translation);
394 void bdrv_get_geometry_hint(BlockDriverState *bs,
395 int *pcyls, int *pheads, int *psecs);
396 int bdrv_get_type_hint(BlockDriverState *bs);
397 int bdrv_get_translation_hint(BlockDriverState *bs);
398 int bdrv_is_removable(BlockDriverState *bs);
399 int bdrv_is_read_only(BlockDriverState *bs);
400 int bdrv_is_inserted(BlockDriverState *bs);
401 int bdrv_is_locked(BlockDriverState *bs);
402 void bdrv_set_locked(BlockDriverState *bs, int locked);
403 void bdrv_set_change_cb(BlockDriverState *bs,
404 void (*change_cb)(void *opaque), void *opaque);
405 void bdrv_get_format(BlockDriverState *bs, char *buf, int buf_size);
406 void bdrv_info(void);
407 BlockDriverState *bdrv_find(const char *name);
408 void bdrv_iterate(void (*it)(void *opaque, const char *name), void *opaque);
409 int bdrv_is_encrypted(BlockDriverState *bs);
410 int bdrv_set_key(BlockDriverState *bs, const char *key);
411 void bdrv_iterate_format(void (*it)(void *opaque, const char *name),
412 void *opaque);
413 const char *bdrv_get_device_name(BlockDriverState *bs);
414
415 int qcow_get_cluster_size(BlockDriverState *bs);
416 int qcow_compress_cluster(BlockDriverState *bs, int64_t sector_num,
417 const uint8_t *buf);
418
419 #ifndef QEMU_TOOL
420 /* ISA bus */
421
422 extern target_phys_addr_t isa_mem_base;
423
424 typedef void (IOPortWriteFunc)(void *opaque, uint32_t address, uint32_t data);
425 typedef uint32_t (IOPortReadFunc)(void *opaque, uint32_t address);
426
427 int register_ioport_read(int start, int length, int size,
428 IOPortReadFunc *func, void *opaque);
429 int register_ioport_write(int start, int length, int size,
430 IOPortWriteFunc *func, void *opaque);
431 void isa_unassign_ioport(int start, int length);
432
433 /* PCI bus */
434
435 extern int pci_enabled;
436
437 extern target_phys_addr_t pci_mem_base;
438
439 typedef struct PCIBus PCIBus;
440 typedef struct PCIDevice PCIDevice;
441
442 typedef void PCIConfigWriteFunc(PCIDevice *pci_dev,
443 uint32_t address, uint32_t data, int len);
444 typedef uint32_t PCIConfigReadFunc(PCIDevice *pci_dev,
445 uint32_t address, int len);
446 typedef void PCIMapIORegionFunc(PCIDevice *pci_dev, int region_num,
447 uint32_t addr, uint32_t size, int type);
448
449 #define PCI_ADDRESS_SPACE_MEM 0x00
450 #define PCI_ADDRESS_SPACE_IO 0x01
451 #define PCI_ADDRESS_SPACE_MEM_PREFETCH 0x08
452
453 typedef struct PCIIORegion {
454 uint32_t addr; /* current PCI mapping address. -1 means not mapped */
455 uint32_t size;
456 uint8_t type;
457 PCIMapIORegionFunc *map_func;
458 } PCIIORegion;
459
460 #define PCI_ROM_SLOT 6
461 #define PCI_NUM_REGIONS 7
462 struct PCIDevice {
463 /* PCI config space */
464 uint8_t config[256];
465
466 /* the following fields are read only */
467 PCIBus *bus;
468 int devfn;
469 char name[64];
470 PCIIORegion io_regions[PCI_NUM_REGIONS];
471
472 /* do not access the following fields */
473 PCIConfigReadFunc *config_read;
474 PCIConfigWriteFunc *config_write;
475 int irq_index;
476 };
477
478 PCIDevice *pci_register_device(PCIBus *bus, const char *name,
479 int instance_size, int devfn,
480 PCIConfigReadFunc *config_read,
481 PCIConfigWriteFunc *config_write);
482
483 void pci_register_io_region(PCIDevice *pci_dev, int region_num,
484 uint32_t size, int type,
485 PCIMapIORegionFunc *map_func);
486
487 void pci_set_irq(PCIDevice *pci_dev, int irq_num, int level);
488
489 uint32_t pci_default_read_config(PCIDevice *d,
490 uint32_t address, int len);
491 void pci_default_write_config(PCIDevice *d,
492 uint32_t address, uint32_t val, int len);
493 void generic_pci_save(QEMUFile* f, void *opaque);
494 int generic_pci_load(QEMUFile* f, void *opaque, int version_id);
495
496 extern struct PIIX3State *piix3_state;
497
498 PCIBus *i440fx_init(void);
499 void piix3_init(PCIBus *bus);
500 void pci_bios_init(void);
501 void pci_info(void);
502
503 /* temporary: will be moved in platform specific file */
504 PCIBus *pci_prep_init(void);
505 struct openpic_t;
506 void pci_pmac_set_openpic(PCIBus *bus, struct openpic_t *openpic);
507 PCIBus *pci_pmac_init(void);
508
509 /* openpic.c */
510 typedef struct openpic_t openpic_t;
511 void openpic_set_irq (openpic_t *opp, int n_IRQ, int level);
512 openpic_t *openpic_init (PCIBus *bus, int *pmem_index, int nb_cpus);
513
514 /* vga.c */
515
516 #define VGA_RAM_SIZE (4096 * 1024)
517
518 struct DisplayState {
519 uint8_t *data;
520 int linesize;
521 int depth;
522 int width;
523 int height;
524 void (*dpy_update)(struct DisplayState *s, int x, int y, int w, int h);
525 void (*dpy_resize)(struct DisplayState *s, int w, int h);
526 void (*dpy_refresh)(struct DisplayState *s);
527 };
528
529 static inline void dpy_update(DisplayState *s, int x, int y, int w, int h)
530 {
531 s->dpy_update(s, x, y, w, h);
532 }
533
534 static inline void dpy_resize(DisplayState *s, int w, int h)
535 {
536 s->dpy_resize(s, w, h);
537 }
538
539 int vga_initialize(PCIBus *bus, DisplayState *ds, uint8_t *vga_ram_base,
540 unsigned long vga_ram_offset, int vga_ram_size);
541 void vga_update_display(void);
542 void vga_invalidate_display(void);
543 void vga_screen_dump(const char *filename);
544
545 /* cirrus_vga.c */
546 void pci_cirrus_vga_init(PCIBus *bus, DisplayState *ds, uint8_t *vga_ram_base,
547 unsigned long vga_ram_offset, int vga_ram_size);
548 void isa_cirrus_vga_init(DisplayState *ds, uint8_t *vga_ram_base,
549 unsigned long vga_ram_offset, int vga_ram_size);
550
551 /* sdl.c */
552 void sdl_display_init(DisplayState *ds, int full_screen);
553
554 /* ide.c */
555 #define MAX_DISKS 4
556
557 extern BlockDriverState *bs_table[MAX_DISKS];
558
559 void isa_ide_init(int iobase, int iobase2, int irq,
560 BlockDriverState *hd0, BlockDriverState *hd1);
561 void pci_ide_init(PCIBus *bus, BlockDriverState **hd_table);
562 void pci_piix3_ide_init(PCIBus *bus, BlockDriverState **hd_table);
563 int pmac_ide_init (BlockDriverState **hd_table,
564 openpic_t *openpic, int irq);
565
566 /* sb16.c */
567 void SB16_init (void);
568
569 /* adlib.c */
570 void Adlib_init (void);
571
572 /* gus.c */
573 void GUS_init (void);
574
575 /* dma.c */
576 typedef int (*DMA_transfer_handler) (void *opaque, int nchan, int pos, int size);
577 int DMA_get_channel_mode (int nchan);
578 int DMA_read_memory (int nchan, void *buf, int pos, int size);
579 int DMA_write_memory (int nchan, void *buf, int pos, int size);
580 void DMA_hold_DREQ (int nchan);
581 void DMA_release_DREQ (int nchan);
582 void DMA_schedule(int nchan);
583 void DMA_run (void);
584 void DMA_init (int high_page_enable);
585 void DMA_register_channel (int nchan,
586 DMA_transfer_handler transfer_handler,
587 void *opaque);
588 /* fdc.c */
589 #define MAX_FD 2
590 extern BlockDriverState *fd_table[MAX_FD];
591
592 typedef struct fdctrl_t fdctrl_t;
593
594 fdctrl_t *fdctrl_init (int irq_lvl, int dma_chann, int mem_mapped,
595 uint32_t io_base,
596 BlockDriverState **fds);
597 int fdctrl_get_drive_type(fdctrl_t *fdctrl, int drive_num);
598
599 /* ne2000.c */
600
601 void isa_ne2000_init(int base, int irq, NetDriverState *nd);
602 void pci_ne2000_init(PCIBus *bus, NetDriverState *nd);
603
604 /* pckbd.c */
605
606 void kbd_init(void);
607
608 /* mc146818rtc.c */
609
610 typedef struct RTCState RTCState;
611
612 RTCState *rtc_init(int base, int irq);
613 void rtc_set_memory(RTCState *s, int addr, int val);
614 void rtc_set_date(RTCState *s, const struct tm *tm);
615
616 /* serial.c */
617
618 typedef struct SerialState SerialState;
619 SerialState *serial_init(int base, int irq, CharDriverState *chr);
620
621 /* i8259.c */
622
623 void pic_set_irq(int irq, int level);
624 void pic_init(void);
625 uint32_t pic_intack_read(CPUState *env);
626 void pic_info(void);
627 void irq_info(void);
628
629 /* i8254.c */
630
631 #define PIT_FREQ 1193182
632
633 typedef struct PITState PITState;
634
635 PITState *pit_init(int base, int irq);
636 void pit_set_gate(PITState *pit, int channel, int val);
637 int pit_get_gate(PITState *pit, int channel);
638 int pit_get_out(PITState *pit, int channel, int64_t current_time);
639
640 /* pc.c */
641 void pc_init(int ram_size, int vga_ram_size, int boot_device,
642 DisplayState *ds, const char **fd_filename, int snapshot,
643 const char *kernel_filename, const char *kernel_cmdline,
644 const char *initrd_filename);
645
646 /* ppc.c */
647 void ppc_init (int ram_size, int vga_ram_size, int boot_device,
648 DisplayState *ds, const char **fd_filename, int snapshot,
649 const char *kernel_filename, const char *kernel_cmdline,
650 const char *initrd_filename);
651 void ppc_prep_init (int ram_size, int vga_ram_size, int boot_device,
652 DisplayState *ds, const char **fd_filename, int snapshot,
653 const char *kernel_filename, const char *kernel_cmdline,
654 const char *initrd_filename);
655 void ppc_chrp_init(int ram_size, int vga_ram_size, int boot_device,
656 DisplayState *ds, const char **fd_filename, int snapshot,
657 const char *kernel_filename, const char *kernel_cmdline,
658 const char *initrd_filename);
659 #ifdef TARGET_PPC
660 ppc_tb_t *cpu_ppc_tb_init (CPUState *env, uint32_t freq);
661 #endif
662 void PREP_debug_write (void *opaque, uint32_t addr, uint32_t val);
663
664 extern CPUWriteMemoryFunc *PPC_io_write[];
665 extern CPUReadMemoryFunc *PPC_io_read[];
666 extern int prep_enabled;
667
668 /* sun4m.c */
669 void sun4m_init(int ram_size, int vga_ram_size, int boot_device,
670 DisplayState *ds, const char **fd_filename, int snapshot,
671 const char *kernel_filename, const char *kernel_cmdline,
672 const char *initrd_filename);
673
674 /* iommu.c */
675 void iommu_init(uint32_t addr);
676 uint32_t iommu_translate(uint32_t addr);
677
678 /* lance.c */
679 void lance_init(NetDriverState *nd, int irq, uint32_t leaddr, uint32_t ledaddr);
680
681 /* tcx.c */
682 void tcx_init(DisplayState *ds, uint32_t addr);
683
684 /* sched.c */
685 void sched_init();
686
687 /* magic-load.c */
688 void magic_init(const char *kfn, int kloadaddr, uint32_t addr);
689
690 /* timer.c */
691 void timer_init(uint32_t addr, int irq);
692
693 /* NVRAM helpers */
694 #include "hw/m48t59.h"
695
696 void NVRAM_set_byte (m48t59_t *nvram, uint32_t addr, uint8_t value);
697 uint8_t NVRAM_get_byte (m48t59_t *nvram, uint32_t addr);
698 void NVRAM_set_word (m48t59_t *nvram, uint32_t addr, uint16_t value);
699 uint16_t NVRAM_get_word (m48t59_t *nvram, uint32_t addr);
700 void NVRAM_set_lword (m48t59_t *nvram, uint32_t addr, uint32_t value);
701 uint32_t NVRAM_get_lword (m48t59_t *nvram, uint32_t addr);
702 void NVRAM_set_string (m48t59_t *nvram, uint32_t addr,
703 const unsigned char *str, uint32_t max);
704 int NVRAM_get_string (m48t59_t *nvram, uint8_t *dst, uint16_t addr, int max);
705 void NVRAM_set_crc (m48t59_t *nvram, uint32_t addr,
706 uint32_t start, uint32_t count);
707 int PPC_NVRAM_set_params (m48t59_t *nvram, uint16_t NVRAM_size,
708 const unsigned char *arch,
709 uint32_t RAM_size, int boot_device,
710 uint32_t kernel_image, uint32_t kernel_size,
711 const char *cmdline,
712 uint32_t initrd_image, uint32_t initrd_size,
713 uint32_t NVRAM_image,
714 int width, int height, int depth);
715
716 /* adb.c */
717
718 #define MAX_ADB_DEVICES 16
719
720 #define ADB_MAX_OUT_LEN 16
721
722 typedef struct ADBDevice ADBDevice;
723
724 /* buf = NULL means polling */
725 typedef int ADBDeviceRequest(ADBDevice *d, uint8_t *buf_out,
726 const uint8_t *buf, int len);
727 typedef int ADBDeviceReset(ADBDevice *d);
728
729 struct ADBDevice {
730 struct ADBBusState *bus;
731 int devaddr;
732 int handler;
733 ADBDeviceRequest *devreq;
734 ADBDeviceReset *devreset;
735 void *opaque;
736 };
737
738 typedef struct ADBBusState {
739 ADBDevice devices[MAX_ADB_DEVICES];
740 int nb_devices;
741 int poll_index;
742 } ADBBusState;
743
744 int adb_request(ADBBusState *s, uint8_t *buf_out,
745 const uint8_t *buf, int len);
746 int adb_poll(ADBBusState *s, uint8_t *buf_out);
747
748 ADBDevice *adb_register_device(ADBBusState *s, int devaddr,
749 ADBDeviceRequest *devreq,
750 ADBDeviceReset *devreset,
751 void *opaque);
752 void adb_kbd_init(ADBBusState *bus);
753 void adb_mouse_init(ADBBusState *bus);
754
755 /* cuda.c */
756
757 extern ADBBusState adb_bus;
758 int cuda_init(openpic_t *openpic, int irq);
759
760 #endif /* defined(QEMU_TOOL) */
761
762 /* monitor.c */
763 void monitor_init(CharDriverState *hd, int show_banner);
764 void term_puts(const char *str);
765 void term_vprintf(const char *fmt, va_list ap);
766 void term_printf(const char *fmt, ...) __attribute__ ((__format__ (__printf__, 1, 2)));
767 void term_flush(void);
768 void term_print_help(void);
769 void monitor_readline(const char *prompt, int is_password,
770 char *buf, int buf_size);
771
772 /* readline.c */
773 typedef void ReadLineFunc(void *opaque, const char *str);
774
775 extern int completion_index;
776 void add_completion(const char *str);
777 void readline_handle_byte(int ch);
778 void readline_find_completion(const char *cmdline);
779 const char *readline_get_history(unsigned int index);
780 void readline_start(const char *prompt, int is_password,
781 ReadLineFunc *readline_func, void *opaque);
782
783 /* gdbstub.c */
784
785 #define DEFAULT_GDBSTUB_PORT 1234
786
787 int gdbserver_start(int port);
788
789 #endif /* VL_H */