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

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

?? arm_timer.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
字號:
/* * ARM PrimeCell Timer modules. * * Copyright (c) 2005-2006 CodeSourcery. * Written by Paul Brook * * This code is licenced under the GPL. */#include "hw.h"#include "qemu-timer.h"#include "primecell.h"/* Common timer implementation.  */#define TIMER_CTRL_ONESHOT      (1 << 0)#define TIMER_CTRL_32BIT        (1 << 1)#define TIMER_CTRL_DIV1         (0 << 2)#define TIMER_CTRL_DIV16        (1 << 2)#define TIMER_CTRL_DIV256       (2 << 2)#define TIMER_CTRL_IE           (1 << 5)#define TIMER_CTRL_PERIODIC     (1 << 6)#define TIMER_CTRL_ENABLE       (1 << 7)typedef struct {    ptimer_state *timer;    uint32_t control;    uint32_t limit;    int freq;    int int_level;    qemu_irq irq;} arm_timer_state;/* Check all active timers, and schedule the next timer interrupt.  */static void arm_timer_update(arm_timer_state *s){    /* Update interrupts.  */    if (s->int_level && (s->control & TIMER_CTRL_IE)) {        qemu_irq_raise(s->irq);    } else {        qemu_irq_lower(s->irq);    }}static uint32_t arm_timer_read(void *opaque, target_phys_addr_t offset){    arm_timer_state *s = (arm_timer_state *)opaque;    switch (offset >> 2) {    case 0: /* TimerLoad */    case 6: /* TimerBGLoad */        return s->limit;    case 1: /* TimerValue */        return ptimer_get_count(s->timer);    case 2: /* TimerControl */        return s->control;    case 4: /* TimerRIS */        return s->int_level;    case 5: /* TimerMIS */        if ((s->control & TIMER_CTRL_IE) == 0)            return 0;        return s->int_level;    default:        cpu_abort (cpu_single_env, "arm_timer_read: Bad offset %x\n",                   (int)offset);        return 0;    }}/* Reset the timer limit after settings have changed.  */static void arm_timer_recalibrate(arm_timer_state *s, int reload){    uint32_t limit;    if ((s->control & TIMER_CTRL_PERIODIC) == 0) {        /* Free running.  */        if (s->control & TIMER_CTRL_32BIT)            limit = 0xffffffff;        else            limit = 0xffff;    } else {          /* Periodic.  */          limit = s->limit;    }    ptimer_set_limit(s->timer, limit, reload);}static void arm_timer_write(void *opaque, target_phys_addr_t offset,                            uint32_t value){    arm_timer_state *s = (arm_timer_state *)opaque;    int freq;    switch (offset >> 2) {    case 0: /* TimerLoad */        s->limit = value;        arm_timer_recalibrate(s, 1);        break;    case 1: /* TimerValue */        /* ??? Linux seems to want to write to this readonly register.           Ignore it.  */        break;    case 2: /* TimerControl */        if (s->control & TIMER_CTRL_ENABLE) {            /* Pause the timer if it is running.  This may cause some               inaccuracy dure to rounding, but avoids a whole lot of other               messyness.  */            ptimer_stop(s->timer);        }        s->control = value;        freq = s->freq;        /* ??? Need to recalculate expiry time after changing divisor.  */        switch ((value >> 2) & 3) {        case 1: freq >>= 4; break;        case 2: freq >>= 8; break;        }        arm_timer_recalibrate(s, 0);        ptimer_set_freq(s->timer, freq);        if (s->control & TIMER_CTRL_ENABLE) {            /* Restart the timer if still enabled.  */            ptimer_run(s->timer, (s->control & TIMER_CTRL_ONESHOT) != 0);        }        break;    case 3: /* TimerIntClr */        s->int_level = 0;        break;    case 6: /* TimerBGLoad */        s->limit = value;        arm_timer_recalibrate(s, 0);        break;    default:        cpu_abort (cpu_single_env, "arm_timer_write: Bad offset %x\n",                   (int)offset);    }    arm_timer_update(s);}static void arm_timer_tick(void *opaque){    arm_timer_state *s = (arm_timer_state *)opaque;    s->int_level = 1;    arm_timer_update(s);}static void *arm_timer_init(uint32_t freq, qemu_irq irq){    arm_timer_state *s;    QEMUBH *bh;    s = (arm_timer_state *)qemu_mallocz(sizeof(arm_timer_state));    s->irq = irq;    s->freq = freq;    s->control = TIMER_CTRL_IE;    bh = qemu_bh_new(arm_timer_tick, s);    s->timer = ptimer_init(bh);    /* ??? Save/restore.  */    return s;}/* ARM PrimeCell SP804 dual timer module.   Docs for this device don't seem to be publicly available.  This   implementation is based on guesswork, the linux kernel sources and the   Integrator/CP timer modules.  */typedef struct {    void *timer[2];    int level[2];    uint32_t base;    qemu_irq irq;} sp804_state;/* Merge the IRQs from the two component devices.  */static void sp804_set_irq(void *opaque, int irq, int level){    sp804_state *s = (sp804_state *)opaque;    s->level[irq] = level;    qemu_set_irq(s->irq, s->level[0] || s->level[1]);}static uint32_t sp804_read(void *opaque, target_phys_addr_t offset){    sp804_state *s = (sp804_state *)opaque;    /* ??? Don't know the PrimeCell ID for this device.  */    offset -= s->base;    if (offset < 0x20) {        return arm_timer_read(s->timer[0], offset);    } else {        return arm_timer_read(s->timer[1], offset - 0x20);    }}static void sp804_write(void *opaque, target_phys_addr_t offset,                        uint32_t value){    sp804_state *s = (sp804_state *)opaque;    offset -= s->base;    if (offset < 0x20) {        arm_timer_write(s->timer[0], offset, value);    } else {        arm_timer_write(s->timer[1], offset - 0x20, value);    }}static CPUReadMemoryFunc *sp804_readfn[] = {   sp804_read,   sp804_read,   sp804_read};static CPUWriteMemoryFunc *sp804_writefn[] = {   sp804_write,   sp804_write,   sp804_write};void sp804_init(uint32_t base, qemu_irq irq){    int iomemtype;    sp804_state *s;    qemu_irq *qi;    s = (sp804_state *)qemu_mallocz(sizeof(sp804_state));    qi = qemu_allocate_irqs(sp804_set_irq, s, 2);    s->base = base;    s->irq = irq;    /* ??? The timers are actually configurable between 32kHz and 1MHz, but       we don't implement that.  */    s->timer[0] = arm_timer_init(1000000, qi[0]);    s->timer[1] = arm_timer_init(1000000, qi[1]);    iomemtype = cpu_register_io_memory(0, sp804_readfn,                                       sp804_writefn, s);    cpu_register_physical_memory(base, 0x00001000, iomemtype);    /* ??? Save/restore.  */}/* Integrator/CP timer module.  */typedef struct {    void *timer[3];    uint32_t base;} icp_pit_state;static uint32_t icp_pit_read(void *opaque, target_phys_addr_t offset){    icp_pit_state *s = (icp_pit_state *)opaque;    int n;    /* ??? Don't know the PrimeCell ID for this device.  */    offset -= s->base;    n = offset >> 8;    if (n > 3)        cpu_abort(cpu_single_env, "sp804_read: Bad timer %d\n", n);    return arm_timer_read(s->timer[n], offset & 0xff);}static void icp_pit_write(void *opaque, target_phys_addr_t offset,                          uint32_t value){    icp_pit_state *s = (icp_pit_state *)opaque;    int n;    offset -= s->base;    n = offset >> 8;    if (n > 3)        cpu_abort(cpu_single_env, "sp804_write: Bad timer %d\n", n);    arm_timer_write(s->timer[n], offset & 0xff, value);}static CPUReadMemoryFunc *icp_pit_readfn[] = {   icp_pit_read,   icp_pit_read,   icp_pit_read};static CPUWriteMemoryFunc *icp_pit_writefn[] = {   icp_pit_write,   icp_pit_write,   icp_pit_write};void icp_pit_init(uint32_t base, qemu_irq *pic, int irq){    int iomemtype;    icp_pit_state *s;    s = (icp_pit_state *)qemu_mallocz(sizeof(icp_pit_state));    s->base = base;    /* Timer 0 runs at the system clock speed (40MHz).  */    s->timer[0] = arm_timer_init(40000000, pic[irq]);    /* The other two timers run at 1MHz.  */    s->timer[1] = arm_timer_init(1000000, pic[irq + 1]);    s->timer[2] = arm_timer_init(1000000, pic[irq + 2]);    iomemtype = cpu_register_io_memory(0, icp_pit_readfn,                                       icp_pit_writefn, s);    cpu_register_physical_memory(base, 0x00001000, iomemtype);    /* ??? Save/restore.  */}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美午夜精品免费| 日韩一二三四区| 日韩欧美一区在线观看| 中文字幕av不卡| 午夜精品成人在线视频| 成人网男人的天堂| 久久综合色鬼综合色| 亚洲国产精品嫩草影院| 粉嫩欧美一区二区三区高清影视| 欧美日韩国产成人在线91| 亚洲国产激情av| 精品一区二区三区影院在线午夜| 欧美性做爰猛烈叫床潮| 成人欧美一区二区三区1314| 国内精品嫩模私拍在线| 欧美高清你懂得| 一区二区三区精品久久久| 国产精品一区二区你懂的| 欧美成人激情免费网| 五月综合激情日本mⅴ| 在线观看欧美日本| 亚洲色图视频免费播放| 成人教育av在线| 国产蜜臀97一区二区三区| 国产在线播放一区| 26uuu亚洲| 精品亚洲成a人在线观看| 日韩视频一区二区| 蜜桃视频一区二区| 日韩美女视频在线| 99v久久综合狠狠综合久久| 精品国产99国产精品| 麻豆中文一区二区| 欧美精品一区二区三区蜜桃视频| 精品一区二区三区日韩| 久久综合九色综合97婷婷女人| 麻豆精品一区二区综合av| 日韩三级视频在线观看| 精品一区二区三区影院在线午夜| 精品国产一区二区在线观看| 国产一区二区三区不卡在线观看| 久久综合资源网| 不卡一卡二卡三乱码免费网站| 国产精品无人区| 色噜噜狠狠色综合欧洲selulu| 成人欧美一区二区三区| 在线视频欧美精品| 日韩精品久久久久久| 日韩精品中文字幕一区二区三区| 九九在线精品视频| 中文成人av在线| 91麻豆免费视频| 日韩精品欧美精品| 久久九九久久九九| 波多野结衣精品在线| 亚洲在线观看免费视频| 欧美丰满美乳xxx高潮www| 黑人巨大精品欧美黑白配亚洲| 欧美激情一区二区三区蜜桃视频 | 26uuuu精品一区二区| 精品夜夜嗨av一区二区三区| 日av在线不卡| 国产精品网站在线| 欧美又粗又大又爽| 国产在线视频精品一区| 亚洲精品写真福利| 久久综合精品国产一区二区三区| 不卡免费追剧大全电视剧网站| 亚洲午夜三级在线| 久久久一区二区三区| 欧美综合色免费| 国产在线精品一区二区三区不卡| 亚洲蜜臀av乱码久久精品| 91麻豆精品国产91久久久久久久久 | 97se亚洲国产综合在线| 奇米四色…亚洲| 中文字幕亚洲成人| 日韩精品最新网址| 欧美亚洲动漫精品| 国产精品一区二区男女羞羞无遮挡 | 久久久精品日韩欧美| 欧洲国内综合视频| 国产精品一级黄| 丝袜亚洲精品中文字幕一区| 国产精品日产欧美久久久久| 在线播放中文一区| 色av一区二区| 成人手机电影网| 久久99久久精品| 伊人婷婷欧美激情| 石原莉奈在线亚洲二区| 国产精品久久久久久户外露出 | 久国产精品韩国三级视频| 一区二区三区四区国产精品| 久久精品人人做人人综合| 欧美日韩精品久久久| av一区二区三区在线| 精品一区二区三区蜜桃| 日韩在线a电影| 亚洲综合免费观看高清完整版 | 欧美一a一片一级一片| youjizz国产精品| 国产.欧美.日韩| 国产精品亚洲人在线观看| 久久精品国产在热久久| 丝袜亚洲精品中文字幕一区| 午夜精品在线看| 亚洲一二三四在线观看| 夜夜嗨av一区二区三区中文字幕| 成人欧美一区二区三区在线播放| 久久人人爽人人爽| 久久久亚洲午夜电影| 久久影院视频免费| 2020日本不卡一区二区视频| 久久男人中文字幕资源站| 亚洲一二三四区不卡| 五月天激情小说综合| 婷婷中文字幕综合| 肉丝袜脚交视频一区二区| 亚洲一区二区三区四区在线观看| 亚洲精品美国一| 丝袜亚洲另类丝袜在线| 免播放器亚洲一区| 久久精品国产久精国产| 激情综合色综合久久综合| 国产老女人精品毛片久久| 不卡av免费在线观看| 99精品热视频| 色视频成人在线观看免| 欧美性大战久久| 日韩一区二区高清| 久久久精品免费网站| 国产精品麻豆一区二区| 一区二区三区视频在线看| 图片区日韩欧美亚洲| 久久精品国产久精国产爱| 岛国精品在线播放| 欧美最猛性xxxxx直播| 日韩一本二本av| 久久精品人人做人人爽97| 亚洲少妇中出一区| 午夜国产精品影院在线观看| 久久99精品久久久| 不卡一区二区中文字幕| 欧美疯狂做受xxxx富婆| 久久老女人爱爱| 一区二区三区不卡在线观看 | 欧美变态凌虐bdsm| 国产精品久久久久婷婷| 亚洲18影院在线观看| 国内精品久久久久影院一蜜桃| youjizz国产精品| 日韩欧美一区电影| 亚洲视频狠狠干| 国产一区二区主播在线| 91久久精品一区二区三区| 欧美一卡二卡在线| 中文字幕高清一区| 日韩高清在线电影| 99在线视频精品| 久久综合五月天婷婷伊人| 亚洲第一搞黄网站| 国产91清纯白嫩初高中在线观看| 欧美亚洲国产怡红院影院| 天天操天天干天天综合网| 成人妖精视频yjsp地址| 6080午夜不卡| 一区二区三区在线观看网站| 国产精品一区二区x88av| 欧美伦理电影网| 专区另类欧美日韩| 国产乱码一区二区三区| 在线不卡a资源高清| 一区二区欧美在线观看| 粉嫩一区二区三区性色av| 精品久久久久久久久久久久久久久 | 色综合色狠狠天天综合色| 亚洲精品一区二区三区影院| 亚洲国产成人porn| 色域天天综合网| 亚洲国产精华液网站w| 国产一区二区免费视频| 日韩亚洲欧美高清| 首页国产丝袜综合| 欧美日韩一级片在线观看| 亚洲丝袜美腿综合| 国产成a人亚洲| 久久久亚洲国产美女国产盗摄| 久久精品国产亚洲5555| 欧美α欧美αv大片| 丝袜脚交一区二区| 欧美精品久久一区二区三区| 一个色在线综合| 欧美亚洲综合一区| 亚洲国产欧美日韩另类综合 | 午夜国产精品影院在线观看| 欧美综合一区二区| 亚洲国产精品一区二区尤物区| 色综合激情五月| 亚洲成av人综合在线观看|