Statistics
| Branch: | Revision:

root / vl.h @ 1b2b0af5

History | View | Annotate | Download (31.9 kB)

1 fc01f7e7 bellard
/*
2 fc01f7e7 bellard
 * QEMU System Emulator header
3 fc01f7e7 bellard
 * 
4 fc01f7e7 bellard
 * Copyright (c) 2003 Fabrice Bellard
5 fc01f7e7 bellard
 * 
6 fc01f7e7 bellard
 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 fc01f7e7 bellard
 * of this software and associated documentation files (the "Software"), to deal
8 fc01f7e7 bellard
 * in the Software without restriction, including without limitation the rights
9 fc01f7e7 bellard
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 fc01f7e7 bellard
 * copies of the Software, and to permit persons to whom the Software is
11 fc01f7e7 bellard
 * furnished to do so, subject to the following conditions:
12 fc01f7e7 bellard
 *
13 fc01f7e7 bellard
 * The above copyright notice and this permission notice shall be included in
14 fc01f7e7 bellard
 * all copies or substantial portions of the Software.
15 fc01f7e7 bellard
 *
16 fc01f7e7 bellard
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 fc01f7e7 bellard
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 fc01f7e7 bellard
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 fc01f7e7 bellard
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 fc01f7e7 bellard
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 fc01f7e7 bellard
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 fc01f7e7 bellard
 * THE SOFTWARE.
23 fc01f7e7 bellard
 */
24 fc01f7e7 bellard
#ifndef VL_H
25 fc01f7e7 bellard
#define VL_H
26 fc01f7e7 bellard
27 67b915a5 bellard
/* we put basic includes here to avoid repeating them in device drivers */
28 67b915a5 bellard
#include <stdlib.h>
29 67b915a5 bellard
#include <stdio.h>
30 67b915a5 bellard
#include <stdarg.h>
31 67b915a5 bellard
#include <string.h>
32 67b915a5 bellard
#include <inttypes.h>
33 85571bc7 bellard
#include <limits.h>
34 8a7ddc38 bellard
#include <time.h>
35 67b915a5 bellard
#include <ctype.h>
36 67b915a5 bellard
#include <errno.h>
37 67b915a5 bellard
#include <unistd.h>
38 67b915a5 bellard
#include <fcntl.h>
39 7d3505c5 bellard
#include <sys/stat.h>
40 fb065187 bellard
#include "audio/audio.h"
41 67b915a5 bellard
42 67b915a5 bellard
#ifndef O_LARGEFILE
43 67b915a5 bellard
#define O_LARGEFILE 0
44 67b915a5 bellard
#endif
45 40c3bac3 bellard
#ifndef O_BINARY
46 40c3bac3 bellard
#define O_BINARY 0
47 40c3bac3 bellard
#endif
48 67b915a5 bellard
49 67b915a5 bellard
#ifdef _WIN32
50 57d1a2b6 bellard
#define lseek _lseeki64
51 57d1a2b6 bellard
#define ENOTSUP 4096
52 57d1a2b6 bellard
/* XXX: find 64 bit version */
53 57d1a2b6 bellard
#define ftruncate chsize
54 57d1a2b6 bellard
55 57d1a2b6 bellard
static inline char *realpath(const char *path, char *resolved_path)
56 57d1a2b6 bellard
{
57 57d1a2b6 bellard
    _fullpath(resolved_path, path, _MAX_PATH);
58 57d1a2b6 bellard
    return resolved_path;
59 57d1a2b6 bellard
}
60 67b915a5 bellard
#endif
61 8a7ddc38 bellard
62 ea2384d3 bellard
#ifdef QEMU_TOOL
63 ea2384d3 bellard
64 ea2384d3 bellard
/* we use QEMU_TOOL in the command line tools which do not depend on
65 ea2384d3 bellard
   the target CPU type */
66 ea2384d3 bellard
#include "config-host.h"
67 ea2384d3 bellard
#include <setjmp.h>
68 ea2384d3 bellard
#include "osdep.h"
69 ea2384d3 bellard
#include "bswap.h"
70 ea2384d3 bellard
71 ea2384d3 bellard
#else
72 ea2384d3 bellard
73 16f62432 bellard
#include "cpu.h"
74 1fddef4b bellard
#include "gdbstub.h"
75 16f62432 bellard
76 ea2384d3 bellard
#endif /* !defined(QEMU_TOOL) */
77 ea2384d3 bellard
78 67b915a5 bellard
#ifndef glue
79 67b915a5 bellard
#define xglue(x, y) x ## y
80 67b915a5 bellard
#define glue(x, y) xglue(x, y)
81 67b915a5 bellard
#define stringify(s)        tostring(s)
82 67b915a5 bellard
#define tostring(s)        #s
83 67b915a5 bellard
#endif
84 67b915a5 bellard
85 33e3963e bellard
/* vl.c */
86 80cabfad bellard
uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c);
87 313aa567 bellard
88 80cabfad bellard
void hw_error(const char *fmt, ...);
89 80cabfad bellard
90 80cabfad bellard
extern const char *bios_dir;
91 80cabfad bellard
92 80cabfad bellard
void pstrcpy(char *buf, int buf_size, const char *str);
93 80cabfad bellard
char *pstrcat(char *buf, int buf_size, const char *s);
94 82c643ff bellard
int strstart(const char *str, const char *val, const char **ptr);
95 c4b1fcc0 bellard
96 8a7ddc38 bellard
extern int vm_running;
97 8a7ddc38 bellard
98 0bd48850 bellard
typedef struct vm_change_state_entry VMChangeStateEntry;
99 0bd48850 bellard
typedef void VMChangeStateHandler(void *opaque, int running);
100 8a7ddc38 bellard
typedef void VMStopHandler(void *opaque, int reason);
101 8a7ddc38 bellard
102 0bd48850 bellard
VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
103 0bd48850 bellard
                                                     void *opaque);
104 0bd48850 bellard
void qemu_del_vm_change_state_handler(VMChangeStateEntry *e);
105 0bd48850 bellard
106 8a7ddc38 bellard
int qemu_add_vm_stop_handler(VMStopHandler *cb, void *opaque);
107 8a7ddc38 bellard
void qemu_del_vm_stop_handler(VMStopHandler *cb, void *opaque);
108 8a7ddc38 bellard
109 8a7ddc38 bellard
void vm_start(void);
110 8a7ddc38 bellard
void vm_stop(int reason);
111 8a7ddc38 bellard
112 bb0c6722 bellard
typedef void QEMUResetHandler(void *opaque);
113 bb0c6722 bellard
114 bb0c6722 bellard
void qemu_register_reset(QEMUResetHandler *func, void *opaque);
115 bb0c6722 bellard
void qemu_system_reset_request(void);
116 bb0c6722 bellard
void qemu_system_shutdown_request(void);
117 3475187d bellard
void qemu_system_powerdown_request(void);
118 3475187d bellard
#if !defined(TARGET_SPARC)
119 3475187d bellard
// Please implement a power failure function to signal the OS
120 3475187d bellard
#define qemu_system_powerdown() do{}while(0)
121 3475187d bellard
#else
122 3475187d bellard
void qemu_system_powerdown(void);
123 3475187d bellard
#endif
124 bb0c6722 bellard
125 ea2384d3 bellard
void main_loop_wait(int timeout);
126 ea2384d3 bellard
127 0ced6589 bellard
extern int ram_size;
128 0ced6589 bellard
extern int bios_size;
129 ee22c2f7 bellard
extern int rtc_utc;
130 1f04275e bellard
extern int cirrus_vga_enabled;
131 28b9b5af bellard
extern int graphic_width;
132 28b9b5af bellard
extern int graphic_height;
133 28b9b5af bellard
extern int graphic_depth;
134 3d11d0eb bellard
extern const char *keyboard_layout;
135 d993e026 bellard
extern int kqemu_allowed;
136 a09db21f bellard
extern int win2k_install_hack;
137 bb36d470 bellard
extern int usb_enabled;
138 6a00d601 bellard
extern int smp_cpus;
139 0ced6589 bellard
140 0ced6589 bellard
/* XXX: make it dynamic */
141 0ced6589 bellard
#if defined (TARGET_PPC)
142 d5295253 bellard
#define BIOS_SIZE ((512 + 32) * 1024)
143 6af0bf9c bellard
#elif defined(TARGET_MIPS)
144 6af0bf9c bellard
#define BIOS_SIZE (128 * 1024)
145 0ced6589 bellard
#else
146 7587cf44 bellard
#define BIOS_SIZE ((256 + 64) * 1024)
147 0ced6589 bellard
#endif
148 aaaa7df6 bellard
149 63066f4f bellard
/* keyboard/mouse support */
150 63066f4f bellard
151 63066f4f bellard
#define MOUSE_EVENT_LBUTTON 0x01
152 63066f4f bellard
#define MOUSE_EVENT_RBUTTON 0x02
153 63066f4f bellard
#define MOUSE_EVENT_MBUTTON 0x04
154 63066f4f bellard
155 63066f4f bellard
typedef void QEMUPutKBDEvent(void *opaque, int keycode);
156 63066f4f bellard
typedef void QEMUPutMouseEvent(void *opaque, int dx, int dy, int dz, int buttons_state);
157 63066f4f bellard
158 63066f4f bellard
void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque);
159 09b26c5e bellard
void qemu_add_mouse_event_handler(QEMUPutMouseEvent *func, void *opaque, int absolute);
160 63066f4f bellard
161 63066f4f bellard
void kbd_put_keycode(int keycode);
162 63066f4f bellard
void kbd_mouse_event(int dx, int dy, int dz, int buttons_state);
163 09b26c5e bellard
int kbd_mouse_is_absolute(void);
164 63066f4f bellard
165 82c643ff bellard
/* keysym is a unicode code except for special keys (see QEMU_KEY_xxx
166 82c643ff bellard
   constants) */
