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

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

?? es1370.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
?? 第 1 頁 / 共 2 頁
字號:
    case ES1370_REG_CONTROL + 2:        shift = (addr != ES1370_REG_CONTROL) << 4;        mask = 0xffff << shift;        val = (s->ctl & ~mask) | ((val & 0xffff) << shift);        es1370_update_voices (s, val, s->sctl);        print_ctl (val);        break;    case ES1370_REG_ADC_SCOUNT:        d++;    case ES1370_REG_DAC2_SCOUNT:        d++;    case ES1370_REG_DAC1_SCOUNT:        d->scount = (d->scount & ~0xffff) | (val & 0xffff);        break;    default:        lwarn ("writew %#x <- %#x\n", addr, val);        break;    }}IO_WRITE_PROTO (es1370_writel){    ES1370State *s = opaque;    struct chan *d = &s->chan[0];    addr = es1370_fixup (s, addr);    switch (addr) {    case ES1370_REG_CONTROL:        es1370_update_voices (s, val, s->sctl);        print_ctl (val);        break;    case ES1370_REG_MEMPAGE:        s->mempage = val & 0xf;        break;    case ES1370_REG_SERIAL_CONTROL:        es1370_maybe_lower_irq (s, val);        es1370_update_voices (s, s->ctl, val);        print_sctl (val);        break;    case ES1370_REG_ADC_SCOUNT:        d++;    case ES1370_REG_DAC2_SCOUNT:        d++;    case ES1370_REG_DAC1_SCOUNT:        d->scount = (val & 0xffff) | (d->scount & ~0xffff);        ldebug ("chan %d CURR_SAMP_CT %d, SAMP_CT %d\n",                d - &s->chan[0], val >> 16, (val & 0xffff));        break;    case ES1370_REG_ADC_FRAMEADR:        d++;    case ES1370_REG_DAC2_FRAMEADR:        d++;    case ES1370_REG_DAC1_FRAMEADR:        d->frame_addr = val;        ldebug ("chan %d frame address %#x\n", d - &s->chan[0], val);        break;    case ES1370_REG_PHANTOM_FRAMECNT:        lwarn ("writing to phantom frame count %#x\n", val);        break;    case ES1370_REG_PHANTOM_FRAMEADR:        lwarn ("writing to phantom frame address %#x\n", val);        break;    case ES1370_REG_ADC_FRAMECNT:        d++;    case ES1370_REG_DAC2_FRAMECNT:        d++;    case ES1370_REG_DAC1_FRAMECNT:        d->frame_cnt = val;        d->leftover = 0;        ldebug ("chan %d frame count %d, buffer size %d\n",                d - &s->chan[0], val >> 16, val & 0xffff);        break;    default:        lwarn ("writel %#x <- %#x\n", addr, val);        break;    }}IO_READ_PROTO (es1370_readb){    ES1370State *s = opaque;    uint32_t val;    addr = es1370_fixup (s, addr);    switch (addr) {    case 0x1b:                  /* Legacy */        lwarn ("Attempt to read from legacy register\n");        val = 5;        break;    case ES1370_REG_MEMPAGE:        val = s->mempage;        break;    case ES1370_REG_CONTROL + 0:    case ES1370_REG_CONTROL + 1:    case ES1370_REG_CONTROL + 2:    case ES1370_REG_CONTROL + 3:        val = s->ctl >> ((addr - ES1370_REG_CONTROL) << 3);        break;    case ES1370_REG_STATUS + 0:    case ES1370_REG_STATUS + 1:    case ES1370_REG_STATUS + 2:    case ES1370_REG_STATUS + 3:        val = s->status >> ((addr - ES1370_REG_STATUS) << 3);        break;    default:        val = ~0;        lwarn ("readb %#x -> %#x\n", addr, val);        break;    }    return val;}IO_READ_PROTO (es1370_readw){    ES1370State *s = opaque;    struct chan *d = &s->chan[0];    uint32_t val;    addr = es1370_fixup (s, addr);    switch (addr) {    case ES1370_REG_ADC_SCOUNT + 2:        d++;    case ES1370_REG_DAC2_SCOUNT + 2:        d++;    case ES1370_REG_DAC1_SCOUNT + 2:        val = d->scount >> 16;        break;    case ES1370_REG_ADC_FRAMECNT:        d++;    case ES1370_REG_DAC2_FRAMECNT:        d++;    case ES1370_REG_DAC1_FRAMECNT:        val = d->frame_cnt & 0xffff;        break;    case ES1370_REG_ADC_FRAMECNT + 2:        d++;    case ES1370_REG_DAC2_FRAMECNT + 2:        d++;    case ES1370_REG_DAC1_FRAMECNT + 2:        val = d->frame_cnt >> 16;        break;    default:        val = ~0;        lwarn ("readw %#x -> %#x\n", addr, val);        break;    }    return val;}IO_READ_PROTO (es1370_readl){    ES1370State *s = opaque;    uint32_t val;    struct chan *d = &s->chan[0];    addr = es1370_fixup (s, addr);    switch (addr) {    case ES1370_REG_CONTROL:        val = s->ctl;        break;    case ES1370_REG_STATUS:        val = s->status;        break;    case ES1370_REG_MEMPAGE:        val = s->mempage;        break;    case ES1370_REG_CODEC:        val = s->codec;        break;    case ES1370_REG_SERIAL_CONTROL:        val = s->sctl;        break;    case ES1370_REG_ADC_SCOUNT:        d++;    case ES1370_REG_DAC2_SCOUNT:        d++;    case ES1370_REG_DAC1_SCOUNT:        val = d->scount;#ifdef DEBUG_ES1370        {            uint32_t curr_count = d->scount >> 16;            uint32_t count = d->scount & 0xffff;            curr_count <<= d->shift;            count <<= d->shift;            dolog ("read scount curr %d, total %d\n", curr_count, count);        }#endif        break;    case ES1370_REG_ADC_FRAMECNT:        d++;    case ES1370_REG_DAC2_FRAMECNT:        d++;    case ES1370_REG_DAC1_FRAMECNT:        val = d->frame_cnt;#ifdef DEBUG_ES1370        {            uint32_t size = ((d->frame_cnt & 0xffff) + 1) << 2;            uint32_t curr = ((d->frame_cnt >> 16) + 1) << 2;            if (curr > size)                dolog ("read framecnt curr %d, size %d %d\n", curr, size,                       curr > size);        }#endif        break;    case ES1370_REG_ADC_FRAMEADR:        d++;    case ES1370_REG_DAC2_FRAMEADR:        d++;    case ES1370_REG_DAC1_FRAMEADR:        val = d->frame_addr;        break;    case ES1370_REG_PHANTOM_FRAMECNT:        val = ~0U;        lwarn ("reading from phantom frame count\n");        break;    case ES1370_REG_PHANTOM_FRAMEADR:        val = ~0U;        lwarn ("reading from phantom frame address\n");        break;    default:        val = ~0U;        lwarn ("readl %#x -> %#x\n", addr, val);        break;    }    return val;}static void es1370_transfer_audio (ES1370State *s, struct chan *d, int loop_sel,                                   int max, int *irq){    uint8_t tmpbuf[4096];    uint32_t addr = d->frame_addr;    int sc = d->scount & 0xffff;    int csc = d->scount >> 16;    int csc_bytes = (csc + 1) << d->shift;    int cnt = d->frame_cnt >> 16;    int size = d->frame_cnt & 0xffff;    int left = ((size - cnt + 1) << 2) + d->leftover;    int transfered = 0;    int temp = audio_MIN (max, audio_MIN (left, csc_bytes));    int index = d - &s->chan[0];    addr += (cnt << 2) + d->leftover;    if (index == ADC_CHANNEL) {        while (temp) {            int acquired, to_copy;            to_copy = audio_MIN ((size_t) temp, sizeof (tmpbuf));            acquired = AUD_read (s->adc_voice, tmpbuf, to_copy);            if (!acquired)                break;            cpu_physical_memory_write (addr, tmpbuf, acquired);            temp -= acquired;            addr += acquired;            transfered += acquired;        }    }    else {        SWVoiceOut *voice = s->dac_voice[index];        while (temp) {            int copied, to_copy;            to_copy = audio_MIN ((size_t) temp, sizeof (tmpbuf));            cpu_physical_memory_read (addr, tmpbuf, to_copy);            copied = AUD_write (voice, tmpbuf, to_copy);            if (!copied)                break;            temp -= copied;            addr += copied;            transfered += copied;        }    }    if (csc_bytes == transfered) {        *irq = 1;        d->scount = sc | (sc << 16);        ldebug ("sc = %d, rate = %f\n",                (sc + 1) << d->shift,                (sc + 1) / (double) 44100);    }    else {        *irq = 0;        d->scount = sc | (((csc_bytes - transfered - 1) >> d->shift) << 16);    }    cnt += (transfered + d->leftover) >> 2;    if (s->sctl & loop_sel) {        /* Bah, how stupid is that having a 0 represent true value?           i just spent few hours on this shit */        AUD_log ("es1370: warning", "non looping mode\n");    }    else {        d->frame_cnt = size;        if ((uint32_t) cnt <= d->frame_cnt)            d->frame_cnt |= cnt << 16;    }    d->leftover = (transfered + d->leftover) & 3;}static void es1370_run_channel (ES1370State *s, size_t chan, int free_or_avail){    uint32_t new_status = s->status;    int max_bytes, irq;    struct chan *d = &s->chan[chan];    const struct chan_bits *b = &es1370_chan_bits[chan];    if (!(s->ctl & b->ctl_en) || (s->sctl & b->sctl_pause)) {        return;    }    max_bytes = free_or_avail;    max_bytes &= ~((1 << d->shift) - 1);    if (!max_bytes) {        return;    }    es1370_transfer_audio (s, d, b->sctl_loopsel, max_bytes, &irq);    if (irq) {        if (s->sctl & b->sctl_inten) {            new_status |= b->stat_int;        }    }    if (new_status != s->status) {        es1370_update_status (s, new_status);    }}static void es1370_dac1_callback (void *opaque, int free){    ES1370State *s = opaque;    es1370_run_channel (s, DAC1_CHANNEL, free);}static void es1370_dac2_callback (void *opaque, int free){    ES1370State *s = opaque;    es1370_run_channel (s, DAC2_CHANNEL, free);}static void es1370_adc_callback (void *opaque, int avail){    ES1370State *s = opaque;    es1370_run_channel (s, ADC_CHANNEL, avail);}static void es1370_map (PCIDevice *pci_dev, int region_num,                        uint32_t addr, uint32_t size, int type){    PCIES1370State *d = (PCIES1370State *) pci_dev;    ES1370State *s = &d->es1370;    (void) region_num;    (void) size;    (void) type;    register_ioport_write (addr, 0x40 * 4, 1, es1370_writeb, s);    register_ioport_write (addr, 0x40 * 2, 2, es1370_writew, s);    register_ioport_write (addr, 0x40, 4, es1370_writel, s);    register_ioport_read (addr, 0x40 * 4, 1, es1370_readb, s);    register_ioport_read (addr, 0x40 * 2, 2, es1370_readw, s);    register_ioport_read (addr, 0x40, 4, es1370_readl, s);}static void es1370_save (QEMUFile *f, void *opaque){    ES1370State *s = opaque;    size_t i;    for (i = 0; i < NB_CHANNELS; ++i) {        struct chan *d = &s->chan[i];        qemu_put_be32s (f, &d->shift);        qemu_put_be32s (f, &d->leftover);        qemu_put_be32s (f, &d->scount);        qemu_put_be32s (f, &d->frame_addr);        qemu_put_be32s (f, &d->frame_cnt);    }    qemu_put_be32s (f, &s->ctl);    qemu_put_be32s (f, &s->status);    qemu_put_be32s (f, &s->mempage);    qemu_put_be32s (f, &s->codec);    qemu_put_be32s (f, &s->sctl);}static int es1370_load (QEMUFile *f, void *opaque, int version_id){    uint32_t ctl, sctl;    ES1370State *s = opaque;    size_t i;    if (version_id != 1)        return -EINVAL;    for (i = 0; i < NB_CHANNELS; ++i) {        struct chan *d = &s->chan[i];        qemu_get_be32s (f, &d->shift);        qemu_get_be32s (f, &d->leftover);        qemu_get_be32s (f, &d->scount);        qemu_get_be32s (f, &d->frame_addr);        qemu_get_be32s (f, &d->frame_cnt);        if (i == ADC_CHANNEL) {            if (s->adc_voice) {                AUD_close_in (&s->card, s->adc_voice);                s->adc_voice = NULL;            }        }        else {            if (s->dac_voice[i]) {                AUD_close_out (&s->card, s->dac_voice[i]);                s->dac_voice[i] = NULL;            }        }    }    qemu_get_be32s (f, &ctl);    qemu_get_be32s (f, &s->status);    qemu_get_be32s (f, &s->mempage);    qemu_get_be32s (f, &s->codec);    qemu_get_be32s (f, &sctl);    s->ctl = 0;    s->sctl = 0;    es1370_update_voices (s, ctl, sctl);    return 0;}static void es1370_on_reset (void *opaque){    ES1370State *s = opaque;    es1370_reset (s);}int es1370_init (PCIBus *bus, AudioState *audio){    PCIES1370State *d;    ES1370State *s;    uint8_t *c;    if (!bus) {        dolog ("No PCI bus\n");        return -1;    }    if (!audio) {        dolog ("No audio state\n");        return -1;    }    d = (PCIES1370State *) pci_register_device (bus, "ES1370",                                                sizeof (PCIES1370State),                                                -1, NULL, NULL);    if (!d) {        AUD_log (NULL, "Failed to register PCI device for ES1370\n");        return -1;    }    c = d->dev.config;    c[0x00] = 0x74;    c[0x01] = 0x12;    c[0x02] = 0x00;    c[0x03] = 0x50;    c[0x07] = 2 << 1;    c[0x0a] = 0x01;    c[0x0b] = 0x04;#if 1    c[0x2c] = 0x42;    c[0x2d] = 0x49;    c[0x2e] = 0x4c;    c[0x2f] = 0x4c;#else    c[0x2c] = 0x74;    c[0x2d] = 0x12;    c[0x2e] = 0x71;    c[0x2f] = 0x13;    c[0x34] = 0xdc;    c[0x3c] = 10;    c[0xdc] = 0x00;#endif    c[0x3d] = 1;    c[0x3e] = 0x0c;    c[0x3f] = 0x80;    s = &d->es1370;    s->pci_dev = &d->dev;    pci_register_io_region (&d->dev, 0, 256, PCI_ADDRESS_SPACE_IO, es1370_map);    register_savevm ("es1370", 0, 1, es1370_save, es1370_load, s);    qemu_register_reset (es1370_on_reset, s);    AUD_register_card (audio, "es1370", &s->card);    es1370_reset (s);    return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕成人av| 国产成人av电影| 国产在线精品一区在线观看麻豆| 六月婷婷色综合| 成人aa视频在线观看| 欧美视频精品在线观看| 欧美va亚洲va国产综合| 国产精品灌醉下药二区| 亚洲福利国产精品| 国产毛片精品国产一区二区三区| 99精品欧美一区二区蜜桃免费 | 久久亚洲捆绑美女| 亚洲成av人片一区二区梦乃| 国产盗摄视频一区二区三区| 欧美艳星brazzers| 日本一二三不卡| 青娱乐精品视频在线| 91黄色激情网站| 中文字幕乱码亚洲精品一区| 麻豆久久一区二区| 欧美日韩日本视频| 亚洲裸体xxx| 不卡一区中文字幕| 久久丝袜美腿综合| 久88久久88久久久| 91精品久久久久久蜜臀| 一区二区欧美在线观看| 懂色av中文一区二区三区| 欧美一区午夜视频在线观看| 一区二区三区不卡视频在线观看| 高清成人在线观看| 精品国产一区久久| 蓝色福利精品导航| 精品国产一二三| 激情综合亚洲精品| 日韩免费视频线观看| 蜜臀久久99精品久久久画质超高清| 色综合久久天天| 一区二区三区四区亚洲| 在线欧美日韩国产| 性做久久久久久| 91精品国产免费| 久久99热这里只有精品| 久久蜜桃香蕉精品一区二区三区| 国产一区二区三区四区在线观看| 亚洲精品一区在线观看| 国产在线精品国自产拍免费| 国产婷婷色一区二区三区四区| 国产一区二区三区国产| 国产精品网站导航| 色先锋资源久久综合| 亚洲国产一区二区三区青草影视| 欧美一区二区视频网站| 国产呦萝稀缺另类资源| 中文字幕一区二区三区乱码在线| 91蝌蚪porny九色| 日本色综合中文字幕| 中文字幕精品一区二区三区精品| 日本韩国精品一区二区在线观看| 亚洲福利一二三区| 琪琪久久久久日韩精品| 国产精品婷婷午夜在线观看| 欧美三级在线视频| 国产一区二区在线影院| 性做久久久久久免费观看| 久久午夜电影网| 欧美日韩不卡一区二区| 粉嫩av一区二区三区| 蜜臀av性久久久久蜜臀av麻豆 | 亚洲精品在线三区| 在线一区二区三区四区| 精品一区二区免费视频| 亚洲欧美日韩综合aⅴ视频| 欧美高清视频在线高清观看mv色露露十八| 激情都市一区二区| 亚洲电影在线免费观看| 国产农村妇女精品| 日韩欧美卡一卡二| 宅男噜噜噜66一区二区66| 91丨porny丨中文| 国产.欧美.日韩| 国产在线精品一区二区不卡了| 97se亚洲国产综合自在线观| 国产一区二区三区免费看 | 国产成人亚洲综合a∨婷婷图片| 日韩电影网1区2区| 亚洲精品国产品国语在线app| 国产三级久久久| 亚洲精品一区二区三区99| 日韩一级大片在线| 69精品人人人人| 91麻豆精品国产91久久久使用方法 | 日韩一区二区精品在线观看| 欧美性猛片xxxx免费看久爱| 91麻豆免费看片| 91蜜桃传媒精品久久久一区二区| 成人高清免费观看| 91麻豆蜜桃一区二区三区| 成人av电影在线观看| 91在线观看地址| 欧美系列在线观看| 777奇米成人网| 欧美成人综合网站| 久久影院午夜片一区| 国产精品污网站| 亚洲精品成人悠悠色影视| 亚洲制服丝袜一区| 日韩电影免费在线| 国产一区在线精品| 91免费精品国自产拍在线不卡| 在线观看一区二区精品视频| 91精品国产综合久久精品app | 精品成人免费观看| 中文字幕中文乱码欧美一区二区| 一区二区三区在线免费观看| 男女性色大片免费观看一区二区 | 午夜精品久久久久影视| 国产综合一区二区| 日本久久电影网| 国产亚洲1区2区3区| 亚洲免费av观看| 精品一区二区在线播放| 99精品视频在线观看| 日韩精品一区二区三区蜜臀| 亚洲色欲色欲www| 毛片一区二区三区| 色香蕉成人二区免费| 久久丝袜美腿综合| 日av在线不卡| 色94色欧美sute亚洲13| 久久人人97超碰com| 亚洲va在线va天堂| 91精品办公室少妇高潮对白| 国产亚洲自拍一区| 免费观看久久久4p| 欧美色国产精品| 亚洲精品菠萝久久久久久久| 国产成人精品免费| 久久午夜电影网| 久久99久久久久| 欧美一级生活片| 轻轻草成人在线| 8v天堂国产在线一区二区| 亚洲影院久久精品| 91理论电影在线观看| 国产精品女主播av| 成人aaaa免费全部观看| 青青草97国产精品免费观看 | 日韩免费一区二区三区在线播放| 亚洲高清不卡在线| 8v天堂国产在线一区二区| 偷拍与自拍一区| 91麻豆精品国产91久久久更新时间| 亚洲国产成人tv| 884aa四虎影成人精品一区| 天天综合色天天| 日韩一区二区三区电影在线观看 | 日韩色在线观看| 麻豆一区二区三| 精品国产电影一区二区| 国产一区二区三区高清播放| 久久精品一区二区三区不卡| 成人av电影观看| 爽好久久久欧美精品| 日韩精品一区二区三区四区视频| 韩国精品在线观看| 国产精品色呦呦| 欧美日韩国产一区| 国产精品一二三四区| 成人欧美一区二区三区视频网页| 色偷偷一区二区三区| 午夜激情久久久| 久久影院视频免费| 一本久久综合亚洲鲁鲁五月天| 五月天一区二区| 国产农村妇女精品| 欧美日韩dvd在线观看| 国产又粗又猛又爽又黄91精品| 亚洲男人天堂av网| 久久亚洲综合色| 欧美日韩精品二区第二页| 国产ts人妖一区二区| 亚洲成人av在线电影| 国产欧美日韩精品一区| 欧美精品色一区二区三区| 不卡一二三区首页| 国产一区二区三区不卡在线观看| 一区二区日韩电影| 国产精品三级视频| 久久只精品国产| 91精品国产综合久久精品麻豆| 97aⅴ精品视频一二三区| 国产成人在线看| 国产米奇在线777精品观看| 日韩高清一级片| 亚洲愉拍自拍另类高清精品| 亚洲情趣在线观看| 最新中文字幕一区二区三区| 亚洲国产乱码最新视频| 亚洲美女免费视频|