Statistics
| Branch: | Revision:

root / vl.h @ 7d3505c5

History | View | Annotate | Download (13.6 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 8a7ddc38 bellard
#include <time.h>
34 67b915a5 bellard
#include <ctype.h>
35 67b915a5 bellard
#include <errno.h>
36 67b915a5 bellard
#include <unistd.h>
37 67b915a5 bellard
#include <fcntl.h>
38 7d3505c5 bellard
#include <sys/stat.h>
39 67b915a5 bellard
40 67b915a5 bellard
#ifndef O_LARGEFILE
41 67b915a5 bellard
#define O_LARGEFILE 0
42 67b915a5 bellard
#endif
43 40c3bac3 bellard
#ifndef O_BINARY
44 40c3bac3 bellard
#define O_BINARY 0
45 40c3bac3 bellard
#endif
46 67b915a5 bellard
47 67b915a5 bellard
#ifdef _WIN32
48 bfbc9133 bellard
#define lseek64 _lseeki64
49 67b915a5 bellard
#endif
50 8a7ddc38 bellard
51 16f62432 bellard
#include "cpu.h"
52 16f62432 bellard
53 7d3505c5 bellard
#ifdef _BSD
54 7d3505c5 bellard
#define lseek64 lseek
55 7d3505c5 bellard
#define ftruncate64 ftruncate
56 7d3505c5 bellard
#define mkstemp64 mkstemp
57 7d3505c5 bellard
#define MAP_ANONYMOUS MAP_ANON
58 7d3505c5 bellard
#endif
59 7d3505c5 bellard
60 67b915a5 bellard
#ifndef glue
61 67b915a5 bellard
#define xglue(x, y) x ## y
62 67b915a5 bellard
#define glue(x, y) xglue(x, y)
63 67b915a5 bellard
#define stringify(s)        tostring(s)
64 67b915a5 bellard
#define tostring(s)        #s
65 67b915a5 bellard
#endif
66 67b915a5 bellard
67 67b915a5 bellard
#if defined(WORDS_BIGENDIAN)
68 67b915a5 bellard
static inline uint32_t be32_to_cpu(uint32_t v)
69 67b915a5 bellard
{
70 67b915a5 bellard
    return v;
71 67b915a5 bellard
}
72 67b915a5 bellard
73 67b915a5 bellard
static inline uint16_t be16_to_cpu(uint16_t v)
74 67b915a5 bellard
{
75 67b915a5 bellard
    return v;
76 67b915a5 bellard
}
77 67b915a5 bellard
78 165c6fc8 bellard
static inline uint32_t cpu_to_be32(uint32_t v)
79 165c6fc8 bellard
{
80 165c6fc8 bellard
    return v;
81 165c6fc8 bellard
}
82 165c6fc8 bellard
83 165c6fc8 bellard
static inline uint16_t cpu_to_be16(uint16_t v)
84 165c6fc8 bellard
{
85 165c6fc8 bellard
    return v;
86 165c6fc8 bellard
}
87 165c6fc8 bellard
88 67b915a5 bellard
static inline uint32_t le32_to_cpu(uint32_t v)
89 67b915a5 bellard
{
90 67b915a5 bellard
    return bswap32(v);
91 67b915a5 bellard
}
92 67b915a5 bellard
93 67b915a5 bellard
static inline uint16_t le16_to_cpu(uint16_t v)
94 67b915a5 bellard
{
95 67b915a5 bellard
    return bswap16(v);
96 67b915a5 bellard
}
97 67b915a5 bellard
98 165c6fc8 bellard
static inline uint32_t cpu_to_le32(uint32_t v)
99 165c6fc8 bellard
{
100 165c6fc8 bellard
    return bswap32(v);
101 165c6fc8 bellard
}
102 165c6fc8 bellard
103 165c6fc8 bellard
static inline uint16_t cpu_to_le16(uint16_t v)
104 165c6fc8 bellard
{
105 165c6fc8 bellard
    return bswap16(v);
106 165c6fc8 bellard
}
107 165c6fc8 bellard
108 67b915a5 bellard
#else
109 165c6fc8 bellard
110 67b915a5 bellard
static inline uint32_t be32_to_cpu(uint32_t v)
111 67b915a5 bellard
{
112 67b915a5 bellard
    return bswap32(v);
113 67b915a5 bellard
}
114 67b915a5 bellard
115 67b915a5 bellard
static inline uint16_t be16_to_cpu(uint16_t v)
116 67b915a5 bellard
{
117 67b915a5 bellard
    return bswap16(v);
118 67b915a5 bellard
}
119 67b915a5 bellard
120 165c6fc8 bellard
static inline uint32_t cpu_to_be32(uint32_t v)
121 165c6fc8 bellard
{
122 165c6fc8 bellard
    return bswap32(v);
123 165c6fc8 bellard
}
124 165c6fc8 bellard
125 165c6fc8 bellard
static inline uint16_t cpu_to_be16(uint16_t v)
126 165c6fc8 bellard
{
127 165c6fc8 bellard
    return bswap16(v);
128 165c6fc8 bellard
}
129 165c6fc8 bellard
130 67b915a5 bellard
static inline uint32_t le32_to_cpu(uint32_t v)
131 67b915a5 bellard
{
132 67b915a5 bellard
    return v;
133 67b915a5 bellard
}
134 67b915a5 bellard
135 67b915a5 bellard
static inline uint16_t le16_to_cpu(uint16_t v)
136 67b915a5 bellard
{
137 67b915a5 bellard
    return v;
138 67b915a5 bellard
}
139 165c6fc8 bellard
140 165c6fc8 bellard
static inline uint32_t cpu_to_le32(uint32_t v)
141 165c6fc8 bellard
{
142 165c6fc8 bellard
    return v;
143 165c6fc8 bellard
}
144 165c6fc8 bellard
145 165c6fc8 bellard
static inline uint16_t cpu_to_le16(uint16_t v)
146 165c6fc8 bellard
{
147 165c6fc8 bellard
    return v;
148 165c6fc8 bellard
}
149 67b915a5 bellard
#endif
150 67b915a5 bellard
151 67b915a5 bellard
152 33e3963e bellard
/* vl.c */
153 313aa567 bellard
extern int reset_requested;
154 313aa567 bellard
155 80cabfad bellard
uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c);
156 313aa567 bellard
157 80cabfad bellard
void hw_error(const char *fmt, ...);
158 80cabfad bellard
159 80cabfad bellard
int load_image(const char *filename, uint8_t *addr);
160 80cabfad bellard
extern const char *bios_dir;
161 80cabfad bellard
162 80cabfad bellard
void pstrcpy(char *buf, int buf_size, const char *str);
163 80cabfad bellard
char *pstrcat(char *buf, int buf_size, const char *s);
164 33e3963e bellard
165 c4b1fcc0 bellard
int serial_open_device(void);
166 c4b1fcc0 bellard
167 8a7ddc38 bellard
extern int vm_running;
168 8a7ddc38 bellard
169 8a7ddc38 bellard
typedef void VMStopHandler(void *opaque, int reason);
170 8a7ddc38 bellard
171 8a7ddc38 bellard
int qemu_add_vm_stop_handler(VMStopHandler *cb, void *opaque);
172 8a7ddc38 bellard
void qemu_del_vm_stop_handler(VMStopHandler *cb, void *opaque);
173 8a7ddc38 bellard
174 8a7ddc38 bellard
void vm_start(void);
175 8a7ddc38 bellard
void vm_stop(int reason);
176 8a7ddc38 bellard
177 aaaa7df6 bellard
extern int audio_enabled;
178 aaaa7df6 bellard
179 c20709aa bellard
/* async I/O support */
180 c20709aa bellard
181 c20709aa bellard
typedef void IOReadHandler(void *opaque, const uint8_t *buf, int size);
182 c20709aa bellard
typedef int IOCanRWHandler(void *opaque);
183 c20709aa bellard
184 c20709aa bellard
int qemu_add_fd_read_handler(int fd, IOCanRWHandler *fd_can_read, 
185 c20709aa bellard
                             IOReadHandler *fd_read, void *opaque);