167 82c643ff bellard
#define QEMU_KEY_ESC1(c) ((c) | 0xe100)
168 82c643ff bellard
#define QEMU_KEY_BACKSPACE  0x007f
169 82c643ff bellard
#define QEMU_KEY_UP         QEMU_KEY_ESC1('A')
170 82c643ff bellard
#define QEMU_KEY_DOWN       QEMU_KEY_ESC1('B')
171 82c643ff bellard
#define QEMU_KEY_RIGHT      QEMU_KEY_ESC1('C')
172 82c643ff bellard
#define QEMU_KEY_LEFT       QEMU_KEY_ESC1('D')
173 82c643ff bellard
#define QEMU_KEY_HOME       QEMU_KEY_ESC1(1)
174 82c643ff bellard
#define QEMU_KEY_END        QEMU_KEY_ESC1(4)
175 82c643ff bellard
#define QEMU_KEY_PAGEUP     QEMU_KEY_ESC1(5)
176 82c643ff bellard
#define QEMU_KEY_PAGEDOWN   QEMU_KEY_ESC1(6)
177 82c643ff bellard
#define QEMU_KEY_DELETE     QEMU_KEY_ESC1(3)
178 82c643ff bellard
179 82c643ff bellard
#define QEMU_KEY_CTRL_UP         0xe400
180 82c643ff bellard
#define QEMU_KEY_CTRL_DOWN       0xe401
181 82c643ff bellard
#define QEMU_KEY_CTRL_LEFT       0xe402
182 82c643ff bellard
#define QEMU_KEY_CTRL_RIGHT      0xe403
183 82c643ff bellard
#define QEMU_KEY_CTRL_HOME       0xe404
184 82c643ff bellard
#define QEMU_KEY_CTRL_END        0xe405
185 82c643ff bellard
#define QEMU_KEY_CTRL_PAGEUP     0xe406
186 82c643ff bellard
#define QEMU_KEY_CTRL_PAGEDOWN   0xe407
187 82c643ff bellard
188 82c643ff bellard
void kbd_put_keysym(int keysym);
189 82c643ff bellard
190 c20709aa bellard
/* async I/O support */
191 c20709aa bellard
192 c20709aa bellard
typedef void IOReadHandler(void *opaque, const uint8_t *buf, int size);
193 c20709aa bellard
typedef int IOCanRWHandler(void *opaque);
194 7c9d8e07 bellard
typedef void IOHandler(void *opaque);
195 c20709aa bellard
196 7c9d8e07 bellard
int qemu_set_fd_handler2(int fd, 
197 7c9d8e07 bellard
                         IOCanRWHandler *fd_read_poll, 
198 7c9d8e07 bellard
                         IOHandler *fd_read, 
199 7c9d8e07 bellard
                         IOHandler *fd_write, 
200 7c9d8e07 bellard
                         void *opaque);
201 7c9d8e07 bellard
int qemu_set_fd_handler(int fd,
202 7c9d8e07 bellard
                        IOHandler *fd_read, 
203 7c9d8e07 bellard
                        IOHandler *fd_write,
204 7c9d8e07 bellard
                        void *opaque);
205 c20709aa bellard
206 f331110f bellard
/* Polling handling */
207 f331110f bellard
208 f331110f bellard
/* return TRUE if no sleep should be done afterwards */
209 f331110f bellard
typedef int PollingFunc(void *opaque);
210 f331110f bellard
211 f331110f bellard
int qemu_add_polling_cb(PollingFunc *func, void *opaque);
212 f331110f bellard
void qemu_del_polling_cb(PollingFunc *func, void *opaque);
213 f331110f bellard
214 82c643ff bellard
/* character device */
215 82c643ff bellard
216 82c643ff bellard
#define CHR_EVENT_BREAK 0 /* serial break char */
217 ea2384d3 bellard
#define CHR_EVENT_FOCUS 1 /* focus to this terminal (modal input needed) */
218 82c643ff bellard
219 2122c51a bellard
220 2122c51a bellard
221 2122c51a bellard
#define CHR_IOCTL_SERIAL_SET_PARAMS   1
222 2122c51a bellard
typedef struct {
223 2122c51a bellard
    int speed;
224 2122c51a bellard
    int parity;
225 2122c51a bellard
    int data_bits;
226 2122c51a bellard
    int stop_bits;
227 2122c51a bellard
} QEMUSerialSetParams;
228 2122c51a bellard
229 2122c51a bellard
#define CHR_IOCTL_SERIAL_SET_BREAK    2
230 2122c51a bellard
231 2122c51a bellard
#define CHR_IOCTL_PP_READ_DATA        3
232 2122c51a bellard
#define CHR_IOCTL_PP_WRITE_DATA       4
233 2122c51a bellard
#define CHR_IOCTL_PP_READ_CONTROL     5
234 2122c51a bellard
#define CHR_IOCTL_PP_WRITE_CONTROL    6
235 2122c51a bellard
#define CHR_IOCTL_PP_READ_STATUS      7
236 2122c51a bellard
237 82c643ff bellard
typedef void IOEventHandler(void *opaque, int event);
238 82c643ff bellard
239 82c643ff bellard
typedef struct CharDriverState {
240 82c643ff bellard
    int (*chr_write)(struct CharDriverState *s, const uint8_t *buf, int len);
241 82c643ff bellard
    void (*chr_add_read_handler)(struct CharDriverState *s, 
242 82c643ff bellard
                                 IOCanRWHandler *fd_can_read, 
243 82c643ff bellard
                                 IOReadHandler *fd_read, void *opaque);
244 2122c51a bellard
    int (*chr_ioctl)(struct CharDriverState *s, int cmd, void *arg);
245 82c643ff bellard
    IOEventHandler *chr_event;
246 eb45f5fe bellard
    void (*chr_send_event)(struct CharDriverState *chr, int event);
247 f331110f bellard
    void (*chr_close)(struct CharDriverState *chr);
248 82c643ff bellard
    void *opaque;
249 82c643ff bellard
} CharDriverState;
250 82c643ff bellard
251 82c643ff bellard
void qemu_chr_printf(CharDriverState *s, const char *fmt, ...);
252 82c643ff bellard
int qemu_chr_write(CharDriverState *s, const uint8_t *buf, int len);
253 ea2384d3 bellard
void qemu_chr_send_event(CharDriverState *s, int event);
254 82c643ff bellard
void qemu_chr_add_read_handler(CharDriverState *s, 
255 82c643ff bellard
                               IOCanRWHandler *fd_can_read, 
256 82c643ff bellard
                               IOReadHandler *fd_read, void *opaque);
257 82c643ff bellard
void qemu_chr_add_event_handler(CharDriverState *s, IOEventHandler *chr_event);
258 2122c51a bellard
int qemu_chr_ioctl(CharDriverState *s, int cmd, void *arg);
259 f8d179e3 bellard
260 82c643ff bellard
/* consoles */
261 82c643ff bellard
262 82c643ff bellard
typedef struct DisplayState DisplayState;
263 82c643ff bellard
typedef struct TextConsole TextConsole;
264 82c643ff bellard
265 95219897 pbrook
typedef void (*vga_hw_update_ptr)(void *);
266 95219897 pbrook
typedef void (*vga_hw_invalidate_ptr)(void *);
267 95219897 pbrook
typedef void (*vga_hw_screen_dump_ptr)(void *, const char *);
268 95219897 pbrook
269 95219897 pbrook
TextConsole *graphic_console_init(DisplayState *ds, vga_hw_update_ptr update,
270 95219897 pbrook
                                  vga_hw_invalidate_ptr invalidate,
271 95219897 pbrook
                                  vga_hw_screen_dump_ptr screen_dump,
272 95219897 pbrook
                                  void *opaque);
