⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usb_gadget.h

📁 linux得一些常用命令,以及linux环境下的c编程
💻 H
📖 第 1 页 / 共 3 页
字号:
 * this affects the device status reported by the hardware driver. * some hardware may not support bus-powered operation, in which * case this feature's value can never change. * * returns zero on success, else negative errno. */static inline intusb_gadget_clear_selfpowered (struct usb_gadget *gadget){	if (!gadget->ops->set_selfpowered)		return -EOPNOTSUPP;	return gadget->ops->set_selfpowered (gadget, 0);}/** * usb_gadget_vbus_connect - Notify controller that VBUS is powered * @gadget:The device which now has VBUS power. * * This call is used by a driver for an external transceiver (or GPIO) * that detects a VBUS power session starting.  Common responses include * resuming the controller, activating the D+ (or D-) pullup to let the * host detect that a USB device is attached, and starting to draw power * (8mA or possibly more, especially after SET_CONFIGURATION). * * Returns zero on success, else negative errno. */static inline intusb_gadget_vbus_connect(struct usb_gadget *gadget){	if (!gadget->ops->vbus_session)		return -EOPNOTSUPP;	return gadget->ops->vbus_session (gadget, 1);}/** * usb_gadget_vbus_draw - constrain controller's VBUS power usage * @gadget:The device whose VBUS usage is being described * @mA:How much current to draw, in milliAmperes.  This should be twice *	the value listed in the configuration descriptor bMaxPower field. * * This call is used by gadget drivers during SET_CONFIGURATION calls, * reporting how much power the device may consume.  For example, this * could affect how quickly batteries are recharged. * * Returns zero on success, else negative errno. */static inline intusb_gadget_vbus_draw(struct usb_gadget *gadget, unsigned mA){	if (!gadget->ops->vbus_draw)		return -EOPNOTSUPP;	return gadget->ops->vbus_draw (gadget, mA);}/** * usb_gadget_vbus_disconnect - notify controller about VBUS session end * @gadget:the device whose VBUS supply is being described * * This call is used by a driver for an external transceiver (or GPIO) * that detects a VBUS power session ending.  Common responses include * reversing everything done in usb_gadget_vbus_connect(). * * Returns zero on success, else negative errno. */static inline intusb_gadget_vbus_disconnect(struct usb_gadget *gadget){	if (!gadget->ops->vbus_session)		return -EOPNOTSUPP;	return gadget->ops->vbus_session (gadget, 0);}/** * usb_gadget_connect - software-controlled connect to USB host * @gadget:the peripheral being connected * * Enables the D+ (or potentially D-) pullup.  The host will start * enumerating this gadget when the pullup is active and a VBUS session * is active (the link is powered).  This pullup is always enabled unless * usb_gadget_disconnect() has been used to disable it. * * Returns zero on success, else negative errno. */static inline intusb_gadget_connect (struct usb_gadget *gadget){	if (!gadget->ops->pullup)		return -EOPNOTSUPP;	return gadget->ops->pullup (gadget, 1);}/** * usb_gadget_disconnect - software-controlled disconnect from USB host * @gadget:the peripheral being disconnected * * Disables the D+ (or potentially D-) pullup, which the host may see * as a disconnect (when a VBUS session is active).  Not all systems * support software pullup controls. * * This routine may be used during the gadget driver bind() call to prevent * the peripheral from ever being visible to the USB host, unless later * usb_gadget_connect() is called.  For example, user mode components may * need to be activated before the system can talk to hosts. * * Returns zero on success, else negative errno. */static inline intusb_gadget_disconnect (struct usb_gadget *gadget){	if (!gadget->ops->pullup)		return -EOPNOTSUPP;	return gadget->ops->pullup (gadget, 0);}/*-------------------------------------------------------------------------*//** * 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. * 	At that point, ep0 is fully initialized, and ep_list holds * 	the currently-available endpoints. * 	Called in a context that permits sleeping. * @setup: Invoked for ep0 control requests that aren't handled by * 	the hardware level driver. Most calls must be handled by * 	the gadget driver, including descriptor and configuration * 	management.  The 16 bit members of the setup data are in * 	cpu order. Called in_interrupt; this may not sleep.  Driver *	queues a response to ep0, or returns negative to stall. * @disconnect: Invoked after all transfers have been stopped, * 	when the host is disconnected.  May be called in_interrupt; this * 	may not sleep.  Some devices can't detect disconnect, so this might *	not be called except as part of controller shutdown. * @unbind: Invoked when the driver is unbound from a gadget, * 	usually from rmmod (after a disconnect is reported). * 	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. * @driver: Driver model state for this driver. * * Devices are disabled till a gadget driver successfully bind()s, which * means the driver will handle setup() requests needed to enumerate (and * meet "chapter 9" requirements) then do some useful work. * * If gadget->is_otg is true, the gadget driver must provide an OTG * descriptor during enumeration, or else fail the bind() call.  In such * cases, no USB traffic may flow until both bind() returns without * having called usb_gadget_disconnect(), and the USB host stack has * initialized. * * Drivers use hardware-specific knowledge to configure the usb hardware. * endpoint addressing is only one of several hardware characteristics that * are in descriptors the ep0 implementation returns from setup() calls. * * Except for ep0 implementation, most driver code shouldn't need change to * run on top of different usb controllers.  It'll use endpoints set up by * that ep0 implementation. * * The usb controller driver handles a few standard usb requests.  Those * include set_address, and feature flags for devices, interfaces, and * endpoints (the get_status, set_feature, and clear_feature requests). * * Accordingly, the driver's setup() callback must always implement all * get_descriptor requests, returning at least a device descriptor and * a configuration descriptor.  Drivers must make sure the endpoint * descriptors match any hardware constraints. Some hardware also constrains * other descriptors. (The pxa250 allows only configurations 1, 2, or 3). * * The driver's setup() callback must also implement set_configuration, * and should also implement set_interface, get_configuration, and * get_interface.  Setting a configuration (or interface) is where * endpoints should be activated or (config 0) shut down. * * (Note that only the default control endpoint is supported.  Neither * hosts nor devices generally support control traffic except to ep0.) * * Most devices will ignore USB suspend/resume operations, and so will * not provide those callbacks.  However, some may need to change modes * when the host is not longer directing those activities.  For example, * local controls (buttons, dials, etc) may need to be re-enabled since * the (remote) host can't do that any longer; or an error state might * be cleared, to make the device behave identically whether or not * power is maintained. */struct usb_gadget_driver {	char			*function;	enum usb_device_speed	speed;	int			(*bind)(struct usb_gadget *);	void			(*unbind)(struct usb_gadget *);	int			(*setup)(struct usb_gadget *,					const struct usb_ctrlrequest *);	void			(*disconnect)(struct usb_gadget *);	void			(*suspend)(struct usb_gadget *);	void			(*resume)(struct usb_gadget *);	// FIXME support safe rmmod	struct device_driver	driver;};/*-------------------------------------------------------------------------*//* driver modules register and unregister, as usual. * these calls must be made in a context that can sleep. * * these will usually be implemented directly by the hardware-dependent * usb bus interface driver, which will only support a single driver. *//** * usb_gadget_register_driver - register a gadget driver * @driver:the driver being registered * * Call this in your gadget driver's module initialization function, * to tell the underlying usb controller driver about your driver. * The driver's bind() function will be called to bind it to a * gadget.  This function must be called in a context that can sleep. */int usb_gadget_register_driver (struct usb_gadget_driver *driver);/** * usb_gadget_unregister_driver - unregister a gadget driver * @driver:the driver being unregistered * * Call this in your gadget driver's module cleanup function, * to tell the underlying usb controller that your driver is * going away.  If the controller is connected to a USB host, * it will first disconnect().  The driver is also requested * to unbind() and clean up any device state, before this procedure * finally returns. * This function must be called in a context that can sleep. */int usb_gadget_unregister_driver (struct usb_gadget_driver *driver);/*-------------------------------------------------------------------------*//* utility to simplify dealing with string descriptors *//** * struct usb_string - wraps a C string and its USB id * @id:the (nonzero) ID for this string * @s:the string, in UTF-8 encoding * * If you're using usb_gadget_get_string(), use this to wrap a string * together with its ID. */struct usb_string {	u8			id;	const char		*s;};/** * struct usb_gadget_strings - a set of USB strings in a given language * @language:identifies the strings' language (0x0409 for en-us) * @strings:array of strings with their ids * * If you're using usb_gadget_get_string(), use this to wrap all the * strings for a given language. */struct usb_gadget_strings {	u16			language;	/* 0x0409 for en-us */	struct usb_string	*strings;};/* put descriptor for string with that id into buf (buflen >= 256) */int usb_gadget_get_string (struct usb_gadget_strings *table, int id, u8 *buf);/*-------------------------------------------------------------------------*//* utility to simplify managing config descriptors *//* write vector of descriptors into buffer */int usb_descriptor_fillbuf(void *, unsigned,		const struct usb_descriptor_header **);/* build config descriptor from single descriptor vector */int usb_gadget_config_buf(const struct usb_config_descriptor *config,	void *buf, unsigned buflen, const struct usb_descriptor_header **desc);/*-------------------------------------------------------------------------*//* utility wrapping a simple endpoint selection policy */extern struct usb_ep *usb_ep_autoconfig (struct usb_gadget *,			struct usb_endpoint_descriptor *) __init;extern void usb_ep_autoconfig_reset (struct usb_gadget *) __init;#endif  /* __KERNEL__ */#endif	/* __LINUX_USB_GADGET_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -