亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? vmmouse.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
字號:
/* * QEMU VMMouse emulation * * Copyright (C) 2007 Anthony Liguori <anthony@codemonkey.ws> * * 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. */#include "hw.h"#include "console.h"#include "ps2.h"#include "pc.h"/* debug only vmmouse *///#define DEBUG_VMMOUSE/* VMMouse Commands */#define VMMOUSE_GETVERSION	10#define VMMOUSE_DATA		39#define VMMOUSE_STATUS		40#define VMMOUSE_COMMAND		41#define VMMOUSE_READ_ID			0x45414552#define VMMOUSE_DISABLE			0x000000f5#define VMMOUSE_REQUEST_RELATIVE	0x4c455252#define VMMOUSE_REQUEST_ABSOLUTE	0x53424152#define VMMOUSE_QUEUE_SIZE	1024#define VMMOUSE_VERSION		0x3442554a#ifdef DEBUG_VMMOUSE#define DPRINTF(fmt, ...) printf(fmt, ## __VA_ARGS__)#else#define DPRINTF(fmt, ...) do { } while (0)#endiftypedef struct _VMMouseState{    uint32_t queue[VMMOUSE_QUEUE_SIZE];    uint16_t nb_queue;    uint16_t status;    uint8_t absolute;    QEMUPutMouseEntry *entry;    void *ps2_mouse;} VMMouseState;static uint32_t vmmouse_get_status(VMMouseState *s){    DPRINTF("vmmouse_get_status()\n");    return (s->status << 16) | s->nb_queue;}static void vmmouse_mouse_event(void *opaque, int x, int y, int dz, int buttons_state){    VMMouseState *s = opaque;    int buttons = 0;    if (s->nb_queue > (VMMOUSE_QUEUE_SIZE - 4))        return;    DPRINTF("vmmouse_mouse_event(%d, %d, %d, %d)\n",            x, y, dz, buttons_state);    if ((buttons_state & MOUSE_EVENT_LBUTTON))        buttons |= 0x20;    if ((buttons_state & MOUSE_EVENT_RBUTTON))        buttons |= 0x10;    if ((buttons_state & MOUSE_EVENT_MBUTTON))        buttons |= 0x08;    if (s->absolute) {        x <<= 1;        y <<= 1;    }    s->queue[s->nb_queue++] = buttons;    s->queue[s->nb_queue++] = x;    s->queue[s->nb_queue++] = y;    s->queue[s->nb_queue++] = dz;    /* need to still generate PS2 events to notify driver to       read from queue */    ps2_mouse_fake_event(s->ps2_mouse);}static void vmmouse_update_handler(VMMouseState *s){    if (s->entry) {        qemu_remove_mouse_event_handler(s->entry);        s->entry = NULL;    }    if (s->status == 0)        s->entry = qemu_add_mouse_event_handler(vmmouse_mouse_event,                                                s, s->absolute,                                                "vmmouse");}static void vmmouse_read_id(VMMouseState *s){    DPRINTF("vmmouse_read_id()\n");    if (s->nb_queue == VMMOUSE_QUEUE_SIZE)        return;    s->queue[s->nb_queue++] = VMMOUSE_VERSION;    s->status = 0;    vmmouse_update_handler(s);}static void vmmouse_request_relative(VMMouseState *s){    DPRINTF("vmmouse_request_relative()\n");    s->absolute = 0;    vmmouse_update_handler(s);}static void vmmouse_request_absolute(VMMouseState *s){    DPRINTF("vmmouse_request_absolute()\n");    s->absolute = 1;    vmmouse_update_handler(s);}static void vmmouse_disable(VMMouseState *s){    DPRINTF("vmmouse_disable()\n");    s->status = 0xffff;    vmmouse_update_handler(s);}static void vmmouse_data(VMMouseState *s, uint32_t *data, uint32_t size){    int i;    DPRINTF("vmmouse_data(%d)\n", size);    if (size == 0 || size > 6 || size > s->nb_queue) {        printf("vmmouse: driver requested too much data %d\n", size);        s->status = 0xffff;        vmmouse_update_handler(s);        return;    }    for (i = 0; i < size; i++)        data[i] = s->queue[i];    s->nb_queue -= size;    if (s->nb_queue)        memmove(s->queue, &s->queue[size], sizeof(s->queue[0]) * s->nb_queue);}static void vmmouse_get_data(uint32_t *data){    CPUState *env = cpu_single_env;    data[0] = env->regs[R_EAX]; data[1] = env->regs[R_EBX];    data[2] = env->regs[R_ECX]; data[3] = env->regs[R_EDX];    data[4] = env->regs[R_ESI]; data[5] = env->regs[R_EDI];    DPRINTF("get_data = {%x, %x, %x, %x, %x, %x}\n",            data[0], data[1], data[2], data[3], data[4], data[5]);}static void vmmouse_set_data(const uint32_t *data){    CPUState *env = cpu_single_env;    DPRINTF("set_data = {%x, %x, %x, %x, %x, %x}\n",            data[0], data[1], data[2], data[3], data[4], data[5]);    env->regs[R_EAX] = data[0]; env->regs[R_EBX] = data[1];    env->regs[R_ECX] = data[2]; env->regs[R_EDX] = data[3];    env->regs[R_ESI] = data[4]; env->regs[R_EDI] = data[5];}static uint32_t vmmouse_ioport_read(void *opaque, uint32_t addr){    VMMouseState *s = opaque;    uint32_t data[6];    uint16_t command;    vmmouse_get_data(data);    command = data[2] & 0xFFFF;    switch (command) {    case VMMOUSE_STATUS:        data[0] = vmmouse_get_status(s);        break;    case VMMOUSE_COMMAND:        switch (data[1]) {        case VMMOUSE_DISABLE:            vmmouse_disable(s);            break;        case VMMOUSE_READ_ID:            vmmouse_read_id(s);            break;        case VMMOUSE_REQUEST_RELATIVE:            vmmouse_request_relative(s);            break;        case VMMOUSE_REQUEST_ABSOLUTE:            vmmouse_request_absolute(s);            break;        default:            printf("vmmouse: unknown command %x\n", data[1]);            break;        }        break;    case VMMOUSE_DATA:        vmmouse_data(s, data, data[1]);        break;    default:        printf("vmmouse: unknown command %x\n", command);        break;    }    vmmouse_set_data(data);    return data[0];}static void vmmouse_save(QEMUFile *f, void *opaque){    VMMouseState *s = opaque;    int i;    qemu_put_be32(f, VMMOUSE_QUEUE_SIZE);    for (i = 0; i < VMMOUSE_QUEUE_SIZE; i++)        qemu_put_be32s(f, &s->queue[i]);    qemu_put_be16s(f, &s->nb_queue);    qemu_put_be16s(f, &s->status);    qemu_put_8s(f, &s->absolute);}static int vmmouse_load(QEMUFile *f, void *opaque, int version_id){    VMMouseState *s = opaque;    int i;    if (version_id != 0)        return -EINVAL;    if (qemu_get_be32(f) != VMMOUSE_QUEUE_SIZE)        return -EINVAL;    for (i = 0; i < VMMOUSE_QUEUE_SIZE; i++)        qemu_get_be32s(f, &s->queue[i]);    qemu_get_be16s(f, &s->nb_queue);    qemu_get_be16s(f, &s->status);    qemu_get_8s(f, &s->absolute);    vmmouse_update_handler(s);    return 0;}void *vmmouse_init(void *m){    VMMouseState *s = NULL;    DPRINTF("vmmouse_init\n");    s = qemu_mallocz(sizeof(VMMouseState));    if (!s)        return NULL;    s->status = 0xffff;    s->ps2_mouse = m;    vmport_register(VMMOUSE_STATUS, vmmouse_ioport_read, s);    vmport_register(VMMOUSE_COMMAND, vmmouse_ioport_read, s);    vmport_register(VMMOUSE_DATA, vmmouse_ioport_read, s);    register_savevm("vmmouse", 0, 0, vmmouse_save, vmmouse_load, s);    return s;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久永久免费观看| 国产精品欧美极品| 欧美一级专区免费大片| 91精品国产一区二区三区| 欧美色图激情小说| 欧美一区二区在线不卡| 久久精品这里都是精品| 亚洲手机成人高清视频| 亚洲一区免费观看| 精品一区二区三区欧美| 99re这里只有精品首页| 欧美日韩和欧美的一区二区| 欧美成人综合网站| 国产精品久久久久婷婷| 秋霞影院一区二区| 99久久精品国产麻豆演员表| 欧美三级中文字| 国产精品理论在线观看| 免费成人深夜小野草| eeuss鲁一区二区三区| 日韩欧美在线不卡| 日韩国产精品久久久久久亚洲| 国产suv精品一区二区三区| 在线电影国产精品| 亚洲精品高清视频在线观看| 国产91精品一区二区麻豆亚洲| 久久嫩草精品久久久精品一| 亚洲在线中文字幕| 91影视在线播放| 日韩一区有码在线| 粉嫩一区二区三区在线看| 久久久av毛片精品| 美女在线视频一区| 精品国产凹凸成av人导航| 奇米影视一区二区三区小说| 欧美日韩亚洲不卡| 日韩国产欧美视频| 日韩精品一区在线| 国产美女在线观看一区| 国产精品欧美久久久久无广告 | 激情成人午夜视频| 久久精品一区蜜桃臀影院| 国产凹凸在线观看一区二区| 欧美国产一区视频在线观看| 不卡一区中文字幕| 亚洲欧洲日韩一区二区三区| 成人福利视频在线| 亚洲精品乱码久久久久久日本蜜臀| 成人精品在线视频观看| 自拍偷自拍亚洲精品播放| 一区二区三区四区五区视频在线观看| 亚洲视频一二三区| 精品国产乱码久久久久久老虎| 欧美日韩视频专区在线播放| 色94色欧美sute亚洲线路一ni| 天堂蜜桃一区二区三区 | 午夜成人在线视频| 日韩精品一区二区在线| 国产99久久久久| 亚洲成人在线免费| 欧美电影免费观看高清完整版在线 | 1024精品合集| 欧美精品丝袜久久久中文字幕| 免费看日韩精品| 欧美韩日一区二区三区四区| 5858s免费视频成人| 色94色欧美sute亚洲13| 国产老女人精品毛片久久| 午夜精品视频一区| 专区另类欧美日韩| 中文字幕国产一区| 国产午夜亚洲精品羞羞网站| 欧美另类久久久品| 欧美伦理影视网| 欧美猛男gaygay网站| 91视频xxxx| 欧美日韩国产美| 欧美三日本三级三级在线播放| 色88888久久久久久影院野外| 成人h动漫精品| 欧美视频中文一区二区三区在线观看| 欧美日韩免费视频| 精品一区二区三区免费观看 | 男人的j进女人的j一区| 成人午夜激情片| 精品国产1区2区3区| 日本一区二区成人| 一区二区免费在线| 精品在线观看视频| 91美女片黄在线观看| 91麻豆精品国产91久久久久久久久| 欧美色视频在线| 26uuu久久综合| 亚洲六月丁香色婷婷综合久久| 偷偷要91色婷婷| 国产成a人亚洲精品| 欧美日韩美少妇| 亚洲欧洲一区二区在线播放| 亚洲国产三级在线| 成人18视频日本| 精品少妇一区二区三区日产乱码 | 欧美日韩精品一区二区三区四区 | 国产精品污网站| 亚洲第一综合色| 国产精华液一区二区三区| 91视视频在线直接观看在线看网页在线看| 色视频欧美一区二区三区| 精品av久久707| 午夜不卡av免费| 在线观看91视频| 国产精品麻豆99久久久久久| 久久精品久久久精品美女| 欧美伊人精品成人久久综合97| 国产精品白丝在线| 成人综合婷婷国产精品久久 | 欧美狂野另类xxxxoooo| 亚洲制服丝袜av| 日韩欧美国产系列| 国产麻豆精品在线观看| 国产精品九色蝌蚪自拍| www.99精品| 中文字幕乱码久久午夜不卡| 国内精品久久久久影院一蜜桃| 91精品国产欧美一区二区成人| 亚洲国产日韩精品| 精品视频在线视频| 美女视频第一区二区三区免费观看网站 | 成人免费毛片a| 亚洲欧洲av一区二区三区久久| 国产寡妇亲子伦一区二区| 欧美激情在线一区二区三区| 成人免费毛片aaaaa**| 亚洲免费电影在线| 欧美精品 国产精品| 免费美女久久99| 久久蜜臀中文字幕| av日韩在线网站| 亚洲bt欧美bt精品| 国产日韩欧美综合一区| 在线一区二区三区四区| 午夜久久久久久| 国产精品视频免费看| 色偷偷一区二区三区| 国产原创一区二区三区| **性色生活片久久毛片| 日韩精品中文字幕在线不卡尤物| 波多野结衣中文字幕一区| 国产成a人亚洲精| 一级特黄大欧美久久久| 精品电影一区二区| 欧美日韩精品一区二区天天拍小说| 久久国内精品自在自线400部| 亚洲欧美国产高清| 国产精品午夜在线观看| 欧美欧美午夜aⅴ在线观看| 成人影视亚洲图片在线| 美洲天堂一区二卡三卡四卡视频 | 国产高清亚洲一区| 日韩成人午夜精品| 亚洲综合视频网| 亚洲欧洲国产日本综合| 欧美精品一区二区在线播放| 欧美日韩国产bt| 欧美视频在线观看一区| 日本高清不卡视频| 色吊一区二区三区 | 国产亚洲女人久久久久毛片| 欧美一区二区三区爱爱| 欧美日韩国产成人在线91| 欧美日韩黄视频| 678五月天丁香亚洲综合网| 欧美日韩亚洲综合在线 | 99精品欧美一区二区三区综合在线| 国产一区二区三区蝌蚪| 国产精品综合网| 国产精品1区2区3区| 99热国产精品| 91精品国产色综合久久ai换脸 | 香蕉成人啪国产精品视频综合网| 一区二区免费视频| 青青草国产成人av片免费| 国产一区二区三区观看| 97精品电影院| 91精品国产欧美一区二区| 欧美成人精精品一区二区频| 国产三级欧美三级日产三级99| 亚洲国产精华液网站w| 亚洲男人都懂的| 久久精品二区亚洲w码| 成人毛片视频在线观看| 欧美日韩国产高清一区二区三区| 欧美一区二区高清| 亚洲人快播电影网| 九色|91porny| 欧美日韩精品一区二区三区蜜桃| 精品国免费一区二区三区| 亚洲精品水蜜桃| 国产精品综合久久| 91精品国产91久久综合桃花| 国产精品久久久久一区二区三区共|