273 95219897 pbrook
void vga_hw_update(void);
274 95219897 pbrook
void vga_hw_invalidate(void);
275 95219897 pbrook
void vga_hw_screen_dump(const char *filename);
276 95219897 pbrook
277 95219897 pbrook
int is_graphic_console(void);
278 82c643ff bellard
CharDriverState *text_console_init(DisplayState *ds);
279 82c643ff bellard
void console_select(unsigned int index);
280 82c643ff bellard
281 8d11df9e bellard
/* serial ports */
282 8d11df9e bellard
283 8d11df9e bellard
#define MAX_SERIAL_PORTS 4
284 8d11df9e bellard
285 8d11df9e bellard
extern CharDriverState *serial_hds[MAX_SERIAL_PORTS];
286 8d11df9e bellard
287 6508fe59 bellard
/* parallel ports */
288 6508fe59 bellard
289 6508fe59 bellard
#define MAX_PARALLEL_PORTS 3
290 6508fe59 bellard
291 6508fe59 bellard
extern CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
292 6508fe59 bellard
293 7c9d8e07 bellard
/* VLANs support */
294 7c9d8e07 bellard
295 7c9d8e07 bellard
typedef struct VLANClientState VLANClientState;
296 7c9d8e07 bellard
297 7c9d8e07 bellard
struct VLANClientState {
298 7c9d8e07 bellard
    IOReadHandler *fd_read;
299 d861b05e pbrook
    /* Packets may still be sent if this returns zero.  It's used to
300 d861b05e pbrook
       rate-limit the slirp code.  */
301 d861b05e pbrook
    IOCanRWHandler *fd_can_read;
302 7c9d8e07 bellard
    void *opaque;
303 7c9d8e07 bellard
    struct VLANClientState *next;
304 7c9d8e07 bellard
    struct VLANState *vlan;
305 7c9d8e07 bellard
    char info_str[256];
306 7c9d8e07 bellard
};
307 7c9d8e07 bellard
308 7c9d8e07 bellard
typedef struct VLANState {
309 7c9d8e07 bellard
    int id;
310 7c9d8e07 bellard
    VLANClientState *first_client;
311 7c9d8e07 bellard
    struct VLANState *next;
312 7c9d8e07 bellard
} VLANState;
313 7c9d8e07 bellard
314 7c9d8e07 bellard
VLANState *qemu_find_vlan(int id);
315 7c9d8e07 bellard
VLANClientState *qemu_new_vlan_client(VLANState *vlan,
316 d861b05e pbrook
                                      IOReadHandler *fd_read,
317 d861b05e pbrook
                                      IOCanRWHandler *fd_can_read,
318 d861b05e pbrook
                                      void *opaque);
319 d861b05e pbrook
int qemu_can_send_packet(VLANClientState *vc);
320 7c9d8e07 bellard
void qemu_send_packet(VLANClientState *vc, const uint8_t *buf, int size);
321 d861b05e pbrook
void qemu_handler_true(void *opaque);
322 7c9d8e07 bellard
323 7c9d8e07 bellard
void do_info_network(void);
324 7c9d8e07 bellard
325 7fb843f8 bellard
/* TAP win32 */
326 7fb843f8 bellard
int tap_win32_init(VLANState *vlan, const char *ifname);
327 7fb843f8 bellard
void tap_win32_poll(void);
328 7fb843f8 bellard
329 7c9d8e07 bellard
/* NIC info */
330 c4b1fcc0 bellard
331 c4b1fcc0 bellard
#define MAX_NICS 8
332 c4b1fcc0 bellard
333 7c9d8e07 bellard
typedef struct NICInfo {
334 c4b1fcc0 bellard
    uint8_t macaddr[6];
335 a41b2ff2 pbrook
    const char *model;
336 7c9d8e07 bellard
    VLANState *vlan;
337 7c9d8e07 bellard
} NICInfo;
338 c4b1fcc0 bellard
339 c4b1fcc0 bellard
extern int nb_nics;
340 7c9d8e07 bellard
extern NICInfo nd_table[MAX_NICS];
341 8a7ddc38 bellard
342 8a7ddc38 bellard
/* timers */
343 8a7ddc38 bellard
344 8a7ddc38 bellard
typedef struct QEMUClock QEMUClock;
345 8a7ddc38 bellard
typedef struct QEMUTimer QEMUTimer;
346 8a7ddc38 bellard
typedef void QEMUTimerCB(void *opaque);
347 8a7ddc38 bellard
348 8a7ddc38 bellard
/* The real time clock should be used only for stuff which does not
349 8a7ddc38 bellard
   change the virtual machine state, as it is run even if the virtual
350 69b91039 bellard
   machine is stopped. The real time clock has a frequency of 1000
351 8a7ddc38 bellard
   Hz. */
352 8a7ddc38 bellard
extern QEMUClock *rt_clock;
353 8a7ddc38 bellard
354 e80cfcfc bellard
/* The virtual clock is only run during the emulation. It is stopped
355 8a7ddc38 bellard
   when the virtual machine is stopped. Virtual timers use a high
356 8a7ddc38 bellard
   precision clock, usually cpu cycles (use ticks_per_sec). */
357 8a7ddc38 bellard
extern QEMUClock *vm_clock;
358 8a7ddc38 bellard
359 8a7ddc38 bellard
int64_t qemu_get_clock(QEMUClock *clock);
360 8a7ddc38 bellard
361 8a7ddc38 bellard
QEMUTimer *qemu_new_timer(QEMUClock *clock, QEMUTimerCB *cb, void *opaque);
362 8a7ddc38 bellard
void qemu_free_timer(QEMUTimer *ts);
363 8a7ddc38 bellard
void qemu_del_timer(QEMUTimer *ts);
364 8a7ddc38 bellard
void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time);
365 8a7ddc38 bellard
int qemu_timer_pending(QEMUTimer *ts);
366 8a7ddc38 bellard
367 8a7ddc38 bellard
extern int64_t ticks_per_sec;
368 8a7ddc38 bellard
extern int pit_min_timer_count;
369 8a7ddc38 bellard
370 8a7ddc38 bellard
void cpu_enable_ticks(void);
371 8a7ddc38 bellard
void cpu_disable_ticks(void);
372 8a7ddc38 bellard
373 8a7ddc38 bellard
/* VM Load/Save */
374 8a7ddc38 bellard
375 8a7ddc38 bellard
typedef FILE QEMUFile;
376 8a7ddc38 bellard
377 8a7ddc38 bellard
void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size);
378 8a7ddc38 bellard
void qemu_put_byte(QEMUFile *f, int v);
379 8a7ddc38 bellard
void qemu_put_be16(QEMUFile *f, unsigned int v);
380 8a7ddc38 bellard
void qemu_put_be32(QEMUFile *f, unsigned int v);
381 8a7ddc38 bellard
void qemu_put_be64(QEMUFile *f, uint64_t v);
382 8a7ddc38 bellard
int qemu_get_buffer(QEMUFile *f, uint8_t *buf, int size);
383 8a7ddc38 bellard
int qemu_get_byte(QEMUFile *f);
384 8a7ddc38 bellard
unsigned int qemu_get_be16(QEMUFile *f);
385 8a7ddc38 bellard
unsigned int qemu_get_be32(QEMUFile *f);
386 8a7ddc38 bellard
uint64_t qemu_get_be64(QEMUFile *f);
387 8a7ddc38 bellard
388 8a7ddc38 bellard
static inline void qemu_put_be64s(QEMUFile *f, const uint64_t *pv)
389 8a7ddc38 bellard
{
390 8a7ddc38 bellard
    qemu_put_be64(f, *pv);
391 8a7ddc38 bellard
}
392 8a7ddc38 bellard
393 8a7ddc38 bellard
static inline void qemu_put_be32s(QEMUFile *f, const uint32_t *pv)
394 8a7ddc38 bellard
{
395 8a7ddc38 bellard
    qemu_put_be32(f, *pv);
396 8a7ddc38 bellard
}
397 8a7ddc38 bellard
398 8a7ddc38 bellard
static inline void qemu_put_be16s(QEMUFile *f, const uint16_t *pv)
399 8a7ddc38 bellard
{
400 8a7ddc38 bellard
    qemu_put_be16(f, *pv);
401 8a7ddc38 bellard
}
402 8a7ddc38 bellard
403 8a7ddc38 bellard
static inline void qemu_put_8s(QEMUFile *f, const uint8_t *pv)
404 8a7ddc38 bellard
{
405 8a7ddc38 bellard
    qemu_put_byte(f, *pv);
406 8a7ddc38 bellard
}
407 8a7ddc38 bellard
408 8a7ddc38 bellard
static inline void qemu_get_be64s(QEMUFile *f, uint64_t *pv)
409 8a7ddc38 bellard
{
410 8a7ddc38 bellard
    *pv = qemu_get_be64(f);
411 8a7ddc38 bellard
}
412 8a7ddc38 bellard
413 8a7ddc38 bellard
static inline void qemu_get_be32s(QEMUFile *f, uint32_t *pv)
414 8a7ddc38 bellard
{
415 8a7ddc38 bellard
    *pv = qemu_get_be32(f);
416 8a7ddc38 bellard
}
417 8a7ddc38 bellard
418 8a7ddc38 bellard
static inline void qemu_get_be16s(QEMUFile *f, uint16_t *pv)
419 8a7ddc38 bellard
{
420 8a7ddc38 bellard
    *pv = qemu_get_be16(f);
421 8a7ddc38 bellard
}
422 8a7ddc38 bellard
423 8a7ddc38 bellard
static inline void qemu_get_8s(QEMUFile *f, uint8_t *pv)
424 8a7ddc38 bellard
{
425 8a7ddc38 bellard
    *pv = qemu_get_byte(f);
426 8a7ddc38 bellard
}
427 8a7ddc38 bellard
428 c27004ec bellard
#if TARGET_LONG_BITS == 64
429 c27004ec bellard
#define qemu_put_betl qemu_put_be64
430 c27004ec bellard
#define qemu_get_betl qemu_get_be64
431 c27004ec bellard
#define qemu_put_betls qemu_put_be64s
432 c27004ec bellard
#define qemu_get_betls qemu_get_be64s
433 c27004ec bellard
#else
434 c27004ec bellard
#define qemu_put_betl qemu_put_be32
435 c27004ec bellard
#define qemu_get_betl qemu_get_be32
436 c27004ec bellard
#define qemu_put_betls qemu_put_be32s
437 c27004ec bellard
#define qemu_get_betls qemu_get_be32s
438 c27004ec bellard
#endif
439 c27004ec bellard
440 8a7ddc38 bellard
int64_t qemu_ftell(QEMUFile *f);
441 8a7ddc38 bellard
int64_t qemu_fseek(QEMUFile *f, int64_t pos, int whence);
442 8a7ddc38 bellard
443 8a7ddc38 bellard
typedef void SaveStateHandler(QEMUFile *f, void *opaque);
444 8a7ddc38 bellard
typedef int LoadStateHandler(QEMUFile *f, void *opaque, int version_id);
445 8a7ddc38 bellard
446 8a7ddc38 bellard
int qemu_loadvm(const char *filename);
447 8a7ddc38 bellard
int qemu_savevm(const char *filename);
448 8a7ddc38 bellard
int register_savevm(const char *idstr, 
449 8a7ddc38 bellard
                    int instance_id, 
450 8a7ddc38 bellard
                    int version_id,
451 8a7ddc38 bellard
                    SaveStateHandler *save_state,
452 8a7ddc38 bellard
                    LoadStateHandler *load_state,
453 8a7ddc38 bellard
                    void *opaque);
