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

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

?? omap.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
?? 第 1 頁 / 共 5 頁
字號:
    QEMUTimer *tm;    struct omap_mpu_state_s *mpu;    target_phys_addr_t base;    omap_clk clk;    int64_t delay;    uint32_t drq;    enum omap_dma_model model;    int omap_3_1_mapping_disabled;    uint16_t gcr;    int run_count;    int chans;    struct omap_dma_channel_s ch[16];    struct omap_dma_lcd_channel_s lcd_ch;};/* Interrupts */#define TIMEOUT_INTR    (1 << 0)#define EVENT_DROP_INTR (1 << 1)#define HALF_FRAME_INTR (1 << 2)#define END_FRAME_INTR  (1 << 3)#define LAST_FRAME_INTR (1 << 4)#define END_BLOCK_INTR  (1 << 5)#define SYNC            (1 << 6)static void omap_dma_interrupts_update(struct omap_dma_s *s){    struct omap_dma_channel_s *ch = s->ch;    int i;    if (s->omap_3_1_mapping_disabled) {        for (i = 0; i < s->chans; i ++, ch ++)            if (ch->status)                qemu_irq_raise(ch->irq);    } else {        /* First three interrupts are shared between two channels each. */        for (i = 0; i < 6; i ++, ch ++) {            if (ch->status || (ch->sibling && ch->sibling->status))                qemu_irq_raise(ch->irq);        }    }}static void omap_dma_channel_load(struct omap_dma_s *s,                struct omap_dma_channel_s *ch){    struct omap_dma_reg_set_s *a = &ch->active_set;    int i;    int omap_3_1 = !ch->omap_3_1_compatible_disable;    /*     * TODO: verify address ranges and alignment     * TODO: port endianness     */    a->src = ch->addr[0];    a->dest = ch->addr[1];    a->frames = ch->frames;    a->elements = ch->elements;    a->frame = 0;    a->element = 0;    if (unlikely(!ch->elements || !ch->frames)) {        printf("%s: bad DMA request\n", __FUNCTION__);        return;    }    for (i = 0; i < 2; i ++)        switch (ch->mode[i]) {        case constant:            a->elem_delta[i] = 0;            a->frame_delta[i] = 0;            break;        case post_incremented:            a->elem_delta[i] = ch->data_type;            a->frame_delta[i] = 0;            break;        case single_index:            a->elem_delta[i] = ch->data_type +                    ch->element_index[omap_3_1 ? 0 : i] - 1;            a->frame_delta[i] = 0;            break;        case double_index:            a->elem_delta[i] = ch->data_type +                    ch->element_index[omap_3_1 ? 0 : i] - 1;            a->frame_delta[i] = ch->frame_index[omap_3_1 ? 0 : i] -                    ch->element_index[omap_3_1 ? 0 : i];            break;        default:            break;        }}static void omap_dma_activate_channel(struct omap_dma_s *s,                struct omap_dma_channel_s *ch){    if (!ch->active) {        ch->active = 1;        if (ch->sync)            ch->status |= SYNC;        s->run_count ++;    }    if (s->delay && !qemu_timer_pending(s->tm))        qemu_mod_timer(s->tm, qemu_get_clock(vm_clock) + s->delay);}static void omap_dma_deactivate_channel(struct omap_dma_s *s,                struct omap_dma_channel_s *ch){    /* Update cpc */    ch->cpc = ch->active_set.dest & 0xffff;    if (ch->pending_request && !ch->waiting_end_prog) {        /* Don't deactivate the channel */        ch->pending_request = 0;        return;    }    /* Don't deactive the channel if it is synchronized and the DMA request is       active */    if (ch->sync && (s->drq & (1 << ch->sync)))        return;    if (ch->active) {        ch->active = 0;        ch->status &= ~SYNC;        s->run_count --;    }    if (!s->run_count)        qemu_del_timer(s->tm);}static void omap_dma_enable_channel(struct omap_dma_s *s,                struct omap_dma_channel_s *ch){    if (!ch->enable) {        ch->enable = 1;        ch->waiting_end_prog = 0;        omap_dma_channel_load(s, ch);        if ((!ch->sync) || (s->drq & (1 << ch->sync)))            omap_dma_activate_channel(s, ch);    }}static void omap_dma_disable_channel(struct omap_dma_s *s,                struct omap_dma_channel_s *ch){    if (ch->enable) {        ch->enable = 0;        /* Discard any pending request */        ch->pending_request = 0;        omap_dma_deactivate_channel(s, ch);    }}static void omap_dma_channel_end_prog(struct omap_dma_s *s,                struct omap_dma_channel_s *ch){    if (ch->waiting_end_prog) {        ch->waiting_end_prog = 0;        if (!ch->sync || ch->pending_request) {            ch->pending_request = 0;            omap_dma_activate_channel(s, ch);        }    }}static void omap_dma_enable_3_1_mapping(struct omap_dma_s *s){    s->omap_3_1_mapping_disabled = 0;    s->chans = 9;}static void omap_dma_disable_3_1_mapping(struct omap_dma_s *s){    s->omap_3_1_mapping_disabled = 1;    s->chans = 16;}static void omap_dma_process_request(struct omap_dma_s *s, int request){    int channel;    int drop_event = 0;    struct omap_dma_channel_s *ch = s->ch;    for (channel = 0; channel < s->chans; channel ++, ch ++) {        if (ch->enable && ch->sync == request) {            if (!ch->active)                omap_dma_activate_channel(s, ch);            else if (!ch->pending_request)                ch->pending_request = 1;            else {                /* Request collision */                /* Second request received while processing other request */                ch->status |= EVENT_DROP_INTR;                drop_event = 1;            }        }    }    if (drop_event)        omap_dma_interrupts_update(s);}static void omap_dma_channel_run(struct omap_dma_s *s){    int n = s->chans;    uint16_t status;    uint8_t value[4];    struct omap_dma_port_if_s *src_p, *dest_p;    struct omap_dma_reg_set_s *a;    struct omap_dma_channel_s *ch;    for (ch = s->ch; n; n --, ch ++) {        if (!ch->active)            continue;        a = &ch->active_set;        src_p = &s->mpu->port[ch->port[0]];        dest_p = &s->mpu->port[ch->port[1]];        if ((!ch->constant_fill && !src_p->addr_valid(s->mpu, a->src)) ||                        (!dest_p->addr_valid(s->mpu, a->dest))) {#if 0            /* Bus time-out */            if (ch->interrupts & TIMEOUT_INTR)                ch->status |= TIMEOUT_INTR;            omap_dma_deactivate_channel(s, ch);            continue;#endif            printf("%s: Bus time-out in DMA%i operation\n",                            __FUNCTION__, s->chans - n);        }        status = ch->status;        while (status == ch->status && ch->active) {            /* Transfer a single element */            /* FIXME: check the endianness */            if (!ch->constant_fill)                cpu_physical_memory_read(a->src, value, ch->data_type);            else                *(uint32_t *) value = ch->color;            if (!ch->transparent_copy ||                    *(uint32_t *) value != ch->color)                cpu_physical_memory_write(a->dest, value, ch->data_type);            a->src += a->elem_delta[0];            a->dest += a->elem_delta[1];            a->element ++;            /* If the channel is element synchronized, deactivate it */            if (ch->sync && !ch->fs && !ch->bs)                omap_dma_deactivate_channel(s, ch);            /* If it is the last frame, set the LAST_FRAME interrupt */            if (a->element == 1 && a->frame == a->frames - 1)                if (ch->interrupts & LAST_FRAME_INTR)                    ch->status |= LAST_FRAME_INTR;            /* If the half of the frame was reached, set the HALF_FRAME               interrupt */            if (a->element == (a->elements >> 1))                if (ch->interrupts & HALF_FRAME_INTR)                    ch->status |= HALF_FRAME_INTR;            if (a->element == a->elements) {                /* End of Frame */                a->element = 0;                a->src += a->frame_delta[0];                a->dest += a->frame_delta[1];                a->frame ++;                /* If the channel is frame synchronized, deactivate it */                if (ch->sync && ch->fs)                    omap_dma_deactivate_channel(s, ch);                /* If the channel is async, update cpc */                if (!ch->sync)                    ch->cpc = a->dest & 0xffff;                /* Set the END_FRAME interrupt */                if (ch->interrupts & END_FRAME_INTR)                    ch->status |= END_FRAME_INTR;                if (a->frame == a->frames) {                    /* End of Block */                    /* Disable the channel */                    if (ch->omap_3_1_compatible_disable) {                        omap_dma_disable_channel(s, ch);                        if (ch->link_enabled)                            omap_dma_enable_channel(s,                                            &s->ch[ch->link_next_ch]);                    } else {                        if (!ch->auto_init)                            omap_dma_disable_channel(s, ch);                        else if (ch->repeat || ch->end_prog)                            omap_dma_channel_load(s, ch);                        else {                            ch->waiting_end_prog = 1;                            omap_dma_deactivate_channel(s, ch);                        }                    }                    if (ch->interrupts & END_BLOCK_INTR)                        ch->status |= END_BLOCK_INTR;                }            }        }    }    omap_dma_interrupts_update(s);    if (s->run_count && s->delay)        qemu_mod_timer(s->tm, qemu_get_clock(vm_clock) + s->delay);}static void omap_dma_reset(struct omap_dma_s *s){    int i;    qemu_del_timer(s->tm);    s->gcr = 0x0004;    s->drq = 0x00000000;    s->run_count = 0;    s->lcd_ch.src = emiff;    s->lcd_ch.condition = 0;    s->lcd_ch.interrupts = 0;    s->lcd_ch.dual = 0;    omap_dma_enable_3_1_mapping(s);    for (i = 0; i < s->chans; i ++) {        memset(&s->ch[i].burst, 0, sizeof(s->ch[i].burst));        memset(&s->ch[i].port, 0, sizeof(s->ch[i].port));        memset(&s->ch[i].mode, 0, sizeof(s->ch[i].mode));        memset(&s->ch[i].elements, 0, sizeof(s->ch[i].elements));        memset(&s->ch[i].frames, 0, sizeof(s->ch[i].frames));        memset(&s->ch[i].frame_index, 0, sizeof(s->ch[i].frame_index));        memset(&s->ch[i].element_index, 0, sizeof(s->ch[i].element_index));        memset(&s->ch[i].data_type, 0, sizeof(s->ch[i].data_type));        memset(&s->ch[i].transparent_copy, 0,                        sizeof(s->ch[i].transparent_copy));        memset(&s->ch[i].constant_fill, 0, sizeof(s->ch[i].constant_fill));        memset(&s->ch[i].color, 0, sizeof(s->ch[i].color));        memset(&s->ch[i].end_prog, 0, sizeof(s->ch[i].end_prog));        memset(&s->ch[i].repeat, 0, sizeof(s->ch[i].repeat));        memset(&s->ch[i].auto_init, 0, sizeof(s->ch[i].auto_init));        memset(&s->ch[i].link_enabled, 0, sizeof(s->ch[i].link_enabled));        memset(&s->ch[i].link_next_ch, 0, sizeof(s->ch[i].link_next_ch));        s->ch[i].interrupts = 0x0003;        memset(&s->ch[i].status, 0, sizeof(s->ch[i].status));        memset(&s->ch[i].active, 0, sizeof(s->ch[i].active));        memset(&s->ch[i].enable, 0, sizeof(s->ch[i].enable));        memset(&s->ch[i].sync, 0, sizeof(s->ch[i].sync));        memset(&s->ch[i].pending_request, 0, sizeof(s->ch[i].pending_request));        memset(&s->ch[i].waiting_end_prog, 0,                        sizeof(s->ch[i].waiting_end_prog));        memset(&s->ch[i].cpc, 0, sizeof(s->ch[i].cpc));        memset(&s->ch[i].fs, 0, sizeof(s->ch[i].fs));        memset(&s->ch[i].bs, 0, sizeof(s->ch[i].bs));        memset(&s->ch[i].omap_3_1_compatible_disable, 0,                        sizeof(s->ch[i].omap_3_1_compatible_disable));        memset(&s->ch[i].active_set, 0, sizeof(s->ch[i].active_set));        memset(&s->ch[i].priority, 0, sizeof(s->ch[i].priority));        memset(&s->ch[i].interleave_disabled, 0,                        sizeof(s->ch[i].interleave_disabled));        memset(&s->ch[i].type, 0, sizeof(s->ch[i].type));    }}static int omap_dma_ch_reg_read(struct omap_dma_s *s,                struct omap_dma_channel_s *ch, int reg, uint16_t *value){    switch (reg) {    case 0x00:	/* SYS_DMA_CSDP_CH0 */        *value = (ch->burst[1] << 14) |                (ch->pack[1] << 13) |                (ch->port[1] << 9) |                (ch->burst[0] << 7) |                (ch->pack[0] << 6) |                (ch->port[0] << 2) |                (ch->data_type >> 1);        break;    case 0x02:	/* SYS_DMA_CCR_CH0 */        if (s->model == omap_dma_3_1)            *value = 0 << 10;			/* FIFO_FLUSH reads as 0 */        else            *value = ch->omap_3_1_compatible_disable << 10;        *value |= (ch->mode[1] << 14) |                (ch->mode[0] << 12) |                (ch->end_prog << 11) |                (ch->repeat << 9) |                (ch->auto_init << 8) |                (ch->enable << 7) |                (ch->priority << 6) |                (ch->fs << 5) | ch->sync;        break;    case 0x04:	/* SYS_DMA_CICR_CH0 */        *value = ch->interrupts;        break;    case 0x06:	/* SYS_DMA_CSR_CH0 */        *value = ch->status;        ch->status &= SYNC;        if (!ch->omap_3_1_compatible_disable && ch->sibling) {            *value |= (ch->sibling->status & 0x3f) << 6;            ch->sibling->status &= SYNC;        }        qemu_irq_lower(ch->irq);        break;    case 0x08:	/* SYS_DMA_CSSA_L_CH0 */        *value = ch->addr[0] & 0x0000ffff;        break;    case 0x0a:	/* SYS_DMA_CSSA_U_CH0 */        *value = ch->addr[0] >> 16;        break;    case 0x0c:	/* SYS_DMA_CDSA_L_CH0 */        *value = ch->addr[1] & 0x0000ffff;        break;    case 0x0e:	/* SYS_DMA_CDSA_U_CH0 */        *value = ch->addr[1] >> 16;        break;    case 0x10:	/* SYS_DMA_CEN_CH0 */        *value = ch->elements;        break;    case 0x12:	/* SYS_DMA_CFN_CH0 */        *value = ch->frames;        break;    case 0x14:	/* SYS_DMA_CFI_CH0 */        *value = ch->frame_index[0];        break;    case 0x16:	/* SYS_DMA_CEI_CH0 */        *value = ch->element_index[0];        break;    case 0x18:	/* SYS_DMA_CPC_CH0 or DMA_CSAC */        if (ch->omap_3_1_compatible_disable)            *value = ch->active_set.src & 0xffff;	/* CSAC */        else            *value = ch->cpc;        break;    case 0x1a:	/* DMA_CDAC */        *value = ch->active_set.dest & 0xffff;	/* CDAC */        break;    case 0x1c:	/* DMA_CDEI */        *value = ch->element_index[1];        break;    case 0x1e:	/* DMA_CDFI */        *value = ch->frame_index[1];        break;    case 0x20:	/* DMA_COLOR_L */        *value = ch->color & 0xffff;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本一区二区动态图| 日韩精品一区国产麻豆| 中文字幕乱码亚洲精品一区| 国产麻豆精品视频| 国产情人综合久久777777| 成人精品视频网站| 中文字幕日本乱码精品影院| 欧美在线一区二区三区| 亚洲一区二区3| 欧美一区二区在线看| 国产美女视频91| 亚洲欧美日韩在线不卡| 欧美日本一道本| 韩国av一区二区| 专区另类欧美日韩| 欧美肥妇毛茸茸| 岛国av在线一区| 亚洲成av人片一区二区梦乃| 欧美成人激情免费网| aaa欧美大片| 免费成人在线网站| 国产精品久久三区| 欧美日本一区二区| 成人午夜又粗又硬又大| 亚洲第一会所有码转帖| 久久久久国产精品厨房| 91麻豆自制传媒国产之光| 裸体歌舞表演一区二区| 综合久久久久久久| 精品久久一二三区| 欧美主播一区二区三区美女| 久久9热精品视频| 亚洲国产精品久久久久婷婷884| 日韩三级视频在线看| 色偷偷成人一区二区三区91 | 不卡一区中文字幕| 日韩国产欧美在线观看| 国产精品国产自产拍高清av | 中文字幕欧美日韩一区| 欧美视频一区二区在线观看| 国产成人精品免费看| 午夜激情综合网| 中文av一区二区| 精品国产污网站| 欧美三级视频在线播放| 91一区在线观看| 国产一区美女在线| 日韩精品成人一区二区在线| 亚洲免费三区一区二区| 国产日韩欧美一区二区三区乱码| 91精品国产综合久久精品麻豆| 91麻豆精东视频| 成人免费观看视频| 国产在线不卡一区| 蜜桃久久久久久久| 亚洲午夜激情网页| 亚洲视频中文字幕| 国产精品久久久久永久免费观看| 26uuu国产在线精品一区二区| 欧美精品久久99久久在免费线 | 一区二区三区免费网站| 国产午夜精品福利| 欧美tickle裸体挠脚心vk| 欧美日本高清视频在线观看| 色94色欧美sute亚洲线路一ni| 国产福利一区二区三区| 国产精品一区专区| 欧美aⅴ一区二区三区视频| 午夜精品视频在线观看| 亚洲成人av在线电影| 亚洲综合一区二区| 亚洲成a人片在线不卡一二三区| 亚洲人成网站精品片在线观看| 中文字幕亚洲区| 亚洲同性gay激情无套| 综合欧美亚洲日本| 亚洲三级电影全部在线观看高清| 中文字幕在线不卡| 一色屋精品亚洲香蕉网站| 亚洲码国产岛国毛片在线| 亚洲女同ⅹxx女同tv| 亚洲美女免费视频| 亚洲成人动漫一区| 免费看欧美美女黄的网站| 久久精品国产**网站演员| 国产乱码精品一区二区三区av | 日本一区二区三区国色天香 | 日韩二区三区在线观看| 蜜桃视频在线观看一区二区| 捆绑调教一区二区三区| 国产在线播放一区二区三区| 国产老妇另类xxxxx| 成人蜜臀av电影| 色哟哟一区二区| 91精品国产高清一区二区三区| 这里只有精品免费| 久久伊99综合婷婷久久伊| 欧美国产乱子伦| 亚洲午夜久久久久久久久电影院 | 伊人婷婷欧美激情| 天使萌一区二区三区免费观看| 日本欧美肥老太交大片| 国产精品系列在线观看| 91一区二区三区在线观看| 91精品久久久久久久久99蜜臂| 久久亚区不卡日本| 亚洲私人影院在线观看| 免费在线观看一区| 国产99久久久精品| 欧美日韩一区成人| 国产偷国产偷精品高清尤物| 亚洲乱码日产精品bd| 蜜桃精品在线观看| av亚洲精华国产精华| 6080日韩午夜伦伦午夜伦| 久久午夜老司机| 亚洲国产你懂的| 国产精品资源网| 在线播放中文字幕一区| 亚洲国产精品黑人久久久| 五月激情综合网| 99久免费精品视频在线观看| 日韩亚洲欧美在线| 亚洲欧美日韩成人高清在线一区| 蜜臂av日日欢夜夜爽一区| 97久久精品人人爽人人爽蜜臀| 666欧美在线视频| 亚洲精品一二三| 国产盗摄女厕一区二区三区| 欧美在线三级电影| 成人免费一区二区三区在线观看| 免费视频一区二区| 欧美色老头old∨ideo| 国产精品污www在线观看| 麻豆成人在线观看| 欧美日韩在线观看一区二区| 国产精品嫩草影院com| 激情欧美日韩一区二区| 欧美剧情电影在线观看完整版免费励志电影| 久久久久久久久一| 欧美a一区二区| 欧美日韩高清一区二区不卡| 亚洲精选视频在线| www.久久久久久久久| 久久免费国产精品| 久久99精品国产麻豆婷婷洗澡| 欧美日韩一区二区三区四区| 亚洲黄一区二区三区| a级高清视频欧美日韩| 国产欧美1区2区3区| 国内外精品视频| 久久综合久久综合九色| 日本不卡一区二区三区高清视频| 91成人在线免费观看| 日韩毛片高清在线播放| 成人激情小说乱人伦| 久久久久久久久久久99999| 久久精品99国产精品日本| 8v天堂国产在线一区二区| 亚洲成av人片| 制服丝袜成人动漫| 日韩精品亚洲一区二区三区免费| 欧美日韩黄色影视| 视频一区国产视频| 91精品国产综合久久蜜臀| 视频一区欧美精品| 日韩欧美一级在线播放| 久久99精品网久久| 久久精品一区二区| 成人免费视频免费观看| 中文字幕日韩一区| 91黄视频在线观看| 亚洲chinese男男1069| 91麻豆精品91久久久久久清纯| 日韩成人dvd| 精品国产露脸精彩对白| 国产高清精品网站| 亚洲欧美国产毛片在线| 在线观看不卡一区| 五月天视频一区| 精品日韩欧美一区二区| 国产成人午夜精品5599| 国产精品日产欧美久久久久| 99精品欧美一区二区三区综合在线| 亚洲精品中文字幕在线观看| 欧美久久久久久久久中文字幕| 免费三级欧美电影| 中文子幕无线码一区tr | 欧美日韩一区国产| 蜜臀a∨国产成人精品| 国产欧美精品一区二区色综合| 97精品久久久久中文字幕 | 自拍偷拍欧美激情| 欧美日韩国产欧美日美国产精品| 日韩二区三区在线观看| 国产三级三级三级精品8ⅰ区| 99久久99久久精品免费观看| 亚洲成人自拍网| 国产亚洲人成网站| 欧美在线一二三四区|