186 c20709aa bellard
void qemu_del_fd_read_handler(int fd);
187 c20709aa bellard
188 c4b1fcc0 bellard
/* network redirectors support */
189 c4b1fcc0 bellard
190 c4b1fcc0 bellard
#define MAX_NICS 8
191 c4b1fcc0 bellard
192 c4b1fcc0 bellard
typedef struct NetDriverState {
193 c20709aa bellard
    int index; /* index number in QEMU */
194 c4b1fcc0 bellard
    uint8_t macaddr[6];
195 c4b1fcc0 bellard
    char ifname[16];
196 c20709aa bellard
    void (*send_packet)(struct NetDriverState *nd, 
197 c20709aa bellard
                        const uint8_t *buf, int size);
198 c20709aa bellard
    void (*add_read_packet)(struct NetDriverState *nd, 
199 c20709aa bellard
                            IOCanRWHandler *fd_can_read, 
200 c20709aa bellard
                            IOReadHandler *fd_read, void *opaque);
201 c20709aa bellard
    /* tun specific data */
202 c20709aa bellard
    int fd;
203 c20709aa bellard
    /* slirp specific data */
204 c4b1fcc0 bellard
} NetDriverState;
205 c4b1fcc0 bellard
206 c4b1fcc0 bellard
extern int nb_nics;
207 c4b1fcc0 bellard
extern NetDriverState nd_table[MAX_NICS];
208 c4b1fcc0 bellard
209 c20709aa bellard
void qemu_send_packet(NetDriverState *nd, const uint8_t *buf, int size);
210 c20709aa bellard
void qemu_add_read_packet(NetDriverState *nd, IOCanRWHandler *fd_can_read, 
211 c20709aa bellard
                          IOReadHandler *fd_read, void *opaque);
