diff options
author | Sarah Sharp <sarah.a.sharp@linux.intel.com> | 2009-09-04 10:53:11 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-09-23 06:46:39 -0700 |
commit | 5270b951b9cd5e50aea55cb52684a171fb10381c (patch) | |
tree | 6833c7ac03e9bf9bad56daef92ee69c7a93fe843 /drivers/usb/host/xhci-hcd.c | |
parent | 63a0d9abd18cdcf5a985029c266c6bfe0511768f (diff) | |
download | lwn-5270b951b9cd5e50aea55cb52684a171fb10381c.tar.gz lwn-5270b951b9cd5e50aea55cb52684a171fb10381c.zip |
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 <sarah.a.sharp@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/host/xhci-hcd.c')
-rw-r--r-- | drivers/usb/host/xhci-hcd.c | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/drivers/usb/host/xhci-hcd.c b/drivers/usb/host/xhci-hcd.c index 3ab9090c22dc..9c985d1245f3 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, |