]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/usb/gadget/u_serial.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/horms/lvs-2.6 into lvs-next-2.6
[linux-2.6-omap-h63xx.git] / drivers / usb / gadget / u_serial.h
index bc38e68d0f26c827a011abc4edaffea1f58115f9..af3910d01aea65f7b92e16e7e10770b0ccd74828 100644 (file)
 #ifndef __U_SERIAL_H
 #define __U_SERIAL_H
 
-/* #include <linux/usb/composite.h> */
-#include <linux/usb/ch9.h>
-#include <linux/usb/gadget.h>
-
+#include <linux/usb/composite.h>
 #include <linux/usb/cdc.h>
 
 /*
  * style I/O using the USB peripheral endpoints listed here, including
  * hookups to sysfs and /dev for each logical "tty" device.
  *
- * REVISIT need TTY --> USB event flow too, so ACM can report open/close
- * as carrier detect events.  Model after ECM.  There's more ACM state too.
+ * REVISIT at least ACM could support tiocmget() if needed.
  *
  * REVISIT someday, allow multiplexing several TTYs over these endpoints.
  */
 struct gserial {
-       /* struct usb_function          func; */
+       struct usb_function             func;
 
        /* port is managed by gserial_{connect,disconnect} */
        struct gs_port                  *ioport;
@@ -45,12 +41,16 @@ struct gserial {
        /* REVISIT avoid this CDC-ACM support harder ... */
        struct usb_cdc_line_coding port_line_coding;    /* 9600-8-N-1 etc */
 
-       /* FIXME remove these when we switch to acm_bind_config... */
-       struct usb_ep                   *notify;
-       struct usb_endpoint_descriptor  *notify_desc;
-       u16                             port_handshake_bits;
+       /* notification callbacks */
+       void (*connect)(struct gserial *p);
+       void (*disconnect)(struct gserial *p);
+       int (*send_break)(struct gserial *p, int duration);
 };
 
+/* utilities to allocate/free request and buffer */
+struct usb_request *gs_alloc_req(struct usb_ep *ep, unsigned len, gfp_t flags);
+void gs_free_req(struct usb_ep *, struct usb_request *req);
+
 /* port setup/teardown is handled by gadget driver */
 int gserial_setup(struct usb_gadget *g, unsigned n_ports);
 void gserial_cleanup(void);
@@ -59,4 +59,8 @@ void gserial_cleanup(void);
 int gserial_connect(struct gserial *, u8 port_num);
 void gserial_disconnect(struct gserial *);
 
+/* functions are bound to configurations by a config or gadget driver */
+int acm_bind_config(struct usb_configuration *c, u8 port_num);
+int gser_bind_config(struct usb_configuration *c, u8 port_num);
+
 #endif /* __U_SERIAL_H */