Message ID | 1423212497-11970-5-git-send-email-kishon@ti.com |
---|---|
State | Accepted |
Delegated to: | Łukasz Majewski |
Headers | show |
Hi Kishon, > Made changes in gadget.h that is required after adding udc-core.c > except changes that might break other platforms. > > Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com> > --- > include/linux/usb/gadget.h | 43 > +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 > insertions(+) > > diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h > index 9bccd45..1960958 100644 > --- a/include/linux/usb/gadget.h > +++ b/include/linux/usb/gadget.h > @@ -396,6 +396,7 @@ static inline void usb_ep_fifo_flush(struct > usb_ep > *ep) /*-------------------------------------------------------------------------*/ > struct usb_gadget; > +struct usb_gadget_driver; > > /* the rest of the api to the controller hardware: device operations, > * which don't involve endpoints (or i/o). > @@ -409,6 +410,9 @@ struct usb_gadget_ops { > int (*pullup) (struct usb_gadget *, int is_on); > int (*ioctl)(struct usb_gadget *, > unsigned code, unsigned long param); > + int (*udc_start)(struct usb_gadget *, > + struct usb_gadget_driver *); > + int (*udc_stop)(struct usb_gadget *); > }; > > /** > @@ -459,6 +463,7 @@ struct usb_gadget { > struct usb_ep *ep0; > struct list_head ep_list; /* of usb_ep > */ enum usb_device_speed speed; > + enum usb_device_state state; > unsigned is_dualspeed:1; > unsigned is_otg:1; > unsigned is_a_peripheral:1; > @@ -686,6 +691,7 @@ static inline int usb_gadget_disconnect(struct > usb_gadget *gadget) > /** > * struct usb_gadget_driver - driver for usb 'slave' devices > + * @function: String describing the gadget's function > * @speed: Highest speed the driver handles. > * @bind: Invoked when the driver is bound to a gadget, usually > * after registering the driver. > @@ -707,6 +713,8 @@ static inline int usb_gadget_disconnect(struct > usb_gadget *gadget) > * Called in a context that permits sleeping. > * @suspend: Invoked on USB suspend. May be called in_interrupt. > * @resume: Invoked on USB resume. May be called in_interrupt. > + * @reset: Invoked on USB bus reset. It is mandatory for all gadget > drivers > + * and should be called in_interrupt. > * > * Devices are disabled till a gadget driver successfully bind()s, > which > * means the driver will handle setup() requests needed to enumerate > (and @@ -753,6 +761,7 @@ static inline int > usb_gadget_disconnect(struct usb_gadget *gadget) > * power is maintained. > */ > struct usb_gadget_driver { > + char *function; > enum usb_device_speed speed; > int (*bind)(struct usb_gadget *); > void (*unbind)(struct usb_gadget *); > @@ -761,6 +770,7 @@ struct usb_gadget_driver { > void (*disconnect)(struct usb_gadget > *); void (*suspend)(struct usb_gadget *); > void (*resume)(struct usb_gadget *); > + void (*reset)(struct usb_gadget *); > }; > > > @@ -801,6 +811,10 @@ int usb_gadget_register_driver(struct > usb_gadget_driver *driver); */ > int usb_gadget_unregister_driver(struct usb_gadget_driver *driver); > > +int usb_add_gadget_udc_release(struct device *parent, > + struct usb_gadget *gadget, void (*release)(struct > device *dev)); +int usb_add_gadget_udc(struct device *parent, struct > usb_gadget *gadget); +void usb_del_gadget_udc(struct usb_gadget > *gadget); /*-------------------------------------------------------------------------*/ > > /* utility to simplify dealing with string descriptors */ > @@ -847,6 +861,35 @@ int usb_gadget_config_buf(const struct > usb_config_descriptor *config, void *buf, unsigned buflen, const > struct usb_descriptor_header **desc); > /*-------------------------------------------------------------------------*/ > +/* utility to simplify map/unmap of usb_requests to/from DMA */ > + > +extern int usb_gadget_map_request(struct usb_gadget *gadget, > + struct usb_request *req, int > is_in); + > +extern void usb_gadget_unmap_request(struct usb_gadget *gadget, > + struct usb_request *req, int > is_in); + > +/*-------------------------------------------------------------------------*/ > + > +/* utility to set gadget state properly */ > + > +extern void usb_gadget_set_state(struct usb_gadget *gadget, > + enum usb_device_state state); > + > +/*-------------------------------------------------------------------------*/ > + > +/* utility to tell udc core that the bus reset occurs */ > +extern void usb_gadget_udc_reset(struct usb_gadget *gadget, > + struct usb_gadget_driver *driver); > + > +/*-------------------------------------------------------------------------*/ > + > +/* utility to give requests back to the gadget layer */ > + > +extern void usb_gadget_giveback_request(struct usb_ep *ep, > + struct usb_request *req); > + > +/*-------------------------------------------------------------------------*/ > > /* utility wrapping a simple endpoint selection policy */ > Reviewed-by: Lukasz Majewski <l.majewski@samsung.com>
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h index 9bccd45..1960958 100644 --- a/include/linux/usb/gadget.h +++ b/include/linux/usb/gadget.h @@ -396,6 +396,7 @@ static inline void usb_ep_fifo_flush(struct usb_ep *ep) /*-------------------------------------------------------------------------*/ struct usb_gadget; +struct usb_gadget_driver; /* the rest of the api to the controller hardware: device operations, * which don't involve endpoints (or i/o). @@ -409,6 +410,9 @@ struct usb_gadget_ops { int (*pullup) (struct usb_gadget *, int is_on); int (*ioctl)(struct usb_gadget *, unsigned code, unsigned long param); + int (*udc_start)(struct usb_gadget *, + struct usb_gadget_driver *); + int (*udc_stop)(struct usb_gadget *); }; /** @@ -459,6 +463,7 @@ struct usb_gadget { struct usb_ep *ep0; struct list_head ep_list; /* of usb_ep */ enum usb_device_speed speed; + enum usb_device_state state; unsigned is_dualspeed:1; unsigned is_otg:1; unsigned is_a_peripheral:1; @@ -686,6 +691,7 @@ static inline int usb_gadget_disconnect(struct usb_gadget *gadget) /** * struct usb_gadget_driver - driver for usb 'slave' devices + * @function: String describing the gadget's function * @speed: Highest speed the driver handles. * @bind: Invoked when the driver is bound to a gadget, usually * after registering the driver. @@ -707,6 +713,8 @@ static inline int usb_gadget_disconnect(struct usb_gadget *gadget) * Called in a context that permits sleeping. * @suspend: Invoked on USB suspend. May be called in_interrupt. * @resume: Invoked on USB resume. May be called in_interrupt. + * @reset: Invoked on USB bus reset. It is mandatory for all gadget drivers + * and should be called in_interrupt. * * Devices are disabled till a gadget driver successfully bind()s, which * means the driver will handle setup() requests needed to enumerate (and @@ -753,6 +761,7 @@ static inline int usb_gadget_disconnect(struct usb_gadget *gadget) * power is maintained. */ struct usb_gadget_driver { + char *function; enum usb_device_speed speed; int (*bind)(struct usb_gadget *); void (*unbind)(struct usb_gadget *); @@ -761,6 +770,7 @@ struct usb_gadget_driver { void (*disconnect)(struct usb_gadget *); void (*suspend)(struct usb_gadget *); void (*resume)(struct usb_gadget *); + void (*reset)(struct usb_gadget *); }; @@ -801,6 +811,10 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver); */ int usb_gadget_unregister_driver(struct usb_gadget_driver *driver); +int usb_add_gadget_udc_release(struct device *parent, + struct usb_gadget *gadget, void (*release)(struct device *dev)); +int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget); +void usb_del_gadget_udc(struct usb_gadget *gadget); /*-------------------------------------------------------------------------*/ /* utility to simplify dealing with string descriptors */ @@ -847,6 +861,35 @@ int usb_gadget_config_buf(const struct usb_config_descriptor *config, void *buf, unsigned buflen, const struct usb_descriptor_header **desc); /*-------------------------------------------------------------------------*/ +/* utility to simplify map/unmap of usb_requests to/from DMA */ + +extern int usb_gadget_map_request(struct usb_gadget *gadget, + struct usb_request *req, int is_in); + +extern void usb_gadget_unmap_request(struct usb_gadget *gadget, + struct usb_request *req, int is_in); + +/*-------------------------------------------------------------------------*/ + +/* utility to set gadget state properly */ + +extern void usb_gadget_set_state(struct usb_gadget *gadget, + enum usb_device_state state); + +/*-------------------------------------------------------------------------*/ + +/* utility to tell udc core that the bus reset occurs */ +extern void usb_gadget_udc_reset(struct usb_gadget *gadget, + struct usb_gadget_driver *driver); + +/*-------------------------------------------------------------------------*/ + +/* utility to give requests back to the gadget layer */ + +extern void usb_gadget_giveback_request(struct usb_ep *ep, + struct usb_request *req); + +/*-------------------------------------------------------------------------*/ /* utility wrapping a simple endpoint selection policy */
Made changes in gadget.h that is required after adding udc-core.c except changes that might break other platforms. Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com> --- include/linux/usb/gadget.h | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+)