212 8a7ddc38 bellard
213 8a7ddc38 bellard
/* timers */
214 8a7ddc38 bellard
215 8a7ddc38 bellard
typedef struct QEMUClock QEMUClock;
216 8a7ddc38 bellard
typedef struct QEMUTimer QEMUTimer;
217 8a7ddc38 bellard
typedef void QEMUTimerCB(void *opaque);
218 8a7ddc38 bellard
219 8a7ddc38 bellard
/* The real time clock should be used only for stuff which does not
220 8a7ddc38 bellard
   change the virtual machine state, as it is run even if the virtual
221 8a7ddc38 bellard
   machine is stopped. The real time clock has a frequency or 1000
222 8a7ddc38 bellard
   Hz. */
223 8a7ddc38 bellard
extern QEMUClock *rt_clock;
224 8a7ddc38 bellard
225 8a7ddc38 bellard
/* Rge virtual clock is only run during the emulation. It is stopped
226 8a7ddc38 bellard
   when the virtual machine is stopped. Virtual timers use a high
227 8a7ddc38 bellard
   precision clock, usually cpu cycles (use ticks_per_sec). */
228 8a7ddc38 bellard
extern QEMUClock *vm_clock;
229 8a7ddc38 bellard
230 8a7ddc38 bellard
int64_t qemu_get_clock(QEMUClock *clock);
231 8a7ddc38 bellard
232 8a7ddc38 bellard
QEMUTimer *qemu_new_timer(QEMUClock *clock, QEMUTimerCB *cb, void *opaque);
233 8a7ddc38 bellard
void qemu_free_timer(QEMUTimer *ts);
234 8a7ddc38 bellard
void qemu_del_timer(QEMUTimer *ts);
235 8a7ddc38 bellard
void qemu_mod_timer(QEMUTimer *ts, int64_t expire_time);
236 8a7ddc38 bellard
int qemu_timer_pending(QEMUTimer *ts);
237 8a7ddc38 bellard
238 8a7ddc38 bellard
extern int64_t ticks_per_sec;
239 8a7ddc38 bellard
extern int pit_min_timer_count;
240 8a7ddc38 bellard
241 8a7ddc38 bellard
void cpu_enable_ticks(void);
242 8a7ddc38 bellard
void cpu_disable_ticks(void);
243 8a7ddc38 bellard
244 8a7ddc38 bellard
/* VM Load/Save */
245 8a7ddc38 bellard
246 8a7ddc38 bellard
typedef FILE QEMUFile;
247 8a7ddc38 bellard
248 8a7ddc38 bellard
void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size);
249 8a7ddc38 bellard
void qemu_put_byte(QEMUFile *f, int v);
250 8a7ddc38 bellard
void qemu_put_be16(QEMUFile *f, unsigned int v);
251 8a7ddc38 bellard
void qemu_put_be32(QEMUFile *f, unsigned int v);
252 8a7ddc38 bellard
void qemu_put_be64(QEMUFile *f, uint64_t v);
253 8a7ddc38 bellard
int qemu_get_buffer(QEMUFile *f, uint8_t *buf, int size);
254 8a7ddc38 bellard
int qemu_get_byte(QEMUFile *f);
255 8a7ddc38 bellard
unsigned int qemu_get_be16(QEMUFile *f);
256 8a7ddc38 bellard
unsigned int qemu_get_be32(QEMUFile *f);
257 8a7ddc38 bellard
uint64_t qemu_get_be64(QEMUFile *f);
258 8a7ddc38 bellard
259 8a7ddc38 bellard
static inline void qemu_put_be64s(QEMUFile *f, const uint64_t *pv)
260 8a7ddc38 bellard
{
261 8a7ddc38 bellard
    qemu_put_be64(f, *pv);
262 8a7ddc38 bellard
}
263 8a7ddc38 bellard
264 8a7ddc38 bellard
static inline void qemu_put_be32s(QEMUFile *f, const uint32_t *pv)
265 8a7ddc38 bellard
{
266 8a7ddc38 bellard
    qemu_put_be32(f, *pv);
267 8a7ddc38 bellard
}
268 8a7ddc38 bellard
269 8a7ddc38 bellard
static inline void qemu_put_be16s(QEMUFile *f, const uint16_t *pv)
270 8a7ddc38 bellard
{
271 8a7ddc38 bellard
    qemu_put_be16(f, *pv);
272 8a7ddc38 bellard
}
273 8a7ddc38 bellard
274 8a7ddc38 bellard
static inline void qemu_put_8s(QEMUFile *f, const uint8_t *pv)
275 8a7ddc38 bellard
{
276 8a7ddc38 bellard
    qemu_put_byte(f, *pv);
277 8a7ddc38 bellard
}
278 8a7ddc38 bellard
279 8a7ddc38 bellard
static inline void qemu_get_be64s(QEMUFile *f, uint64_t *pv)
280 8a7ddc38 bellard
{
281 8a7ddc38 bellard
    *pv = qemu_get_be64(f);
282 8a7ddc38 bellard
}
283 8a7ddc38 bellard
284 8a7ddc38 bellard
static inline void qemu_get_be32s(QEMUFile *f, uint32_t *pv)
285 8a7ddc38 bellard
{
286 8a7ddc38 bellard
    *pv = qemu_get_be32(f);
287 8a7ddc38 bellard
}
288 8a7ddc38 bellard
289 8a7ddc38 bellard
static inline void qemu_get_be16s(QEMUFile *f, uint16_t *pv)
290 8a7ddc38 bellard
{
291 8a7ddc38 bellard
    *pv = qemu_get_be16(f);
292 8a7ddc38 bellard
}
293 8a7ddc38 bellard
294 8a7ddc38 bellard
static inline void qemu_get_8s(QEMUFile *f, uint8_t *pv)
295 8a7ddc38 bellard
{
296 8a7ddc38 bellard
    *pv = qemu_get_byte(f);
297 8a7ddc38 bellard
}
298 8a7ddc38 bellard
299 8a7ddc38 bellard
int64_t qemu_ftell(QEMUFile *f);
300 8a7ddc38 bellard
int64_t qemu_fseek(QEMUFile *f, int64_t pos, int whence);
301 8a7ddc38 bellard
302 8a7ddc38 bellard
typedef void SaveStateHandler(QEMUFile *f, void *opaque);
303 8a7ddc38 bellard
typedef int LoadStateHandler(QEMUFile *f, void *opaque, int version_id);
304 8a7ddc38 bellard
305 8a7ddc38 bellard
int qemu_loadvm(const char *filename);
306 8a7ddc38 bellard
int qemu_savevm(const char *filename);
307 8a7ddc38 bellard
int register_savevm(const char *idstr, 
308 8a7ddc38 bellard
                    int instance_id, 
309 8a7ddc38 bellard
                    int version_id,
310 8a7ddc38 bellard
                    SaveStateHandler *save_state,
311 8a7ddc38 bellard
                    LoadStateHandler *load_state,
312 8a7ddc38 bellard
                    void *opaque);
