Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 93359
b: refs/heads/master
c: e6a79f1
h: refs/heads/master
i:
  93357: a17b659
  93355: 1f99b5e
  93351: 6b5e35d
  93343: 77c75e7
v: v3
  • Loading branch information
Oliver Neukum authored and Greg Kroah-Hartman committed Apr 25, 2008
1 parent 0e41884 commit 2b7325e
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a082b5c7882bdbd8a86ace8470ca2ecda796d5a7
refs/heads/master: e6a79f1f07fc88a2efd6d0e8f0ccf591cb93cd34
50 changes: 50 additions & 0 deletions trunk/Documentation/usb/anchors.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
What is anchor?
===============

A USB driver needs to support some callbacks requiring
a driver to cease all IO to an interface. To do so, a
driver has to keep track of the URBs it has submitted
to know they've all completed or to call usb_kill_urb
for them. The anchor is a data structure takes care of
keeping track of URBs and provides methods to deal with
multiple URBs.

Allocation and Initialisation
=============================

There's no API to allocate an anchor. It is simply declared
as struct usb_anchor. init_usb_anchor() must be called to
initialise the data structure.

Deallocation
============

Once it has no more URBs associated with it, the anchor can be
freed with normal memory management operations.

Association and disassociation of URBs with anchors
===================================================

An association of URBs to an anchor is made by an explicit
call to usb_anchor_urb(). The association is maintained until
an URB is finished by (successfull) completion. Thus disassociation
is automatic. A function is provided to forcibly finish (kill)
all URBs associated with an anchor.
Furthermore, disassociation can be made with usb_unanchor_urb()

Operations on multitudes of URBs
================================

usb_kill_anchored_urbs()
------------------------

This function kills all URBs associated with an anchor. The URBs
are called in the reverse temporal order they were submitted.
This way no data can be reordered.

usb_wait_anchor_empty_timeout()
-------------------------------

This function waits for all URBs associated with an anchor to finish
or a timeout, whichever comes first. Its return value will tell you
whether the timeout was reached.

0 comments on commit 2b7325e

Please sign in to comment.