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

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

?? pxa2xx_dma.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * Intel XScale PXA255/270 DMA controller. * * Copyright (c) 2006 Openedhand Ltd. * Copyright (c) 2006 Thorsten Zitterell * Written by Andrzej Zaborowski <balrog@zabor.org> * * This code is licenced under the GPL. */#include "hw.h"#include "pxa.h"struct pxa2xx_dma_channel_s {    target_phys_addr_t descr;    target_phys_addr_t src;    target_phys_addr_t dest;    uint32_t cmd;    uint32_t state;    int request;};/* Allow the DMA to be used as a PIC.  */typedef void (*pxa2xx_dma_handler_t)(void *opaque, int irq, int level);struct pxa2xx_dma_state_s {    pxa2xx_dma_handler_t handler;    target_phys_addr_t base;    qemu_irq irq;    uint32_t stopintr;    uint32_t eorintr;    uint32_t rasintr;    uint32_t startintr;    uint32_t endintr;    uint32_t align;    uint32_t pio;    int channels;    struct pxa2xx_dma_channel_s *chan;    uint8_t *req;    /* Flag to avoid recursive DMA invocations.  */    int running;};#define PXA255_DMA_NUM_CHANNELS	16#define PXA27X_DMA_NUM_CHANNELS	32#define PXA2XX_DMA_NUM_REQUESTS	75#define DCSR0	0x0000	/* DMA Control / Status register for Channel 0 */#define DCSR31	0x007c	/* DMA Control / Status register for Channel 31 */#define DALGN	0x00a0	/* DMA Alignment register */#define DPCSR	0x00a4	/* DMA Programmed I/O Control Status register */#define DRQSR0	0x00e0	/* DMA DREQ<0> Status register */#define DRQSR1	0x00e4	/* DMA DREQ<1> Status register */#define DRQSR2	0x00e8	/* DMA DREQ<2> Status register */#define DINT	0x00f0	/* DMA Interrupt register */#define DRCMR0	0x0100	/* Request to Channel Map register 0 */#define DRCMR63	0x01fc	/* Request to Channel Map register 63 */#define D_CH0	0x0200	/* Channel 0 Descriptor start */#define DRCMR64	0x1100	/* Request to Channel Map register 64 */#define DRCMR74	0x1128	/* Request to Channel Map register 74 *//* Per-channel register */#define DDADR	0x00#define DSADR	0x01#define DTADR	0x02#define DCMD	0x03/* Bit-field masks */#define DRCMR_CHLNUM		0x1f#define DRCMR_MAPVLD		(1 << 7)#define DDADR_STOP		(1 << 0)#define DDADR_BREN		(1 << 1)#define DCMD_LEN		0x1fff#define DCMD_WIDTH(x)		(1 << ((((x) >> 14) & 3) - 1))#define DCMD_SIZE(x)		(4 << (((x) >> 16) & 3))#define DCMD_FLYBYT		(1 << 19)#define DCMD_FLYBYS		(1 << 20)#define DCMD_ENDIRQEN		(1 << 21)#define DCMD_STARTIRQEN		(1 << 22)#define DCMD_CMPEN		(1 << 25)#define DCMD_FLOWTRG		(1 << 28)#define DCMD_FLOWSRC		(1 << 29)#define DCMD_INCTRGADDR		(1 << 30)#define DCMD_INCSRCADDR		(1 << 31)#define DCSR_BUSERRINTR		(1 << 0)#define DCSR_STARTINTR		(1 << 1)#define DCSR_ENDINTR		(1 << 2)#define DCSR_STOPINTR		(1 << 3)#define DCSR_RASINTR		(1 << 4)#define DCSR_REQPEND		(1 << 8)#define DCSR_EORINT		(1 << 9)#define DCSR_CMPST		(1 << 10)#define DCSR_MASKRUN		(1 << 22)#define DCSR_RASIRQEN		(1 << 23)#define DCSR_CLRCMPST		(1 << 24)#define DCSR_SETCMPST		(1 << 25)#define DCSR_EORSTOPEN		(1 << 26)#define DCSR_EORJMPEN		(1 << 27)#define DCSR_EORIRQEN		(1 << 28)#define DCSR_STOPIRQEN		(1 << 29)#define DCSR_NODESCFETCH	(1 << 30)#define DCSR_RUN		(1 << 31)static inline void pxa2xx_dma_update(struct pxa2xx_dma_state_s *s, int ch){    if (ch >= 0) {        if ((s->chan[ch].state & DCSR_STOPIRQEN) &&                (s->chan[ch].state & DCSR_STOPINTR))            s->stopintr |= 1 << ch;        else            s->stopintr &= ~(1 << ch);        if ((s->chan[ch].state & DCSR_EORIRQEN) &&                (s->chan[ch].state & DCSR_EORINT))            s->eorintr |= 1 << ch;        else            s->eorintr &= ~(1 << ch);        if ((s->chan[ch].state & DCSR_RASIRQEN) &&                (s->chan[ch].state & DCSR_RASINTR))            s->rasintr |= 1 << ch;        else            s->rasintr &= ~(1 << ch);        if (s->chan[ch].state & DCSR_STARTINTR)            s->startintr |= 1 << ch;        else            s->startintr &= ~(1 << ch);        if (s->chan[ch].state & DCSR_ENDINTR)            s->endintr |= 1 << ch;        else            s->endintr &= ~(1 << ch);    }    if (s->stopintr | s->eorintr | s->rasintr | s->startintr | s->endintr)        qemu_irq_raise(s->irq);    else        qemu_irq_lower(s->irq);}static inline void pxa2xx_dma_descriptor_fetch(                struct pxa2xx_dma_state_s *s, int ch){    uint32_t desc[4];    target_phys_addr_t daddr = s->chan[ch].descr & ~0xf;    if ((s->chan[ch].descr & DDADR_BREN) && (s->chan[ch].state & DCSR_CMPST))        daddr += 32;    cpu_physical_memory_read(daddr, (uint8_t *) desc, 16);    s->chan[ch].descr = desc[DDADR];    s->chan[ch].src = desc[DSADR];    s->chan[ch].dest = desc[DTADR];    s->chan[ch].cmd = desc[DCMD];    if (s->chan[ch].cmd & DCMD_FLOWSRC)        s->chan[ch].src &= ~3;    if (s->chan[ch].cmd & DCMD_FLOWTRG)        s->chan[ch].dest &= ~3;    if (s->chan[ch].cmd & (DCMD_CMPEN | DCMD_FLYBYS | DCMD_FLYBYT))        printf("%s: unsupported mode in channel %i\n", __FUNCTION__, ch);    if (s->chan[ch].cmd & DCMD_STARTIRQEN)        s->chan[ch].state |= DCSR_STARTINTR;}static void pxa2xx_dma_run(struct pxa2xx_dma_state_s *s){    int c, srcinc, destinc;    uint32_t n, size;    uint32_t width;    uint32_t length;    char buffer[32];    struct pxa2xx_dma_channel_s *ch;    if (s->running ++)        return;    while (s->running) {        s->running = 1;        for (c = 0; c < s->channels; c ++) {            ch = &s->chan[c];            while ((ch->state & DCSR_RUN) && !(ch->state & DCSR_STOPINTR)) {                /* Test for pending requests */                if ((ch->cmd & (DCMD_FLOWSRC | DCMD_FLOWTRG)) && !ch->request)                    break;                length = ch->cmd & DCMD_LEN;                size = DCMD_SIZE(ch->cmd);                width = DCMD_WIDTH(ch->cmd);                srcinc = (ch->cmd & DCMD_INCSRCADDR) ? width : 0;                destinc = (ch->cmd & DCMD_INCTRGADDR) ? width : 0;                while (length) {                    size = MIN(length, size);                    for (n = 0; n < size; n += width) {                        cpu_physical_memory_read(ch->src, buffer + n, width);                        ch->src += srcinc;                    }                    for (n = 0; n < size; n += width) {                        cpu_physical_memory_write(ch->dest, buffer + n, width);                        ch->dest += destinc;                    }                    length -= size;                    if ((ch->cmd & (DCMD_FLOWSRC | DCMD_FLOWTRG)) &&                            !ch->request) {                        ch->state |= DCSR_EORINT;                        if (ch->state & DCSR_EORSTOPEN)                            ch->state |= DCSR_STOPINTR;                        if ((ch->state & DCSR_EORJMPEN) &&                                        !(ch->state & DCSR_NODESCFETCH))                            pxa2xx_dma_descriptor_fetch(s, c);                        break;		    }                }                ch->cmd = (ch->cmd & ~DCMD_LEN) | length;                /* Is the transfer complete now? */                if (!length) {                    if (ch->cmd & DCMD_ENDIRQEN)                        ch->state |= DCSR_ENDINTR;                    if ((ch->state & DCSR_NODESCFETCH) ||                                (ch->descr & DDADR_STOP) ||                                (ch->state & DCSR_EORSTOPEN)) {                        ch->state |= DCSR_STOPINTR;                        ch->state &= ~DCSR_RUN;                        break;                    }                    ch->state |= DCSR_STOPINTR;                    break;                }            }        }        s->running --;    }}static uint32_t pxa2xx_dma_read(void *opaque, target_phys_addr_t offset){    struct pxa2xx_dma_state_s *s = (struct pxa2xx_dma_state_s *) opaque;    unsigned int channel;    offset -= s->base;    switch (offset) {    case DRCMR64 ... DRCMR74:        offset -= DRCMR64 - DRCMR0 - (64 << 2);        /* Fall through */    case DRCMR0 ... DRCMR63:        channel = (offset - DRCMR0) >> 2;        return s->req[channel];    case DRQSR0:    case DRQSR1:    case DRQSR2:        return 0;    case DCSR0 ... DCSR31:        channel = offset >> 2;	if (s->chan[channel].request)            return s->chan[channel].state | DCSR_REQPEND;        return s->chan[channel].state;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久亚洲国产美女国产盗摄| 亚洲综合激情小说| 亚洲伦理在线精品| 久久国产精品色| 色狠狠综合天天综合综合| 精品日韩在线观看| 午夜日韩在线电影| 91亚洲精品久久久蜜桃| 欧美精品一区二区三区久久久| 一区二区在线观看免费视频播放 | 日韩欧美国产一二三区| 亚洲精品久久久蜜桃| 丁香五精品蜜臀久久久久99网站| 91精品视频网| 亚洲成人免费视| 在线精品视频一区二区三四| 国产精品久久久久久久久动漫 | 蜜桃视频第一区免费观看| 在线观看网站黄不卡| 中文字幕亚洲一区二区va在线| 国产剧情一区二区| 欧美xxxxx裸体时装秀| 青青草97国产精品免费观看无弹窗版| 色成人在线视频| 玉米视频成人免费看| 91国产福利在线| 日韩毛片视频在线看| 91色在线porny| 亚洲免费在线观看视频| 97se亚洲国产综合自在线| 国产精品久久久久久久裸模| 国产精品伊人色| 欧美激情艳妇裸体舞| 成人性生交大片免费看中文| 中文字幕在线一区| 99久久99久久精品免费看蜜桃| 亚洲成人午夜影院| 91精品国产综合久久久久久| 蜜桃精品视频在线| 久久久国产午夜精品| 成人综合日日夜夜| 亚洲色图20p| 欧美在线观看一区| 日日夜夜免费精品| 久久综合色婷婷| 成人激情小说乱人伦| 亚洲免费观看高清完整版在线观看| 91碰在线视频| 婷婷国产v国产偷v亚洲高清| 欧美一级艳片视频免费观看| 国产在线麻豆精品观看| 中日韩av电影| 欧美在线一区二区| 久久草av在线| 日本一区二区三区dvd视频在线| 国产成人综合亚洲91猫咪| 中文字幕日韩精品一区| 欧美色大人视频| 精品一区二区三区欧美| 国产日韩欧美精品一区| 色诱视频网站一区| 欧美aaa在线| 亚洲天堂网中文字| 日韩一区二区三区在线视频| 国产成人高清在线| 亚洲成av人影院| 久久精品人人爽人人爽| 欧美性大战久久久久久久蜜臀| 久久精品噜噜噜成人av农村| 亚洲欧洲日韩综合一区二区| 日韩欧美国产一区在线观看| 色综合久久天天综合网| 久久国产福利国产秒拍| 亚洲综合一区在线| 国产亚洲婷婷免费| 这里只有精品99re| 91麻豆免费看| 国产aⅴ综合色| 免费成人av资源网| 亚洲制服丝袜在线| 国产精品乱人伦一区二区| 日韩一区二区免费在线观看| 色猫猫国产区一区二在线视频| 国产一区二区h| 另类中文字幕网| 视频一区二区不卡| 国产精品国产三级国产普通话蜜臀 | 日韩毛片高清在线播放| 久久久久九九视频| 91精品国产综合久久国产大片| av男人天堂一区| 国产成人av电影在线| 蜜桃av噜噜一区二区三区小说| 一区二区三区久久| ●精品国产综合乱码久久久久| 2022国产精品视频| 精品免费日韩av| 日韩免费观看高清完整版| 欧美亚男人的天堂| 色av成人天堂桃色av| 波多野洁衣一区| 成人深夜在线观看| 高清久久久久久| 成人午夜电影小说| 国产.精品.日韩.另类.中文.在线.播放| 伦理电影国产精品| 久久不见久久见免费视频7 | 成人国产一区二区三区精品| 精品亚洲porn| 极品瑜伽女神91| 韩国一区二区在线观看| 奇米四色…亚洲| 久久99久久99| 国产一区二区视频在线| 精品亚洲免费视频| 成人免费黄色在线| av在线综合网| 在线视频一区二区三区| 欧美日韩黄视频| 日韩亚洲欧美成人一区| 日韩免费电影一区| xvideos.蜜桃一区二区| 久久精品人人做人人爽人人| 国产精品嫩草影院com| 亚洲免费观看高清完整版在线| 一区二区三区丝袜| 亚洲成人免费影院| 狠狠色丁香九九婷婷综合五月| 国产麻豆91精品| 91麻豆国产在线观看| 欧美日韩不卡在线| www国产成人| 亚洲欧美一区二区在线观看| 亚洲二区在线观看| 精品一区二区在线播放| 国产成人啪午夜精品网站男同| k8久久久一区二区三区| 欧美日韩成人在线一区| 26uuu国产在线精品一区二区| 国产精品婷婷午夜在线观看| 亚洲激情第一区| 男人操女人的视频在线观看欧美 | 免费一级欧美片在线观看| 精品综合久久久久久8888| 成人av在线播放网站| 欧美人狂配大交3d怪物一区| 精品少妇一区二区三区免费观看| 中文一区在线播放| 午夜在线成人av| 国产·精品毛片| 欧美日韩大陆在线| 中文字幕+乱码+中文字幕一区| 亚洲成a人v欧美综合天堂| 国产精品一卡二| 欧美日韩另类一区| 中文字幕在线免费不卡| 免费观看日韩av| 91丨九色丨蝌蚪丨老版| 欧美一区二区播放| 中文字幕一区二区三区色视频| 婷婷亚洲久悠悠色悠在线播放 | 亚洲情趣在线观看| 激情成人午夜视频| 91黄色激情网站| 国产精品午夜在线| 寂寞少妇一区二区三区| 欧美剧在线免费观看网站 | 91久久精品一区二区二区| 久久久精品天堂| 视频一区欧美日韩| 91久久精品一区二区三| 欧美激情一区二区三区蜜桃视频 | 亚洲成av人片一区二区梦乃| 国产成人精品免费一区二区| 欧美一区二区三区视频在线观看| 亚洲视频在线一区| 成人美女视频在线观看| 欧美一区二区精美| 日韩精品亚洲一区二区三区免费| 91原创在线视频| 国产精品入口麻豆原神| 国产一区二区视频在线播放| 91精品国产麻豆| 亚洲成av人片观看| 一本一本大道香蕉久在线精品 | 国产精品久久午夜夜伦鲁鲁| 国产在线精品视频| 精品欧美一区二区久久| 蜜臀a∨国产成人精品| 制服丝袜成人动漫| 日韩高清不卡在线| 欧美夫妻性生活| 五月天亚洲婷婷| 在线电影国产精品| 天堂av在线一区| 91精品国产综合久久香蕉麻豆| 婷婷开心激情综合| 538prom精品视频线放| 日本大胆欧美人术艺术动态| 日韩欧美一级精品久久|