313 8a7ddc38 bellard
void qemu_get_timer(QEMUFile *f, QEMUTimer *ts);
314 8a7ddc38 bellard
void qemu_put_timer(QEMUFile *f, QEMUTimer *ts);
315 c4b1fcc0 bellard
316 fc01f7e7 bellard
/* block.c */
317 fc01f7e7 bellard
typedef struct BlockDriverState BlockDriverState;
318 fc01f7e7 bellard
319 c4b1fcc0 bellard
BlockDriverState *bdrv_new(const char *device_name);
320 c4b1fcc0 bellard
void bdrv_delete(BlockDriverState *bs);
321 c4b1fcc0 bellard
int bdrv_open(BlockDriverState *bs, const char *filename, int snapshot);
322 fc01f7e7 bellard
void bdrv_close(BlockDriverState *bs);
323 fc01f7e7 bellard
int bdrv_read(BlockDriverState *bs, int64_t sector_num, 
324 fc01f7e7 bellard
              uint8_t *buf, int nb_sectors);
325 fc01f7e7 bellard
int bdrv_write(BlockDriverState *bs, int64_t sector_num, 
326 fc01f7e7 bellard
               const uint8_t *buf, int nb_sectors);
327 fc01f7e7 bellard
void bdrv_get_geometry(BlockDriverState *bs, int64_t *nb_sectors_ptr);
328 33e3963e bellard
int bdrv_commit(BlockDriverState *bs);
329 77fef8c1 bellard
void bdrv_set_boot_sector(BlockDriverState *bs, const uint8_t *data, int size);
330 33e3963e bellard
331 c4b1fcc0 bellard
#define BDRV_TYPE_HD     0
332 c4b1fcc0 bellard
#define BDRV_TYPE_CDROM  1
333 c4b1fcc0 bellard
#define BDRV_TYPE_FLOPPY 2
334 c4b1fcc0 bellard
335 c4b1fcc0 bellard
void bdrv_set_geometry_hint(BlockDriverState *bs, 
336 c4b1fcc0 bellard
                            int cyls, int heads, int secs);
