465 |
465 |
[CR_VENDOR_NEC_CHALLENGE_RESPONSE] = "CR_VENDOR_NEC_CHALLENGE_RESPONSE",
|
466 |
466 |
};
|
467 |
467 |
|
|
468 |
static const char *TRBCCode_names[] = {
|
|
469 |
[CC_INVALID] = "CC_INVALID",
|
|
470 |
[CC_SUCCESS] = "CC_SUCCESS",
|
|
471 |
[CC_DATA_BUFFER_ERROR] = "CC_DATA_BUFFER_ERROR",
|
|
472 |
[CC_BABBLE_DETECTED] = "CC_BABBLE_DETECTED",
|
|
473 |
[CC_USB_TRANSACTION_ERROR] = "CC_USB_TRANSACTION_ERROR",
|
|
474 |
[CC_TRB_ERROR] = "CC_TRB_ERROR",
|
|
475 |
[CC_STALL_ERROR] = "CC_STALL_ERROR",
|
|
476 |
[CC_RESOURCE_ERROR] = "CC_RESOURCE_ERROR",
|
|
477 |
[CC_BANDWIDTH_ERROR] = "CC_BANDWIDTH_ERROR",
|
|
478 |
[CC_NO_SLOTS_ERROR] = "CC_NO_SLOTS_ERROR",
|
|
479 |
[CC_INVALID_STREAM_TYPE_ERROR] = "CC_INVALID_STREAM_TYPE_ERROR",
|
|
480 |
[CC_SLOT_NOT_ENABLED_ERROR] = "CC_SLOT_NOT_ENABLED_ERROR",
|
|
481 |
[CC_EP_NOT_ENABLED_ERROR] = "CC_EP_NOT_ENABLED_ERROR",
|
|
482 |
[CC_SHORT_PACKET] = "CC_SHORT_PACKET",
|
|
483 |
[CC_RING_UNDERRUN] = "CC_RING_UNDERRUN",
|
|
484 |
[CC_RING_OVERRUN] = "CC_RING_OVERRUN",
|
|
485 |
[CC_VF_ER_FULL] = "CC_VF_ER_FULL",
|
|
486 |
[CC_PARAMETER_ERROR] = "CC_PARAMETER_ERROR",
|
|
487 |
[CC_BANDWIDTH_OVERRUN] = "CC_BANDWIDTH_OVERRUN",
|
|
488 |
[CC_CONTEXT_STATE_ERROR] = "CC_CONTEXT_STATE_ERROR",
|
|
489 |
[CC_NO_PING_RESPONSE_ERROR] = "CC_NO_PING_RESPONSE_ERROR",
|
|
490 |
[CC_EVENT_RING_FULL_ERROR] = "CC_EVENT_RING_FULL_ERROR",
|
|
491 |
[CC_INCOMPATIBLE_DEVICE_ERROR] = "CC_INCOMPATIBLE_DEVICE_ERROR",
|
|
492 |
[CC_MISSED_SERVICE_ERROR] = "CC_MISSED_SERVICE_ERROR",
|
|
493 |
[CC_COMMAND_RING_STOPPED] = "CC_COMMAND_RING_STOPPED",
|
|
494 |
[CC_COMMAND_ABORTED] = "CC_COMMAND_ABORTED",
|
|
495 |
[CC_STOPPED] = "CC_STOPPED",
|
|
496 |
[CC_STOPPED_LENGTH_INVALID] = "CC_STOPPED_LENGTH_INVALID",
|
|
497 |
[CC_MAX_EXIT_LATENCY_TOO_LARGE_ERROR]
|
|
498 |
= "CC_MAX_EXIT_LATENCY_TOO_LARGE_ERROR",
|
|
499 |
[CC_ISOCH_BUFFER_OVERRUN] = "CC_ISOCH_BUFFER_OVERRUN",
|
|
500 |
[CC_EVENT_LOST_ERROR] = "CC_EVENT_LOST_ERROR",
|
|
501 |
[CC_UNDEFINED_ERROR] = "CC_UNDEFINED_ERROR",
|
|
502 |
[CC_INVALID_STREAM_ID_ERROR] = "CC_INVALID_STREAM_ID_ERROR",
|
|
503 |
[CC_SECONDARY_BANDWIDTH_ERROR] = "CC_SECONDARY_BANDWIDTH_ERROR",
|
|
504 |
[CC_SPLIT_TRANSACTION_ERROR] = "CC_SPLIT_TRANSACTION_ERROR",
|
|
505 |
};
|
|
506 |
|
468 |
507 |
static const char *lookup_name(uint32_t index, const char **list, uint32_t llen)
|
469 |
508 |
{
|
470 |
509 |
if (index >= llen || list[index] == NULL) {
|
... | ... | |
479 |
518 |
ARRAY_SIZE(TRBType_names));
|
480 |
519 |
}
|
481 |
520 |
|
|
521 |
static const char *event_name(XHCIEvent *event)
|
|
522 |
{
|
|
523 |
return lookup_name(event->ccode, TRBCCode_names,
|
|
524 |
ARRAY_SIZE(TRBCCode_names));
|
|
525 |
}
|
|
526 |
|
482 |
527 |
static uint64_t xhci_mfindex_get(XHCIState *xhci)
|
483 |
528 |
{
|
484 |
529 |
int64_t now = qemu_get_clock_ns(vm_clock);
|
... | ... | |
574 |
619 |
ev_trb.control = cpu_to_le32(ev_trb.control);
|
575 |
620 |
|
576 |
621 |
trace_usb_xhci_queue_event(xhci->er_ep_idx, trb_name(&ev_trb),
|
577 |
|
ev_trb.parameter, ev_trb.status, ev_trb.control);
|
|
622 |
event_name(event), ev_trb.parameter,
|
|
623 |
ev_trb.status, ev_trb.control);
|
578 |
624 |
|
579 |
625 |
addr = xhci->er_start + TRB_SIZE*xhci->er_ep_idx;
|
580 |
626 |
pci_dma_write(&xhci->pci_dev, addr, &ev_trb, TRB_SIZE);
|