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

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

?? pl011.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
字號:
/* * Arm PrimeCell PL011 UART * * Copyright (c) 2006 CodeSourcery. * Written by Paul Brook * * This code is licenced under the GPL. */#include "hw.h"#include "qemu-char.h"#include "primecell.h"typedef struct {    uint32_t base;    uint32_t readbuff;    uint32_t flags;    uint32_t lcr;    uint32_t cr;    uint32_t dmacr;    uint32_t int_enabled;    uint32_t int_level;    uint32_t read_fifo[16];    uint32_t ilpr;    uint32_t ibrd;    uint32_t fbrd;    uint32_t ifl;    int read_pos;    int read_count;    int read_trigger;    CharDriverState *chr;    qemu_irq irq;    enum pl011_type type;} pl011_state;#define PL011_INT_TX 0x20#define PL011_INT_RX 0x10#define PL011_FLAG_TXFE 0x80#define PL011_FLAG_RXFF 0x40#define PL011_FLAG_TXFF 0x20#define PL011_FLAG_RXFE 0x10static const unsigned char pl011_id[2][8] = {  { 0x11, 0x10, 0x14, 0x00, 0x0d, 0xf0, 0x05, 0xb1 }, /* PL011_ARM */  { 0x11, 0x00, 0x18, 0x01, 0x0d, 0xf0, 0x05, 0xb1 }, /* PL011_LUMINARY */};static void pl011_update(pl011_state *s){    uint32_t flags;    flags = s->int_level & s->int_enabled;    qemu_set_irq(s->irq, flags != 0);}static uint32_t pl011_read(void *opaque, target_phys_addr_t offset){    pl011_state *s = (pl011_state *)opaque;    uint32_t c;    offset -= s->base;    if (offset >= 0xfe0 && offset < 0x1000) {        return pl011_id[s->type][(offset - 0xfe0) >> 2];    }    switch (offset >> 2) {    case 0: /* UARTDR */        s->flags &= ~PL011_FLAG_RXFF;        c = s->read_fifo[s->read_pos];        if (s->read_count > 0) {            s->read_count--;            if (++s->read_pos == 16)                s->read_pos = 0;        }        if (s->read_count == 0) {            s->flags |= PL011_FLAG_RXFE;        }        if (s->read_count == s->read_trigger - 1)            s->int_level &= ~ PL011_INT_RX;        pl011_update(s);        qemu_chr_accept_input(s->chr);        return c;    case 1: /* UARTCR */        return 0;    case 6: /* UARTFR */        return s->flags;    case 8: /* UARTILPR */        return s->ilpr;    case 9: /* UARTIBRD */        return s->ibrd;    case 10: /* UARTFBRD */        return s->fbrd;    case 11: /* UARTLCR_H */        return s->lcr;    case 12: /* UARTCR */        return s->cr;    case 13: /* UARTIFLS */        return s->ifl;    case 14: /* UARTIMSC */        return s->int_enabled;    case 15: /* UARTRIS */        return s->int_level;    case 16: /* UARTMIS */        return s->int_level & s->int_enabled;    case 18: /* UARTDMACR */        return s->dmacr;    default:        cpu_abort (cpu_single_env, "pl011_read: Bad offset %x\n", (int)offset);        return 0;    }}static void pl011_set_read_trigger(pl011_state *s){#if 0    /* The docs say the RX interrupt is triggered when the FIFO exceeds       the threshold.  However linux only reads the FIFO in response to an       interrupt.  Triggering the interrupt when the FIFO is non-empty seems       to make things work.  */    if (s->lcr & 0x10)        s->read_trigger = (s->ifl >> 1) & 0x1c;    else#endif        s->read_trigger = 1;}static void pl011_write(void *opaque, target_phys_addr_t offset,                          uint32_t value){    pl011_state *s = (pl011_state *)opaque;    unsigned char ch;    offset -= s->base;    switch (offset >> 2) {    case 0: /* UARTDR */        /* ??? Check if transmitter is enabled.  */        ch = value;        if (s->chr)            qemu_chr_write(s->chr, &ch, 1);        s->int_level |= PL011_INT_TX;        pl011_update(s);        break;    case 1: /* UARTCR */        s->cr = value;        break;    case 6: /* UARTFR */        /* Writes to Flag register are ignored.  */        break;    case 8: /* UARTUARTILPR */        s->ilpr = value;        break;    case 9: /* UARTIBRD */        s->ibrd = value;        break;    case 10: /* UARTFBRD */        s->fbrd = value;        break;    case 11: /* UARTLCR_H */        s->lcr = value;        pl011_set_read_trigger(s);        break;    case 12: /* UARTCR */        /* ??? Need to implement the enable and loopback bits.  */        s->cr = value;        break;    case 13: /* UARTIFS */        s->ifl = value;        pl011_set_read_trigger(s);        break;    case 14: /* UARTIMSC */        s->int_enabled = value;        pl011_update(s);        break;    case 17: /* UARTICR */        s->int_level &= ~value;        pl011_update(s);        break;    case 18: /* UARTDMACR */        s->dmacr = value;        if (value & 3)            cpu_abort(cpu_single_env, "PL011: DMA not implemented\n");        break;    default:        cpu_abort (cpu_single_env, "pl011_write: Bad offset %x\n", (int)offset);    }}static int pl011_can_receive(void *opaque){    pl011_state *s = (pl011_state *)opaque;    if (s->lcr & 0x10)        return s->read_count < 16;    else        return s->read_count < 1;}static void pl011_receive(void *opaque, const uint8_t *buf, int size){    pl011_state *s = (pl011_state *)opaque;    int slot;    slot = s->read_pos + s->read_count;    if (slot >= 16)        slot -= 16;    s->read_fifo[slot] = *buf;    s->read_count++;    s->flags &= ~PL011_FLAG_RXFE;    if (s->cr & 0x10 || s->read_count == 16) {        s->flags |= PL011_FLAG_RXFF;    }    if (s->read_count == s->read_trigger) {        s->int_level |= PL011_INT_RX;        pl011_update(s);    }}static void pl011_event(void *opaque, int event){    /* ??? Should probably implement break.  */}static CPUReadMemoryFunc *pl011_readfn[] = {   pl011_read,   pl011_read,   pl011_read};static CPUWriteMemoryFunc *pl011_writefn[] = {   pl011_write,   pl011_write,   pl011_write};void pl011_init(uint32_t base, qemu_irq irq,                CharDriverState *chr, enum pl011_type type){    int iomemtype;    pl011_state *s;    s = (pl011_state *)qemu_mallocz(sizeof(pl011_state));    iomemtype = cpu_register_io_memory(0, pl011_readfn,                                       pl011_writefn, s);    cpu_register_physical_memory(base, 0x00001000, iomemtype);    s->base = base;    s->irq = irq;    s->type = type;    s->chr = chr;    s->read_trigger = 1;    s->ifl = 0x12;    s->cr = 0x300;    s->flags = 0x90;    if (chr){        qemu_chr_add_handlers(chr, pl011_can_receive, pl011_receive,                              pl011_event, s);    }    /* ??? Save/restore.  */}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆文化传媒在线观看| 国产日韩欧美一区二区三区乱码| 99久久免费精品高清特色大片| 国产专区综合网| 久久激情五月激情| 久久精品免费观看| 国内偷窥港台综合视频在线播放| 久久成人免费电影| 国产精一区二区三区| 国产一区二区三区美女| 国产美女精品人人做人人爽| 久久99国产乱子伦精品免费| 精品午夜久久福利影院| 国产主播一区二区| 不卡在线视频中文字幕| 一本一道久久a久久精品| 日本乱人伦一区| 欧美亚洲国产一区在线观看网站| 欧美日韩免费观看一区二区三区 | 日本欧美加勒比视频| 丝袜美腿亚洲一区| 精品一区二区三区欧美| 国产福利精品导航| heyzo一本久久综合| 欧美在线免费观看视频| 日韩美女视频在线| 久久精品人人做| 亚洲欧美一区二区视频| 亚洲影院理伦片| 久久er99热精品一区二区| 国产精品123区| 91免费国产视频网站| 欧美午夜精品免费| 精品国产伦一区二区三区观看方式| 国产视频一区在线观看 | 国产高清不卡一区二区| 成人自拍视频在线| 在线看日韩精品电影| 欧美成人精品1314www| 欧美激情在线一区二区| 亚洲一区二区三区在线看| 久久精品国产网站| 99久久777色| 这里只有精品电影| 国产精品色在线| 婷婷开心久久网| 大白屁股一区二区视频| 欧美日韩一级黄| 久久精品亚洲一区二区三区浴池| 一区二区三区欧美| 久久91精品国产91久久小草| 91在线一区二区三区| 日韩三级免费观看| 亚洲伦理在线精品| 久久福利资源站| 在线免费观看日本一区| 国产亚洲精品bt天堂精选| 亚洲成a人片在线不卡一二三区| 韩日av一区二区| 欧美午夜电影一区| 欧美国产精品劲爆| 日韩电影免费在线观看网站| 91在线观看免费视频| 精品国产乱码久久久久久浪潮| 亚洲精品乱码久久久久久久久| 激情综合色综合久久| 欧洲日韩一区二区三区| 国产日韩av一区二区| 亚洲动漫第一页| 岛国av在线一区| 日韩欧美123| 性做久久久久久久久| 91网址在线看| 国产午夜精品久久| 极品少妇一区二区三区精品视频 | 国产欧美日韩在线视频| 青青草97国产精品免费观看 | 亚洲va韩国va欧美va| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 亚洲成人在线免费| 91丝袜国产在线播放| 国产女同性恋一区二区| 久久99久久久久久久久久久| 欧美日韩小视频| 亚洲精品欧美激情| 99re这里只有精品首页| 国产精品久久毛片a| 国产美女一区二区三区| 欧美不卡一二三| 日本欧美一区二区| 91精选在线观看| 天天操天天干天天综合网| 日本韩国欧美三级| 亚洲狼人国产精品| 一本色道久久综合亚洲91| 亚洲欧美日韩国产综合| av中文字幕亚洲| 亚洲欧美日韩精品久久久久| 99精品视频在线免费观看| 亚洲欧洲av另类| 色综合一个色综合亚洲| 亚洲欧美国产毛片在线| 91麻豆成人久久精品二区三区| 国产精品免费av| 99久久久无码国产精品| 亚洲区小说区图片区qvod| 色婷婷综合久久久中文字幕| 夜夜嗨av一区二区三区四季av | 欧美老年两性高潮| 亚洲国产一区在线观看| 欧美三级中文字| 青青草国产精品亚洲专区无| 日韩欧美一区电影| 久久99精品久久久久婷婷| 精品免费视频一区二区| 国产高清在线精品| 国产精品乱码久久久久久| 99精品国产视频| 亚洲精品成人精品456| 日本韩国一区二区三区视频| 亚洲一区二区精品3399| 欧美二区三区的天堂| 激情综合色综合久久综合| 亚洲国产高清不卡| 在线免费一区三区| 美腿丝袜亚洲色图| 久久久久久**毛片大全| 91视视频在线观看入口直接观看www | 韩国精品在线观看| 国产精品视频一二三区| 91成人国产精品| 五月天一区二区三区| 精品国产1区2区3区| 不卡视频免费播放| 亚洲国产成人91porn| 日韩一卡二卡三卡| 国产精品乡下勾搭老头1| 成人免费在线视频| 在线电影欧美成精品| 国产一区二区三区综合| 亚洲免费伊人电影| 日韩欧美卡一卡二| 99国产精品国产精品久久| 奇米精品一区二区三区四区| 中文无字幕一区二区三区| 欧美日韩中文国产| 国产夫妻精品视频| 亚洲国产视频直播| 欧美精品一区二区三区蜜臀| 99久久伊人久久99| 日韩精彩视频在线观看| 日本一区二区三区国色天香 | 在线综合视频播放| 成人性色生活片| 性做久久久久久久免费看| 国产人成一区二区三区影院| 欧美天天综合网| 国产精品99久久久久久久vr| 亚洲午夜在线视频| 亚洲国产精品ⅴa在线观看| 欧美绝品在线观看成人午夜影视| 成人一区二区在线观看| 日韩国产欧美在线视频| 综合色天天鬼久久鬼色| 欧美大胆一级视频| 欧美在线观看视频一区二区 | 久久av资源网| 亚洲一区二区av电影| 中文字幕av一区二区三区| 日韩亚洲欧美中文三级| 色综合一个色综合亚洲| 国产成人精品在线看| 天天操天天干天天综合网| 亚洲欧美日韩精品久久久久| 久久噜噜亚洲综合| 91精品视频网| 91老司机福利 在线| 国产sm精品调教视频网站| 久久99精品国产91久久来源| 性做久久久久久免费观看欧美| 最新高清无码专区| 中文在线免费一区三区高中清不卡| 欧美成人国产一区二区| 7777精品伊人久久久大香线蕉完整版| 91色|porny| av亚洲精华国产精华精华| 国产精品资源在线看| 日本成人超碰在线观看| 亚洲福利视频导航| 亚洲香蕉伊在人在线观| 综合av第一页| 国产精品欧美经典| 国产精品―色哟哟| 欧美激情自拍偷拍| 国产清纯白嫩初高生在线观看91 | 亚洲你懂的在线视频| 欧美激情在线一区二区三区| 久久一留热品黄| 精品久久久久99| 欧美大度的电影原声|