337 c4b1fcc0 bellard
void bdrv_set_type_hint(BlockDriverState *bs, int type);
338 c4b1fcc0 bellard
void bdrv_get_geometry_hint(BlockDriverState *bs, 
339 c4b1fcc0 bellard
                            int *pcyls, int *pheads, int *psecs);
340 c4b1fcc0 bellard
int bdrv_get_type_hint(BlockDriverState *bs);
341 c4b1fcc0 bellard
int bdrv_is_removable(BlockDriverState *bs);
342 c4b1fcc0 bellard
int bdrv_is_read_only(BlockDriverState *bs);
343 c4b1fcc0 bellard
int bdrv_is_inserted(BlockDriverState *bs);
344 c4b1fcc0 bellard
int bdrv_is_locked(BlockDriverState *bs);
345 c4b1fcc0 bellard
void bdrv_set_locked(BlockDriverState *bs, int locked);
346 c4b1fcc0 bellard
void bdrv_set_change_cb(BlockDriverState *bs, 
347 c4b1fcc0 bellard
                        void (*change_cb)(void *opaque), void *opaque);
348 c4b1fcc0 bellard
349 c4b1fcc0 bellard
void bdrv_info(void);
350 c4b1fcc0 bellard
BlockDriverState *bdrv_find(const char *name);
351 c4b1fcc0 bellard
352 26aa7d72 bellard
/* ISA bus */
353 26aa7d72 bellard
354 26aa7d72 bellard
extern target_phys_addr_t isa_mem_base;
355 26aa7d72 bellard
356 26aa7d72 bellard
typedef void (IOPortWriteFunc)(void *opaque, uint32_t address, uint32_t data);
357 26aa7d72 bellard
typedef uint32_t (IOPortReadFunc)(void *opaque, uint32_t address);
358 26aa7d72 bellard
359 26aa7d72 bellard
int register_ioport_read(int start, int length, int size, 
360 26aa7d72 bellard
                         IOPortReadFunc *func, void *opaque);
