⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vl.h

📁 qemu虚拟机代码
💻 H
📖 第 1 页 / 共 3 页
字号:
/* * QEMU System Emulator header *  * Copyright (c) 2003 Fabrice Bellard *  * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */#ifndef VL_H#define VL_H/* we put basic includes here to avoid repeating them in device drivers */#include <stdlib.h>#include <stdio.h>#include <stdarg.h>#include <string.h>#include <inttypes.h>#include <limits.h>#include <time.h>#include <ctype.h>#include <errno.h>#include <unistd.h>#include <fcntl.h>#include <sys/stat.h>#include "audio/audio.h"#ifndef O_LARGEFILE#define O_LARGEFILE 0#endif#ifndef O_BINARY#define O_BINARY 0#endif#ifdef _WIN32#define lseek _lseeki64#define ENOTSUP 4096/* XXX: find 64 bit version */#define ftruncate chsizestatic inline char *realpath(const char *path, char *resolved_path){    _fullpath(resolved_path, path, _MAX_PATH);    return resolved_path;}#endif#ifdef QEMU_TOOL/* we use QEMU_TOOL in the command line tools which do not depend on   the target CPU type */#include "config-host.h"#include <setjmp.h>#include "osdep.h"#include "bswap.h"#else#include "cpu.h"#include "gdbstub.h"#endif /* !defined(QEMU_TOOL) */#ifndef glue#define xglue(x, y) x ## y#define glue(x, y) xglue(x, y)#define stringify(s)	tostring(s)#define tostring(s)	#s#endif#ifndef MIN#define MIN(a, b) (((a) < (b)) ? (a) : (b))#endif#ifndef MAX#define MAX(a, b) (((a) > (b)) ? (a) : (b))#endif/* vl.c */uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c);void hw_error(const char *fmt, ...);extern const char *bios_dir;void pstrcpy(char *buf, int buf_size, const char *str);char *pstrcat(char *buf, int buf_size, const char *s);int strstart(const char *str, const char *val, const char **ptr);extern int vm_running;typedef struct vm_change_state_entry VMChangeStateEntry;typedef void VMChangeStateHandler(void *opaque, int running);typedef void VMStopHandler(void *opaque, int reason);VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,                                                     void *opaque);void qemu_del_vm_change_state_handler(VMChangeStateEntry *e);int qemu_add_vm_stop_handler(VMStopHandler *cb, void *opaque);void qemu_del_vm_stop_handler(VMStopHandler *cb, void *opaque);void vm_start(void);void vm_stop(int reason);typedef void QEMUResetHandler(void *opaque);void qemu_register_reset(QEMUResetHandler *func, void *opaque);void qemu_system_reset_request(void);void qemu_system_shutdown_request(void);void qemu_system_powerdown_request(void);#if !defined(TARGET_SPARC)// Please implement a power failure function to signal the OS#define qemu_system_powerdown() do{}while(0)#elsevoid qemu_system_powerdown(void);#endifvoid main_loop_wait(int timeout);extern int ram_size;extern int bios_size;extern int rtc_utc;extern int cirrus_vga_enabled;extern int graphic_width;extern int graphic_height;extern int graphic_depth;extern const char *keyboard_layout;extern int kqemu_allowed;extern int win2k_install_hack;extern int usb_enabled;extern int smp_cpus;/* XXX: make it dynamic */#if defined (TARGET_PPC)#define BIOS_SIZE ((512 + 32) * 1024)#elif defined(TARGET_MIPS)#define BIOS_SIZE (128 * 1024)#else#define BIOS_SIZE ((256 + 64) * 1024)#endif/* keyboard/mouse support */#define MOUSE_EVENT_LBUTTON 0x01#define MOUSE_EVENT_RBUTTON 0x02#define MOUSE_EVENT_MBUTTON 0x04typedef void QEMUPutKBDEvent(void *opaque, int keycode);typedef void QEMUPutMouseEvent(void *opaque, int dx, int dy, int dz, int buttons_state);void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque);void qemu_add_mouse_event_handler(QEMUPutMouseEvent *func, void *opaque, int absolute);void kbd_put_keycode(int keycode);void kbd_mouse_event(int dx, int dy, int dz, int buttons_state);int kbd_mouse_is_absolute(void);/* keysym is a unicode code except for special keys (see QEMU_KEY_xxx   constants) */#define QEMU_KEY_ESC1(c) ((c) | 0xe100)#define QEMU_KEY_BACKSPACE  0x007f#define QEMU_KEY_UP         QEMU_KEY_ESC1('A')#define QEMU_KEY_DOWN       QEMU_KEY_ESC1('B')#define QEMU_KEY_RIGHT      QEMU_KEY_ESC1('C')#define QEMU_KEY_LEFT       QEMU_KEY_ESC1('D')#define QEMU_KEY_HOME       QEMU_KEY_ESC1(1)#define QEMU_KEY_END        QEMU_KEY_ESC1(4)#define QEMU_KEY_PAGEUP     QEMU_KEY_ESC1(5)#define QEMU_KEY_PAGEDOWN   QEMU_KEY_ESC1(6)#define QEMU_KEY_DELETE     QEMU_KEY_ESC1(3)#define QEMU_KEY_CTRL_UP         0xe400#define QEMU_KEY_CTRL_DOWN       0xe401#define QEMU_KEY_CTRL_LEFT       0xe402#define QEMU_KEY_CTRL_RIGHT      0xe403#define QEMU_KEY_CTRL_HOME       0xe404#define QEMU_KEY_CTRL_END        0xe405#define QEMU_KEY_CTRL_PAGEUP     0xe406#define QEMU_KEY_CTRL_PAGEDOWN   0xe407void kbd_put_keysym(int keysym);/* async I/O support */typedef void IOReadHandler(void *opaque, const uint8_t *buf, int size);typedef int IOCanRWHandler(void *opaque);typedef void IOHandler(void *opaque);int qemu_set_fd_handler2(int fd,                          IOCanRWHandler *fd_read_poll,                          IOHandler *fd_read,                          IOHandler *fd_write,                          void *opaque);int qemu_set_fd_handler(int fd,                        IOHandler *fd_read,                         IOHandler *fd_write,                        void *opaque);/* Polling handling *//* return TRUE if no sleep should be done afterwards */typedef int PollingFunc(void *opaque);int qemu_add_polling_cb(PollingFunc *func, void *opaque);void qemu_del_polling_cb(PollingFunc *func, void *opaque);/* character device */#define CHR_EVENT_BREAK 0 /* serial break char */#define CHR_EVENT_FOCUS 1 /* focus to this terminal (modal input needed) */#define CHR_IOCTL_SERIAL_SET_PARAMS   1typedef struct {    int speed;    int parity;    int data_bits;    int stop_bits;} QEMUSerialSetParams;#define CHR_IOCTL_SERIAL_SET_BREAK    2#define CHR_IOCTL_PP_READ_DATA        3#define CHR_IOCTL_PP_WRITE_DATA       4#define CHR_IOCTL_PP_READ_CONTROL     5#define CHR_IOCTL_PP_WRITE_CONTROL    6#define CHR_IOCTL_PP_READ_STATUS      7typedef void IOEventHandler(void *opaque, int event);typedef struct CharDriverState {    int (*chr_write)(struct CharDriverState *s, const uint8_t *buf, int len);    void (*chr_add_read_handler)(struct CharDriverState *s,                                  IOCanRWHandler *fd_can_read,                                  IOReadHandler *fd_read, void *opaque);    int (*chr_ioctl)(struct CharDriverState *s, int cmd, void *arg);    IOEventHandler *chr_event;    void (*chr_send_event)(struct CharDriverState *chr, int event);    void (*chr_close)(struct CharDriverState *chr);    void *opaque;} CharDriverState;void qemu_chr_printf(CharDriverState *s, const char *fmt, ...);int qemu_chr_write(CharDriverState *s, const uint8_t *buf, int len);void qemu_chr_send_event(CharDriverState *s, int event);void qemu_chr_add_read_handler(CharDriverState *s,                                IOCanRWHandler *fd_can_read,                                IOReadHandler *fd_read, void *opaque);void qemu_chr_add_event_handler(CharDriverState *s, IOEventHandler *chr_event);int qemu_chr_ioctl(CharDriverState *s, int cmd, void *arg);/* consoles */typedef struct DisplayState DisplayState;typedef struct TextConsole TextConsole;typedef void (*vga_hw_update_ptr)(void *);typedef void (*vga_hw_invalidate_ptr)(void *);typedef void (*vga_hw_screen_dump_ptr)(void *, const char *);TextConsole *graphic_console_init(DisplayState *ds, vga_hw_update_ptr update,                                  vga_hw_invalidate_ptr invalidate,                                  vga_hw_screen_dump_ptr screen_dump,                                  void *opaque);void vga_hw_update(void);void vga_hw_invalidate(void);void vga_hw_screen_dump(const char *filename);int is_graphic_console(void);CharDriverState *text_console_init(DisplayState *ds);void console_select(unsigned int index);/* serial ports */#define MAX_SERIAL_PORTS 4extern CharDriverState *serial_hds[MAX_SERIAL_PORTS];/* parallel ports */#define MAX_PARALLEL_PORTS 3extern CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];/* VLANs support */typedef struct VLANClientState VLANClientState;struct VLANClientState {    IOReadHandler *fd_read;    /* Packets may still be sent if this returns zero.  It's used to       rate-limit the slirp code.  */    IOCanRWHandler *fd_can_read;    void *opaque;    struct VLANClientState *next;    struct VLANState *vlan;    char info_str[256];};typedef struct VLANState {    int id;    VLANClientState *first_client;    struct VLANState *next;} VLANState;VLANState *qemu_find_vlan(int id);VLANClientState *qemu_new_vlan_client(VLANState *vlan,                                      IOReadHandler *fd_read,                                      IOCanRWHandler *fd_can_read,                                      void *opaque);int qemu_can_send_packet(VLANClientState *vc);void qemu_send_packet(VLANClientState *vc, const uint8_t *buf, int size);void qemu_handler_true(void *opaque);void do_info_network(void);/* TAP win32 */int tap_win32_init(VLANState *vlan, const char *ifname);void tap_win32_poll(void);/* NIC info */#define MAX_NICS 8typedef struct NICInfo {    uint8_t macaddr[6];    const char *model;    VLANState *vlan;} NICInfo;extern int nb_nics;extern NICInfo nd_table[MAX_NICS];/* timers */typedef struct QEMUClock QEMUClock;typedef struct QEMUTimer QEMUTimer;typedef void QEMUTimerCB(void *opaque);/* The real time clock should be used only for stuff which does not   change the virtual machine state, as it is run even if the virtual   machine is stopped. The real time clock has a frequency of 1000   Hz. */extern QEMUClock *rt_clock;/* The virtual clock is only run during the emulation. It is stopped   when the virtual machine is stopped. Virtual timers use a high   precision clock, usually cpu cycles (use ticks_per_sec). */extern QEMUClock *vm_clock;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -