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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? omap.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
?? 第 1 頁 / 共 5 頁
字號:
    case 0x08:	/* READ_TIM */        return omap_timer_read(s);    }    OMAP_BAD_REG(addr);    return 0;}static void omap_mpu_timer_write(void *opaque, target_phys_addr_t addr,                uint32_t value){    struct omap_mpu_timer_s *s = (struct omap_mpu_timer_s *) opaque;    int offset = addr - s->base;    switch (offset) {    case 0x00:	/* CNTL_TIMER */        omap_timer_sync(s);        s->enable = (value >> 5) & 1;        s->ptv = (value >> 2) & 7;        s->ar = (value >> 1) & 1;        s->st = value & 1;        omap_timer_update(s);        return;    case 0x04:	/* LOAD_TIM */        s->reset_val = value;        return;    case 0x08:	/* READ_TIM */        OMAP_RO_REG(addr);        break;    default:        OMAP_BAD_REG(addr);    }}static CPUReadMemoryFunc *omap_mpu_timer_readfn[] = {    omap_badwidth_read32,    omap_badwidth_read32,    omap_mpu_timer_read,};static CPUWriteMemoryFunc *omap_mpu_timer_writefn[] = {    omap_badwidth_write32,    omap_badwidth_write32,    omap_mpu_timer_write,};static void omap_mpu_timer_reset(struct omap_mpu_timer_s *s){    qemu_del_timer(s->timer);    s->enable = 0;    s->reset_val = 31337;    s->val = 0;    s->ptv = 0;    s->ar = 0;    s->st = 0;    s->it_ena = 1;}struct omap_mpu_timer_s *omap_mpu_timer_init(target_phys_addr_t base,                qemu_irq irq, omap_clk clk){    int iomemtype;    struct omap_mpu_timer_s *s = (struct omap_mpu_timer_s *)            qemu_mallocz(sizeof(struct omap_mpu_timer_s));    s->irq = irq;    s->clk = clk;    s->base = base;    s->timer = qemu_new_timer(vm_clock, omap_timer_tick, s);    omap_mpu_timer_reset(s);    omap_timer_clk_setup(s);    iomemtype = cpu_register_io_memory(0, omap_mpu_timer_readfn,                    omap_mpu_timer_writefn, s);    cpu_register_physical_memory(s->base, 0x100, iomemtype);    return s;}/* Watchdog timer */struct omap_watchdog_timer_s {    struct omap_mpu_timer_s timer;    uint8_t last_wr;    int mode;    int free;    int reset;};static uint32_t omap_wd_timer_read(void *opaque, target_phys_addr_t addr){    struct omap_watchdog_timer_s *s = (struct omap_watchdog_timer_s *) opaque;    int offset = addr - s->timer.base;    switch (offset) {    case 0x00:	/* CNTL_TIMER */        return (s->timer.ptv << 9) | (s->timer.ar << 8) |                (s->timer.st << 7) | (s->free << 1);    case 0x04:	/* READ_TIMER */        return omap_timer_read(&s->timer);    case 0x08:	/* TIMER_MODE */        return s->mode << 15;    }    OMAP_BAD_REG(addr);    return 0;}static void omap_wd_timer_write(void *opaque, target_phys_addr_t addr,                uint32_t value){    struct omap_watchdog_timer_s *s = (struct omap_watchdog_timer_s *) opaque;    int offset = addr - s->timer.base;    switch (offset) {    case 0x00:	/* CNTL_TIMER */        omap_timer_sync(&s->timer);        s->timer.ptv = (value >> 9) & 7;        s->timer.ar = (value >> 8) & 1;        s->timer.st = (value >> 7) & 1;        s->free = (value >> 1) & 1;        omap_timer_update(&s->timer);        break;    case 0x04:	/* LOAD_TIMER */        s->timer.reset_val = value & 0xffff;        break;    case 0x08:	/* TIMER_MODE */        if (!s->mode && ((value >> 15) & 1))            omap_clk_get(s->timer.clk);        s->mode |= (value >> 15) & 1;        if (s->last_wr == 0xf5) {            if ((value & 0xff) == 0xa0) {                if (s->mode) {                    s->mode = 0;                    omap_clk_put(s->timer.clk);                }            } else {                /* XXX: on T|E hardware somehow this has no effect,                 * on Zire 71 it works as specified.  */                s->reset = 1;                qemu_system_reset_request();            }        }        s->last_wr = value & 0xff;        break;    default:        OMAP_BAD_REG(addr);    }}static CPUReadMemoryFunc *omap_wd_timer_readfn[] = {    omap_badwidth_read16,    omap_wd_timer_read,    omap_badwidth_read16,};static CPUWriteMemoryFunc *omap_wd_timer_writefn[] = {    omap_badwidth_write16,    omap_wd_timer_write,    omap_badwidth_write16,};static void omap_wd_timer_reset(struct omap_watchdog_timer_s *s){    qemu_del_timer(s->timer.timer);    if (!s->mode)        omap_clk_get(s->timer.clk);    s->mode = 1;    s->free = 1;    s->reset = 0;    s->timer.enable = 1;    s->timer.it_ena = 1;    s->timer.reset_val = 0xffff;    s->timer.val = 0;    s->timer.st = 0;    s->timer.ptv = 0;    s->timer.ar = 0;    omap_timer_update(&s->timer);}struct omap_watchdog_timer_s *omap_wd_timer_init(target_phys_addr_t base,                qemu_irq irq, omap_clk clk){    int iomemtype;    struct omap_watchdog_timer_s *s = (struct omap_watchdog_timer_s *)            qemu_mallocz(sizeof(struct omap_watchdog_timer_s));    s->timer.irq = irq;    s->timer.clk = clk;    s->timer.base = base;    s->timer.timer = qemu_new_timer(vm_clock, omap_timer_tick, &s->timer);    omap_wd_timer_reset(s);    omap_timer_clk_setup(&s->timer);    iomemtype = cpu_register_io_memory(0, omap_wd_timer_readfn,                    omap_wd_timer_writefn, s);    cpu_register_physical_memory(s->timer.base, 0x100, iomemtype);    return s;}/* 32-kHz timer */struct omap_32khz_timer_s {    struct omap_mpu_timer_s timer;};static uint32_t omap_os_timer_read(void *opaque, target_phys_addr_t addr){    struct omap_32khz_timer_s *s = (struct omap_32khz_timer_s *) opaque;    int offset = addr & OMAP_MPUI_REG_MASK;    switch (offset) {    case 0x00:	/* TVR */        return s->timer.reset_val;    case 0x04:	/* TCR */        return omap_timer_read(&s->timer);    case 0x08:	/* CR */        return (s->timer.ar << 3) | (s->timer.it_ena << 2) | s->timer.st;    default:        break;    }    OMAP_BAD_REG(addr);    return 0;}static void omap_os_timer_write(void *opaque, target_phys_addr_t addr,                uint32_t value){    struct omap_32khz_timer_s *s = (struct omap_32khz_timer_s *) opaque;    int offset = addr & OMAP_MPUI_REG_MASK;    switch (offset) {    case 0x00:	/* TVR */        s->timer.reset_val = value & 0x00ffffff;        break;    case 0x04:	/* TCR */        OMAP_RO_REG(addr);        break;    case 0x08:	/* CR */        s->timer.ar = (value >> 3) & 1;        s->timer.it_ena = (value >> 2) & 1;        if (s->timer.st != (value & 1) || (value & 2)) {            omap_timer_sync(&s->timer);            s->timer.enable = value & 1;            s->timer.st = value & 1;            omap_timer_update(&s->timer);        }        break;    default:        OMAP_BAD_REG(addr);    }}static CPUReadMemoryFunc *omap_os_timer_readfn[] = {    omap_badwidth_read32,    omap_badwidth_read32,    omap_os_timer_read,};static CPUWriteMemoryFunc *omap_os_timer_writefn[] = {    omap_badwidth_write32,    omap_badwidth_write32,    omap_os_timer_write,};static void omap_os_timer_reset(struct omap_32khz_timer_s *s){    qemu_del_timer(s->timer.timer);    s->timer.enable = 0;    s->timer.it_ena = 0;    s->timer.reset_val = 0x00ffffff;    s->timer.val = 0;    s->timer.st = 0;    s->timer.ptv = 0;    s->timer.ar = 1;}struct omap_32khz_timer_s *omap_os_timer_init(target_phys_addr_t base,                qemu_irq irq, omap_clk clk){    int iomemtype;    struct omap_32khz_timer_s *s = (struct omap_32khz_timer_s *)            qemu_mallocz(sizeof(struct omap_32khz_timer_s));    s->timer.irq = irq;    s->timer.clk = clk;    s->timer.base = base;    s->timer.timer = qemu_new_timer(vm_clock, omap_timer_tick, &s->timer);    omap_os_timer_reset(s);    omap_timer_clk_setup(&s->timer);    iomemtype = cpu_register_io_memory(0, omap_os_timer_readfn,                    omap_os_timer_writefn, s);    cpu_register_physical_memory(s->timer.base, 0x800, iomemtype);    return s;}/* Ultra Low-Power Device Module */static uint32_t omap_ulpd_pm_read(void *opaque, target_phys_addr_t addr){    struct omap_mpu_state_s *s = (struct omap_mpu_state_s *) opaque;    int offset = addr - s->ulpd_pm_base;    uint16_t ret;    switch (offset) {    case 0x14:	/* IT_STATUS */        ret = s->ulpd_pm_regs[offset >> 2];        s->ulpd_pm_regs[offset >> 2] = 0;        qemu_irq_lower(s->irq[1][OMAP_INT_GAUGE_32K]);        return ret;    case 0x18:	/* Reserved */    case 0x1c:	/* Reserved */    case 0x20:	/* Reserved */    case 0x28:	/* Reserved */    case 0x2c:	/* Reserved */        OMAP_BAD_REG(addr);    case 0x00:	/* COUNTER_32_LSB */    case 0x04:	/* COUNTER_32_MSB */    case 0x08:	/* COUNTER_HIGH_FREQ_LSB */    case 0x0c:	/* COUNTER_HIGH_FREQ_MSB */    case 0x10:	/* GAUGING_CTRL */    case 0x24:	/* SETUP_ANALOG_CELL3_ULPD1 */    case 0x30:	/* CLOCK_CTRL */    case 0x34:	/* SOFT_REQ */    case 0x38:	/* COUNTER_32_FIQ */    case 0x3c:	/* DPLL_CTRL */    case 0x40:	/* STATUS_REQ */        /* XXX: check clk::usecount state for every clock */    case 0x48:	/* LOCL_TIME */    case 0x4c:	/* APLL_CTRL */    case 0x50:	/* POWER_CTRL */        return s->ulpd_pm_regs[offset >> 2];    }    OMAP_BAD_REG(addr);    return 0;}static inline void omap_ulpd_clk_update(struct omap_mpu_state_s *s,                uint16_t diff, uint16_t value){    if (diff & (1 << 4))				/* USB_MCLK_EN */        omap_clk_onoff(omap_findclk(s, "usb_clk0"), (value >> 4) & 1);    if (diff & (1 << 5))				/* DIS_USB_PVCI_CLK */        omap_clk_onoff(omap_findclk(s, "usb_w2fc_ck"), (~value >> 5) & 1);}static inline void omap_ulpd_req_update(struct omap_mpu_state_s *s,                uint16_t diff, uint16_t value){    if (diff & (1 << 0))				/* SOFT_DPLL_REQ */        omap_clk_canidle(omap_findclk(s, "dpll4"), (~value >> 0) & 1);    if (diff & (1 << 1))				/* SOFT_COM_REQ */        omap_clk_canidle(omap_findclk(s, "com_mclk_out"), (~value >> 1) & 1);    if (diff & (1 << 2))				/* SOFT_SDW_REQ */        omap_clk_canidle(omap_findclk(s, "bt_mclk_out"), (~value >> 2) & 1);    if (diff & (1 << 3))				/* SOFT_USB_REQ */        omap_clk_canidle(omap_findclk(s, "usb_clk0"), (~value >> 3) & 1);}static void omap_ulpd_pm_write(void *opaque, target_phys_addr_t addr,                uint32_t value){    struct omap_mpu_state_s *s = (struct omap_mpu_state_s *) opaque;    int offset = addr - s->ulpd_pm_base;    int64_t now, ticks;    int div, mult;    static const int bypass_div[4] = { 1, 2, 4, 4 };    uint16_t diff;    switch (offset) {    case 0x00:	/* COUNTER_32_LSB */    case 0x04:	/* COUNTER_32_MSB */    case 0x08:	/* COUNTER_HIGH_FREQ_LSB */    case 0x0c:	/* COUNTER_HIGH_FREQ_MSB */    case 0x14:	/* IT_STATUS */    case 0x40:	/* STATUS_REQ */        OMAP_RO_REG(addr);        break;    case 0x10:	/* GAUGING_CTRL */        /* Bits 0 and 1 seem to be confused in the OMAP 310 TRM */        if ((s->ulpd_pm_regs[offset >> 2] ^ value) & 1) {            now = qemu_get_clock(vm_clock);            if (value & 1)                s->ulpd_gauge_start = now;            else {                now -= s->ulpd_gauge_start;                /* 32-kHz ticks */                ticks = muldiv64(now, 32768, ticks_per_sec);                s->ulpd_pm_regs[0x00 >> 2] = (ticks >>  0) & 0xffff;                s->ulpd_pm_regs[0x04 >> 2] = (ticks >> 16) & 0xffff;                if (ticks >> 32)	/* OVERFLOW_32K */                    s->ulpd_pm_regs[0x14 >> 2] |= 1 << 2;                /* High frequency ticks */                ticks = muldiv64(now, 12000000, ticks_per_sec);                s->ulpd_pm_regs[0x08 >> 2] = (ticks >>  0) & 0xffff;                s->ulpd_pm_regs[0x0c >> 2] = (ticks >> 16) & 0xffff;                if (ticks >> 32)	/* OVERFLOW_HI_FREQ */                    s->ulpd_pm_regs[0x14 >> 2] |= 1 << 1;                s->ulpd_pm_regs[0x14 >> 2] |= 1 << 0;	/* IT_GAUGING */                qemu_irq_raise(s->irq[1][OMAP_INT_GAUGE_32K]);            }        }        s->ulpd_pm_regs[offset >> 2] = value;        break;    case 0x18:	/* Reserved */    case 0x1c:	/* Reserved */    case 0x20:	/* Reserved */    case 0x28:	/* Reserved */    case 0x2c:	/* Reserved */        OMAP_BAD_REG(addr);    case 0x24:	/* SETUP_ANALOG_CELL3_ULPD1 */    case 0x38:	/* COUNTER_32_FIQ */    case 0x48:	/* LOCL_TIME */    case 0x50:	/* POWER_CTRL */        s->ulpd_pm_regs[offset >> 2] = value;        break;    case 0x30:	/* CLOCK_CTRL */        diff = s->ulpd_pm_regs[offset >> 2] ^ value;        s->ulpd_pm_regs[offset >> 2] = value & 0x3f;        omap_ulpd_clk_update(s, diff, value);        break;    case 0x34:	/* SOFT_REQ */        diff = s->ulpd_pm_regs[offset >> 2] ^ value;        s->ulpd_pm_regs[offset >> 2] = value & 0x1f;        omap_ulpd_req_update(s, diff, value);        break;    case 0x3c:	/* DPLL_CTRL */        /* XXX: OMAP310 TRM claims bit 3 is PLL_ENABLE, and bit 4 is         * omitted altogether, probably a typo.  */        /* This register has identical semantics with DPLL(1:3) control         * registers, see omap_dpll_write() */        diff = s->ulpd_pm_regs[offset >> 2] & value;        s->ulpd_pm_regs[offset >> 2] = value & 0x2fff;        if (diff & (0x3ff << 2)) {            if (value & (1 << 4)) {			/* PLL_ENABLE */                div = ((value >> 5) & 3) + 1;		/* PLL_DIV */                mult = MIN((value >> 7) & 0x1f, 1);	/* PLL_MULT */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品国产a| 91国在线观看| 国产视频一区二区在线| 韩国三级在线一区| 国产精品伦理在线| av动漫一区二区| 亚洲国产一区二区a毛片| 91精品国产综合久久久蜜臀粉嫩| 麻豆国产精品777777在线| 精品免费99久久| 91天堂素人约啪| 性做久久久久久久久| 欧美变态tickle挠乳网站| 成人avav影音| 亚洲制服欧美中文字幕中文字幕| 欧美一区二区三区在线观看视频| 国产麻豆精品久久一二三| 亚洲视频一区二区在线| 69av一区二区三区| 成人一二三区视频| 亚洲va在线va天堂| 中文字幕不卡在线| 8x8x8国产精品| 丰满白嫩尤物一区二区| 亚洲va韩国va欧美va精品| 久久久综合激的五月天| 色噜噜偷拍精品综合在线| 精品亚洲免费视频| 亚洲精品视频观看| 久久久www成人免费无遮挡大片| 91麻豆精东视频| 韩国午夜理伦三级不卡影院| 亚洲永久免费av| 久久久久成人黄色影片| 精品视频免费在线| 不卡一区二区在线| 九九九精品视频| 亚洲第一激情av| 国产精品美女久久久久aⅴ国产馆| 欧美日韩国产系列| 一本大道久久a久久综合| 国产在线精品一区二区不卡了 | 91原创在线视频| 九九在线精品视频| 亚洲va在线va天堂| 《视频一区视频二区| 久久人人爽人人爽| 欧美电影在线免费观看| 91亚洲男人天堂| 欧美喷水一区二区| 色中色一区二区| 成人av在线观| 风间由美一区二区av101 | 91精品午夜视频| 91免费版在线| 粉嫩绯色av一区二区在线观看 | 在线视频国内一区二区| 成人av影视在线观看| 激情综合色丁香一区二区| 午夜视频在线观看一区二区三区| 中文字幕在线不卡一区二区三区| 国产亚洲精品精华液| 精品日本一线二线三线不卡| 欧美一区在线视频| 欧美剧情电影在线观看完整版免费励志电影 | 欧美性色黄大片| 99精品欧美一区| 成人免费毛片片v| heyzo一本久久综合| 国产.欧美.日韩| 粉嫩av亚洲一区二区图片| 国产高清久久久久| 国产精品99精品久久免费| 国产一区二区三区在线观看精品| 久久国产三级精品| 久久国产精品色| 韩日av一区二区| 粉嫩高潮美女一区二区三区| 福利视频网站一区二区三区| 成人精品免费看| www.亚洲国产| 色久综合一二码| 欧美日韩一区视频| 日韩一区二区在线观看| 日韩精品最新网址| 久久综合色综合88| 国产精品欧美综合在线| 亚洲天堂成人在线观看| 亚洲一区二区中文在线| 偷窥国产亚洲免费视频| 日韩电影在线一区| 精品夜夜嗨av一区二区三区| 国产99久久久国产精品免费看 | 欧美精品一二三区| 精品嫩草影院久久| 欧美国产丝袜视频| 国产美女主播视频一区| 高清shemale亚洲人妖| 91美女在线观看| 欧美日韩国产123区| 欧美成人免费网站| 国产精品传媒视频| 午夜精品福利在线| 国产激情精品久久久第一区二区| 菠萝蜜视频在线观看一区| 91成人在线精品| 欧美大片拔萝卜| 国产精品久久久久毛片软件| 天天免费综合色| 国产精品一级黄| 欧美日韩免费电影| 国产午夜亚洲精品不卡| 亚洲综合久久av| 国产真实乱子伦精品视频| 91免费视频大全| 精品久久久久久亚洲综合网| 中文字幕一区二区三区精华液| 亚洲成av人片在www色猫咪| 国产寡妇亲子伦一区二区| 色一情一乱一乱一91av| 日韩精品一区二区三区在线 | 欧美精品一区二区三区高清aⅴ | 久久久久久久久一| 亚洲一区中文日韩| 国产精品911| 欧美日韩三级一区| 国产精品青草综合久久久久99| 日韩av网站免费在线| 91天堂素人约啪| 国产三级久久久| 日韩中文字幕1| 91麻豆自制传媒国产之光| 欧美不卡激情三级在线观看| 亚洲精品免费在线观看| 国产精品亚洲综合一区在线观看| 欧美日韩国产美女| 日韩毛片在线免费观看| 国产九色sp调教91| 欧美美女一区二区三区| 亚洲男人的天堂一区二区| 国产一区欧美日韩| 欧美一区二区国产| 午夜精品一区在线观看| 日本高清无吗v一区| 国产精品国产三级国产三级人妇| 久久99精品久久久| 欧美一区二区精品久久911| 亚洲成人7777| 精品视频色一区| 亚洲一区在线观看免费观看电影高清 | 欧美在线一区二区| 亚洲另类春色校园小说| 成人免费的视频| 国产精品久久免费看| 国产成人精品一区二区三区四区 | 成人免费黄色大片| 国产午夜精品一区二区三区嫩草| 美女一区二区在线观看| 欧美人妖巨大在线| 亚洲v日本v欧美v久久精品| 欧美亚洲综合网| 亚洲国产人成综合网站| 欧美中文字幕一区二区三区| 亚洲人成网站精品片在线观看| 成人av电影免费在线播放| 成人免费一区二区三区在线观看 | 91麻豆国产福利精品| 国产精品不卡在线| 91在线视频免费观看| 136国产福利精品导航| 91电影在线观看| 性欧美大战久久久久久久久| 制服丝袜在线91| 老司机精品视频导航| 337p粉嫩大胆色噜噜噜噜亚洲| 国产在线精品免费av| 国产婷婷一区二区| 91亚洲精品乱码久久久久久蜜桃 | 天天综合日日夜夜精品| 欧美人牲a欧美精品| 久久99精品久久久久久国产越南| 久久众筹精品私拍模特| 成人小视频免费在线观看| 精品国产乱码久久久久久牛牛| 国产一区二区免费看| 中文字幕一区二区三| 色94色欧美sute亚洲线路一ni| 亚洲一区二区三区在线看| 制服视频三区第一页精品| 美国精品在线观看| 中文字幕二三区不卡| 欧美综合一区二区三区| 日韩国产精品久久久| 国产肉丝袜一区二区| 色综合一区二区三区| 日韩av一区二| 中文字幕一区二区三区四区不卡 | 色婷婷国产精品久久包臀| 日韩国产成人精品| 国产精品久久午夜夜伦鲁鲁|