454 8a7ddc38 bellard
void qemu_get_timer(QEMUFile *f, QEMUTimer *ts);
455 8a7ddc38 bellard
void qemu_put_timer(QEMUFile *f, QEMUTimer *ts);
456 c4b1fcc0 bellard
457 6a00d601 bellard
void cpu_save(QEMUFile *f, void *opaque);
458 6a00d601 bellard
int cpu_load(QEMUFile *f, void *opaque, int version_id);
459 6a00d601 bellard
460 fc01f7e7 bellard
/* block.c */
461 fc01f7e7 bellard
typedef struct BlockDriverState BlockDriverState;
462 ea2384d3 bellard
typedef struct BlockDriver BlockDriver;
463 ea2384d3 bellard
464 ea2384d3 bellard
extern BlockDriver bdrv_raw;
465 ea2384d3 bellard
extern BlockDriver bdrv_cow;
466 ea2384d3 bellard
extern BlockDriver bdrv_qcow;
467 ea2384d3 bellard
extern BlockDriver bdrv_vmdk;
468 3c56521b bellard
extern BlockDriver bdrv_cloop;
469 585d0ed9 bellard
extern BlockDriver bdrv_dmg;
470 a8753c34 bellard
extern BlockDriver bdrv_bochs;
471 6a0f9e82 bellard
extern BlockDriver bdrv_vpc;
472 de167e41 bellard
extern BlockDriver bdrv_vvfat;
473 ea2384d3 bellard
474 ea2384d3 bellard
void bdrv_init(void);
475 ea2384d3 bellard
BlockDriver *bdrv_find_format(const char *format_name);
476 ea2384d3 bellard
int bdrv_create(BlockDriver *drv, 
477 ea2384d3 bellard
                const char *filename, int64_t size_in_sectors,
478 ea2384d3 bellard
                const char *backing_file, int flags);
479 c4b1fcc0 bellard
BlockDriverState *bdrv_new(const char *device_name);
480 c4b1fcc0 bellard
void bdrv_delete(BlockDriverState *bs);
481 c4b1fcc0 bellard
int bdrv_open(BlockDriverState *bs, const char *filename, int snapshot);
482 ea2384d3 bellard
int bdrv_open2(BlockDriverState *bs, const char *filename, int snapshot,
483 ea2384d3 bellard
               BlockDriver *drv);
484 fc01f7e7 bellard
void bdrv_close(BlockDriverState *bs);
485 fc01f7e7 bellard
int bdrv_read(BlockDriverState *bs, int64_t sector_num, 
486 fc01f7e7 bellard
              uint8_t *buf, int nb_sectors);
487 fc01f7e7 bellard
int bdrv_write(BlockDriverState *bs, int64_t sector_num, 
488 fc01f7e7 bellard
               const uint8_t *buf, int nb_sectors);
489 fc01f7e7 bellard
void bdrv_get_geometry(BlockDriverState *bs, int64_t *nb_sectors_ptr);
490 33e3963e bellard
int bdrv_commit(BlockDriverState *bs);
491 77fef8c1 bellard
void bdrv_set_boot_sector(BlockDriverState *bs, const uint8_t *data, int size);
492 33e3963e bellard
493 c4b1fcc0 bellard
#define BDRV_TYPE_HD     0
494 c4b1fcc0 bellard
#define BDRV_TYPE_CDROM  1
495 c4b1fcc0 bellard
#define BDRV_TYPE_FLOPPY 2
496 46d4767d bellard
#define BIOS_ATA_TRANSLATION_AUTO 0
497 46d4767d bellard
#define BIOS_ATA_TRANSLATION_NONE 1
498 46d4767d bellard
#define BIOS_ATA_TRANSLATION_LBA  2
499 c4b1fcc0 bellard
500 c4b1fcc0 bellard
void bdrv_set_geometry_hint(BlockDriverState *bs, 
501 c4b1fcc0 bellard
                            int cyls, int heads, int secs);
502 c4b1fcc0 bellard
void bdrv_set_type_hint(BlockDriverState *bs, int type);
503 46d4767d bellard
void bdrv_set_translation_hint(BlockDriverState *bs, int translation);
504 c4b1fcc0 bellard
void bdrv_get_geometry_hint(BlockDriverState *bs, 
505 c4b1fcc0 bellard
                            int *pcyls, int *pheads, int *psecs);
506 c4b1fcc0 bellard
int bdrv_get_type_hint(BlockDriverState *bs);
507 46d4767d bellard
int bdrv_get_translation_hint(BlockDriverState *bs);
508 c4b1fcc0 bellard
int bdrv_is_removable(BlockDriverState *bs);
509 c4b1fcc0 bellard
int bdrv_is_read_only(BlockDriverState *bs);
510 c4b1fcc0 bellard
int bdrv_is_inserted(BlockDriverState *bs);
511 c4b1fcc0 bellard
int bdrv_is_locked(BlockDriverState *bs);
512 c4b1fcc0 bellard
void bdrv_set_locked(BlockDriverState *bs, int locked);
513 c4b1fcc0 bellard
void bdrv_set_change_cb(BlockDriverState *bs, 
514 c4b1fcc0 bellard
                        void (*change_cb)(void *opaque), void *opaque);
