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

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

?? arm_gic.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
?? 第 1 頁 / 共 2 頁
字號:
#endif    } else if (offset < 0xfe0) {        goto bad_reg;    } else /* offset >= 0xfe0 */ {        if (offset & 3) {            res = 0;        } else {            res = gic_id[(offset - 0xfe0) >> 2];        }    }    return res;bad_reg:    cpu_abort(cpu_single_env, "gic_dist_readb: Bad offset %x\n", (int)offset);    return 0;}static uint32_t gic_dist_readw(void *opaque, target_phys_addr_t offset){    uint32_t val;    val = gic_dist_readb(opaque, offset);    val |= gic_dist_readb(opaque, offset + 1) << 8;    return val;}static uint32_t gic_dist_readl(void *opaque, target_phys_addr_t offset){    uint32_t val;#ifdef NVIC    gic_state *s = (gic_state *)opaque;    uint32_t addr;    addr = offset - s->base;    if (addr < 0x100 || addr > 0xd00)        return nvic_readl(s->nvic, addr);#endif    val = gic_dist_readw(opaque, offset);    val |= gic_dist_readw(opaque, offset + 2) << 16;    return val;}static void gic_dist_writeb(void *opaque, target_phys_addr_t offset,                            uint32_t value){    gic_state *s = (gic_state *)opaque;    int irq;    int i;    int cpu;    cpu = gic_get_current_cpu();    offset -= s->base + GIC_DIST_OFFSET;    if (offset < 0x100) {#ifdef NVIC        goto bad_reg;#else        if (offset == 0) {            s->enabled = (value & 1);            DPRINTF("Distribution %sabled\n", s->enabled ? "En" : "Dis");        } else if (offset < 4) {            /* ignored.  */        } else {            goto bad_reg;        }#endif    } else if (offset < 0x180) {        /* Interrupt Set Enable.  */        irq = (offset - 0x100) * 8 + GIC_BASE_IRQ;        if (irq >= GIC_NIRQ)            goto bad_reg;        if (irq < 16)          value = 0xff;        for (i = 0; i < 8; i++) {            if (value & (1 << i)) {                int mask = (irq < 32) ? (1 << cpu) : GIC_TARGET(irq);                if (!GIC_TEST_ENABLED(irq + i))                    DPRINTF("Enabled IRQ %d\n", irq + i);                GIC_SET_ENABLED(irq + i);                /* If a raised level triggered IRQ enabled then mark                   is as pending.  */                if (GIC_TEST_LEVEL(irq + i, mask)                        && !GIC_TEST_TRIGGER(irq + i)) {                    DPRINTF("Set %d pending mask %x\n", irq + i, mask);                    GIC_SET_PENDING(irq + i, mask);                }            }        }    } else if (offset < 0x200) {        /* Interrupt Clear Enable.  */        irq = (offset - 0x180) * 8 + GIC_BASE_IRQ;        if (irq >= GIC_NIRQ)            goto bad_reg;        if (irq < 16)          value = 0;        for (i = 0; i < 8; i++) {            if (value & (1 << i)) {                if (GIC_TEST_ENABLED(irq + i))                    DPRINTF("Disabled IRQ %d\n", irq + i);                GIC_CLEAR_ENABLED(irq + i);            }        }    } else if (offset < 0x280) {        /* Interrupt Set Pending.  */        irq = (offset - 0x200) * 8 + GIC_BASE_IRQ;        if (irq >= GIC_NIRQ)            goto bad_reg;        if (irq < 16)          irq = 0;        for (i = 0; i < 8; i++) {            if (value & (1 << i)) {                GIC_SET_PENDING(irq + i, GIC_TARGET(irq));            }        }    } else if (offset < 0x300) {        /* Interrupt Clear Pending.  */        irq = (offset - 0x280) * 8 + GIC_BASE_IRQ;        if (irq >= GIC_NIRQ)            goto bad_reg;        for (i = 0; i < 8; i++) {            /* ??? This currently clears the pending bit for all CPUs, even               for per-CPU interrupts.  It's unclear whether this is the               corect behavior.  */            if (value & (1 << i)) {                GIC_CLEAR_PENDING(irq + i, ALL_CPU_MASK);            }        }    } else if (offset < 0x400) {        /* Interrupt Active.  */        goto bad_reg;    } else if (offset < 0x800) {        /* Interrupt Priority.  */        irq = (offset - 0x400) + GIC_BASE_IRQ;        if (irq >= GIC_NIRQ)            goto bad_reg;        if (irq < 32) {            s->priority1[irq][cpu] = value;        } else {            s->priority2[irq - 32] = value;        }#ifndef NVIC    } else if (offset < 0xc00) {        /* Interrupt CPU Target.  */        irq = (offset - 0x800) + GIC_BASE_IRQ;        if (irq >= GIC_NIRQ)            goto bad_reg;        if (irq < 29)            value = 0;        else if (irq < 32)            value = ALL_CPU_MASK;        s->irq_target[irq] = value & ALL_CPU_MASK;    } else if (offset < 0xf00) {        /* Interrupt Configuration.  */        irq = (offset - 0xc00) * 4 + GIC_BASE_IRQ;        if (irq >= GIC_NIRQ)            goto bad_reg;        if (irq < 32)            value |= 0xaa;        for (i = 0; i < 4; i++) {            if (value & (1 << (i * 2))) {                GIC_SET_MODEL(irq + i);            } else {                GIC_CLEAR_MODEL(irq + i);            }            if (value & (2 << (i * 2))) {                GIC_SET_TRIGGER(irq + i);            } else {                GIC_CLEAR_TRIGGER(irq + i);            }        }#endif    } else {        /* 0xf00 is only handled for 32-bit writes.  */        goto bad_reg;    }    gic_update(s);    return;bad_reg:    cpu_abort(cpu_single_env, "gic_dist_writeb: Bad offset %x\n", (int)offset);}static void gic_dist_writew(void *opaque, target_phys_addr_t offset,                            uint32_t value){    gic_dist_writeb(opaque, offset, value & 0xff);    gic_dist_writeb(opaque, offset + 1, value >> 8);}static void gic_dist_writel(void *opaque, target_phys_addr_t offset,                            uint32_t value){    gic_state *s = (gic_state *)opaque;#ifdef NVIC    uint32_t addr;    addr = offset - s->base;    if (addr < 0x100 || (addr > 0xd00 && addr != 0xf00)) {        nvic_writel(s->nvic, addr, value);        return;    }#endif    if (offset - s->base == GIC_DIST_OFFSET + 0xf00) {        int cpu;        int irq;        int mask;        cpu = gic_get_current_cpu();        irq = value & 0x3ff;        switch ((value >> 24) & 3) {        case 0:            mask = (value >> 16) & ALL_CPU_MASK;            break;        case 1:            mask = 1 << cpu;            break;        case 2:            mask = ALL_CPU_MASK ^ (1 << cpu);            break;        default:            DPRINTF("Bad Soft Int target filter\n");            mask = ALL_CPU_MASK;            break;        }        GIC_SET_PENDING(irq, mask);        gic_update(s);        return;    }    gic_dist_writew(opaque, offset, value & 0xffff);    gic_dist_writew(opaque, offset + 2, value >> 16);}static CPUReadMemoryFunc *gic_dist_readfn[] = {   gic_dist_readb,   gic_dist_readw,   gic_dist_readl};static CPUWriteMemoryFunc *gic_dist_writefn[] = {   gic_dist_writeb,   gic_dist_writew,   gic_dist_writel};#ifndef NVICstatic uint32_t gic_cpu_read(gic_state *s, int cpu, int offset){    switch (offset) {    case 0x00: /* Control */        return s->cpu_enabled[cpu];    case 0x04: /* Priority mask */        return s->priority_mask[cpu];    case 0x08: /* Binary Point */        /* ??? Not implemented.  */        return 0;    case 0x0c: /* Acknowledge */        return gic_acknowledge_irq(s, cpu);    case 0x14: /* Runing Priority */        return s->running_priority[cpu];    case 0x18: /* Highest Pending Interrupt */        return s->current_pending[cpu];    default:        cpu_abort(cpu_single_env, "gic_cpu_read: Bad offset %x\n",                  (int)offset);        return 0;    }}static void gic_cpu_write(gic_state *s, int cpu, int offset, uint32_t value){    switch (offset) {    case 0x00: /* Control */        s->cpu_enabled[cpu] = (value & 1);        DPRINTF("CPU %sabled\n", s->cpu_enabled ? "En" : "Dis");        break;    case 0x04: /* Priority mask */        s->priority_mask[cpu] = (value & 0xff);        break;    case 0x08: /* Binary Point */        /* ??? Not implemented.  */        break;    case 0x10: /* End Of Interrupt */        return gic_complete_irq(s, cpu, value & 0x3ff);    default:        cpu_abort(cpu_single_env, "gic_cpu_write: Bad offset %x\n",                  (int)offset);        return;    }    gic_update(s);}#endifstatic void gic_reset(gic_state *s){    int i;    memset(s->irq_state, 0, GIC_NIRQ * sizeof(gic_irq_state));    for (i = 0 ; i < NCPU; i++) {        s->priority_mask[i] = 0xf0;        s->current_pending[i] = 1023;        s->running_irq[i] = 1023;        s->running_priority[i] = 0x100;#ifdef NVIC        /* The NVIC doesn't have per-cpu interfaces, so enable by default.  */        s->cpu_enabled[i] = 1;#else        s->cpu_enabled[i] = 0;#endif    }    for (i = 0; i < 16; i++) {        GIC_SET_ENABLED(i);        GIC_SET_TRIGGER(i);    }#ifdef NVIC    /* The NVIC is always enabled.  */    s->enabled = 1;#else    s->enabled = 0;#endif}static gic_state *gic_init(uint32_t base, qemu_irq *parent_irq){    gic_state *s;    int iomemtype;    int i;    s = (gic_state *)qemu_mallocz(sizeof(gic_state));    if (!s)        return NULL;    s->in = qemu_allocate_irqs(gic_set_irq, s, GIC_NIRQ);    for (i = 0; i < NCPU; i++) {        s->parent_irq[i] = parent_irq[i];    }    iomemtype = cpu_register_io_memory(0, gic_dist_readfn,                                       gic_dist_writefn, s);    cpu_register_physical_memory(base + GIC_DIST_OFFSET, 0x00001000,                                 iomemtype);    s->base = base;    gic_reset(s);    return s;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久嫩草精品久久久久| 成人听书哪个软件好| 日韩国产精品久久| 婷婷综合久久一区二区三区| 午夜国产不卡在线观看视频| 老司机免费视频一区二区 | 久久国产精品色婷婷| 久久精品72免费观看| 国产 日韩 欧美大片| 一本大道av一区二区在线播放 | 国产99久久久精品| www.亚洲色图.com| 欧美精品一二三| 精品久久久久久无| 中文字幕av一区二区三区免费看| 亚洲一区二区三区四区在线| 日韩高清欧美激情| 国产乱色国产精品免费视频| 国产成人aaaa| 欧美在线观看禁18| 欧美大片免费久久精品三p| 精品久久久久香蕉网| 一区二区三区日韩| 蜜桃视频一区二区| 成年人国产精品| 日韩亚洲欧美一区二区三区| 久久九九全国免费| 一区二区三区日韩精品视频| 国模少妇一区二区三区| 91婷婷韩国欧美一区二区| 欧美日韩卡一卡二| 欧美国产综合一区二区| 男女男精品视频网| www.欧美精品一二区| 欧美另类久久久品| 亚洲欧美综合色| 美美哒免费高清在线观看视频一区二区| 国内偷窥港台综合视频在线播放| 99精品欧美一区二区三区小说| 欧美丰满高潮xxxx喷水动漫| 中文字幕av资源一区| 久久99国产精品成人| 91理论电影在线观看| 日韩视频在线你懂得| 国产亚洲一二三区| 婷婷久久综合九色综合伊人色| 风间由美一区二区三区在线观看| 欧美日韩一区三区| 亚洲欧洲av另类| 日本怡春院一区二区| 日本福利一区二区| 国产亚洲制服色| 免费看黄色91| 欧美妇女性影城| √…a在线天堂一区| 精品一区二区在线看| 7878成人国产在线观看| 亚洲少妇30p| 国产麻豆9l精品三级站| 精品日韩一区二区三区免费视频| 亚洲激情第一区| 成人黄页在线观看| 日韩视频免费直播| 亚洲成人黄色小说| 91一区二区在线观看| 99亚偷拍自图区亚洲| 久久久久久久电影| 亚洲国产日韩综合久久精品| 成人成人成人在线视频| 欧美人伦禁忌dvd放荡欲情| 国产精品成人免费在线| 国产麻豆欧美日韩一区| 欧美r级在线观看| 五月婷婷激情综合网| 欧美日韩1区2区| 亚洲中国最大av网站| 91免费在线看| 国产欧美日韩不卡| 国产一区二区三区蝌蚪| 欧美成人一区二区三区在线观看| 五月综合激情婷婷六月色窝| 欧美日韩亚洲综合一区二区三区| 亚洲精品日韩专区silk| 丁香天五香天堂综合| 国产精品家庭影院| 成人精品在线视频观看| 国产欧美日韩另类一区| 99久久国产综合精品色伊 | 国产呦精品一区二区三区网站| 欧美三级电影在线观看| 亚洲福利一二三区| 欧美中文字幕不卡| 亚洲午夜电影网| 91麻豆.com| 一区二区三区四区乱视频| 色94色欧美sute亚洲13| 亚洲综合视频网| 欧美在线观看视频在线| 亚洲一区免费视频| 欧美一区二区视频观看视频| 日本va欧美va精品| 日韩一区二区免费电影| 韩国欧美国产1区| 国产欧美日韩精品一区| 成人av在线一区二区三区| 日韩一二在线观看| 国产精品一级二级三级| 国产欧美综合色| 国产一区二区三区免费观看| 自拍偷拍亚洲激情| 在线亚洲精品福利网址导航| 亚洲精品免费视频| 欧美一卡在线观看| 国产自产v一区二区三区c| 久久久99免费| 在线视频亚洲一区| 青青青爽久久午夜综合久久午夜| 91精品国产高清一区二区三区 | 成人综合激情网| 国产精品久久一级| 成人免费视频视频在线观看免费| 一色桃子久久精品亚洲| 欧美性xxxxx极品少妇| 视频在线观看91| 国产精品丝袜在线| 欧美探花视频资源| 捆绑调教一区二区三区| 综合欧美亚洲日本| 欧美视频在线一区| 久久99久久久久| 欧美极品少妇xxxxⅹ高跟鞋| 色一情一乱一乱一91av| 亚洲欧美乱综合| 91精品国产综合久久精品app| 久久99国内精品| 国产精品久久久久桃色tv| 在线视频一区二区三区| 蜜桃一区二区三区在线| 久久久久久久久伊人| 在线观看免费成人| 精品无人区卡一卡二卡三乱码免费卡| 国产欧美一二三区| 在线观看三级视频欧美| 极品尤物av久久免费看| 成人欧美一区二区三区视频网页| 成人黄页在线观看| 国精品**一区二区三区在线蜜桃| 成人免费在线观看入口| 日韩一区二区精品葵司在线| 国产在线不卡一卡二卡三卡四卡| 亚洲丝袜另类动漫二区| 日韩一区二区在线看片| 国产成人综合亚洲91猫咪| 日本美女视频一区二区| 成人欧美一区二区三区| 欧美色大人视频| 99re8在线精品视频免费播放| 日本欧美肥老太交大片| 久久久久国色av免费看影院| 欧美一区二区日韩| 色婷婷综合久久久久中文一区二区| 亚洲一二三区在线观看| 亚洲欧洲色图综合| 精品久久久久久久久久久久久久久 | 性欧美大战久久久久久久久| 欧美一区三区二区| 欧美日韩国产影片| 91老师片黄在线观看| av亚洲精华国产精华| 精品一区二区久久| 日韩国产成人精品| 狠狠色丁香久久婷婷综合丁香| 久久这里只有精品6| 在线视频一区二区三| 国产成人免费在线观看| 麻豆国产欧美一区二区三区| 亚洲福利电影网| 亚洲综合偷拍欧美一区色| 亚洲天堂成人在线观看| 国产精品久久久一本精品| 精品国产三级a在线观看| 日韩欧美亚洲另类制服综合在线| 欧美无人高清视频在线观看| 色噜噜夜夜夜综合网| 不卡欧美aaaaa| 91在线高清观看| 91免费在线视频观看| 色综合天天狠狠| 91福利区一区二区三区| 色噜噜狠狠成人中文综合| 一本色道a无线码一区v| 一本色道久久加勒比精品| 在线亚洲一区观看| 欧美色网站导航| 欧美丰满美乳xxx高潮www| 日韩午夜电影在线观看| 日韩欧美三级在线| 2022国产精品视频| 中文字幕精品—区二区四季| 亚洲欧洲日韩综合一区二区|