Rev 422 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
422 | giacomo | 1 | /* |
2 | * <linux/usb_gadget.h> |
||
3 | * |
||
4 | * We call the USB code inside a Linux-based peripheral device a "gadget" |
||
5 | * driver, except for the hardware-specific bus glue. One USB host can |
||
6 | * master many USB gadgets, but the gadgets are only slaved to one host. |
||
7 | * |
||
8 | * |
||
9 | * (c) Copyright 2002-2003 by David Brownell |
||
10 | * All Rights Reserved. |
||
11 | * |
||
12 | * This software is licensed under the GNU GPL version 2. |
||
13 | */ |
||
14 | |||
15 | #ifndef __LINUX_USB_GADGET_H |
||
16 | #define __LINUX_USB_GADGET_H |
||
17 | |||
18 | #ifdef __KERNEL__ |
||
19 | |||
20 | struct usb_ep; |
||
21 | |||
22 | /** |
||
23 | * struct usb_request - describes one i/o request |
||
24 | * @buf: Buffer used for data. Always provide this; some controllers |
||
25 | * only use PIO, or don't use DMA for some endpoints. |
||
26 | * @dma: DMA address corresponding to 'buf'. If you don't set this |
||
27 | * field, and the usb controller needs one, it is responsible |
||
28 | * for mapping and unmapping the buffer. |
||
29 | * @length: Length of that data |
||
30 | * @no_interrupt: If true, hints that no completion irq is needed. |
||
31 | * Helpful sometimes with deep request queues. |
||
32 | * @zero: If true, when writing data, makes the last packet be "short" |
||
33 | * by adding a zero length packet as needed; |
||
34 | * @short_not_ok: When reading data, makes short packets be |
||
35 | * treated as errors (queue stops advancing till cleanup). |
||
36 | * @complete: Function called when request completes |
||
37 | * @context: For use by the completion callback |
||
38 | * @list: For use by the gadget driver. |
||
39 | * @status: Reports completion code, zero or a negative errno. |
||
40 | * Normally, faults block the transfer queue from advancing until |
||
41 | * the completion callback returns. |
||
42 | * Code "-ESHUTDOWN" indicates completion caused by device disconnect, |
||
43 | * or when the driver disabled the endpoint. |
||
44 | * @actual: Reports actual bytes transferred. For reads (OUT |
||
45 | * transfers) this may be less than the requested length. If the |
||
46 | * short_not_ok flag is set, short reads are treated as errors |
||
47 | * even when status otherwise indicates successful completion. |
||
48 | * Note that for writes (IN transfers) the data bytes may still |
||
49 | * reside in a device-side FIFO. |
||
50 | * |
||
51 | * These are allocated/freed through the endpoint they're used with. The |
||
52 | * hardware's driver can add extra per-request data to the memory it returns, |
||
53 | * which often avoids separate memory allocations (potential failures), |
||
54 | * later when the request is queued. |
||
55 | * |
||
56 | * Request flags affect request handling, such as whether a zero length |
||
57 | * packet is written (the "zero" flag), whether a short read should be |
||
58 | * treated as an error (blocking request queue advance, the "short_not_ok" |
||
59 | * flag), or hinting that an interrupt is not required (the "no_interrupt" |
||
60 | * flag, for use with deep request queues). |
||
61 | * |
||
62 | * Bulk endpoints can use any size buffers, and can also be used for interrupt |
||
63 | * transfers. interrupt-only endpoints can be much less functional. |
||
64 | */ |
||
65 | // NOTE this is analagous to 'struct urb' on the host side, |
||
66 | // except that it's thinner and promotes more pre-allocation. |
||
67 | // |
||
68 | // ISSUE should this be allocated through the device? |
||
69 | |||
70 | struct usb_request { |
||
71 | void *buf; |
||
72 | unsigned length; |
||
73 | dma_addr_t dma; |
||
74 | |||
75 | unsigned no_interrupt:1; |
||
76 | unsigned zero:1; |
||
77 | unsigned short_not_ok:1; |
||
78 | |||
79 | void (*complete)(struct usb_ep *ep, |
||
80 | struct usb_request *req); |
||
81 | void *context; |
||
82 | struct list_head list; |
||
83 | |||
84 | int status; |
||
85 | unsigned actual; |
||
86 | }; |
||
87 | |||
88 | /*-------------------------------------------------------------------------*/ |
||
89 | |||
90 | /* endpoint-specific parts of the api to the usb controller hardware. |
||
91 | * unlike the urb model, (de)multiplexing layers are not required. |
||
92 | * (so this api could slash overhead if used on the host side...) |
||
93 | * |
||
94 | * note that device side usb controllers commonly differ in how many |
||
95 | * endpoints they support, as well as their capabilities. |
||
96 | */ |
||
97 | struct usb_ep_ops { |
||
98 | int (*enable) (struct usb_ep *ep, |
||
99 | const struct usb_endpoint_descriptor *desc); |
||
100 | int (*disable) (struct usb_ep *ep); |
||
101 | |||
102 | struct usb_request *(*alloc_request) (struct usb_ep *ep, |
||
103 | int gfp_flags); |
||
104 | void (*free_request) (struct usb_ep *ep, struct usb_request *req); |
||
105 | |||
106 | void *(*alloc_buffer) (struct usb_ep *ep, unsigned bytes, |
||
107 | dma_addr_t *dma, int gfp_flags); |
||
108 | void (*free_buffer) (struct usb_ep *ep, void *buf, dma_addr_t dma, |
||
109 | unsigned bytes); |
||
110 | // NOTE: on 2.5, drivers may also use dma_map() and |
||
111 | // dma_sync_single() to manage dma overhead. |
||
112 | |||
113 | int (*queue) (struct usb_ep *ep, struct usb_request *req, |
||
114 | int gfp_flags); |
||
115 | int (*dequeue) (struct usb_ep *ep, struct usb_request *req); |
||
116 | |||
117 | int (*set_halt) (struct usb_ep *ep, int value); |
||
118 | int (*fifo_status) (struct usb_ep *ep); |
||
119 | void (*fifo_flush) (struct usb_ep *ep); |
||
120 | }; |
||
121 | |||
122 | /** |
||
123 | * struct usb_ep - device side representation of USB endpoint |
||
124 | * @name:identifier for the endpoint, such as "ep-a" or "ep9in-bulk" |
||
125 | * @ops: Function pointers used to access hardware-specific operations. |
||
126 | * @ep_list:the gadget's ep_list holds all of its endpoints |
||
127 | * @maxpacket:The maximum packet size used on this endpoint. The initial |
||
128 | * value can sometimes be reduced (hardware allowing), according to |
||
129 | * the endpoint descriptor used to configure the endpoint. |
||
130 | * @driver_data:for use by the gadget driver. all other fields are |
||
131 | * read-only to gadget drivers. |
||
132 | * |
||
133 | * the bus controller driver lists all the general purpose endpoints in |
||
134 | * gadget->ep_list. the control endpoint (gadget->ep0) is not in that list, |
||
135 | * and is accessed only in response to a driver setup() callback. |
||
136 | */ |
||
137 | struct usb_ep { |
||
138 | void *driver_data; |
||
139 | |||
140 | const char *name; |
||
141 | const struct usb_ep_ops *ops; |
||
142 | struct list_head ep_list; |
||
143 | unsigned maxpacket:16; |
||
144 | }; |
||
145 | |||
146 | /*-------------------------------------------------------------------------*/ |
||
147 | |||
148 | /** |
||
149 | * usb_ep_enable - configure endpoint, making it usable |
||
150 | * @ep:the endpoint being configured. may not be the endpoint named "ep0". |
||
151 | * drivers discover endpoints through the ep_list of a usb_gadget. |
||
152 | * @desc:descriptor for desired behavior. caller guarantees this pointer |
||
153 | * remains valid until the endpoint is disabled; the data byte order |
||
154 | * is little-endian (usb-standard). |
||
155 | * |
||
156 | * when configurations are set, or when interface settings change, the driver |
||
157 | * will enable or disable the relevant endpoints. while it is enabled, an |
||
158 | * endpoint may be used for i/o until the driver receives a disconnect() from |
||
159 | * the host or until the endpoint is disabled. |
||
160 | * |
||
161 | * the ep0 implementation (which calls this routine) must ensure that the |
||
162 | * hardware capabilities of each endpoint match the descriptor provided |
||
163 | * for it. for example, an endpoint named "ep2in-bulk" would be usable |
||
164 | * for interrupt transfers as well as bulk, but it likely couldn't be used |
||
165 | * for iso transfers or for endpoint 14. some endpoints are fully |
||
166 | * configurable, with more generic names like "ep-a". (remember that for |
||
167 | * USB, "in" means "towards the USB master".) |
||
168 | * |
||
169 | * returns zero, or a negative error code. |
||
170 | */ |
||
171 | static inline int |
||
172 | usb_ep_enable (struct usb_ep *ep, const struct usb_endpoint_descriptor *desc) |
||
173 | { |
||
174 | return ep->ops->enable (ep, desc); |
||
175 | } |
||
176 | |||
177 | /** |
||
178 | * usb_ep_disable - endpoint is no longer usable |
||
179 | * @ep:the endpoint being unconfigured. may not be the endpoint named "ep0". |
||
180 | * |
||
181 | * no other task may be using this endpoint when this is called. |
||
182 | * any pending and uncompleted requests will complete with status |
||
183 | * indicating disconnect (-ESHUTDOWN) before this call returns. |
||
184 | * gadget drivers must call usb_ep_enable() again before queueing |
||
185 | * requests to the endpoint. |
||
186 | * |
||
187 | * returns zero, or a negative error code. |
||
188 | */ |
||
189 | static inline int |
||
190 | usb_ep_disable (struct usb_ep *ep) |
||
191 | { |
||
192 | return ep->ops->disable (ep); |
||
193 | } |
||
194 | |||
195 | /** |
||
196 | * usb_ep_alloc_request - allocate a request object to use with this endpoint |
||
197 | * @ep:the endpoint to be used with with the request |
||
198 | * @gfp_flags:GFP_* flags to use |
||
199 | * |
||
200 | * Request objects must be allocated with this call, since they normally |
||
201 | * need controller-specific setup and may even need endpoint-specific |
||
202 | * resources such as allocation of DMA descriptors. |
||
203 | * Requests may be submitted with usb_ep_queue(), and receive a single |
||
204 | * completion callback. Free requests with usb_ep_free_request(), when |
||
205 | * they are no longer needed. |
||
206 | * |
||
207 | * Returns the request, or null if one could not be allocated. |
||
208 | */ |
||
209 | static inline struct usb_request * |
||
210 | usb_ep_alloc_request (struct usb_ep *ep, int gfp_flags) |
||
211 | { |
||
212 | return ep->ops->alloc_request (ep, gfp_flags); |
||
213 | } |
||
214 | |||
215 | /** |
||
216 | * usb_ep_free_request - frees a request object |
||
217 | * @ep:the endpoint associated with the request |
||
218 | * @req:the request being freed |
||
219 | * |
||
220 | * Reverses the effect of usb_ep_alloc_request(). |
||
221 | * Caller guarantees the request is not queued, and that it will |
||
222 | * no longer be requeued (or otherwise used). |
||
223 | */ |
||
224 | static inline void |
||
225 | usb_ep_free_request (struct usb_ep *ep, struct usb_request *req) |
||
226 | { |
||
227 | ep->ops->free_request (ep, req); |
||
228 | } |
||
229 | |||
230 | /** |
||
231 | * usb_ep_alloc_buffer - allocate an I/O buffer |
||
232 | * @ep:the endpoint associated with the buffer |
||
233 | * @len:length of the desired buffer |
||
234 | * @dma:pointer to the buffer's DMA address; must be valid |
||
235 | * @gfp_flags:GFP_* flags to use |
||
236 | * |
||
237 | * Returns a new buffer, or null if one could not be allocated. |
||
238 | * The buffer is suitably aligned for dma, if that endpoint uses DMA, |
||
239 | * and the caller won't have to care about dma-inconsistency |
||
240 | * or any hidden "bounce buffer" mechanism. No additional per-request |
||
241 | * DMA mapping will be required for such buffers. |
||
242 | * Free it later with usb_ep_free_buffer(). |
||
243 | * |
||
244 | * You don't need to use this call to allocate I/O buffers unless you |
||
245 | * want to make sure drivers don't incur costs for such "bounce buffer" |
||
246 | * copies or per-request DMA mappings. |
||
247 | */ |
||
248 | static inline void * |
||
249 | usb_ep_alloc_buffer (struct usb_ep *ep, unsigned len, dma_addr_t *dma, |
||
250 | int gfp_flags) |
||
251 | { |
||
252 | return ep->ops->alloc_buffer (ep, len, dma, gfp_flags); |
||
253 | } |
||
254 | |||
255 | /** |
||
256 | * usb_ep_free_buffer - frees an i/o buffer |
||
257 | * @ep:the endpoint associated with the buffer |
||
258 | * @buf:CPU view address of the buffer |
||
259 | * @dma:the buffer's DMA address |
||
260 | * @len:length of the buffer |
||
261 | * |
||
262 | * reverses the effect of usb_ep_alloc_buffer(). |
||
263 | * caller guarantees the buffer will no longer be accessed |
||
264 | */ |
||
265 | static inline void |
||
266 | usb_ep_free_buffer (struct usb_ep *ep, void *buf, dma_addr_t dma, unsigned len) |
||
267 | { |
||
268 | ep->ops->free_buffer (ep, buf, dma, len); |
||
269 | } |
||
270 | |||
271 | /** |
||
272 | * usb_ep_queue - queues (submits) an I/O request to an endpoint. |
||
273 | * @ep:the endpoint associated with the request |
||
274 | * @req:the request being submitted |
||
275 | * @gfp_flags: GFP_* flags to use in case the lower level driver couldn't |
||
276 | * pre-allocate all necessary memory with the request. |
||
277 | * |
||
278 | * This tells the device controller to perform the specified request through |
||
279 | * that endpoint (reading or writing a buffer). When the request completes, |
||
280 | * including being canceled by usb_ep_dequeue(), the request's completion |
||
281 | * routine is called to return the request to the driver. Any endpoint |
||
282 | * (except control endpoints like ep0) may have more than one transfer |
||
283 | * request queued; they complete in FIFO order. Once a gadget driver |
||
284 | * submits a request, that request may not be examined or modified until it |
||
285 | * is given back to that driver through the completion callback. |
||
286 | * |
||
287 | * Each request is turned into one or more packets. The controller driver |
||
288 | * never merges adjacent requests into the same packet. OUT transfers |
||
289 | * will sometimes use data that's already buffered in the hardware. |
||
290 | * |
||
291 | * Bulk endpoints can queue any amount of data; the transfer is packetized |
||
292 | * automatically. The last packet will be short if the request doesn't fill it |
||
293 | * out completely. Zero length packets (ZLPs) should be avoided in portable |
||
294 | * protocols since not all usb hardware can successfully handle zero length |
||
295 | * packets. (ZLPs may be explicitly written, and may be implicitly written if |
||
296 | * the request 'zero' flag is set.) Bulk endpoints may also be used |
||
297 | * for interrupt transfers; but the reverse is not true, and some endpoints |
||
298 | * won't support every interrupt transfer. (Such as 768 byte packets.) |
||
299 | * |
||
300 | * Interrupt-only endpoints are less functional than bulk endpoints, for |
||
301 | * example by not supporting queueing or not handling buffers that are |
||
302 | * larger than the endpoint's maxpacket size. They may also treat data |
||
303 | * toggle differently. |
||
304 | * |
||
305 | * Control endpoints ... after getting a setup() callback, the driver queues |
||
306 | * one response (even if it would be zero length). That enables the |
||
307 | * status ack, after transfering data as specified in the response. Setup |
||
308 | * functions may return negative error codes to generate protocol stalls. |
||
309 | * (Note that some USB device controllers disallow protocol stall responses |
||
310 | * in some cases.) When control responses are deferred (the response is |
||
311 | * written after the setup callback returns), then usb_ep_set_halt() may be |
||
312 | * used on ep0 to trigger protocol stalls. |
||
313 | * |
||
314 | * For periodic endpoints, like interrupt or isochronous ones, the usb host |
||
315 | * arranges to poll once per interval, and the gadget driver usually will |
||
316 | * have queued some data to transfer at that time. |
||
317 | * |
||
318 | * Returns zero, or a negative error code. Endpoints that are not enabled |
||
319 | * report errors; errors will also be |
||
320 | * reported when the usb peripheral is disconnected. |
||
321 | */ |
||
322 | static inline int |
||
323 | usb_ep_queue (struct usb_ep *ep, struct usb_request *req, int gfp_flags) |
||
324 | { |
||
325 | return ep->ops->queue (ep, req, gfp_flags); |
||
326 | } |
||
327 | |||
328 | /** |
||
329 | * usb_ep_dequeue - dequeues (cancels, unlinks) an I/O request from an endpoint |
||
330 | * @ep:the endpoint associated with the request |
||
331 | * @req:the request being canceled |
||
332 | * |
||
333 | * if the request is still active on the endpoint, it is dequeued and its |
||
334 | * completion routine is called (with status -ECONNRESET); else a negative |
||
335 | * error code is returned. |
||
336 | * |
||
337 | * note that some hardware can't clear out write fifos (to unlink the request |
||
338 | * at the head of the queue) except as part of disconnecting from usb. such |
||
339 | * restrictions prevent drivers from supporting configuration changes, |
||
340 | * even to configuration zero (a "chapter 9" requirement). |
||
341 | */ |
||
342 | static inline int usb_ep_dequeue (struct usb_ep *ep, struct usb_request *req) |
||
343 | { |
||
344 | return ep->ops->dequeue (ep, req); |
||
345 | } |
||
346 | |||
347 | /** |
||
348 | * usb_ep_set_halt - sets the endpoint halt feature. |
||
349 | * @ep: the non-isochronous endpoint being stalled |
||
350 | * |
||
351 | * Use this to stall an endpoint, perhaps as an error report. |
||
352 | * Except for control endpoints, |
||
353 | * the endpoint stays halted (will not stream any data) until the host |
||
354 | * clears this feature; drivers may need to empty the endpoint's request |
||
355 | * queue first, to make sure no inappropriate transfers happen. |
||
356 | * |
||
357 | * Note that while an endpoint CLEAR_FEATURE will be invisible to the |
||
358 | * gadget driver, a SET_INTERFACE will not be. To reset endpoints for the |
||
359 | * current altsetting, see usb_ep_clear_halt(). When switching altsettings, |
||
360 | * it's simplest to use usb_ep_enable() or usb_ep_disable() for the endpoints. |
||
361 | * |
||
362 | * Returns zero, or a negative error code. On success, this call sets |
||
363 | * underlying hardware state that blocks data transfers. |
||
364 | */ |
||
365 | static inline int |
||
366 | usb_ep_set_halt (struct usb_ep *ep) |
||
367 | { |
||
368 | return ep->ops->set_halt (ep, 1); |
||
369 | } |
||
370 | |||
371 | /** |
||
372 | * usb_ep_clear_halt - clears endpoint halt, and resets toggle |
||
373 | * @ep:the bulk or interrupt endpoint being reset |
||
374 | * |
||
375 | * Use this when responding to the standard usb "set interface" request, |
||
376 | * for endpoints that aren't reconfigured, after clearing any other state |
||
377 | * in the endpoint's i/o queue. |
||
378 | * |
||
379 | * Returns zero, or a negative error code. On success, this call clears |
||
380 | * the underlying hardware state reflecting endpoint halt and data toggle. |
||
381 | * Note that some hardware can't support this request (like pxa2xx_udc), |
||
382 | * and accordingly can't correctly implement interface altsettings. |
||
383 | */ |
||
384 | static inline int |
||
385 | usb_ep_clear_halt (struct usb_ep *ep) |
||
386 | { |
||
387 | return ep->ops->set_halt (ep, 0); |
||
388 | } |
||
389 | |||
390 | /** |
||
391 | * usb_ep_fifo_status - returns number of bytes in fifo, or error |
||
392 | * @ep: the endpoint whose fifo status is being checked. |
||
393 | * |
||
394 | * FIFO endpoints may have "unclaimed data" in them in certain cases, |
||
395 | * such as after aborted transfers. Hosts may not have collected all |
||
396 | * the IN data written by the gadget driver, as reported by a request |
||
397 | * completion. The gadget driver may not have collected all the data |
||
398 | * written OUT to it by the host. Drivers that need precise handling for |
||
399 | * fault reporting or recovery may need to use this call. |
||
400 | * |
||
401 | * This returns the number of such bytes in the fifo, or a negative |
||
402 | * errno if the endpoint doesn't use a FIFO or doesn't support such |
||
403 | * precise handling. |
||
404 | */ |
||
405 | static inline int |
||
406 | usb_ep_fifo_status (struct usb_ep *ep) |
||
407 | { |
||
408 | if (ep->ops->fifo_status) |
||
409 | return ep->ops->fifo_status (ep); |
||
410 | else |
||
411 | return -EOPNOTSUPP; |
||
412 | } |
||
413 | |||
414 | /** |
||
415 | * usb_ep_fifo_flush - flushes contents of a fifo |
||
416 | * @ep: the endpoint whose fifo is being flushed. |
||
417 | * |
||
418 | * This call may be used to flush the "unclaimed data" that may exist in |
||
419 | * an endpoint fifo after abnormal transaction terminations. The call |
||
420 | * must never be used except when endpoint is not being used for any |
||
421 | * protocol translation. |
||
422 | */ |
||
423 | static inline void |
||
424 | usb_ep_fifo_flush (struct usb_ep *ep) |
||
425 | { |
||
426 | if (ep->ops->fifo_flush) |
||
427 | ep->ops->fifo_flush (ep); |
||
428 | } |
||
429 | |||
430 | |||
431 | /*-------------------------------------------------------------------------*/ |
||
432 | |||
433 | struct usb_gadget; |
||
434 | |||
435 | /* the rest of the api to the controller hardware: device operations, |
||
436 | * which don't involve endpoints (or i/o). |
||
437 | */ |
||
438 | struct usb_gadget_ops { |
||
439 | int (*get_frame)(struct usb_gadget *); |
||
440 | int (*wakeup)(struct usb_gadget *); |
||
441 | int (*set_selfpowered) (struct usb_gadget *, int value); |
||
442 | int (*ioctl)(struct usb_gadget *, |
||
443 | unsigned code, unsigned long param); |
||
444 | }; |
||
445 | |||
446 | /** |
||
447 | * struct usb_gadget - represents a usb slave device |
||
448 | * @ops: Function pointers used to access hardware-specific operations. |
||
449 | * @ep0: Endpoint zero, used when reading or writing responses to |
||
450 | * driver setup() requests |
||
451 | * @ep_list: List of other endpoints supported by the device. |
||
452 | * @speed: Speed of current connection to USB host. |
||
453 | * @name: Identifies the controller hardware type. Used in diagnostics |
||
454 | * and sometimes configuration. |
||
455 | * @dev: Driver model state for this abstract device. |
||
456 | * |
||
457 | * Gadgets have a mostly-portable "gadget driver" implementing device |
||
458 | * functions, handling all usb configurations and interfaces. Gadget |
||
459 | * drivers talk to hardware-specific code indirectly, through ops vectors. |
||
460 | * That insulates the gadget driver from hardware details, and packages |
||
461 | * the hardware endpoints through generic i/o queues. The "usb_gadget" |
||
462 | * and "usb_ep" interfaces provide that insulation from the hardware. |
||
463 | * |
||
464 | * Except for the driver data, all fields in this structure are |
||
465 | * read-only to the gadget driver. That driver data is part of the |
||
466 | * "driver model" infrastructure in 2.5 (and later) kernels, and for |
||
467 | * earlier systems is grouped in a similar structure that's not known |
||
468 | * to the rest of the kernel. |
||
469 | */ |
||
470 | struct usb_gadget { |
||
471 | /* readonly to gadget driver */ |
||
472 | const struct usb_gadget_ops *ops; |
||
473 | struct usb_ep *ep0; |
||
474 | struct list_head ep_list; /* of usb_ep */ |
||
475 | enum usb_device_speed speed; |
||
476 | const char *name; |
||
477 | struct device dev; |
||
478 | }; |
||
479 | |||
480 | static inline void set_gadget_data (struct usb_gadget *gadget, void *data) |
||
481 | { dev_set_drvdata (&gadget->dev, data); } |
||
482 | static inline void *get_gadget_data (struct usb_gadget *gadget) |
||
483 | { return dev_get_drvdata (&gadget->dev); } |
||
484 | |||
485 | /* iterates the non-control endpoints; 'tmp' is a struct usb_ep pointer */ |
||
486 | #define gadget_for_each_ep(tmp,gadget) \ |
||
487 | list_for_each_entry(tmp, &(gadget)->ep_list, ep_list) |
||
488 | |||
489 | |||
490 | /** |
||
491 | * usb_gadget_frame_number - returns the current frame number |
||
492 | * @gadget: controller that reports the frame number |
||
493 | * |
||
494 | * Returns the usb frame number, normally eleven bits from a SOF packet, |
||
495 | * or negative errno if this device doesn't support this capability. |
||
496 | */ |
||
497 | static inline int usb_gadget_frame_number (struct usb_gadget *gadget) |
||
498 | { |
||
499 | return gadget->ops->get_frame (gadget); |
||
500 | } |
||
501 | |||
502 | /** |
||
503 | * usb_gadget_wakeup - tries to wake up the host connected to this gadget |
||
504 | * @gadget: controller used to wake up the host |
||
505 | * |
||
506 | * Returns zero on success, else negative error code if the hardware |
||
507 | * doesn't support such attempts, or its support has not been enabled |
||
508 | * by the usb host. Drivers must return device descriptors that report |
||
509 | * their ability to support this, or hosts won't enable it. |
||
510 | */ |
||
511 | static inline int usb_gadget_wakeup (struct usb_gadget *gadget) |
||
512 | { |
||
513 | if (!gadget->ops->wakeup) |
||
514 | return -EOPNOTSUPP; |
||
515 | return gadget->ops->wakeup (gadget); |
||
516 | } |
||
517 | |||
518 | /** |
||
519 | * usb_gadget_set_selfpowered - sets the device selfpowered feature. |
||
520 | * @gadget:the device being declared as self-powered |
||
521 | * |
||
522 | * this affects the device status reported by the hardware driver |
||
523 | * to reflect that it now has a local power supply. |
||
524 | * |
||
525 | * returns zero on success, else negative errno. |
||
526 | */ |
||
527 | static inline int |
||
528 | usb_gadget_set_selfpowered (struct usb_gadget *gadget) |
||
529 | { |
||
530 | if (!gadget->ops->set_selfpowered) |
||
531 | return -EOPNOTSUPP; |
||
532 | return gadget->ops->set_selfpowered (gadget, 1); |
||
533 | } |
||
534 | |||
535 | /** |
||
536 | * usb_gadget_clear_selfpowered - clear the device selfpowered feature. |
||
537 | * @gadget:the device being declared as bus-powered |
||
538 | * |
||
539 | * this affects the device status reported by the hardware driver. |
||
540 | * some hardware may not support bus-powered operation, in which |
||
541 | * case this feature's value can never change. |
||
542 | * |
||
543 | * returns zero on success, else negative errno. |
||
544 | */ |
||
545 | static inline int |
||
546 | usb_gadget_clear_selfpowered (struct usb_gadget *gadget) |
||
547 | { |
||
548 | if (!gadget->ops->set_selfpowered) |
||
549 | return -EOPNOTSUPP; |
||
550 | return gadget->ops->set_selfpowered (gadget, 0); |
||
551 | } |
||
552 | |||
553 | |||
554 | /*-------------------------------------------------------------------------*/ |
||
555 | |||
556 | /** |
||
557 | * struct usb_gadget_driver - driver for usb 'slave' devices |
||
558 | * @function: String describing the gadget's function |
||
559 | * @speed: Highest speed the driver handles. |
||
560 | * @bind: Invoked when the driver is bound to a gadget, usually |
||
561 | * after registering the driver. |
||
562 | * At that point, ep0 is fully initialized, and ep_list holds |
||
563 | * the currently-available endpoints. |
||
564 | * Called in a context that permits sleeping. |
||
565 | * @setup: Invoked for ep0 control requests that aren't handled by |
||
566 | * the hardware level driver. Most calls must be handled by |
||
567 | * the gadget driver, including descriptor and configuration |
||
568 | * management. The 16 bit members of the setup data are in |
||
569 | * cpu order. Called in_interrupt; this may not sleep. Driver |
||
570 | * queues a response to ep0, or returns negative to stall. |
||
571 | * @disconnect: Invoked after all transfers have been stopped, |
||
572 | * when the host is disconnected. May be called in_interrupt; this |
||
573 | * may not sleep. Some devices can't detect disconnect, so this might |
||
574 | * not be called except as part of controller shutdown. |
||
575 | * @unbind: Invoked when the driver is unbound from a gadget, |
||
576 | * usually from rmmod (after a disconnect is reported). |
||
577 | * Called in a context that permits sleeping. |
||
578 | * @suspend: Invoked on USB suspend. May be called in_interrupt. |
||
579 | * @resume: Invoked on USB resume. May be called in_interrupt. |
||
580 | * @driver: Driver model state for this driver. |
||
581 | * |
||
582 | * Devices are disabled till a gadget driver successfully bind()s, which |
||
583 | * means the driver will handle setup() requests needed to enumerate (and |
||
584 | * meet "chapter 9" requirements) then do some useful work. |
||
585 | * |
||
586 | * Drivers use hardware-specific knowledge to configure the usb hardware. |
||
587 | * endpoint addressing is only one of several hardware characteristics that |
||
588 | * are in descriptors the ep0 implementation returns from setup() calls. |
||
589 | * |
||
590 | * Except for ep0 implementation, most driver code shouldn't need change to |
||
591 | * run on top of different usb controllers. It'll use endpoints set up by |
||
592 | * that ep0 implementation. |
||
593 | * |
||
594 | * The usb controller driver handles a few standard usb requests. Those |
||
595 | * include set_address, and feature flags for devices, interfaces, and |
||
596 | * endpoints (the get_status, set_feature, and clear_feature requests). |
||
597 | * |
||
598 | * Accordingly, the driver's setup() callback must always implement all |
||
599 | * get_descriptor requests, returning at least a device descriptor and |
||
600 | * a configuration descriptor. Drivers must make sure the endpoint |
||
601 | * descriptors match any hardware constraints. Some hardware also constrains |
||
602 | * other descriptors. (The pxa250 allows only configurations 1, 2, or 3). |
||
603 | * |
||
604 | * The driver's setup() callback must also implement set_configuration, |
||
605 | * and should also implement set_interface, get_configuration, and |
||
606 | * get_interface. Setting a configuration (or interface) is where |
||
607 | * endpoints should be activated or (config 0) shut down. |
||
608 | * |
||
609 | * (Note that only the default control endpoint is supported. Neither |
||
610 | * hosts nor devices generally support control traffic except to ep0.) |
||
611 | * |
||
612 | * Most devices will ignore USB suspend/resume operations, and so will |
||
613 | * not provide those callbacks. However, some may need to change modes |
||
614 | * when the host is not longer directing those activities. For example, |
||
615 | * local controls (buttons, dials, etc) may need to be re-enabled since |
||
616 | * the (remote) host can't do that any longer; or an error state might |
||
617 | * be cleared, to make the device behave identically whether or not |
||
618 | * power is maintained. |
||
619 | */ |
||
620 | struct usb_gadget_driver { |
||
621 | char *function; |
||
622 | enum usb_device_speed speed; |
||
623 | int (*bind)(struct usb_gadget *); |
||
624 | void (*unbind)(struct usb_gadget *); |
||
625 | int (*setup)(struct usb_gadget *, |
||
626 | const struct usb_ctrlrequest *); |
||
627 | void (*disconnect)(struct usb_gadget *); |
||
628 | void (*suspend)(struct usb_gadget *); |
||
629 | void (*resume)(struct usb_gadget *); |
||
630 | |||
631 | // FIXME support safe rmmod |
||
632 | struct device_driver driver; |
||
633 | }; |
||
634 | |||
635 | |||
636 | |||
637 | /*-------------------------------------------------------------------------*/ |
||
638 | |||
639 | /* driver modules register and unregister, as usual. |
||
640 | * these calls must be made in a context that can sleep. |
||
641 | * |
||
642 | * these will usually be implemented directly by the hardware-dependent |
||
643 | * usb bus interface driver, which will only support a single driver. |
||
644 | */ |
||
645 | |||
646 | /** |
||
647 | * usb_gadget_register_driver - register a gadget driver |
||
648 | * @driver:the driver being registered |
||
649 | * |
||
650 | * Call this in your gadget driver's module initialization function, |
||
651 | * to tell the underlying usb controller driver about your driver. |
||
652 | * The driver's bind() function will be called to bind it to a |
||
653 | * gadget. This function must be called in a context that can sleep. |
||
654 | */ |
||
655 | int usb_gadget_register_driver (struct usb_gadget_driver *driver); |
||
656 | |||
657 | /** |
||
658 | * usb_gadget_unregister_driver - unregister a gadget driver |
||
659 | * @driver:the driver being unregistered |
||
660 | * |
||
661 | * Call this in your gadget driver's module cleanup function, |
||
662 | * to tell the underlying usb controller that your driver is |
||
663 | * going away. If the controller is connected to a USB host, |
||
664 | * it will first disconnect(). The driver is also requested |
||
665 | * to unbind() and clean up any device state, before this procedure |
||
666 | * finally returns. |
||
667 | * This function must be called in a context that can sleep. |
||
668 | */ |
||
669 | int usb_gadget_unregister_driver (struct usb_gadget_driver *driver); |
||
670 | |||
671 | /*-------------------------------------------------------------------------*/ |
||
672 | |||
673 | /* utility to simplify dealing with string descriptors */ |
||
674 | |||
675 | /** |
||
676 | * struct usb_string - wraps a C string and its USB id |
||
677 | * @id:the (nonzero) ID for this string |
||
678 | * @s:the string, in ISO-8859/1 characters |
||
679 | * |
||
680 | * If you're using usb_gadget_get_string(), use this to wrap a string |
||
681 | * together with its ID. |
||
682 | */ |
||
683 | struct usb_string { |
||
684 | u8 id; |
||
685 | const char *s; |
||
686 | }; |
||
687 | |||
688 | /** |
||
689 | * struct usb_gadget_strings - a set of USB strings in a given language |
||
690 | * @language:identifies the strings' language (0x0409 for en-us) |
||
691 | * @strings:array of strings with their ids |
||
692 | * |
||
693 | * If you're using usb_gadget_get_string(), use this to wrap all the |
||
694 | * strings for a given language. |
||
695 | */ |
||
696 | struct usb_gadget_strings { |
||
697 | u16 language; /* 0x0409 for en-us */ |
||
698 | struct usb_string *strings; |
||
699 | }; |
||
700 | |||
701 | /* put descriptor for string with that id into buf (buflen >= 256) */ |
||
702 | int usb_gadget_get_string (struct usb_gadget_strings *table, int id, u8 *buf); |
||
703 | |||
704 | |||
705 | #endif /* __KERNEL__ */ |
||
706 | |||
707 | #endif /* __LINUX_USB_GADGET_H */ |