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

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

?? omap.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* * TI OMAP processors emulation. * * Copyright (C) 2006-2007 Andrzej Zaborowski  <balrog@zabor.org> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA */#include "hw.h"#include "arm-misc.h"#include "omap.h"#include "sysemu.h"#include "qemu-timer.h"/* We use pc-style serial ports.  */#include "pc.h"/* Should signal the TCMI */uint32_t omap_badwidth_read8(void *opaque, target_phys_addr_t addr){    uint8_t ret;    OMAP_8B_REG(addr);    cpu_physical_memory_read(addr, (void *) &ret, 1);    return ret;}void omap_badwidth_write8(void *opaque, target_phys_addr_t addr,                uint32_t value){    uint8_t val8 = value;    OMAP_8B_REG(addr);    cpu_physical_memory_write(addr, (void *) &val8, 1);}uint32_t omap_badwidth_read16(void *opaque, target_phys_addr_t addr){    uint16_t ret;    OMAP_16B_REG(addr);    cpu_physical_memory_read(addr, (void *) &ret, 2);    return ret;}void omap_badwidth_write16(void *opaque, target_phys_addr_t addr,                uint32_t value){    uint16_t val16 = value;    OMAP_16B_REG(addr);    cpu_physical_memory_write(addr, (void *) &val16, 2);}uint32_t omap_badwidth_read32(void *opaque, target_phys_addr_t addr){    uint32_t ret;    OMAP_32B_REG(addr);    cpu_physical_memory_read(addr, (void *) &ret, 4);    return ret;}void omap_badwidth_write32(void *opaque, target_phys_addr_t addr,                uint32_t value){    OMAP_32B_REG(addr);    cpu_physical_memory_write(addr, (void *) &value, 4);}/* Interrupt Handlers */struct omap_intr_handler_bank_s {    uint32_t irqs;    uint32_t inputs;    uint32_t mask;    uint32_t fiq;    uint32_t sens_edge;    unsigned char priority[32];};struct omap_intr_handler_s {    qemu_irq *pins;    qemu_irq parent_intr[2];    target_phys_addr_t base;    unsigned char nbanks;    /* state */    uint32_t new_agr[2];    int sir_intr[2];    struct omap_intr_handler_bank_s banks[];};static void omap_inth_sir_update(struct omap_intr_handler_s *s, int is_fiq){    int i, j, sir_intr, p_intr, p, f;    uint32_t level;    sir_intr = 0;    p_intr = 255;    /* Find the interrupt line with the highest dynamic priority.     * Note: 0 denotes the hightest priority.     * If all interrupts have the same priority, the default order is IRQ_N,     * IRQ_N-1,...,IRQ_0. */    for (j = 0; j < s->nbanks; ++j) {        level = s->banks[j].irqs & ~s->banks[j].mask &                (is_fiq ? s->banks[j].fiq : ~s->banks[j].fiq);        for (f = ffs(level), i = f - 1, level >>= f - 1; f; i += f,                        level >>= f) {            p = s->banks[j].priority[i];            if (p <= p_intr) {                p_intr = p;                sir_intr = 32 * j + i;            }            f = ffs(level >> 1);        }    }    s->sir_intr[is_fiq] = sir_intr;}static inline void omap_inth_update(struct omap_intr_handler_s *s, int is_fiq){    int i;    uint32_t has_intr = 0;    for (i = 0; i < s->nbanks; ++i)        has_intr |= s->banks[i].irqs & ~s->banks[i].mask &                (is_fiq ? s->banks[i].fiq : ~s->banks[i].fiq);    if (s->new_agr[is_fiq] && has_intr) {        s->new_agr[is_fiq] = 0;        omap_inth_sir_update(s, is_fiq);        qemu_set_irq(s->parent_intr[is_fiq], 1);    }}#define INT_FALLING_EDGE	0#define INT_LOW_LEVEL		1static void omap_set_intr(void *opaque, int irq, int req){    struct omap_intr_handler_s *ih = (struct omap_intr_handler_s *) opaque;    uint32_t rise;    struct omap_intr_handler_bank_s *bank = &ih->banks[irq >> 5];    int n = irq & 31;    if (req) {        rise = ~bank->irqs & (1 << n);        if (~bank->sens_edge & (1 << n))            rise &= ~bank->inputs & (1 << n);        bank->inputs |= (1 << n);        if (rise) {            bank->irqs |= rise;            omap_inth_update(ih, 0);            omap_inth_update(ih, 1);        }    } else {        rise = bank->sens_edge & bank->irqs & (1 << n);        bank->irqs &= ~rise;        bank->inputs &= ~(1 << n);    }}static uint32_t omap_inth_read(void *opaque, target_phys_addr_t addr){    struct omap_intr_handler_s *s = (struct omap_intr_handler_s *) opaque;    int i, offset = addr - s->base;    int bank_no = offset >> 8;    int line_no;    struct omap_intr_handler_bank_s *bank = &s->banks[bank_no];    offset &= 0xff;    switch (offset) {    case 0x00:	/* ITR */        return bank->irqs;    case 0x04:	/* MIR */        return bank->mask;    case 0x10:	/* SIR_IRQ_CODE */    case 0x14:  /* SIR_FIQ_CODE */        if (bank_no != 0)            break;        line_no = s->sir_intr[(offset - 0x10) >> 2];        bank = &s->banks[line_no >> 5];        i = line_no & 31;        if (((bank->sens_edge >> i) & 1) == INT_FALLING_EDGE)            bank->irqs &= ~(1 << i);        return line_no;    case 0x18:	/* CONTROL_REG */        if (bank_no != 0)            break;        return 0;    case 0x1c:	/* ILR0 */    case 0x20:	/* ILR1 */    case 0x24:	/* ILR2 */    case 0x28:	/* ILR3 */    case 0x2c:	/* ILR4 */    case 0x30:	/* ILR5 */    case 0x34:	/* ILR6 */    case 0x38:	/* ILR7 */    case 0x3c:	/* ILR8 */    case 0x40:	/* ILR9 */    case 0x44:	/* ILR10 */    case 0x48:	/* ILR11 */    case 0x4c:	/* ILR12 */    case 0x50:	/* ILR13 */    case 0x54:	/* ILR14 */    case 0x58:	/* ILR15 */    case 0x5c:	/* ILR16 */    case 0x60:	/* ILR17 */    case 0x64:	/* ILR18 */    case 0x68:	/* ILR19 */    case 0x6c:	/* ILR20 */    case 0x70:	/* ILR21 */    case 0x74:	/* ILR22 */    case 0x78:	/* ILR23 */    case 0x7c:	/* ILR24 */    case 0x80:	/* ILR25 */    case 0x84:	/* ILR26 */    case 0x88:	/* ILR27 */    case 0x8c:	/* ILR28 */    case 0x90:	/* ILR29 */    case 0x94:	/* ILR30 */    case 0x98:	/* ILR31 */        i = (offset - 0x1c) >> 2;        return (bank->priority[i] << 2) |                (((bank->sens_edge >> i) & 1) << 1) |                ((bank->fiq >> i) & 1);    case 0x9c:	/* ISR */        return 0x00000000;    }    OMAP_BAD_REG(addr);    return 0;}static void omap_inth_write(void *opaque, target_phys_addr_t addr,                uint32_t value){    struct omap_intr_handler_s *s = (struct omap_intr_handler_s *) opaque;    int i, offset = addr - s->base;    int bank_no = offset >> 8;    struct omap_intr_handler_bank_s *bank = &s->banks[bank_no];    offset &= 0xff;    switch (offset) {    case 0x00:	/* ITR */        /* Important: ignore the clearing if the IRQ is level-triggered and           the input bit is 1 */        bank->irqs &= value | (bank->inputs & bank->sens_edge);        return;    case 0x04:	/* MIR */        bank->mask = value;        omap_inth_update(s, 0);        omap_inth_update(s, 1);        return;    case 0x10:	/* SIR_IRQ_CODE */    case 0x14:	/* SIR_FIQ_CODE */        OMAP_RO_REG(addr);        break;    case 0x18:	/* CONTROL_REG */        if (bank_no != 0)            break;        if (value & 2) {            qemu_set_irq(s->parent_intr[1], 0);            s->new_agr[1] = ~0;            omap_inth_update(s, 1);        }        if (value & 1) {            qemu_set_irq(s->parent_intr[0], 0);            s->new_agr[0] = ~0;            omap_inth_update(s, 0);        }        return;    case 0x1c:	/* ILR0 */    case 0x20:	/* ILR1 */    case 0x24:	/* ILR2 */    case 0x28:	/* ILR3 */    case 0x2c:	/* ILR4 */    case 0x30:	/* ILR5 */    case 0x34:	/* ILR6 */    case 0x38:	/* ILR7 */    case 0x3c:	/* ILR8 */    case 0x40:	/* ILR9 */    case 0x44:	/* ILR10 */    case 0x48:	/* ILR11 */    case 0x4c:	/* ILR12 */    case 0x50:	/* ILR13 */    case 0x54:	/* ILR14 */    case 0x58:	/* ILR15 */    case 0x5c:	/* ILR16 */    case 0x60:	/* ILR17 */    case 0x64:	/* ILR18 */    case 0x68:	/* ILR19 */    case 0x6c:	/* ILR20 */    case 0x70:	/* ILR21 */    case 0x74:	/* ILR22 */    case 0x78:	/* ILR23 */    case 0x7c:	/* ILR24 */    case 0x80:	/* ILR25 */    case 0x84:	/* ILR26 */    case 0x88:	/* ILR27 */    case 0x8c:	/* ILR28 */    case 0x90:	/* ILR29 */    case 0x94:	/* ILR30 */    case 0x98:	/* ILR31 */        i = (offset - 0x1c) >> 2;        bank->priority[i] = (value >> 2) & 0x1f;        bank->sens_edge &= ~(1 << i);        bank->sens_edge |= ((value >> 1) & 1) << i;        bank->fiq &= ~(1 << i);        bank->fiq |= (value & 1) << i;        return;    case 0x9c:	/* ISR */        for (i = 0; i < 32; i ++)            if (value & (1 << i)) {                omap_set_intr(s, 32 * bank_no + i, 1);                return;            }        return;    }    OMAP_BAD_REG(addr);}static CPUReadMemoryFunc *omap_inth_readfn[] = {    omap_badwidth_read32,    omap_badwidth_read32,    omap_inth_read,};static CPUWriteMemoryFunc *omap_inth_writefn[] = {    omap_inth_write,    omap_inth_write,    omap_inth_write,};void omap_inth_reset(struct omap_intr_handler_s *s){    int i;    for (i = 0; i < s->nbanks; ++i){        s->banks[i].irqs = 0x00000000;        s->banks[i].mask = 0xffffffff;        s->banks[i].sens_edge = 0x00000000;        s->banks[i].fiq = 0x00000000;        s->banks[i].inputs = 0x00000000;        memset(s->banks[i].priority, 0, sizeof(s->banks[i].priority));    }    s->new_agr[0] = ~0;    s->new_agr[1] = ~0;    s->sir_intr[0] = 0;    s->sir_intr[1] = 0;    qemu_set_irq(s->parent_intr[0], 0);    qemu_set_irq(s->parent_intr[1], 0);}struct omap_intr_handler_s *omap_inth_init(target_phys_addr_t base,                unsigned long size, unsigned char nbanks,                qemu_irq parent_irq, qemu_irq parent_fiq, omap_clk clk){    int iomemtype;    struct omap_intr_handler_s *s = (struct omap_intr_handler_s *)            qemu_mallocz(sizeof(struct omap_intr_handler_s) +                            sizeof(struct omap_intr_handler_bank_s) * nbanks);    s->parent_intr[0] = parent_irq;    s->parent_intr[1] = parent_fiq;    s->base = base;    s->nbanks = nbanks;    s->pins = qemu_allocate_irqs(omap_set_intr, s, nbanks * 32);    omap_inth_reset(s);    iomemtype = cpu_register_io_memory(0, omap_inth_readfn,                    omap_inth_writefn, s);    cpu_register_physical_memory(s->base, size, iomemtype);    return s;}/* OMAP1 DMA module */struct omap_dma_channel_s {    /* transfer data */    int burst[2];    int pack[2];    enum omap_dma_port port[2];    target_phys_addr_t addr[2];    omap_dma_addressing_t mode[2];    uint16_t elements;    uint16_t frames;    int16_t frame_index[2];    int16_t element_index[2];    int data_type;    /* transfer type */    int transparent_copy;    int constant_fill;    uint32_t color;    /* auto init and linked channel data */    int end_prog;    int repeat;    int auto_init;    int link_enabled;    int link_next_ch;    /* interruption data */    int interrupts;    int status;    /* state data */    int active;    int enable;    int sync;    int pending_request;    int waiting_end_prog;    uint16_t cpc;    /* sync type */    int fs;    int bs;    /* compatibility */    int omap_3_1_compatible_disable;    qemu_irq irq;    struct omap_dma_channel_s *sibling;    struct omap_dma_reg_set_s {        target_phys_addr_t src, dest;        int frame;        int element;        int frame_delta[2];        int elem_delta[2];        int frames;        int elements;    } active_set;    /* unused parameters */    int priority;    int interleave_disabled;    int type;};struct omap_dma_s {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人亚洲精品久久久久软件| 国产精品99久久久久久宅男| 日韩国产欧美在线播放| 亚洲激情中文1区| 青青草91视频| 一本一本久久a久久精品综合麻豆| 成人综合激情网| 欧美日韩一区在线| 亚洲精品一区在线观看| 中文字幕第一区| 亚洲va韩国va欧美va精品| 国产一区二区在线观看视频| 成人教育av在线| 欧美精品一区二区三区很污很色的| 国产精品乱码一区二三区小蝌蚪| 天堂av在线一区| 成人午夜看片网址| 欧美大片日本大片免费观看| 亚洲国产人成综合网站| 成人app网站| 欧美大度的电影原声| 久久精品国产澳门| 99视频一区二区三区| 91精品国产综合久久福利| 国产精品区一区二区三| 久久97超碰色| 欧美精品一区二区三区四区 | 夜夜爽夜夜爽精品视频| 久久99久久99| 精品国产乱码久久久久久久| 天堂久久一区二区三区| 欧美怡红院视频| 亚洲精品乱码久久久久久| 成人av免费在线观看| 国产欧美精品一区二区三区四区 | 欧美日产国产精品| 亚洲综合视频网| 欧美自拍偷拍一区| 亚洲一区二区影院| 欧美白人最猛性xxxxx69交| 久久国产精品99久久人人澡| 精品噜噜噜噜久久久久久久久试看| 婷婷夜色潮精品综合在线| 欧美精品亚洲二区| 国产资源精品在线观看| 国产视频一区在线观看| av爱爱亚洲一区| 日韩精品欧美成人高清一区二区| 日韩欧美综合在线| jlzzjlzz欧美大全| 免费精品视频在线| 国产精品久久久久毛片软件| 在线视频综合导航| 国模娜娜一区二区三区| 国产精品不卡在线| 精品国产一区二区三区久久久蜜月 | 亚洲va天堂va国产va久| 国产欧美一区二区精品婷婷| 欧美日韩在线免费视频| 国产精品一区二区三区99| 亚洲一区精品在线| 国产日韩欧美激情| 精品久久久久av影院| 日本高清不卡aⅴ免费网站| 黑人精品欧美一区二区蜜桃| 一区二区三区视频在线观看| 精品国产免费人成电影在线观看四季 | 欧美精品一区二区精品网| 欧美日韩aaa| 色综合天天综合网国产成人综合天| 裸体在线国模精品偷拍| 亚洲第一在线综合网站| 中文字幕一区二区三区乱码在线 | 国内精品久久久久影院薰衣草| 亚洲h在线观看| 亚洲丰满少妇videoshd| 亚洲激情网站免费观看| 亚洲免费av在线| 艳妇臀荡乳欲伦亚洲一区| 亚洲精品成人悠悠色影视| 成人欧美一区二区三区1314| 欧美国产欧美综合| 国产亚洲视频系列| 欧美国产精品一区二区| 国产精品久久777777| 亚洲视频资源在线| 亚洲一区在线观看网站| 亚洲www啪成人一区二区麻豆| 日本欧美在线看| 国产一区二区成人久久免费影院| 国产成人亚洲综合a∨猫咪| 91在线精品秘密一区二区| 欧美日韩一区二区三区四区五区| 91精品国产欧美一区二区成人| 欧美不卡一区二区| 最新不卡av在线| 日韩黄色免费网站| 成人午夜免费av| 欧美日本一区二区在线观看| 久久综合九色综合97婷婷女人| 亚洲人成精品久久久久久| 日本不卡在线视频| 99久久精品久久久久久清纯| 欧美精品久久天天躁| 国产精品不卡视频| 国产伦理精品不卡| 欧美日本一区二区在线观看| 国产精品国产自产拍高清av王其| 亚洲gay无套男同| 不卡av电影在线播放| 精品国产一区二区精华| 一区二区三区精品久久久| 国产成人av在线影院| 欧美一级高清片| 亚洲午夜在线观看视频在线| youjizz久久| 18涩涩午夜精品.www| 99精品国产99久久久久久白柏| 日本一区二区免费在线| 国产福利一区二区三区视频| 精品国产91乱码一区二区三区| 五月天亚洲婷婷| 在线不卡中文字幕| 免费视频最近日韩| 2020国产精品久久精品美国| 国产精品自拍一区| 精品欧美乱码久久久久久1区2区| 麻豆专区一区二区三区四区五区| 欧美日韩久久久一区| 青娱乐精品在线视频| 国产午夜亚洲精品理论片色戒| 国产精品综合二区| 国产精品的网站| 欧美午夜一区二区三区| 免费欧美日韩国产三级电影| 一区二区三区在线免费观看| 欧美日韩成人激情| 国产99久久久国产精品潘金| 国产免费观看久久| 欧美午夜电影在线播放| 美女精品一区二区| 17c精品麻豆一区二区免费| 欧洲精品中文字幕| 精品一区二区影视| 夜夜揉揉日日人人青青一国产精品| 欧美精品一区二区三区在线| 欧美综合在线视频| 成人精品国产福利| 激情综合色播激情啊| 亚洲国产aⅴ天堂久久| 国产女主播视频一区二区| 欧美一区二区高清| 欧美无人高清视频在线观看| 国产精品亚洲第一区在线暖暖韩国| 亚洲综合久久av| 成人欧美一区二区三区视频网页| 欧美videossexotv100| 欧美日韩精品欧美日韩精品| 国产不卡视频在线观看| 韩国成人精品a∨在线观看| 日韩在线卡一卡二| 午夜精品久久久久久久蜜桃app| 亚洲日本va午夜在线电影| 国产偷国产偷亚洲高清人白洁| 日韩一区二区三区四区| 欧美绝品在线观看成人午夜影视| 色婷婷综合久久久| 欧美精品一二三区| 日韩视频在线观看一区二区| 欧美一区二区视频免费观看| 欧美二区三区的天堂| 3d成人动漫网站| 日韩视频一区在线观看| 久久亚洲精精品中文字幕早川悠里| 精品国产乱码久久久久久夜甘婷婷 | 国产精品久久毛片av大全日韩| 国产婷婷一区二区| 国产精品久久久久久久久免费桃花| 国产蜜臀av在线一区二区三区| 亚洲丝袜另类动漫二区| 午夜精品视频在线观看| 久久99热狠狠色一区二区| 福利一区二区在线| 欧美日韩一区二区不卡| 欧美变态tickle挠乳网站| 国产精品久久免费看| 偷窥少妇高潮呻吟av久久免费 | 欧美日韩国产色站一区二区三区| 精品少妇一区二区| 尤物av一区二区| 激情综合网激情| 欧美日韩在线电影| 国产亚洲欧洲一区高清在线观看| 亚洲视频免费在线| 国产麻豆视频精品| 欧美日韩一区二区三区视频| 国产拍欧美日韩视频二区| 日韩国产高清影视| 91成人在线观看喷潮| 日本一区二区三区久久久久久久久不|