diff options
-rw-r--r-- | drivers/usb/host/xhci-trace.h | 25 | ||||
-rw-r--r-- | drivers/usb/host/xhci.c | 3 | ||||
-rw-r--r-- | drivers/usb/host/xhci.h | 29 |
3 files changed, 57 insertions, 0 deletions
diff --git a/drivers/usb/host/xhci-trace.h b/drivers/usb/host/xhci-trace.h index 88b427434bd8..9b0e6419a93e 100644 --- a/drivers/usb/host/xhci-trace.h +++ b/drivers/usb/host/xhci-trace.h | |||
@@ -432,6 +432,31 @@ DEFINE_EVENT(xhci_log_slot_ctx, xhci_configure_endpoint, | |||
432 | TP_ARGS(ctx) | 432 | TP_ARGS(ctx) |
433 | ); | 433 | ); |
434 | 434 | ||
435 | DECLARE_EVENT_CLASS(xhci_log_ctrl_ctx, | ||
436 | TP_PROTO(struct xhci_input_control_ctx *ctrl_ctx), | ||
437 | TP_ARGS(ctrl_ctx), | ||
438 | TP_STRUCT__entry( | ||
439 | __field(u32, drop) | ||
440 | __field(u32, add) | ||
441 | ), | ||
442 | TP_fast_assign( | ||
443 | __entry->drop = le32_to_cpu(ctrl_ctx->drop_flags); | ||
444 | __entry->add = le32_to_cpu(ctrl_ctx->add_flags); | ||
445 | ), | ||
446 | TP_printk("%s", xhci_decode_ctrl_ctx(__entry->drop, __entry->add) | ||
447 | ) | ||
448 | ); | ||
449 | |||
450 | DEFINE_EVENT(xhci_log_ctrl_ctx, xhci_address_ctrl_ctx, | ||
451 | TP_PROTO(struct xhci_input_control_ctx *ctrl_ctx), | ||
452 | TP_ARGS(ctrl_ctx) | ||
453 | ); | ||
454 | |||
455 | DEFINE_EVENT(xhci_log_ctrl_ctx, xhci_configure_endpoint_ctrl_ctx, | ||
456 | TP_PROTO(struct xhci_input_control_ctx *ctrl_ctx), | ||
457 | TP_ARGS(ctrl_ctx) | ||
458 | ); | ||
459 | |||
435 | DECLARE_EVENT_CLASS(xhci_log_ring, | 460 | DECLARE_EVENT_CLASS(xhci_log_ring, |
436 | TP_PROTO(struct xhci_ring *ring), | 461 | TP_PROTO(struct xhci_ring *ring), |
437 | TP_ARGS(ring), | 462 | TP_ARGS(ring), |
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index cdccbdfb479e..2ab76a57f05e 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c | |||
@@ -2771,6 +2771,8 @@ static int xhci_configure_endpoint(struct xhci_hcd *xhci, | |||
2771 | } | 2771 | } |
2772 | 2772 | ||
2773 | slot_ctx = xhci_get_slot_ctx(xhci, command->in_ctx); | 2773 | slot_ctx = xhci_get_slot_ctx(xhci, command->in_ctx); |
2774 | |||
2775 | trace_xhci_configure_endpoint_ctrl_ctx(ctrl_ctx); | ||
2774 | trace_xhci_configure_endpoint(slot_ctx); | 2776 | trace_xhci_configure_endpoint(slot_ctx); |
2775 | 2777 | ||
2776 | if (!ctx_change) | 2778 | if (!ctx_change) |
@@ -4036,6 +4038,7 @@ static int xhci_setup_device(struct usb_hcd *hcd, struct usb_device *udev, | |||
4036 | trace_xhci_address_ctx(xhci, virt_dev->in_ctx, | 4038 | trace_xhci_address_ctx(xhci, virt_dev->in_ctx, |
4037 | le32_to_cpu(slot_ctx->dev_info) >> 27); | 4039 | le32_to_cpu(slot_ctx->dev_info) >> 27); |
4038 | 4040 | ||
4041 | trace_xhci_address_ctrl_ctx(ctrl_ctx); | ||
4039 | spin_lock_irqsave(&xhci->lock, flags); | 4042 | spin_lock_irqsave(&xhci->lock, flags); |
4040 | trace_xhci_setup_device(virt_dev); | 4043 | trace_xhci_setup_device(virt_dev); |
4041 | ret = xhci_queue_address_device(xhci, command, virt_dev->in_ctx->dma, | 4044 | ret = xhci_queue_address_device(xhci, command, virt_dev->in_ctx->dma, |
diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h index abbd4813e8a2..a450a99e90eb 100644 --- a/drivers/usb/host/xhci.h +++ b/drivers/usb/host/xhci.h | |||
@@ -2401,6 +2401,35 @@ static inline const char *xhci_decode_trb(u32 field0, u32 field1, u32 field2, | |||
2401 | return str; | 2401 | return str; |
2402 | } | 2402 | } |
2403 | 2403 | ||
2404 | static inline const char *xhci_decode_ctrl_ctx(unsigned long drop, | ||
2405 | unsigned long add) | ||
2406 | { | ||
2407 | static char str[1024]; | ||
2408 | unsigned int bit; | ||
2409 | int ret = 0; | ||
2410 | |||
2411 | if (drop) { | ||
2412 | ret = sprintf(str, "Drop:"); | ||
2413 | for_each_set_bit(bit, &drop, 32) | ||
2414 | ret += sprintf(str + ret, " %d%s", | ||
2415 | bit / 2, | ||
2416 | bit % 2 ? "in":"out"); | ||
2417 | ret += sprintf(str + ret, ", "); | ||
2418 | } | ||
2419 | |||
2420 | if (add) { | ||
2421 | ret += sprintf(str + ret, "Add:%s%s", | ||
2422 | (add & SLOT_FLAG) ? " slot":"", | ||
2423 | (add & EP0_FLAG) ? " ep0":""); | ||
2424 | add &= ~(SLOT_FLAG | EP0_FLAG); | ||
2425 | for_each_set_bit(bit, &add, 32) | ||
2426 | ret += sprintf(str + ret, " %d%s", | ||
2427 | bit / 2, | ||
2428 | bit % 2 ? "in":"out"); | ||
2429 | } | ||
2430 | return str; | ||
2431 | } | ||
2432 | |||
2404 | static inline const char *xhci_decode_slot_context(u32 info, u32 info2, | 2433 | static inline const char *xhci_decode_slot_context(u32 info, u32 info2, |
2405 | u32 tt_info, u32 state) | 2434 | u32 tt_info, u32 state) |
2406 | { | 2435 | { |