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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? pl022.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
字號:
/* * Arm PrimeCell PL022 Synchronous Serial Port * * Copyright (c) 2007 CodeSourcery. * Written by Paul Brook * * This code is licenced under the GPL. */#include "hw.h"#include "primecell.h"//#define DEBUG_PL022 1#ifdef DEBUG_PL022#define DPRINTF(fmt, args...) \do { printf("pl022: " fmt , ##args); } while (0)#define BADF(fmt, args...) \do { fprintf(stderr, "pl022: error: " fmt , ##args); exit(1);} while (0)#else#define DPRINTF(fmt, args...) do {} while(0)#define BADF(fmt, args...) \do { fprintf(stderr, "pl022: error: " fmt , ##args);} while (0)#endif#define PL022_CR1_LBM 0x01#define PL022_CR1_SSE 0x02#define PL022_CR1_MS  0x04#define PL022_CR1_SDO 0x08#define PL022_SR_TFE  0x01#define PL022_SR_TNF  0x02#define PL022_SR_RNE  0x04#define PL022_SR_RFF  0x08#define PL022_SR_BSY  0x10#define PL022_INT_ROR 0x01#define PL022_INT_RT  0x04#define PL022_INT_RX  0x04#define PL022_INT_TX  0x08typedef struct {    uint32_t base;    uint32_t cr0;    uint32_t cr1;    uint32_t bitmask;    uint32_t sr;    uint32_t cpsr;    uint32_t is;    uint32_t im;    /* The FIFO head points to the next empty entry.  */    int tx_fifo_head;    int rx_fifo_head;    int tx_fifo_len;    int rx_fifo_len;    uint16_t tx_fifo[8];    uint16_t rx_fifo[8];    qemu_irq irq;    int (*xfer_cb)(void *, int);    void *opaque;} pl022_state;static const unsigned char pl022_id[8] =  { 0x22, 0x10, 0x04, 0x00, 0x0d, 0xf0, 0x05, 0xb1 };static void pl022_update(pl022_state *s){    s->sr = 0;    if (s->tx_fifo_len == 0)        s->sr |= PL022_SR_TFE;    if (s->tx_fifo_len != 8)        s->sr |= PL022_SR_TNF;    if (s->rx_fifo_len != 0)        s->sr |= PL022_SR_RNE;    if (s->rx_fifo_len == 8)        s->sr |= PL022_SR_RFF;    if (s->tx_fifo_len)        s->sr |= PL022_SR_BSY;    s->is = 0;    if (s->rx_fifo_len >= 4)        s->is |= PL022_INT_RX;    if (s->tx_fifo_len <= 4)        s->is |= PL022_INT_TX;    qemu_set_irq(s->irq, (s->is & s->im) != 0);}static void pl022_xfer(pl022_state *s){    int i;    int o;    int val;    if ((s->cr1 & PL022_CR1_SSE) == 0) {        pl022_update(s);        DPRINTF("Disabled\n");        return;    }    DPRINTF("Maybe xfer %d/%d\n", s->tx_fifo_len, s->rx_fifo_len);    i = (s->tx_fifo_head - s->tx_fifo_len) & 7;    o = s->rx_fifo_head;    /* ??? We do not emulate the line speed.       This may break some applications.  The are two problematic cases:        (a) A driver feeds data into the TX FIFO until it is full,         and only then drains the RX FIFO.  On real hardware the CPU can         feed data fast enough that the RX fifo never gets chance to overflow.        (b) A driver transmits data, deliberately allowing the RX FIFO to         overflow because it ignores the RX data anyway.       We choose to support (a) by stalling the transmit engine if it would       cause the RX FIFO to overflow.  In practice much transmit-only code       falls into (a) because it flushes the RX FIFO to determine when       the transfer has completed.  */    while (s->tx_fifo_len && s->rx_fifo_len < 8) {        DPRINTF("xfer\n");        val = s->tx_fifo[i];        if (s->cr1 & PL022_CR1_LBM) {            /* Loopback mode.  */        } else if (s->xfer_cb) {            val = s->xfer_cb(s->opaque, val);        } else {            val = 0;        }        s->rx_fifo[o] = val & s->bitmask;        i = (i + 1) & 7;        o = (o + 1) & 7;        s->tx_fifo_len--;        s->rx_fifo_len++;    }    s->rx_fifo_head = o;    pl022_update(s);}static uint32_t pl022_read(void *opaque, target_phys_addr_t offset){    pl022_state *s = (pl022_state *)opaque;    int val;    offset -= s->base;    if (offset >= 0xfe0 && offset < 0x1000) {        return pl022_id[(offset - 0xfe0) >> 2];    }    switch (offset) {    case 0x00: /* CR0 */      return s->cr0;    case 0x04: /* CR1 */      return s->cr1;    case 0x08: /* DR */        if (s->rx_fifo_len) {            val = s->rx_fifo[(s->rx_fifo_head - s->rx_fifo_len) & 7];            DPRINTF("RX %02x\n", val);            s->rx_fifo_len--;            pl022_xfer(s);        } else {            val = 0;        }        return val;    case 0x0c: /* SR */        return s->sr;    case 0x10: /* CPSR */        return s->cpsr;    case 0x14: /* IMSC */        return s->im;    case 0x18: /* RIS */        return s->is;    case 0x1c: /* MIS */        return s->im & s->is;    case 0x20: /* DMACR */        /* Not implemented.  */        return 0;    default:        cpu_abort (cpu_single_env, "pl022_read: Bad offset %x\n",                   (int)offset);        return 0;    }}static void pl022_write(void *opaque, target_phys_addr_t offset,                        uint32_t value){    pl022_state *s = (pl022_state *)opaque;    offset -= s->base;    switch (offset) {    case 0x00: /* CR0 */        s->cr0 = value;        /* Clock rate and format are ignored.  */        s->bitmask = (1 << ((value & 15) + 1)) - 1;        break;    case 0x04: /* CR1 */        s->cr1 = value;        if ((s->cr1 & (PL022_CR1_MS | PL022_CR1_SSE))                   == (PL022_CR1_MS | PL022_CR1_SSE)) {            BADF("SPI slave mode not implemented\n");        }        pl022_xfer(s);        break;    case 0x08: /* DR */        if (s->tx_fifo_len < 8) {            DPRINTF("TX %02x\n", value);            s->tx_fifo[s->tx_fifo_head] = value & s->bitmask;            s->tx_fifo_head = (s->tx_fifo_head + 1) & 7;            s->tx_fifo_len++;            pl022_xfer(s);        }        break;    case 0x10: /* CPSR */        /* Prescaler.  Ignored.  */        s->cpsr = value & 0xff;        break;    case 0x14: /* IMSC */        s->im = value;        pl022_update(s);        break;    case 0x20: /* DMACR */        if (value)            cpu_abort (cpu_single_env, "pl022: DMA not implemented\n");        break;    default:        cpu_abort (cpu_single_env, "pl022_write: Bad offset %x\n",                   (int)offset);    }}static void pl022_reset(pl022_state *s){    s->rx_fifo_len = 0;    s->tx_fifo_len = 0;    s->im = 0;    s->is = PL022_INT_TX;    s->sr = PL022_SR_TFE | PL022_SR_TNF;}static CPUReadMemoryFunc *pl022_readfn[] = {   pl022_read,   pl022_read,   pl022_read};static CPUWriteMemoryFunc *pl022_writefn[] = {   pl022_write,   pl022_write,   pl022_write};void pl022_init(uint32_t base, qemu_irq irq, int (*xfer_cb)(void *, int),                void * opaque){    int iomemtype;    pl022_state *s;    s = (pl022_state *)qemu_mallocz(sizeof(pl022_state));    iomemtype = cpu_register_io_memory(0, pl022_readfn,                                       pl022_writefn, s);    cpu_register_physical_memory(base, 0x00001000, iomemtype);    s->base = base;    s->irq = irq;    s->xfer_cb = xfer_cb;    s->opaque = opaque;    pl022_reset(s);    /* ??? Save/restore.  */}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲三级视频在线观看| 日韩精品一区在线| 成人免费在线视频观看| 成人激情免费视频| 亚洲欧美经典视频| 欧美色视频在线观看| 午夜电影网亚洲视频| 日韩欧美视频一区| 国产麻豆视频精品| 成人免费在线视频观看| 欧美亚洲一区二区三区四区| 亚洲一区二区综合| 欧美一区二区三区的| 国产乱码字幕精品高清av| 国产精品视频观看| 欧美最猛性xxxxx直播| 免费看日韩a级影片| 国产日韩欧美制服另类| 色先锋aa成人| 热久久一区二区| 亚洲国产精品成人综合色在线婷婷 | 懂色中文一区二区在线播放| 中文字幕亚洲一区二区va在线| 91福利国产精品| 免费成人av资源网| 18成人在线观看| 欧美肥大bbwbbw高潮| 高清在线不卡av| 亚洲一二三区视频在线观看| xnxx国产精品| 欧美性极品少妇| 国产大陆精品国产| 五月婷婷另类国产| 中文字幕va一区二区三区| 欧美日韩aaaaaa| www.欧美日韩国产在线| 免费日本视频一区| 亚洲少妇最新在线视频| www成人在线观看| 在线观看三级视频欧美| 国产成人亚洲综合a∨婷婷图片 | 午夜视频一区二区| 欧美激情在线一区二区三区| 91精品国产一区二区人妖| 91在线国产观看| 国产麻豆欧美日韩一区| 日韩成人免费看| 亚洲精品乱码久久久久久久久| 久久久综合九色合综国产精品| 欧美性生活影院| 91免费在线播放| 国产高清一区日本| 久久精品国产色蜜蜜麻豆| 亚洲国产精品久久人人爱| 国产精品乱码一区二三区小蝌蚪| 日韩欧美一级二级| 精品视频一区三区九区| 91美女福利视频| 成人免费电影视频| 国产精品资源在线| 久久国产生活片100| 日产欧产美韩系列久久99| 一区二区三区免费观看| 一色桃子久久精品亚洲| 久久精品亚洲国产奇米99| 日韩欧美一级片| 日韩一区二区三区在线观看| 精品国产精品网麻豆系列| 日韩午夜精品电影| 欧美一区二区三区播放老司机| 在线成人av网站| 欧美日韩综合在线| 欧美日韩第一区日日骚| 欧美色男人天堂| 欧美日韩国产一二三| 欧美亚洲禁片免费| 欧美视频在线一区二区三区| 欧美在线三级电影| 欧美三区在线视频| 欧美乱熟臀69xxxxxx| 欧美乱妇23p| 欧美一级欧美一级在线播放| 欧美一区二区三区四区在线观看| 欧美日韩亚洲综合在线| 欧美疯狂做受xxxx富婆| 555夜色666亚洲国产免| 日韩视频免费直播| 精品sm捆绑视频| 亚洲国产精品激情在线观看| 成人欧美一区二区三区在线播放| 一区二区三区四区av| 亚洲大片在线观看| 免费成人在线视频观看| 国产美女视频91| 91视频观看视频| 欧美日韩国产123区| 精品国产乱码久久久久久影片| 久久久久久久久一| 亚洲青青青在线视频| 亚洲一级二级三级| 精品一区二区在线视频| 大尺度一区二区| 欧美丝袜自拍制服另类| 日韩欧美电影一二三| 欧美激情一区在线| 夜夜精品视频一区二区 | 蜜臀av一区二区在线免费观看| 蓝色福利精品导航| 成人av在线观| 3d成人动漫网站| 国产亚洲综合av| 亚洲精品久久嫩草网站秘色| 日本中文在线一区| 成人精品视频一区二区三区| 欧美四级电影网| 国产亚洲女人久久久久毛片| 一区二区三区在线播放| 美国欧美日韩国产在线播放| 成人激情免费视频| 欧美一二三区在线观看| 亚洲品质自拍视频| 国产在线不卡一卡二卡三卡四卡| 99re成人精品视频| 精品国产乱码久久久久久闺蜜| 自拍偷拍欧美激情| 韩国精品免费视频| 欧美日韩成人一区二区| 国产精品美女久久久久久2018| 五月婷婷欧美视频| 色综合天天综合色综合av| 精品对白一区国产伦| 亚洲国产精品久久久久秋霞影院| 岛国精品在线观看| 欧美一级日韩免费不卡| 亚洲激情网站免费观看| 国产成人h网站| 欧美大尺度电影在线| 亚洲黄色免费网站| 成人国产视频在线观看| 欧美一级生活片| 午夜欧美在线一二页| 91视视频在线直接观看在线看网页在线看| 日韩免费高清电影| 日韩精品国产精品| 欧美日韩1234| 亚洲精品欧美二区三区中文字幕| 久久国产人妖系列| 宅男在线国产精品| 香蕉乱码成人久久天堂爱免费| 99久久精品免费精品国产| 久久精品人人做人人爽人人| 激情综合色综合久久综合| 91麻豆精品国产| 丝袜美腿成人在线| 欧美日韩五月天| 午夜精品福利一区二区三区av| 欧美曰成人黄网| 亚洲高清免费一级二级三级| av一区二区三区在线| 国产精品日韩成人| 成人av资源在线| 国产精品的网站| 99久久99久久精品国产片果冻| 国产欧美日韩不卡免费| 成人免费毛片片v| 中文字幕一区在线观看视频| 不卡在线观看av| 亚洲精品视频在线观看免费| 一本一道久久a久久精品综合蜜臀 一本一道综合狠狠老 | 精品国产a毛片| 国产在线精品国自产拍免费| 久久精品亚洲麻豆av一区二区| 国产91对白在线观看九色| 欧美韩国一区二区| av在线不卡网| 中文字幕一区在线观看视频| 91免费小视频| 亚洲一二三四区不卡| 欧美日韩精品一区视频| 秋霞av亚洲一区二区三| 久久伊人蜜桃av一区二区| 国产福利电影一区二区三区| 国产精品视频一二三| 91蜜桃传媒精品久久久一区二区| 亚洲一区二区在线播放相泽| 69久久夜色精品国产69蝌蚪网| 蜜臀久久99精品久久久久久9| 久久久久久久久蜜桃| 91在线视频网址| 亚洲超丰满肉感bbw| 日韩欧美色综合网站| 国产91富婆露脸刺激对白| 一区二区三区在线免费视频 | 美脚の诱脚舐め脚责91| 精品久久人人做人人爱| 丁香桃色午夜亚洲一区二区三区| 综合久久国产九一剧情麻豆| 欧美一区二区啪啪| 国产不卡高清在线观看视频| 最新日韩在线视频|