361 26aa7d72 bellard
int register_ioport_write(int start, int length, int size, 
362 26aa7d72 bellard
                          IOPortWriteFunc *func, void *opaque);
363 26aa7d72 bellard
364 313aa567 bellard
/* vga.c */
365 313aa567 bellard
366 4fa0f5d2 bellard
#define VGA_RAM_SIZE (4096 * 1024)
367 313aa567 bellard
368 313aa567 bellard
typedef struct DisplayState {
369 313aa567 bellard
    uint8_t *data;
370 313aa567 bellard
    int linesize;
371 313aa567 bellard
    int depth;
372 313aa567 bellard
    void (*dpy_update)(struct DisplayState *s, int x, int y, int w, int h);
373 313aa567 bellard
    void (*dpy_resize)(struct DisplayState *s, int w, int h);
374 313aa567 bellard
    void (*dpy_refresh)(struct DisplayState *s);
375 313aa567 bellard
} DisplayState;
376 313aa567 bellard
377 313aa567 bellard
static inline void dpy_update(DisplayState *s, int x, int y, int w, int h)
378 313aa567 bellard
{
379 313aa567 bellard
    s->dpy_update(s, x, y, w, h);
380 313aa567 bellard
}
381 313aa567 bellard
382 313aa567 bellard
static inline void dpy_resize(DisplayState *s, int w, int h)
383 313aa567 bellard
{
384 313aa567 bellard
    s->dpy_resize(s, w, h);
385 313aa567 bellard
}
386 313aa567 bellard
387 7138fcfb bellard
int vga_initialize(DisplayState *ds, uint8_t *vga_ram_base, 
388 7138fcfb bellard
                   unsigned long vga_ram_offset, int vga_ram_size);
389 313aa567 bellard
void vga_update_display(void);
390 59a983b9 bellard
void vga_screen_dump(const char *filename);
391 313aa567 bellard
392 313aa567 bellard
/* sdl.c */
393 313aa567 bellard
void sdl_display_init(DisplayState *ds);
394 313aa567 bellard
395 5391d806 bellard
/* ide.c */
396 5391d806 bellard
#define MAX_DISKS 4
397 5391d806 bellard
398 5391d806 bellard
extern BlockDriverState *bs_table[MAX_DISKS];
399 5391d806 bellard
400 c4b1fcc0 bellard
void ide_init(int iobase, int iobase2, int irq,
401 c4b1fcc0 bellard
              BlockDriverState *hd0, BlockDriverState *hd1);