515 ea2384d3 bellard
void bdrv_get_format(BlockDriverState *bs, char *buf, int buf_size);
516 c4b1fcc0 bellard
void bdrv_info(void);
517 c4b1fcc0 bellard
BlockDriverState *bdrv_find(const char *name);
518 82c643ff bellard
void bdrv_iterate(void (*it)(void *opaque, const char *name), void *opaque);
519 ea2384d3 bellard
int bdrv_is_encrypted(BlockDriverState *bs);
520 ea2384d3 bellard
int bdrv_set_key(BlockDriverState *bs, const char *key);
521 ea2384d3 bellard
void bdrv_iterate_format(void (*it)(void *opaque, const char *name), 
522 ea2384d3 bellard
                         void *opaque);
523 ea2384d3 bellard
const char *bdrv_get_device_name(BlockDriverState *bs);
524 c4b1fcc0 bellard
525 ea2384d3 bellard
int qcow_get_cluster_size(BlockDriverState *bs);
526 ea2384d3 bellard
int qcow_compress_cluster(BlockDriverState *bs, int64_t sector_num,
527 ea2384d3 bellard
                          const uint8_t *buf);
528 ea2384d3 bellard
529 ea2384d3 bellard
#ifndef QEMU_TOOL
530 54fa5af5 bellard
531 54fa5af5 bellard
typedef void QEMUMachineInitFunc(int ram_size, int vga_ram_size, 
532 54fa5af5 bellard
                                 int boot_device,
533 54fa5af5 bellard
             DisplayState *ds, const char **fd_filename, int snapshot,
534 54fa5af5 bellard
             const char *kernel_filename, const char *kernel_cmdline,
535 54fa5af5 bellard
             const char *initrd_filename);
536 54fa5af5 bellard
537 54fa5af5 bellard
typedef struct QEMUMachine {
538 54fa5af5 bellard
    const char *name;
539 54fa5af5 bellard
    const char *desc;
540 54fa5af5 bellard
    QEMUMachineInitFunc *init;
541 54fa5af5 bellard
    struct QEMUMachine *next;
542 54fa5af5 bellard
} QEMUMachine;
543 54fa5af5 bellard
544 54fa5af5 bellard
int qemu_register_machine(QEMUMachine *m);
545 54fa5af5 bellard
546 54fa5af5 bellard
typedef void SetIRQFunc(void *opaque, int irq_num, int level);
547 3de388f6 bellard
typedef void IRQRequestFunc(void *opaque, int level);
548 54fa5af5 bellard
549 26aa7d72 bellard
/* ISA bus */
550 26aa7d72 bellard
551 26aa7d72 bellard
extern target_phys_addr_t isa_mem_base;
552 26aa7d72 bellard
553 26aa7d72 bellard
typedef void (IOPortWriteFunc)(void *opaque, uint32_t address, uint32_t data);
554 26aa7d72 bellard
typedef uint32_t (IOPortReadFunc)(void *opaque, uint32_t address);
555 26aa7d72 bellard
556 26aa7d72 bellard
int register_ioport_read(int start, int length, int size, 
557 26aa7d72 bellard
                         IOPortReadFunc *func, void *opaque);
558 26aa7d72 bellard
int register_ioport_write(int start, int length, int size, 
559 26aa7d72 bellard
                          IOPortWriteFunc *func, void *opaque);
560 69b91039 bellard
void isa_unassign_ioport(int start, int length);
561 69b91039 bellard
562 69b91039 bellard
/* PCI bus */
563 69b91039 bellard
564 69b91039 bellard
extern target_phys_addr_t pci_mem_base;
565 69b91039 bellard
566 46e50e9d bellard
typedef struct PCIBus PCIBus;
567 69b91039 bellard
typedef struct PCIDevice PCIDevice;
568 69b91039 bellard
569 69b91039 bellard
typedef void PCIConfigWriteFunc(PCIDevice *pci_dev, 
570 69b91039 bellard
                                uint32_t address, uint32_t data, int len);
571 69b91039 bellard
typedef uint32_t PCIConfigReadFunc(PCIDevice *pci_dev, 
572 69b91039 bellard
                                   uint32_t address, int len);
573 69b91039 bellard
typedef void PCIMapIORegionFunc(PCIDevice *pci_dev, int region_num, 
574 69b91039 bellard
                                uint32_t addr, uint32_t size, int type);
575 69b91039 bellard
576 69b91039 bellard
#define PCI_ADDRESS_SPACE_MEM                0x00
577 69b91039 bellard
#define PCI_ADDRESS_SPACE_IO                0x01
578 69b91039 bellard
#define PCI_ADDRESS_SPACE_MEM_PREFETCH        0x08
579 69b91039 bellard
580 69b91039 bellard
typedef struct PCIIORegion {
581 5768f5ac bellard
    uint32_t addr; /* current PCI mapping address. -1 means not mapped */
582 69b91039 bellard
    uint32_t size;
583 69b91039 bellard
    uint8_t type;
584 69b91039 bellard
    PCIMapIORegionFunc *map_func;
585 69b91039 bellard
} PCIIORegion;
586 69b91039 bellard
587 8a8696a3 bellard
#define PCI_ROM_SLOT 6
588 8a8696a3 bellard
#define PCI_NUM_REGIONS 7
589 69b91039 bellard
struct PCIDevice {
590 69b91039 bellard
    /* PCI config space */
591 69b91039 bellard
    uint8_t config[256];
592 69b91039 bellard
593 69b91039 bellard
    /* the following fields are read only */
594 46e50e9d bellard
    PCIBus *bus;
595 69b91039 bellard
    int devfn;
596 69b91039 bellard
    char name[64];
597 8a8696a3 bellard
    PCIIORegion io_regions[PCI_NUM_REGIONS];
598 69b91039 bellard
    
599 69b91039 bellard
    /* do not access the following fields */
600 69b91039 bellard
    PCIConfigReadFunc *config_read;
601 69b91039 bellard
    PCIConfigWriteFunc *config_write;
602 5768f5ac bellard
    int irq_index;
603 69b91039 bellard
};
604 69b91039 bellard
605 46e50e9d bellard
PCIDevice *pci_register_device(PCIBus *bus, const char *name,
606 46e50e9d bellard
                               int instance_size, int devfn,
607 69b91039 bellard
                               PCIConfigReadFunc *config_read, 
608 69b91039 bellard
                               PCIConfigWriteFunc *config_write);
609 69b91039 bellard
610 69b91039 bellard
void pci_register_io_region(PCIDevice *pci_dev, int region_num, 
611 69b91039 bellard
                            uint32_t size, int type, 
612 69b91039 bellard
                            PCIMapIORegionFunc *map_func);
613 69b91039 bellard
614 5768f5ac bellard
void pci_set_irq(PCIDevice *pci_dev, int irq_num, int level);
615 5768f5ac bellard
616 5768f5ac bellard
uint32_t pci_default_read_config(PCIDevice *d, 
617 5768f5ac bellard
                                 uint32_t address, int len);
618 5768f5ac bellard
void pci_default_write_config(PCIDevice *d, 
619 5768f5ac bellard
                              uint32_t address, uint32_t val, int len);
620 30ca2aab bellard
void generic_pci_save(QEMUFile* f, void *opaque);
621 30ca2aab bellard
int generic_pci_load(QEMUFile* f, void *opaque, int version_id);
622 5768f5ac bellard
623 9995c51f bellard
extern struct PIIX3State *piix3_state;
624 9995c51f bellard
625 46e50e9d bellard
PCIBus *i440fx_init(void);
626 46e50e9d bellard
void piix3_init(PCIBus *bus);
627 69b91039 bellard
void pci_bios_init(void);
628 5768f5ac bellard
void pci_info(void);
629 26aa7d72 bellard
630 77d4bc34 bellard
/* temporary: will be moved in platform specific file */
631 54fa5af5 bellard
void pci_set_pic(PCIBus *bus, SetIRQFunc *set_irq, void *irq_opaque);
632 46e50e9d bellard
PCIBus *pci_prep_init(void);
633 54fa5af5 bellard
PCIBus *pci_grackle_init(uint32_t base);
634 46e50e9d bellard
PCIBus *pci_pmac_init(void);
635 83469015 bellard
PCIBus *pci_apb_init(target_ulong special_base, target_ulong mem_base);
636 77d4bc34 bellard
637 a41b2ff2 pbrook
void pci_nic_init(PCIBus *bus, NICInfo *nd);
638 a41b2ff2 pbrook
639 28b9b5af bellard
/* openpic.c */
640 28b9b5af bellard
typedef struct openpic_t openpic_t;
641 54fa5af5 bellard
void openpic_set_irq(void *opaque, int n_IRQ, int level);
642 7668a27f bellard
openpic_t *openpic_init (PCIBus *bus, int *pmem_index, int nb_cpus,
643 7668a27f bellard
                         CPUState **envp);
