diff options
| author | Sarah Sharp <sarah.a.sharp@linux.intel.com> | 2009-09-04 13:53:11 -0400 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-09-23 09:46:39 -0400 |
| commit | 5270b951b9cd5e50aea55cb52684a171fb10381c (patch) | |
| tree | 6833c7ac03e9bf9bad56daef92ee69c7a93fe843 /drivers/usb/host | |
| parent | 63a0d9abd18cdcf5a985029c266c6bfe0511768f (diff) | |
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')
| -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) | |||
| 1247 | xhci_zero_in_ctx(xhci, virt_dev); | 1247 | xhci_zero_in_ctx(xhci, virt_dev); |
| 1248 | } | 1248 | } |
| 1249 | 1249 | ||
| 1250 | static void xhci_setup_input_ctx_for_config_ep(struct xhci_hcd *xhci, | ||
| 1251 | unsigned int slot_id, u32 add_flags, u32 drop_flags) | ||
| 1252 | { | ||
| 1253 | struct xhci_input_control_ctx *ctrl_ctx; | ||
| 1254 | ctrl_ctx = xhci_get_input_control_ctx(xhci, | ||
| 1255 | xhci->devs[slot_id]->in_ctx); | ||
| 1256 | ctrl_ctx->add_flags = add_flags; | ||
| 1257 | ctrl_ctx->drop_flags = drop_flags; | ||
| 1258 | xhci_slot_copy(xhci, xhci->devs[slot_id]); | ||
| 1259 | ctrl_ctx->add_flags |= SLOT_FLAG; | ||
| 1260 | |||
| 1261 | xhci_dbg(xhci, "Slot ID %d Input Context:\n", slot_id); | ||
| 1262 | xhci_dbg_ctx(xhci, xhci->devs[slot_id]->in_ctx, | ||
| 1263 | xhci_last_valid_endpoint(add_flags)); | ||
| 1264 | } | ||
| 1265 | |||
| 1250 | void xhci_setup_input_ctx_for_quirk(struct xhci_hcd *xhci, | 1266 | void xhci_setup_input_ctx_for_quirk(struct xhci_hcd *xhci, |
| 1251 | unsigned int slot_id, unsigned int ep_index, | 1267 | unsigned int slot_id, unsigned int ep_index, |
| 1252 | struct xhci_dequeue_state *deq_state) | 1268 | struct xhci_dequeue_state *deq_state) |
| 1253 | { | 1269 | { |
| 1254 | struct xhci_container_ctx *in_ctx; | 1270 | struct xhci_container_ctx *in_ctx; |
| 1255 | struct xhci_input_control_ctx *ctrl_ctx; | ||
| 1256 | struct xhci_ep_ctx *ep_ctx; | 1271 | struct xhci_ep_ctx *ep_ctx; |
| 1257 | u32 added_ctxs; | 1272 | u32 added_ctxs; |
| 1258 | dma_addr_t addr; | 1273 | dma_addr_t addr; |
| @@ -1272,15 +1287,9 @@ void xhci_setup_input_ctx_for_quirk(struct xhci_hcd *xhci, | |||
| 1272 | } | 1287 | } |
| 1273 | ep_ctx->deq = addr | deq_state->new_cycle_state; | 1288 | ep_ctx->deq = addr | deq_state->new_cycle_state; |
| 1274 | 1289 | ||
| 1275 | xhci_slot_copy(xhci, xhci->devs[slot_id]); | ||
| 1276 | |||
| 1277 | ctrl_ctx = xhci_get_input_control_ctx(xhci, in_ctx); | ||
| 1278 | added_ctxs = xhci_get_endpoint_flag_from_index(ep_index); | 1290 | added_ctxs = xhci_get_endpoint_flag_from_index(ep_index); |
| 1279 | ctrl_ctx->add_flags = added_ctxs | SLOT_FLAG; | 1291 | xhci_setup_input_ctx_for_config_ep(xhci, slot_id, |
| 1280 | ctrl_ctx->drop_flags = added_ctxs; | 1292 | added_ctxs, added_ctxs); |
| 1281 | |||
| 1282 | xhci_dbg(xhci, "Slot ID %d Input Context:\n", slot_id); | ||
| 1283 | xhci_dbg_ctx(xhci, in_ctx, ep_index); | ||
| 1284 | } | 1293 | } |
| 1285 | 1294 | ||
| 1286 | void xhci_cleanup_stalled_ring(struct xhci_hcd *xhci, | 1295 | void xhci_cleanup_stalled_ring(struct xhci_hcd *xhci, |
