Revision 4224558f

b/hw/usb/hcd-ehci.c
1395 1395

  
1396 1396
// 4.10.3
1397 1397

  
1398
static int ehci_execute(EHCIQueue *q)
1398
static int ehci_execute(EHCIPacket *p)
1399 1399
{
1400
    EHCIPacket *p = QTAILQ_FIRST(&q->packets);
1401 1400
    USBDevice *dev;
1402 1401
    USBEndpoint *ep;
1403 1402
    int ret;
1404 1403
    int endp;
1405 1404
    int devadr;
1406 1405

  
1407
    assert(p != NULL);
1408
    assert(p->qtdaddr == q->qtdaddr);
1409

  
1410
    if ( !(q->qh.token & QTD_TOKEN_ACTIVE)) {
1411
        fprintf(stderr, "Attempting to execute inactive QH\n");
1406
    if (!(p->qtd.token & QTD_TOKEN_ACTIVE)) {
1407
        fprintf(stderr, "Attempting to execute inactive qtd\n");
1412 1408
        return USB_RET_PROCERR;
1413 1409
    }
1414 1410

  
1415
    p->tbytes = (q->qh.token & QTD_TOKEN_TBYTES_MASK) >> QTD_TOKEN_TBYTES_SH;
1411
    p->tbytes = (p->qtd.token & QTD_TOKEN_TBYTES_MASK) >> QTD_TOKEN_TBYTES_SH;
1416 1412
    if (p->tbytes > BUFF_SIZE) {
1417 1413
        fprintf(stderr, "Request for more bytes than allowed\n");
1418 1414
        return USB_RET_PROCERR;
1419 1415
    }
1420 1416

  
1421
    p->pid = (q->qh.token & QTD_TOKEN_PID_MASK) >> QTD_TOKEN_PID_SH;
1417
    p->pid = (p->qtd.token & QTD_TOKEN_PID_MASK) >> QTD_TOKEN_PID_SH;
1422 1418
    switch (p->pid) {
1423 1419
    case 0:
1424 1420
        p->pid = USB_TOKEN_OUT;
......
1438 1434
        return USB_RET_PROCERR;
1439 1435
    }
1440 1436

  
1441
    endp = get_field(q->qh.epchar, QH_EPCHAR_EP);
1442
    devadr = get_field(q->qh.epchar, QH_EPCHAR_DEVADDR);
1437
    endp = get_field(p->queue->qh.epchar, QH_EPCHAR_EP);
1438
    devadr = get_field(p->queue->qh.epchar, QH_EPCHAR_DEVADDR);
1443 1439

  
1444 1440
    /* TODO: associating device with ehci port */
1445
    dev = ehci_find_device(q->ehci, devadr);
1441
    dev = ehci_find_device(p->queue->ehci, devadr);
1446 1442
    ep = usb_ep_get(dev, p->pid, endp);
1447 1443

  
1448 1444
    usb_packet_setup(&p->packet, p->pid, ep);
......
1912 1908
        ehci_set_usbsts(q->ehci, USBSTS_REC);
1913 1909
    }
1914 1910

  
1915
    p->usb_status = ehci_execute(q);
1911
    p->usb_status = ehci_execute(p);
1916 1912
    if (p->usb_status == USB_RET_PROCERR) {
1917 1913
        again = -1;
1918 1914
        goto out;

Also available in: Unified diff