亚洲欧美第一页_禁久久精品乱码_粉嫩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久久香蕉国产日韩欧美9色| 国产精品18久久久久久vr | 国产亚洲精久久久久久| 日韩一区二区影院| 欧美丰满高潮xxxx喷水动漫 | 欧美吻胸吃奶大尺度电影| 99久久er热在这里只有精品15 | av亚洲产国偷v产偷v自拍| 国内精品伊人久久久久av影院| 日韩经典一区二区| 亚洲男人电影天堂| 午夜精品爽啪视频| 国产在线精品免费| av在线不卡网| 7777女厕盗摄久久久| 精品剧情v国产在线观看在线| 国产色综合久久| 国产精品久久久久久久岛一牛影视| 亚洲欧美一区二区三区久本道91 | 亚洲高清免费观看高清完整版在线观看| 夜夜嗨av一区二区三区网页 | 久久99精品视频| 国产精品中文字幕欧美| 91高清视频在线| 精品日韩在线观看| 一区二区三区中文在线观看| 石原莉奈一区二区三区在线观看| 久久精品国产77777蜜臀| 成人丝袜高跟foot| 精品卡一卡二卡三卡四在线| 亚洲欧美视频在线观看视频| 裸体健美xxxx欧美裸体表演| 色综合色综合色综合色综合色综合 | 精品蜜桃在线看| 亚洲在线视频免费观看| 丁香天五香天堂综合| 欧美视频一区二区三区在线观看| 久久久精品tv| 国产麻豆成人传媒免费观看| 日韩一卡二卡三卡国产欧美| 亚洲色图丝袜美腿| 91亚洲精品一区二区乱码| 中文字幕av一区 二区| 国产河南妇女毛片精品久久久| 在线影视一区二区三区| 精品一区二区三区在线播放视频 | 欧美日韩国产在线观看| 一区二区三区欧美亚洲| 91黄视频在线观看| 亚洲精品乱码久久久久久| 国产成人免费视频网站| 国产精品成人一区二区三区夜夜夜| 久久国产日韩欧美精品| 欧美一级久久久| 国产成人av资源| 最新日韩在线视频| 在线一区二区视频| 免费成人美女在线观看| 久久久精品人体av艺术| 99热在这里有精品免费| 亚洲免费观看视频| 欧美日韩激情一区二区三区| 久久精品国内一区二区三区| 国产精品二三区| 欧美亚洲国产怡红院影院| 美国十次综合导航| 亚洲视频一二三区| 精品国产一区二区三区久久久蜜月| 国产精品一区二区在线观看网站| 亚洲精品五月天| 欧美xxxx老人做受| 欧美日韩色综合| 激情五月激情综合网| 亚洲成av人片在www色猫咪| 2022国产精品视频| 欧美日韩国产精品自在自线| 不卡的电视剧免费网站有什么| 日本在线观看不卡视频| 国产精品网友自拍| 最新欧美精品一区二区三区| 中文字幕在线不卡视频| 亚洲成人一区二区在线观看| 亚洲国产精品人人做人人爽| 亚洲欧洲日韩在线| 亚洲精选视频免费看| 午夜伦欧美伦电影理论片| 日韩高清不卡在线| 久久99精品国产.久久久久| 亚洲丝袜自拍清纯另类| 亚洲人精品一区| 亚洲va国产va欧美va观看| 亚洲国产日日夜夜| 国产在线一区二区| 日本不卡在线视频| 蜜桃av噜噜一区二区三区小说| 麻豆一区二区三区| 激情综合色综合久久| 亚洲精品水蜜桃| 亚洲一二三四在线观看| 国产精品护士白丝一区av| 国产视频一区二区在线| 久久综合久久鬼色中文字| 欧美一卡二卡三卡四卡| 欧美三级视频在线| 99在线视频精品| 91免费看视频| 欧美日韩激情一区二区三区| 欧美日韩一区不卡| 欧美成人性战久久| 欧美第一区第二区| 国产午夜精品在线观看| 国产精品素人一区二区| 中文字幕一区免费在线观看| 国产精品久久久久一区二区三区 | 极品少妇xxxx偷拍精品少妇| 狠狠狠色丁香婷婷综合激情| 国产剧情av麻豆香蕉精品| 成人国产精品免费网站| 欧美性猛交xxxxxx富婆| 日韩一级片在线观看| 国产亚洲精品中文字幕| 国产精品久久久久久久久晋中| 亚洲久本草在线中文字幕| 一区二区三区四区在线播放| 日日骚欧美日韩| 91首页免费视频| 国产午夜精品久久| 天堂久久一区二区三区| 国产不卡视频一区| 日韩免费观看高清完整版在线观看| 国产精品国产三级国产a| 亚洲午夜久久久久久久久电影院| 国产乱码一区二区三区| eeuss影院一区二区三区| 欧美大胆人体bbbb| 综合激情成人伊人| 国产91露脸合集magnet| 欧美日韩一区二区三区高清| 国产精品久久久久aaaa| 久久精品国产久精国产| 欧美一区二区在线播放| 日韩理论电影院| 成人动漫一区二区在线| 久久精品无码一区二区三区| 天涯成人国产亚洲精品一区av| 久久超碰97人人做人人爱| 欧美一区二区三区免费视频| 国产性做久久久久久| zzijzzij亚洲日本少妇熟睡| 亚洲区小说区图片区qvod| 欧美丝袜第三区| 福利91精品一区二区三区| 国产精品国产三级国产普通话99| 成人综合在线观看| 亚洲一区二区在线播放相泽| 日韩视频不卡中文| 午夜av电影一区| 欧美一区二区三区精品| 五月天欧美精品| 久久九九久精品国产免费直播| 欧洲一区二区三区在线| 男女激情视频一区| 欧美成人精品1314www| 成a人片亚洲日本久久| 免费成人在线网站| 国产精品成人免费在线| 91 com成人网| 久久国产三级精品| 亚洲天堂网中文字| 色呦呦一区二区三区| 国产成人亚洲综合a∨猫咪| 亚洲一二三四在线| 中文字幕一区二区在线观看| 5566中文字幕一区二区电影| 豆国产96在线|亚洲| 国产一区二区电影| 久久草av在线| 亚洲va韩国va欧美va| 一区二区高清视频在线观看| 国产精品福利电影一区二区三区四区 | 99久精品国产| 粉嫩嫩av羞羞动漫久久久| 中文字幕在线观看一区| www久久精品| 国产精品天天看| 国产精品电影院| 亚洲国产精品欧美一二99| 欧美激情在线观看视频免费| 在线观看欧美精品| 精品在线观看视频| 亚洲国产日韩a在线播放| 国产精品第四页| 中文字幕一区二区三区四区| 一区二区三区日本| 免费看欧美女人艹b| 国产综合色视频|