402 5391d806 bellard
403 27503323 bellard
/* oss.c */
404 27503323 bellard
typedef enum {
405 27503323 bellard
  AUD_FMT_U8,
406 27503323 bellard
  AUD_FMT_S8,
407 27503323 bellard
  AUD_FMT_U16,
408 27503323 bellard
  AUD_FMT_S16
409 27503323 bellard
} audfmt_e;
410 27503323 bellard
411 27503323 bellard
void AUD_open (int rfreq, int rnchannels, audfmt_e rfmt);
412 27503323 bellard
void AUD_reset (int rfreq, int rnchannels, audfmt_e rfmt);
413 27503323 bellard
int AUD_write (void *in_buf, int size);
414 27503323 bellard
void AUD_run (void);
415 27503323 bellard
void AUD_adjust_estimate (int _leftover);
416 27503323 bellard
int AUD_get_free (void);
417 27503323 bellard
int AUD_get_live (void);
418 27503323 bellard
int AUD_get_buffer_size (void);
419 27503323 bellard
void AUD_init (void);
420 27503323 bellard
421 27503323 bellard
/* dma.c */
422 16f62432 bellard
typedef int (*DMA_transfer_handler) (void *opaque, target_ulong addr, int size);
423 27503323 bellard
int DMA_get_channel_mode (int nchan);
424 27503323 bellard
void DMA_hold_DREQ (int nchan);
425 27503323 bellard
void DMA_release_DREQ (int nchan);
426 16f62432 bellard
void DMA_schedule(int nchan);
427 27503323 bellard
void DMA_run (void);
428 27503323 bellard
void DMA_init (void);
429 27503323 bellard
void DMA_register_channel (int nchan,
430 16f62432 bellard
                           DMA_transfer_handler transfer_handler, void *opaque);
431 27503323 bellard
432 27503323 bellard
/* sb16.c */
433 27503323 bellard
void SB16_run (void);
434 27503323 bellard
void SB16_init (void);
435 27503323 bellard
 
436 7138fcfb bellard
/* fdc.c */
437 7138fcfb bellard
#define MAX_FD 2
438 7138fcfb bellard
extern BlockDriverState *fd_table[MAX_FD];
439 7138fcfb bellard
440 baca51fa bellard
typedef struct fdctrl_t fdctrl_t;
441 baca51fa bellard
442 baca51fa bellard
fdctrl_t *fdctrl_init (int irq_lvl, int dma_chann, int mem_mapped, 
443 baca51fa bellard
                       uint32_t io_base,
444 baca51fa bellard
                       BlockDriverState **fds);
