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

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

?? usb-ohci.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
?? 第 1 頁 / 共 4 頁
字號:
     */    tks = qemu_get_clock(vm_clock) - ohci->sof_time;    /* avoid muldiv if possible */    if (tks >= usb_frame_time)        return (ohci->frt << 31);    tks = muldiv64(1, tks, usb_bit_time);    fr = (uint16_t)(ohci->fi - tks);    return (ohci->frt << 31) | fr;}/* Set root hub status */static void ohci_set_hub_status(OHCIState *ohci, uint32_t val){    uint32_t old_state;    old_state = ohci->rhstatus;    /* write 1 to clear OCIC */    if (val & OHCI_RHS_OCIC)        ohci->rhstatus &= ~OHCI_RHS_OCIC;    if (val & OHCI_RHS_LPS) {        int i;        for (i = 0; i < ohci->num_ports; i++)            ohci_port_power(ohci, i, 0);        dprintf("usb-ohci: powered down all ports\n");    }    if (val & OHCI_RHS_LPSC) {        int i;        for (i = 0; i < ohci->num_ports; i++)            ohci_port_power(ohci, i, 1);        dprintf("usb-ohci: powered up all ports\n");    }    if (val & OHCI_RHS_DRWE)        ohci->rhstatus |= OHCI_RHS_DRWE;    if (val & OHCI_RHS_CRWE)        ohci->rhstatus &= ~OHCI_RHS_DRWE;    if (old_state != ohci->rhstatus)        ohci_set_interrupt(ohci, OHCI_INTR_RHSC);}/* Set root hub port status */static void ohci_port_set_status(OHCIState *ohci, int portnum, uint32_t val){    uint32_t old_state;    OHCIPort *port;    port = &ohci->rhport[portnum];    old_state = port->ctrl;    /* Write to clear CSC, PESC, PSSC, OCIC, PRSC */    if (val & OHCI_PORT_WTC)        port->ctrl &= ~(val & OHCI_PORT_WTC);    if (val & OHCI_PORT_CCS)        port->ctrl &= ~OHCI_PORT_PES;    ohci_port_set_if_connected(ohci, portnum, val & OHCI_PORT_PES);    if (ohci_port_set_if_connected(ohci, portnum, val & OHCI_PORT_PSS))        dprintf("usb-ohci: port %d: SUSPEND\n", portnum);    if (ohci_port_set_if_connected(ohci, portnum, val & OHCI_PORT_PRS)) {        dprintf("usb-ohci: port %d: RESET\n", portnum);        usb_send_msg(port->port.dev, USB_MSG_RESET);        port->ctrl &= ~OHCI_PORT_PRS;        /* ??? Should this also set OHCI_PORT_PESC.  */        port->ctrl |= OHCI_PORT_PES | OHCI_PORT_PRSC;    }    /* Invert order here to ensure in ambiguous case, device is     * powered up...     */    if (val & OHCI_PORT_LSDA)        ohci_port_power(ohci, portnum, 0);    if (val & OHCI_PORT_PPS)        ohci_port_power(ohci, portnum, 1);    if (old_state != port->ctrl)        ohci_set_interrupt(ohci, OHCI_INTR_RHSC);    return;}static uint32_t ohci_mem_read(void *ptr, target_phys_addr_t addr){    OHCIState *ohci = ptr;    addr -= ohci->mem_base;    /* Only aligned reads are allowed on OHCI */    if (addr & 3) {        fprintf(stderr, "usb-ohci: Mis-aligned read\n");        return 0xffffffff;    }    if (addr >= 0x54 && addr < 0x54 + ohci->num_ports * 4) {        /* HcRhPortStatus */        return ohci->rhport[(addr - 0x54) >> 2].ctrl | OHCI_PORT_PPS;    }    switch (addr >> 2) {    case 0: /* HcRevision */        return 0x10;    case 1: /* HcControl */        return ohci->ctl;    case 2: /* HcCommandStatus */        return ohci->status;    case 3: /* HcInterruptStatus */        return ohci->intr_status;    case 4: /* HcInterruptEnable */    case 5: /* HcInterruptDisable */        return ohci->intr;    case 6: /* HcHCCA */        return ohci->hcca;    case 7: /* HcPeriodCurrentED */        return ohci->per_cur;    case 8: /* HcControlHeadED */        return ohci->ctrl_head;    case 9: /* HcControlCurrentED */        return ohci->ctrl_cur;    case 10: /* HcBulkHeadED */        return ohci->bulk_head;    case 11: /* HcBulkCurrentED */        return ohci->bulk_cur;    case 12: /* HcDoneHead */        return ohci->done;    case 13: /* HcFmInterval */        return (ohci->fit << 31) | (ohci->fsmps << 16) | (ohci->fi);    case 14: /* HcFmRemaining */        return ohci_get_frame_remaining(ohci);    case 15: /* HcFmNumber */        return ohci->frame_number;    case 16: /* HcPeriodicStart */        return ohci->pstart;    case 17: /* HcLSThreshold */        return ohci->lst;    case 18: /* HcRhDescriptorA */        return ohci->rhdesc_a;    case 19: /* HcRhDescriptorB */        return ohci->rhdesc_b;    case 20: /* HcRhStatus */        return ohci->rhstatus;    /* PXA27x specific registers */    case 24: /* HcStatus */        return ohci->hstatus & ohci->hmask;    case 25: /* HcHReset */        return ohci->hreset;    case 26: /* HcHInterruptEnable */        return ohci->hmask;    case 27: /* HcHInterruptTest */        return ohci->htest;    default:        fprintf(stderr, "ohci_read: Bad offset %x\n", (int)addr);        return 0xffffffff;    }}static void ohci_mem_write(void *ptr, target_phys_addr_t addr, uint32_t val){    OHCIState *ohci = ptr;    addr -= ohci->mem_base;    /* Only aligned reads are allowed on OHCI */    if (addr & 3) {        fprintf(stderr, "usb-ohci: Mis-aligned write\n");        return;    }    if (addr >= 0x54 && addr < 0x54 + ohci->num_ports * 4) {        /* HcRhPortStatus */        ohci_port_set_status(ohci, (addr - 0x54) >> 2, val);        return;    }    switch (addr >> 2) {    case 1: /* HcControl */        ohci_set_ctl(ohci, val);        break;    case 2: /* HcCommandStatus */        /* SOC is read-only */        val = (val & ~OHCI_STATUS_SOC);        /* Bits written as '0' remain unchanged in the register */        ohci->status |= val;        if (ohci->status & OHCI_STATUS_HCR)            ohci_reset(ohci);        break;    case 3: /* HcInterruptStatus */        ohci->intr_status &= ~val;        ohci_intr_update(ohci);        break;    case 4: /* HcInterruptEnable */        ohci->intr |= val;        ohci_intr_update(ohci);        break;    case 5: /* HcInterruptDisable */        ohci->intr &= ~val;        ohci_intr_update(ohci);        break;    case 6: /* HcHCCA */        ohci->hcca = val & OHCI_HCCA_MASK;        break;    case 8: /* HcControlHeadED */        ohci->ctrl_head = val & OHCI_EDPTR_MASK;        break;    case 9: /* HcControlCurrentED */        ohci->ctrl_cur = val & OHCI_EDPTR_MASK;        break;    case 10: /* HcBulkHeadED */        ohci->bulk_head = val & OHCI_EDPTR_MASK;        break;    case 11: /* HcBulkCurrentED */        ohci->bulk_cur = val & OHCI_EDPTR_MASK;        break;    case 13: /* HcFmInterval */        ohci->fsmps = (val & OHCI_FMI_FSMPS) >> 16;        ohci->fit = (val & OHCI_FMI_FIT) >> 31;        ohci_set_frame_interval(ohci, val);        break;    case 15: /* HcFmNumber */        break;    case 16: /* HcPeriodicStart */        ohci->pstart = val & 0xffff;        break;    case 17: /* HcLSThreshold */        ohci->lst = val & 0xffff;        break;    case 18: /* HcRhDescriptorA */        ohci->rhdesc_a &= ~OHCI_RHA_RW_MASK;        ohci->rhdesc_a |= val & OHCI_RHA_RW_MASK;        break;    case 19: /* HcRhDescriptorB */        break;    case 20: /* HcRhStatus */        ohci_set_hub_status(ohci, val);        break;    /* PXA27x specific registers */    case 24: /* HcStatus */        ohci->hstatus &= ~(val & ohci->hmask);    case 25: /* HcHReset */        ohci->hreset = val & ~OHCI_HRESET_FSBIR;        if (val & OHCI_HRESET_FSBIR)            ohci_reset(ohci);        break;    case 26: /* HcHInterruptEnable */        ohci->hmask = val;        break;    case 27: /* HcHInterruptTest */        ohci->htest = val;        break;    default:        fprintf(stderr, "ohci_write: Bad offset %x\n", (int)addr);        break;    }}/* Only dword reads are defined on OHCI register space */static CPUReadMemoryFunc *ohci_readfn[3]={    ohci_mem_read,    ohci_mem_read,    ohci_mem_read};/* Only dword writes are defined on OHCI register space */static CPUWriteMemoryFunc *ohci_writefn[3]={    ohci_mem_write,    ohci_mem_write,    ohci_mem_write};static void usb_ohci_init(OHCIState *ohci, int num_ports, int devfn,            qemu_irq irq, enum ohci_type type, const char *name){    int i;    if (usb_frame_time == 0) {#if OHCI_TIME_WARP        usb_frame_time = ticks_per_sec;        usb_bit_time = muldiv64(1, ticks_per_sec, USB_HZ/1000);#else        usb_frame_time = muldiv64(1, ticks_per_sec, 1000);        if (ticks_per_sec >= USB_HZ) {            usb_bit_time = muldiv64(1, ticks_per_sec, USB_HZ);        } else {            usb_bit_time = 1;        }#endif        dprintf("usb-ohci: usb_bit_time=%lli usb_frame_time=%lli\n",                usb_frame_time, usb_bit_time);    }    ohci->mem = cpu_register_io_memory(0, ohci_readfn, ohci_writefn, ohci);    ohci->name = name;    ohci->irq = irq;    ohci->type = type;    ohci->num_ports = num_ports;    for (i = 0; i < num_ports; i++) {        qemu_register_usb_port(&ohci->rhport[i].port, ohci, i, ohci_attach);    }    ohci->async_td = 0;    qemu_register_reset(ohci_reset, ohci);    ohci_reset(ohci);}typedef struct {    PCIDevice pci_dev;    OHCIState state;} OHCIPCIState;static void ohci_mapfunc(PCIDevice *pci_dev, int i,            uint32_t addr, uint32_t size, int type){    OHCIPCIState *ohci = (OHCIPCIState *)pci_dev;    ohci->state.mem_base = addr;    cpu_register_physical_memory(addr, size, ohci->state.mem);}void usb_ohci_init_pci(struct PCIBus *bus, int num_ports, int devfn){    OHCIPCIState *ohci;    int vid = 0x106b;    int did = 0x003f;    ohci = (OHCIPCIState *)pci_register_device(bus, "OHCI USB", sizeof(*ohci),                                               devfn, NULL, NULL);    if (ohci == NULL) {        fprintf(stderr, "usb-ohci: Failed to register PCI device\n");        return;    }    ohci->pci_dev.config[0x00] = vid & 0xff;    ohci->pci_dev.config[0x01] = (vid >> 8) & 0xff;    ohci->pci_dev.config[0x02] = did & 0xff;    ohci->pci_dev.config[0x03] = (did >> 8) & 0xff;    ohci->pci_dev.config[0x09] = 0x10; /* OHCI */    ohci->pci_dev.config[0x0a] = 0x3;    ohci->pci_dev.config[0x0b] = 0xc;    ohci->pci_dev.config[0x3d] = 0x01; /* interrupt pin 1 */    usb_ohci_init(&ohci->state, num_ports, devfn, ohci->pci_dev.irq[0],                  OHCI_TYPE_PCI, ohci->pci_dev.name);    pci_register_io_region((struct PCIDevice *)ohci, 0, 256,                           PCI_ADDRESS_SPACE_MEM, ohci_mapfunc);}void usb_ohci_init_pxa(target_phys_addr_t base, int num_ports, int devfn,                       qemu_irq irq){    OHCIState *ohci = (OHCIState *)qemu_mallocz(sizeof(OHCIState));    usb_ohci_init(ohci, num_ports, devfn, irq,                  OHCI_TYPE_PXA, "OHCI USB");    ohci->mem_base = base;    cpu_register_physical_memory(ohci->mem_base, 0x1000, ohci->mem);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产激情视频一区二区三区欧美| 国产三级精品视频| 亚洲免费高清视频在线| 另类的小说在线视频另类成人小视频在线| 日韩欧美国产一区二区在线播放| 国产超碰在线一区| 中文字幕乱码一区二区免费| 91片在线免费观看| 中文字幕综合网| 日韩国产精品久久久| 91成人在线免费观看| 国产一区二区久久| 久久久五月婷婷| 国产成人激情av| 欧美一区二区三区四区久久| 欧美亚洲一区二区在线观看| 欧美电视剧在线看免费| 国产一区二区三区av电影| 一区二区三区四区高清精品免费观看| 欧美久久高跟鞋激| 在线免费观看一区| 一本色道久久综合亚洲91| 国内精品国产三级国产a久久| 一区二区免费在线播放| 欧美高清在线精品一区| 色综合激情久久| 91丝袜高跟美女视频| 处破女av一区二区| 亚洲伊人伊色伊影伊综合网| 国产精品乱人伦中文| 国产欧美一区二区精品性色超碰| 日韩欧美成人一区二区| 欧美日韩亚州综合| 欧美精品vⅰdeose4hd| 91久久精品一区二区| 91福利在线看| 777奇米成人网| 成人精品一区二区三区四区| 亚洲综合激情小说| 免费黄网站欧美| 另类的小说在线视频另类成人小视频在线| 国产精品自拍一区| 国产精品一区免费视频| 日韩va欧美va亚洲va久久| 韩国三级在线一区| 风流少妇一区二区| 色久综合一二码| 久久精品这里都是精品| 亚洲伊人色欲综合网| 夜色激情一区二区| 日韩在线a电影| kk眼镜猥琐国模调教系列一区二区| 福利视频网站一区二区三区| voyeur盗摄精品| 在线观看亚洲一区| 欧美色爱综合网| 26uuu国产日韩综合| 国产欧美一区二区三区网站| 日韩伦理av电影| 麻豆精品精品国产自在97香蕉| 日韩av成人高清| 成人美女视频在线看| 99这里只有精品| 91麻豆精品国产91久久久 | 亚洲一区在线视频观看| 日本亚洲欧美天堂免费| 99re视频精品| 国产日韩精品视频一区| 麻豆成人免费电影| 欧美一区二区在线播放| 国产盗摄女厕一区二区三区| 久久精品视频在线免费观看| 91在线高清观看| 三级久久三级久久| 久久久精品国产99久久精品芒果| 国产精品一区二区久久精品爱涩| 欧美日韩一区二区在线观看| 中文字幕一区日韩精品欧美| 国产福利精品导航| 26uuu国产在线精品一区二区| 亚洲午夜成aⅴ人片| 99久久精品国产观看| 99久久久免费精品国产一区二区| 国产无人区一区二区三区| 色婷婷激情久久| 欧美成人在线直播| 青娱乐精品视频| 欧美一区二区三区免费大片| 亚洲另类在线一区| 99久久综合狠狠综合久久| 成人免费小视频| 色香蕉成人二区免费| 国产精品家庭影院| 成人一区二区三区视频在线观看| 欧美少妇bbb| 日韩 欧美一区二区三区| 欧美成人女星排名| 91色综合久久久久婷婷| 亚洲国产美女搞黄色| 欧美成人一区二区三区| 成人亚洲精品久久久久软件| 国产欧美日韩精品在线| 色狠狠一区二区三区香蕉| 亚洲成人自拍一区| 国产精品久久久久桃色tv| 欧美日本韩国一区二区三区视频 | 久久久久久久久久看片| 色悠久久久久综合欧美99| 国产一区二区三区免费观看| 亚洲尤物视频在线| 亚洲日本欧美天堂| 欧美激情在线看| 精品国产在天天线2019| 欧美日本一区二区在线观看| av网站一区二区三区| 国产一区二区三区四区五区美女| 亚洲国产日韩精品| 亚洲电影一级黄| 一级特黄大欧美久久久| 亚洲黄色在线视频| 亚洲乱码精品一二三四区日韩在线| 精品国产三级a在线观看| 精品视频在线免费看| 色视频欧美一区二区三区| 99综合影院在线| 91美女在线视频| 波多野结衣中文字幕一区| 国产酒店精品激情| 亚洲免费大片在线观看| 日韩欧美色综合| 91麻豆swag| 精品在线免费视频| 国产精品麻豆视频| 欧美午夜精品久久久久久超碰| 成人一级黄色片| 国产69精品久久久久毛片| 日韩一级视频免费观看在线| 无码av免费一区二区三区试看| 欧美在线观看一区二区| 亚洲成a人片在线不卡一二三区| 91久久精品一区二区三| 亚洲一卡二卡三卡四卡无卡久久 | 亚洲v中文字幕| 久久综合资源网| 欧美午夜精品一区二区蜜桃 | 亚洲精品视频在线观看网站| 91丨porny丨最新| 国产91精品在线观看| 99免费精品视频| 91精品国产综合久久久久久| 国产亚洲欧美激情| 中文字幕一区二区三区精华液 | 国产精品天干天干在线综合| 国产亚洲一区二区三区| 中文字幕一区二区三区四区不卡| 亚洲一区二区三区四区在线| 日韩激情在线观看| 韩日av一区二区| 欧美日韩高清一区二区三区| 精品奇米国产一区二区三区| 综合精品久久久| 麻豆91免费看| 91福利在线看| 久久久精品人体av艺术| 日韩av电影天堂| 91毛片在线观看| 综合电影一区二区三区| 国产在线精品一区二区夜色 | 国产一区二区三区不卡在线观看| 91高清视频在线| 一区二区三区日韩精品视频| www.视频一区| 国产精品国产三级国产普通话三级 | 91精品国产欧美日韩| 1区2区3区精品视频| 黑人巨大精品欧美黑白配亚洲| 69久久夜色精品国产69蝌蚪网| 亚洲一区二区美女| 欧美日韩中字一区| 天天影视涩香欲综合网| 日韩视频一区二区在线观看| 亚洲一区二区三区影院| 色悠悠久久综合| 亚洲国产成人高清精品| 99久久99久久久精品齐齐| 国产精品动漫网站| 91猫先生在线| 日韩av中文在线观看| 欧美一区二区三区在线视频| 蜜桃视频在线观看一区二区| 欧美大黄免费观看| 欧美日韩成人一区二区| 99久久精品国产观看| 蜜桃视频免费观看一区| 亚洲综合在线视频| 国产精品入口麻豆原神| 久久夜色精品国产欧美乱极品| 欧美少妇bbb| 欧美一级片免费看| av在线播放成人|