コード例 #1
0
ファイル: usb-musb.c プロジェクト: astarasikov/qemu
struct MUSBState {
    qemu_irq *irqs;
    USBPort port;

    int idx;
    uint8_t devctl;
    uint8_t power;
    uint8_t faddr;

    uint8_t intr;
    uint8_t mask;
    uint16_t tx_intr;
    uint16_t tx_mask;
    uint16_t rx_intr;
    uint16_t rx_mask;

    int setup_len;
    int session;

    uint32_t buf[0x2000];

        /* Duplicating the world since 2008!...  probably we should have 32
         * logical, single endpoints instead.  */
    MUSBEndPoint ep[16];
} *musb_init(qemu_irq *irqs)
{
    MUSBState *s = qemu_mallocz(sizeof(*s));
    int i;

    s->irqs = irqs;

    s->faddr = 0x00;
    s->power = MGC_M_POWER_HSENAB;
    s->tx_intr = 0x0000;
    s->rx_intr = 0x0000;
    s->tx_mask = 0xffff;
    s->rx_mask = 0xffff;
    s->intr = 0x00;
    s->mask = 0x06;
    s->idx = 0;

    /* TODO: _DW */
    s->ep[0].config = MGC_M_CONFIGDATA_SOFTCONE | MGC_M_CONFIGDATA_DYNFIFO;
    for (i = 0; i < 16; i ++) {
        s->ep[i].fifosize = 64;
        s->ep[i].maxp[0] = 0x40;
        s->ep[i].maxp[1] = 0x40;
        s->ep[i].musb = s;
        s->ep[i].epnum = i;
    }

    qemu_register_usb_port(&s->port, s, 0, musb_attach);

    return s;
}
コード例 #2
0
ファイル: usb-musb.c プロジェクト: flamenca/winqemu
struct musb_s {
    qemu_irq *irqs;
    USBPort port;

    int idx;
    uint8_t devctl;
    uint8_t power;
    uint8_t faddr;

    uint8_t intr;
    uint8_t mask;
    uint16_t tx_intr;
    uint16_t tx_mask;
    uint16_t rx_intr;
    uint16_t rx_mask;

    int setup_len;
    int session;

    uint32_t buf[0x2000];

    struct musb_ep_s {
        uint16_t faddr[2];
        uint8_t haddr[2];
        uint8_t hport[2];
        uint16_t csr[2];
        uint16_t maxp[2];
        uint16_t rxcount;
        uint8_t type[2];
        uint8_t interval[2];
        uint8_t config;
        uint8_t fifosize;
        int timeout[2];	/* Always in microframes */

        uint32_t *buf[2];
        int fifolen[2];
        int fifostart[2];
        int fifoaddr[2];
        USBPacket packey[2];
        int status[2];
        int ext_size[2];

        /* For callbacks' use */
        int epnum;
        int interrupt[2];
        struct musb_s *musb;
        USBCallback *delayed_cb[2];
        QEMUTimer *intv_timer[2];
        /* Duplicating the world since 2008!...  probably we should have 32
         * logical, single endpoints instead.  */
    } ep[16];
} *musb_init(qemu_irq *irqs)
{
    struct musb_s *s = qemu_mallocz(sizeof(*s));
    int i;

    s->irqs = irqs;

    s->faddr = 0x00;
    s->power = MGC_M_POWER_HSENAB;
    s->tx_intr = 0x0000;
    s->rx_intr = 0x0000;
    s->tx_mask = 0xffff;
    s->rx_mask = 0xffff;
    s->intr = 0x00;
    s->mask = 0x06;
    s->idx = 0;

    /* TODO: _DW */
    s->ep[0].config = MGC_M_CONFIGDATA_SOFTCONE | MGC_M_CONFIGDATA_DYNFIFO;
    for (i = 0; i < 16; i ++) {
        s->ep[i].fifosize = 64;
        s->ep[i].maxp[0] = 0x40;
        s->ep[i].maxp[1] = 0x40;
        s->ep[i].musb = s;
        s->ep[i].epnum = i;
    }

    qemu_register_usb_port(&s->port, s, 0, musb_attach);

    return s;
}