亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
国产精品综合网| 亚洲欧洲日本在线| 韩国v欧美v亚洲v日本v| 日韩午夜在线影院| 久久精品国产成人一区二区三区| 日韩欧美国产综合一区| 国产高清无密码一区二区三区| 欧美精品一区二区在线播放| 国产盗摄女厕一区二区三区| 国产精品美女一区二区三区| 色欧美88888久久久久久影院| 亚洲国产欧美日韩另类综合| 日韩一区二区三区在线视频| 国产成人亚洲精品青草天美| 日韩理论在线观看| 欧美日韩成人在线| 国产麻豆精品在线观看| 亚洲欧洲另类国产综合| 欧美色偷偷大香| 狠狠色综合播放一区二区| 成人欧美一区二区三区| 欧美理论片在线| 国产**成人网毛片九色| 亚洲一区二区三区精品在线| 日韩精品中午字幕| 972aa.com艺术欧美| 日本色综合中文字幕| 成人免费在线视频| 日韩免费一区二区| 97精品国产露脸对白| 免费在线观看视频一区| 国产精品久久久久久久久免费丝袜| 欧美网站大全在线观看| 国产成人av电影| 午夜激情一区二区| 中文字幕一区免费在线观看| 日韩一级高清毛片| 色综合久久六月婷婷中文字幕| 久久99精品久久只有精品| 亚洲黄色小视频| 国产亚洲精品免费| 7777精品伊人久久久大香线蕉完整版| 高清免费成人av| 青青草精品视频| 亚洲一区在线观看视频| 亚洲国产激情av| 欧美电影免费观看高清完整版在| 在线国产电影不卡| 成人毛片在线观看| 国产一区二区主播在线| 爽好久久久欧美精品| 亚洲黄一区二区三区| 国产精品国产三级国产aⅴ中文| 日韩欧美不卡在线观看视频| 欧美亚洲尤物久久| 一本大道综合伊人精品热热| 国产成人在线色| 久草这里只有精品视频| 日韩精品成人一区二区在线| 一区二区三区中文在线观看| ...中文天堂在线一区| 国产欧美精品国产国产专区| 欧美大度的电影原声| 91麻豆精品国产91久久久久久久久 | 成人免费视频视频| 国产一区 二区 三区一级| 日韩av中文在线观看| 亚洲国产日韩在线一区模特| 综合在线观看色| 中文字幕人成不卡一区| 久久午夜老司机| 精品国精品自拍自在线| 日韩亚洲欧美中文三级| 7777精品伊人久久久大香线蕉超级流畅 | 日韩成人一级大片| 五月天激情小说综合| 亚洲一区二区av电影| 亚洲主播在线观看| 亚洲国产综合在线| 午夜精品久久久久久| 无码av中文一区二区三区桃花岛| 亚洲成人免费av| 日韩在线卡一卡二| 青椒成人免费视频| 极品瑜伽女神91| 国产精品一区二区你懂的| 国产乱码精品一品二品| 丁香六月综合激情| 99久久精品国产一区二区三区 | 国产一区二区剧情av在线| 国产美女视频一区| yourporn久久国产精品| 色88888久久久久久影院野外| 在线观看欧美日本| 7777精品伊人久久久大香线蕉的 | 国产精品网站在线| 亚洲精品中文在线影院| 日韩综合一区二区| 国内一区二区在线| 99热国产精品| 欧美精品乱码久久久久久| 精品国产一区二区国模嫣然| 国产精品美女一区二区三区| 亚洲综合成人在线| 精品无人码麻豆乱码1区2区 | 男人的天堂亚洲一区| 国产精品18久久久久| 91精品一区二区三区久久久久久 | 欧美一区二区精品久久911| 精品国产乱码91久久久久久网站| 亚洲国产精品成人综合| 亚洲图片欧美综合| 国产盗摄女厕一区二区三区 | 精品一区二区免费| 成人国产精品免费观看视频| 欧美视频精品在线| 国产亚洲欧美日韩在线一区| 亚洲综合视频网| 国产成人综合亚洲网站| 欧美色视频一区| 欧美激情一区二区三区蜜桃视频| 亚洲影视在线观看| 粗大黑人巨茎大战欧美成人| 欧美精品视频www在线观看| 国产精品素人视频| 青青草国产精品亚洲专区无| 91亚洲国产成人精品一区二区三| 欧美一卡二卡三卡四卡| 亚洲欧美另类图片小说| 狠狠久久亚洲欧美| 欧美日韩不卡一区| 亚洲欧洲另类国产综合| 国产精品自拍在线| 91精品在线免费| 亚洲精品一卡二卡| 成人网在线播放| 精品国产露脸精彩对白| 亚洲电影激情视频网站| 91在线视频网址| 精品88久久久久88久久久| 亚洲国产成人高清精品| 91欧美一区二区| 国产丝袜在线精品| 捆绑变态av一区二区三区| 欧美日韩国产高清一区二区| 国产精品另类一区| 国产一区二区免费视频| 精品国产一区二区三区av性色| 亚洲va韩国va欧美va| 色久综合一二码| 成人免费在线播放视频| 国产成人亚洲精品狼色在线| 欧美精品一区二区久久久| 日韩影视精彩在线| 欧美精品一二三四| 亚洲1区2区3区4区| 欧美日本在线播放| 亚洲成人av免费| 欧美三级视频在线| 一区二区免费视频| 欧美亚洲愉拍一区二区| 一区二区三区国产精品| 91小视频免费观看| 亚洲色图欧洲色图| 色综合色综合色综合色综合色综合 | 成人午夜精品在线| 久久久久久久国产精品影院| 精品一区二区三区在线观看国产 | 粉嫩高潮美女一区二区三区 | 精品国产网站在线观看| 久久99精品久久只有精品| 2021国产精品久久精品| 国产精品99久久久久久似苏梦涵 | 精品国产乱码久久久久久1区2区| 精品无人码麻豆乱码1区2区 | 一区二区三区在线观看动漫| av网站免费线看精品| 综合欧美亚洲日本| 欧美在线制服丝袜| 日韩中文字幕区一区有砖一区| 欧美精品日韩一区| 韩国女主播一区二区三区| 国产日韩一级二级三级| 波多野洁衣一区| 亚洲亚洲人成综合网络| 91精品国产综合久久久蜜臀粉嫩 | 99re热视频精品| 亚洲制服丝袜在线| 日韩欧美你懂的| 成人免费毛片嘿嘿连载视频| 亚洲综合无码一区二区| 日韩午夜小视频| 成人中文字幕电影| 亚洲宅男天堂在线观看无病毒| 欧美日韩日日夜夜| 国产电影一区二区三区| 亚洲一区二区影院| 2欧美一区二区三区在线观看视频| 国产成+人+日韩+欧美+亚洲| 亚洲激情第一区|