From 5270b951b9cd5e50aea55cb52684a171fb10381c Mon Sep 17 00:00:00 2001 From: Sarah Sharp Date: Fri, 4 Sep 2009 10:53:11 -0700 Subject: USB: xhci: Refactor input device context setup. Refactor common code to set up the add and drop flags for the input device context setup. This setup is used before a configure endpoint command for the reset endpoint quirk, and will be used for the command to alloc or free streams rings. Signed-off-by: Sarah Sharp Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/usb/host/xhci-hcd.c b/drivers/usb/host/xhci-hcd.c index 3ab9090..9c985d1 100644 --- a/drivers/usb/host/xhci-hcd.c +++ b/drivers/usb/host/xhci-hcd.c @@ -1247,12 +1247,27 @@ void xhci_reset_bandwidth(struct usb_hcd *hcd, struct usb_device *udev) xhci_zero_in_ctx(xhci, virt_dev); } +static void xhci_setup_input_ctx_for_config_ep(struct xhci_hcd *xhci, + unsigned int slot_id, u32 add_flags, u32 drop_flags) +{ + struct xhci_input_control_ctx *ctrl_ctx; + ctrl_ctx = xhci_get_input_control_ctx(xhci, + xhci->devs[slot_id]->in_ctx); + ctrl_ctx->add_flags = add_flags; + ctrl_ctx->drop_flags = drop_flags; + xhci_slot_copy(xhci, xhci->devs[slot_id]); + ctrl_ctx->add_flags |= SLOT_FLAG; + + xhci_dbg(xhci, "Slot ID %d Input Context:\n", slot_id); + xhci_dbg_ctx(xhci, xhci->devs[slot_id]->in_ctx, + xhci_last_valid_endpoint(add_flags)); +} + void xhci_setup_input_ctx_for_quirk(struct xhci_hcd *xhci, unsigned int slot_id, unsigned int ep_index, struct xhci_dequeue_state *deq_state) { struct xhci_container_ctx *in_ctx; - struct xhci_input_control_ctx *ctrl_ctx; struct xhci_ep_ctx *ep_ctx; u32 added_ctxs; dma_addr_t addr; @@ -1272,15 +1287,9 @@ void xhci_setup_input_ctx_for_quirk(struct xhci_hcd *xhci, } ep_ctx->deq = addr | deq_state->new_cycle_state; - xhci_slot_copy(xhci, xhci->devs[slot_id]); - - ctrl_ctx = xhci_get_input_control_ctx(xhci, in_ctx); added_ctxs = xhci_get_endpoint_flag_from_index(ep_index); - ctrl_ctx->add_flags = added_ctxs | SLOT_FLAG; - ctrl_ctx->drop_flags = added_ctxs; - - xhci_dbg(xhci, "Slot ID %d Input Context:\n", slot_id); - xhci_dbg_ctx(xhci, in_ctx, ep_index); + xhci_setup_input_ctx_for_config_ep(xhci, slot_id, + added_ctxs, added_ctxs); } void xhci_cleanup_stalled_ring(struct xhci_hcd *xhci, -- cgit v0.10.2