644 28b9b5af bellard
645 54fa5af5 bellard
/* heathrow_pic.c */
646 54fa5af5 bellard
typedef struct HeathrowPICS HeathrowPICS;
647 54fa5af5 bellard
void heathrow_pic_set_irq(void *opaque, int num, int level);
648 54fa5af5 bellard
HeathrowPICS *heathrow_pic_init(int *pmem_index);
649 54fa5af5 bellard
650 6a36d84e bellard
#ifdef HAS_AUDIO
651 6a36d84e bellard
struct soundhw {
652 6a36d84e bellard
    const char *name;
653 6a36d84e bellard
    const char *descr;
654 6a36d84e bellard
    int enabled;
655 6a36d84e bellard
    int isa;
656 6a36d84e bellard
    union {
657 6a36d84e bellard
        int (*init_isa) (AudioState *s);
658 6a36d84e bellard
        int (*init_pci) (PCIBus *bus, AudioState *s);
659 6a36d84e bellard
    } init;
660 6a36d84e bellard
};
661 6a36d84e bellard
662 6a36d84e bellard
extern struct soundhw soundhw[];
663 6a36d84e bellard
#endif
664 6a36d84e bellard
665 313aa567 bellard
/* vga.c */
666 313aa567 bellard
667 4fa0f5d2 bellard
#define VGA_RAM_SIZE (4096 * 1024)
668 313aa567 bellard
669 82c643ff bellard
struct DisplayState {
670 313aa567 bellard
    uint8_t *data;
671 313aa567 bellard
    int linesize;
672 313aa567 bellard
    int depth;
673 82c643ff bellard
    int width;
674 82c643ff bellard
    int height;
675 313aa567 bellard
    void (*dpy_update)(struct DisplayState *s, int x, int y, int w, int h);
676 313aa567 bellard
    void (*dpy_resize)(struct DisplayState *s, int w, int h);
677 313aa567 bellard
    void (*dpy_refresh)(struct DisplayState *s);
678 82c643ff bellard
};
679 313aa567 bellard
680 313aa567 bellard
static inline void dpy_update(DisplayState *s, int x, int y, int w, int h)
681 313aa567 bellard
{
682 313aa567 bellard
    s->dpy_update(s, x, y, w, h);
683 313aa567 bellard
}
684 313aa567 bellard
685 313aa567 bellard
static inline void dpy_resize(DisplayState *s, int w, int h)
686 313aa567 bellard
{
687 313aa567 bellard
    s->dpy_resize(s, w, h);
688 313aa567 bellard
}
689 313aa567 bellard
690 46e50e9d bellard
int vga_initialize(PCIBus *bus, DisplayState *ds, uint8_t *vga_ram_base, 
691 d5295253 bellard
                   unsigned long vga_ram_offset, int vga_ram_size,
692 d5295253 bellard
                   unsigned long vga_bios_offset, int vga_bios_size);
693 313aa567 bellard
694 d6bfa22f bellard
/* cirrus_vga.c */
695 46e50e9d bellard
void pci_cirrus_vga_init(PCIBus *bus, DisplayState *ds, uint8_t *vga_ram_base, 
696 d6bfa22f bellard
                         unsigned long vga_ram_offset, int vga_ram_size);
697 d6bfa22f bellard
void isa_cirrus_vga_init(DisplayState *ds, uint8_t *vga_ram_base, 
698 d6bfa22f bellard
                         unsigned long vga_ram_offset, int vga_ram_size);
699 d6bfa22f bellard
700 313aa567 bellard
/* sdl.c */
701 d63d307f bellard
void sdl_display_init(DisplayState *ds, int full_screen);
702 313aa567 bellard
703 da4dbf74 bellard
/* cocoa.m */
704 da4dbf74 bellard
void cocoa_display_init(DisplayState *ds, int full_screen);
705 da4dbf74 bellard
706 5391d806 bellard
/* ide.c */
707 5391d806 bellard
#define MAX_DISKS 4
708 5391d806 bellard
709 5391d806 bellard
extern BlockDriverState *bs_table[MAX_DISKS];
710 5391d806 bellard
711 69b91039 bellard
void isa_ide_init(int iobase, int iobase2, int irq,
712 69b91039 bellard
                  BlockDriverState *hd0, BlockDriverState *hd1);
713 54fa5af5 bellard
void pci_cmd646_ide_init(PCIBus *bus, BlockDriverState **hd_table,
714 54fa5af5 bellard
                         int secondary_ide_enabled);
715 46e50e9d bellard
void pci_piix3_ide_init(PCIBus *bus, BlockDriverState **hd_table);
716 28b9b5af bellard
int pmac_ide_init (BlockDriverState **hd_table,
717 54fa5af5 bellard
                   SetIRQFunc *set_irq, void *irq_opaque, int irq);
718 5391d806 bellard
719 1d14ffa9 bellard
/* es1370.c */
720 c0fe3827 bellard
int es1370_init (PCIBus *bus, AudioState *s);
721 1d14ffa9 bellard
722 fb065187 bellard
/* sb16.c */
723 c0fe3827 bellard
int SB16_init (AudioState *s);
724 fb065187 bellard
725 fb065187 bellard
/* adlib.c */
726 c0fe3827 bellard
int Adlib_init (AudioState *s);
727 fb065187 bellard
728 fb065187 bellard
/* gus.c */
729 c0fe3827 bellard
int GUS_init (AudioState *s);
730 27503323 bellard
731 27503323 bellard
/* dma.c */
732 85571bc7 bellard
typedef int (*DMA_transfer_handler) (void *opaque, int nchan, int pos, int size);
733 27503323 bellard
int DMA_get_channel_mode (int nchan);
734 85571bc7 bellard
int DMA_read_memory (int nchan, void *buf, int pos, int size);
735 85571bc7 bellard
int DMA_write_memory (int nchan, void *buf, int pos, int size);
736 27503323 bellard
void DMA_hold_DREQ (int nchan);
737 27503323 bellard
void DMA_release_DREQ (int nchan);
738 16f62432 bellard
void DMA_schedule(int nchan);
739 27503323 bellard
void DMA_run (void);
740 28b9b5af bellard
void DMA_init (int high_page_enable);
741 27503323 bellard
void DMA_register_channel (int nchan,
742 85571bc7 bellard
                           DMA_transfer_handler transfer_handler,
743 85571bc7 bellard
                           void *opaque);
744 7138fcfb bellard
/* fdc.c */
745 7138fcfb bellard
#define MAX_FD 2
746 7138fcfb bellard
extern BlockDriverState *fd_table[MAX_FD];
747 7138fcfb bellard
748 baca51fa bellard
typedef struct fdctrl_t fdctrl_t;
749 baca51fa bellard
750 baca51fa bellard
fdctrl_t *fdctrl_init (int irq_lvl, int dma_chann, int mem_mapped, 
751 baca51fa bellard
                       uint32_t io_base,
752 baca51fa bellard
                       BlockDriverState **fds);
753 baca51fa bellard
int fdctrl_get_drive_type(fdctrl_t *fdctrl, int drive_num);
754 7138fcfb bellard
755 80cabfad bellard
/* ne2000.c */
756 80cabfad bellard
757 7c9d8e07 bellard
void isa_ne2000_init(int base, int irq, NICInfo *nd);
758 7c9d8e07 bellard
void pci_ne2000_init(PCIBus *bus, NICInfo *nd);
759 80cabfad bellard
760 a41b2ff2 pbrook
/* rtl8139.c */
761 a41b2ff2 pbrook
762 a41b2ff2 pbrook
void pci_rtl8139_init(PCIBus *bus, NICInfo *nd);
763 a41b2ff2 pbrook
764 80cabfad bellard
/* pckbd.c */
765 80cabfad bellard
766 80cabfad bellard
void kbd_init(void);
767 80cabfad bellard
768 80cabfad bellard
/* mc146818rtc.c */
769 80cabfad bellard
770 8a7ddc38 bellard
typedef struct RTCState RTCState;
771 80cabfad bellard
772 8a7ddc38 bellard
RTCState *rtc_init(int base, int irq);
773 8a7ddc38 bellard
void rtc_set_memory(RTCState *s, int addr, int val);
774 8a7ddc38 bellard
void rtc_set_date(RTCState *s, const struct tm *tm);
775 80cabfad bellard
776 80cabfad bellard
/* serial.c */
777 80cabfad bellard
778 c4b1fcc0 bellard
typedef struct SerialState SerialState;
779 e5d13e2f bellard
SerialState *serial_init(SetIRQFunc *set_irq, void *opaque,
780 e5d13e2f bellard
                         int base, int irq, CharDriverState *chr);