445 baca51fa bellard
int fdctrl_get_drive_type(fdctrl_t *fdctrl, int drive_num);
446 7138fcfb bellard
447 80cabfad bellard
/* ne2000.c */
448 80cabfad bellard
449 c4b1fcc0 bellard
void ne2000_init(int base, int irq, NetDriverState *nd);
450 80cabfad bellard
451 80cabfad bellard
/* pckbd.c */
452 80cabfad bellard
453 80cabfad bellard
void kbd_put_keycode(int keycode);
454 80cabfad bellard
455 80cabfad bellard
#define MOUSE_EVENT_LBUTTON 0x01
456 80cabfad bellard
#define MOUSE_EVENT_RBUTTON 0x02
457 80cabfad bellard
#define MOUSE_EVENT_MBUTTON 0x04
458 80cabfad bellard
void kbd_mouse_event(int dx, int dy, int dz, int buttons_state);
459 80cabfad bellard
460 80cabfad bellard
void kbd_init(void);
461 80cabfad bellard
462 80cabfad bellard
/* mc146818rtc.c */
463 80cabfad bellard
464 8a7ddc38 bellard
typedef struct RTCState RTCState;
465 80cabfad bellard
466 8a7ddc38 bellard
RTCState *rtc_init(int base, int irq);
467 8a7ddc38 bellard
void rtc_set_memory(RTCState *s, int addr, int val);
468 8a7ddc38 bellard
void rtc_set_date(RTCState *s, const struct tm *tm);
469 80cabfad bellard
470 80cabfad bellard
/* serial.c */
471 80cabfad bellard
472 c4b1fcc0 bellard
typedef struct SerialState SerialState;
473 c4b1fcc0 bellard
474 c4b1fcc0 bellard
extern SerialState *serial_console;
475 c4b1fcc0 bellard
476 c4b1fcc0 bellard
SerialState *serial_init(int base, int irq, int fd);
477 c4b1fcc0 bellard
int serial_can_receive(SerialState *s);
478 c4b1fcc0 bellard
void serial_receive_byte(SerialState *s, int ch);
479 c4b1fcc0 bellard
void serial_receive_break(SerialState *s);
480 80cabfad bellard
481 80cabfad bellard
/* i8259.c */
482 80cabfad bellard
483 80cabfad bellard
void pic_set_irq(int irq, int level);
484 80cabfad bellard
void pic_init(void);
485 c5df018e bellard
uint32_t pic_intack_read(CPUState *env);
486 c20709aa bellard
void pic_info(void);
487 80cabfad bellard
488 80cabfad bellard
/* i8254.c */
489 80cabfad bellard
490 80cabfad bellard
#define PIT_FREQ 1193182
491 80cabfad bellard
492 ec844b96 bellard
typedef struct PITState PITState;
493 ec844b96 bellard
494 ec844b96 bellard
PITState *pit_init(int base, int irq);
495 ec844b96 bellard
void pit_set_gate(PITState *pit, int channel, int val);
496 ec844b96 bellard
int pit_get_gate(PITState *pit, int channel);
497 ec844b96 bellard
int pit_get_out(PITState *pit, int channel, int64_t current_time);
498 80cabfad bellard
499 80cabfad bellard
/* pc.c */
500 80cabfad bellard
void pc_init(int ram_size, int vga_ram_size, int boot_device,
501 80cabfad bellard
             DisplayState *ds, const char **fd_filename, int snapshot,
502 80cabfad bellard
             const char *kernel_filename, const char *kernel_cmdline,
503 80cabfad bellard
             const char *initrd_filename);
504 80cabfad bellard
505 26aa7d72 bellard
/* ppc.c */
506 26aa7d72 bellard
void ppc_init (int ram_size, int vga_ram_size, int boot_device,
507 26aa7d72 bellard
               DisplayState *ds, const char **fd_filename, int snapshot,
508 26aa7d72 bellard
               const char *kernel_filename, const char *kernel_cmdline,
509 26aa7d72 bellard
               const char *initrd_filename);
510 26aa7d72 bellard
511 c4b1fcc0 bellard
/* monitor.c */
512 c4b1fcc0 bellard
void monitor_init(void);
513 40c3bac3 bellard
void term_printf(const char *fmt, ...) __attribute__ ((__format__ (__printf__, 1, 2)));
514 c4b1fcc0 bellard
void term_flush(void);
515 c4b1fcc0 bellard
void term_print_help(void);
516 c4b1fcc0 bellard
517 8a7ddc38 bellard
/* gdbstub.c */
518 8a7ddc38 bellard
519 8a7ddc38 bellard
#define DEFAULT_GDBSTUB_PORT 1234
520 8a7ddc38 bellard
521 8a7ddc38 bellard
int gdbserver_start(int port);
522 8a7ddc38 bellard
523 fc01f7e7 bellard
#endif /* VL_H */