781 e5d13e2f bellard
SerialState *serial_mm_init (SetIRQFunc *set_irq, void *opaque,
782 e5d13e2f bellard
                             target_ulong base, int it_shift,
783 e5d13e2f bellard
                             int irq, CharDriverState *chr);
784 80cabfad bellard
785 6508fe59 bellard
/* parallel.c */
786 6508fe59 bellard
787 6508fe59 bellard
typedef struct ParallelState ParallelState;
788 6508fe59 bellard
ParallelState *parallel_init(int base, int irq, CharDriverState *chr);
789 6508fe59 bellard
790 80cabfad bellard
/* i8259.c */
791 80cabfad bellard
792 3de388f6 bellard
typedef struct PicState2 PicState2;
793 3de388f6 bellard
extern PicState2 *isa_pic;
794 80cabfad bellard
void pic_set_irq(int irq, int level);
795 54fa5af5 bellard
void pic_set_irq_new(void *opaque, int irq, int level);
796 3de388f6 bellard
PicState2 *pic_init(IRQRequestFunc *irq_request, void *irq_request_opaque);
797 d592d303 bellard
void pic_set_alt_irq_func(PicState2 *s, SetIRQFunc *alt_irq_func,
798 d592d303 bellard
                          void *alt_irq_opaque);
799 3de388f6 bellard
int pic_read_irq(PicState2 *s);
800 3de388f6 bellard
void pic_update_irq(PicState2 *s);
801 3de388f6 bellard
uint32_t pic_intack_read(PicState2 *s);
802 c20709aa bellard
void pic_info(void);
803 4a0fb71e bellard
void irq_info(void);
804 80cabfad bellard
805 c27004ec bellard
/* APIC */
806 d592d303 bellard
typedef struct IOAPICState IOAPICState;
807 d592d303 bellard
808 c27004ec bellard
int apic_init(CPUState *env);
809 c27004ec bellard
int apic_get_interrupt(CPUState *env);
810 d592d303 bellard
IOAPICState *ioapic_init(void);
811 d592d303 bellard
void ioapic_set_irq(void *opaque, int vector, int level);
812 c27004ec bellard
813 80cabfad bellard
/* i8254.c */
814 80cabfad bellard
815 80cabfad bellard
#define PIT_FREQ 1193182
816 80cabfad bellard
817 ec844b96 bellard
typedef struct PITState PITState;
818 ec844b96 bellard
819 ec844b96 bellard
PITState *pit_init(int base, int irq);
820 ec844b96 bellard
void pit_set_gate(PITState *pit, int channel, int val);
821 ec844b96 bellard
int pit_get_gate(PITState *pit, int channel);
822 ec844b96 bellard
int pit_get_out(PITState *pit, int channel, int64_t current_time);
823 80cabfad bellard
824 80cabfad bellard
/* pc.c */
825 54fa5af5 bellard
extern QEMUMachine pc_machine;
826 3dbbdc25 bellard
extern QEMUMachine isapc_machine;
827 80cabfad bellard
828 6a00d601 bellard
void ioport_set_a20(int enable);
829 6a00d601 bellard
int ioport_get_a20(void);
830 6a00d601 bellard
831 26aa7d72 bellard
/* ppc.c */
832 54fa5af5 bellard
extern QEMUMachine prep_machine;
833 54fa5af5 bellard
extern QEMUMachine core99_machine;
834 54fa5af5 bellard
extern QEMUMachine heathrow_machine;
835 54fa5af5 bellard
836 6af0bf9c bellard
/* mips_r4k.c */
837 6af0bf9c bellard
extern QEMUMachine mips_machine;
838 6af0bf9c bellard
839 8cc43fef bellard
#ifdef TARGET_PPC
840 8cc43fef bellard
ppc_tb_t *cpu_ppc_tb_init (CPUState *env, uint32_t freq);
841 8cc43fef bellard
#endif
842 64201201 bellard
void PREP_debug_write (void *opaque, uint32_t addr, uint32_t val);
843 77d4bc34 bellard
844 77d4bc34 bellard
extern CPUWriteMemoryFunc *PPC_io_write[];
845 77d4bc34 bellard
extern CPUReadMemoryFunc *PPC_io_read[];
846 54fa5af5 bellard
void PPC_debug_write (void *opaque, uint32_t addr, uint32_t val);
847 26aa7d72 bellard
848 e95c8d51 bellard
/* sun4m.c */
849 54fa5af5 bellard
extern QEMUMachine sun4m_machine;
850 e80cfcfc bellard
uint32_t iommu_translate(uint32_t addr);
851 ba3c64fb bellard
void pic_set_irq_cpu(int irq, int level, unsigned int cpu);
852 e95c8d51 bellard
853 e95c8d51 bellard
/* iommu.c */
854 e80cfcfc bellard
void *iommu_init(uint32_t addr);
855 e80cfcfc bellard
uint32_t iommu_translate_local(void *opaque, uint32_t addr);
856 e95c8d51 bellard
857 e95c8d51 bellard
/* lance.c */
858 7c9d8e07 bellard
void lance_init(NICInfo *nd, int irq, uint32_t leaddr, uint32_t ledaddr);
859 e95c8d51 bellard
860 e95c8d51 bellard
/* tcx.c */
861 95219897 pbrook
void tcx_init(DisplayState *ds, uint32_t addr, uint8_t *vram_base,
862 6f7e9aec bellard
               unsigned long vram_offset, int vram_size, int width, int height);
863 e80cfcfc bellard
864 e80cfcfc bellard
/* slavio_intctl.c */
865 e80cfcfc bellard
void *slavio_intctl_init();
866 ba3c64fb bellard
void slavio_intctl_set_cpu(void *opaque, unsigned int cpu, CPUState *env);
867 e80cfcfc bellard
void slavio_pic_info(void *opaque);
868 e80cfcfc bellard
void slavio_irq_info(void *opaque);
869 e80cfcfc bellard
void slavio_pic_set_irq(void *opaque, int irq, int level);
870 ba3c64fb bellard
void slavio_pic_set_irq_cpu(void *opaque, int irq, int level, unsigned int cpu);
871 e95c8d51 bellard
872 5fe141fd bellard
/* loader.c */
873 5fe141fd bellard
int get_image_size(const char *filename);
874 5fe141fd bellard
int load_image(const char *filename, uint8_t *addr);
875 5fe141fd bellard
int load_elf(const char *filename, int64_t virt_to_phys_addend);
876 e80cfcfc bellard
int load_aout(const char *filename, uint8_t *addr);
877 e80cfcfc bellard
878 e80cfcfc bellard
/* slavio_timer.c */
879 ba3c64fb bellard
void slavio_timer_init(uint32_t addr, int irq, int mode, unsigned int cpu);
880 8d5f07fa bellard
881 e80cfcfc bellard
/* slavio_serial.c */
882 e80cfcfc bellard
SerialState *slavio_serial_init(int base, int irq, CharDriverState *chr1, CharDriverState *chr2);
883 e80cfcfc bellard
void slavio_serial_ms_kbd_init(int base, int irq);
884 e95c8d51 bellard
885 3475187d bellard
/* slavio_misc.c */
886 3475187d bellard
void *slavio_misc_init(uint32_t base, int irq);
887 3475187d bellard
void slavio_set_power_fail(void *opaque, int power_failing);
888 3475187d bellard
889 6f7e9aec bellard
/* esp.c */
890 6f7e9aec bellard
void esp_init(BlockDriverState **bd, int irq, uint32_t espaddr, uint32_t espdaddr);
891 6f7e9aec bellard
892 3475187d bellard
/* sun4u.c */
893 3475187d bellard
extern QEMUMachine sun4u_machine;
894 3475187d bellard
895 64201201 bellard
/* NVRAM helpers */
896 64201201 bellard
#include "hw/m48t59.h"
897 64201201 bellard
898 64201201 bellard
void NVRAM_set_byte (m48t59_t *nvram, uint32_t addr, uint8_t value);
899 64201201 bellard
uint8_t NVRAM_get_byte (m48t59_t *nvram, uint32_t addr);
900 64201201 bellard
void NVRAM_set_word (m48t59_t *nvram, uint32_t addr, uint16_t value);
901 64201201 bellard
uint16_t NVRAM_get_word (m48t59_t *nvram, uint32_t addr);
902 64201201 bellard
void NVRAM_set_lword (m48t59_t *nvram, uint32_t addr, uint32_t value);
903 64201201 bellard
uint32_t NVRAM_get_lword (m48t59_t *nvram, uint32_t addr);
904 64201201 bellard
void NVRAM_set_string (m48t59_t *nvram, uint32_t addr,
905 64201201 bellard
                       const unsigned char *str, uint32_t max);
906 64201201 bellard
int NVRAM_get_string (m48t59_t *nvram, uint8_t *dst, uint16_t addr, int max);
907 64201201 bellard
void NVRAM_set_crc (m48t59_t *nvram, uint32_t addr,
908 64201201 bellard
                    uint32_t start, uint32_t count);
909 64201201 bellard
int PPC_NVRAM_set_params (m48t59_t *nvram, uint16_t NVRAM_size,
910 64201201 bellard
                          const unsigned char *arch,
911 64201201 bellard
                          uint32_t RAM_size, int boot_device,
912 64201201 bellard
                          uint32_t kernel_image, uint32_t kernel_size,
913 28b9b5af bellard
                          const char *cmdline,
914 64201201 bellard
                          uint32_t initrd_image, uint32_t initrd_size,
915 28b9b5af bellard
                          uint32_t NVRAM_image,
916 28b9b5af bellard
                          int width, int height, int depth);
917 64201201 bellard
918 63066f4f bellard
/* adb.c */
919 63066f4f bellard
920 63066f4f bellard
#define MAX_ADB_DEVICES 16
921 63066f4f bellard
922 e2733d20 bellard
#define ADB_MAX_OUT_LEN 16
923 63066f4f bellard
924 e2733d20 bellard
typedef struct ADBDevice ADBDevice;
925 63066f4f bellard
926 e2733d20 bellard
/* buf = NULL means polling */
927 e2733d20 bellard
typedef int ADBDeviceRequest(ADBDevice *d, uint8_t *buf_out,
928 e2733d20 bellard
                              const uint8_t *buf, int len);
929 12c28fed bellard
typedef int ADBDeviceReset(ADBDevice *d);
930 12c28fed bellard
931 63066f4f bellard
struct ADBDevice {
932 63066f4f bellard
    struct ADBBusState *bus;
933 63066f4f bellard
    int devaddr;
934 63066f4f bellard
    int handler;
935 e2733d20 bellard
    ADBDeviceRequest *devreq;
936 12c28fed bellard
    ADBDeviceReset *devreset;
937 63066f4f bellard
    void *opaque;
938 63066f4f bellard
};
939 63066f4f bellard
940 63066f4f bellard
typedef struct ADBBusState {
941 63066f4f bellard
    ADBDevice devices[MAX_ADB_DEVICES];
942 63066f4f bellard
    int nb_devices;
943 e2733d20 bellard
    int poll_index;
944 63066f4f bellard
} ADBBusState;
945 63066f4f bellard
946 e2733d20 bellard
int adb_request(ADBBusState *s, uint8_t *buf_out,
947 e2733d20 bellard
                const uint8_t *buf, int len);
948 e2733d20 bellard
int adb_poll(ADBBusState *s, uint8_t *buf_out);
949 63066f4f bellard
950 63066f4f bellard
ADBDevice *adb_register_device(ADBBusState *s, int devaddr, 
951 e2733d20 bellard
                               ADBDeviceRequest *devreq, 
952 12c28fed bellard
                               ADBDeviceReset *devreset, 
953 63066f4f bellard
                               void *opaque);
954 63066f4f bellard
void adb_kbd_init(ADBBusState *bus);
955 63066f4f bellard
void adb_mouse_init(ADBBusState *bus);
956 63066f4f bellard
957 63066f4f bellard
/* cuda.c */
958 63066f4f bellard
959 63066f4f bellard
extern ADBBusState adb_bus;
960 54fa5af5 bellard
int cuda_init(SetIRQFunc *set_irq, void *irq_opaque, int irq);
961 63066f4f bellard
962 bb36d470 bellard
#include "hw/usb.h"
963 bb36d470 bellard
964 a594cfbf bellard
/* usb ports of the VM */
965 a594cfbf bellard
966 a594cfbf bellard
#define MAX_VM_USB_PORTS 8
967 a594cfbf bellard
968 a594cfbf bellard
extern USBPort *vm_usb_ports[MAX_VM_USB_PORTS];
969 a594cfbf bellard
extern USBDevice *vm_usb_hub;
970 a594cfbf bellard
971 a594cfbf bellard
void do_usb_add(const char *devname);
972 a594cfbf bellard
void do_usb_del(const char *devname);
973 a594cfbf bellard
void usb_info(void);
974 a594cfbf bellard
975 b5ff1b31 bellard
/* integratorcp.c */
976 40f137e1 pbrook
extern QEMUMachine integratorcp926_machine;
977 40f137e1 pbrook
extern QEMUMachine integratorcp1026_machine;
978 b5ff1b31 bellard
979 cdbdb648 pbrook
/* versatilepb.c */
980 cdbdb648 pbrook
extern QEMUMachine versatilepb_machine;
981 cdbdb648 pbrook
982 daa57963 bellard
/* ps2.c */
983 daa57963 bellard
void *ps2_kbd_init(void (*update_irq)(void *, int), void *update_arg);
984 daa57963 bellard
void *ps2_mouse_init(void (*update_irq)(void *, int), void *update_arg);
985 daa57963 bellard
void ps2_write_mouse(void *, int val);
986 daa57963 bellard
void ps2_write_keyboard(void *, int val);
987 daa57963 bellard
uint32_t ps2_read_data(void *);
988 daa57963 bellard
void ps2_queue(void *, int b);
989 f94f5d71 pbrook
void ps2_keyboard_set_translation(void *opaque, int mode);
990 daa57963 bellard
991 80337b66 bellard
/* smc91c111.c */
992 80337b66 bellard
void smc91c111_init(NICInfo *, uint32_t, void *, int);
993 80337b66 bellard
994 bdd5003a pbrook
/* pl110.c */
995 95219897 pbrook
void *pl110_init(DisplayState *ds, uint32_t base, void *pic, int irq, int);
996 bdd5003a pbrook
997 cdbdb648 pbrook
/* pl011.c */
998 cdbdb648 pbrook
void pl011_init(uint32_t base, void *pic, int irq, CharDriverState *chr);
999 cdbdb648 pbrook
1000 cdbdb648 pbrook
/* pl050.c */
1001 cdbdb648 pbrook
void pl050_init(uint32_t base, void *pic, int irq, int is_mouse);
1002 cdbdb648 pbrook
1003 cdbdb648 pbrook
/* pl080.c */
1004 cdbdb648 pbrook
void *pl080_init(uint32_t base, void *pic, int irq);
1005 cdbdb648 pbrook
1006 cdbdb648 pbrook
/* pl190.c */
1007 cdbdb648 pbrook
void *pl190_init(uint32_t base, void *parent, int irq, int fiq);
1008 cdbdb648 pbrook
1009 cdbdb648 pbrook
/* arm-timer.c */
1010 cdbdb648 pbrook
void sp804_init(uint32_t base, void *pic, int irq);
1011 cdbdb648 pbrook
void icp_pit_init(uint32_t base, void *pic, int irq);
1012 cdbdb648 pbrook
1013 ea2384d3 bellard
#endif /* defined(QEMU_TOOL) */
1014 ea2384d3 bellard
1015 c4b1fcc0 bellard
/* monitor.c */
1016 82c643ff bellard
void monitor_init(CharDriverState *hd, int show_banner);
1017 ea2384d3 bellard
void term_puts(const char *str);
1018 ea2384d3 bellard
void term_vprintf(const char *fmt, va_list ap);
1019 40c3bac3 bellard
void term_printf(const char *fmt, ...) __attribute__ ((__format__ (__printf__, 1, 2)));
1020 c4b1fcc0 bellard
void term_flush(void);
1021 c4b1fcc0 bellard
void term_print_help(void);
1022 ea2384d3 bellard
void monitor_readline(const char *prompt, int is_password,
1023 ea2384d3 bellard
                      char *buf, int buf_size);
1024 ea2384d3 bellard
1025 ea2384d3 bellard
/* readline.c */
1026 ea2384d3 bellard
typedef void ReadLineFunc(void *opaque, const char *str);
1027 ea2384d3 bellard
1028 ea2384d3 bellard
extern int completion_index;
1029 ea2384d3 bellard
void add_completion(const char *str);
1030 ea2384d3 bellard
void readline_handle_byte(int ch);
1031 ea2384d3 bellard
void readline_find_completion(const char *cmdline);
1032 ea2384d3 bellard
const char *readline_get_history(unsigned int index);
1033 ea2384d3 bellard
void readline_start(const char *prompt, int is_password,
1034 ea2384d3 bellard
                    ReadLineFunc *readline_func, void *opaque);
1035 c4b1fcc0 bellard
1036 5e6ad6f9 bellard
void kqemu_record_dump(void);
1037 5e6ad6f9 bellard
1038 fc01f7e7 bellard
#endif /* VL_H */