xref: /openbmc/linux/drivers/usb/gadget/function/g_zero.h (revision 498495dba268b20e8eadd7fe93c140c68b6cc9d2)
1*b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
200a2430fSAndrzej Pietrasiewicz /*
300a2430fSAndrzej Pietrasiewicz  * This header declares the utility functions used by "Gadget Zero", plus
400a2430fSAndrzej Pietrasiewicz  * interfaces to its two single-configuration function drivers.
500a2430fSAndrzej Pietrasiewicz  */
600a2430fSAndrzej Pietrasiewicz 
700a2430fSAndrzej Pietrasiewicz #ifndef __G_ZERO_H
800a2430fSAndrzej Pietrasiewicz #define __G_ZERO_H
900a2430fSAndrzej Pietrasiewicz 
1000a2430fSAndrzej Pietrasiewicz #define GZERO_BULK_BUFLEN	4096
1100a2430fSAndrzej Pietrasiewicz #define GZERO_QLEN		32
1200a2430fSAndrzej Pietrasiewicz #define GZERO_ISOC_INTERVAL	4
1300a2430fSAndrzej Pietrasiewicz #define GZERO_ISOC_MAXPACKET	1024
140d6c3d96SPeter Chen #define GZERO_SS_BULK_QLEN	1
150d6c3d96SPeter Chen #define GZERO_SS_ISO_QLEN	8
1600a2430fSAndrzej Pietrasiewicz 
1700a2430fSAndrzej Pietrasiewicz struct usb_zero_options {
1800a2430fSAndrzej Pietrasiewicz 	unsigned pattern;
1900a2430fSAndrzej Pietrasiewicz 	unsigned isoc_interval;
2000a2430fSAndrzej Pietrasiewicz 	unsigned isoc_maxpacket;
2100a2430fSAndrzej Pietrasiewicz 	unsigned isoc_mult;
2200a2430fSAndrzej Pietrasiewicz 	unsigned isoc_maxburst;
2300a2430fSAndrzej Pietrasiewicz 	unsigned bulk_buflen;
2400a2430fSAndrzej Pietrasiewicz 	unsigned qlen;
250d6c3d96SPeter Chen 	unsigned ss_bulk_qlen;
260d6c3d96SPeter Chen 	unsigned ss_iso_qlen;
2700a2430fSAndrzej Pietrasiewicz };
2800a2430fSAndrzej Pietrasiewicz 
2900a2430fSAndrzej Pietrasiewicz struct f_ss_opts {
3000a2430fSAndrzej Pietrasiewicz 	struct usb_function_instance func_inst;
3100a2430fSAndrzej Pietrasiewicz 	unsigned pattern;
3200a2430fSAndrzej Pietrasiewicz 	unsigned isoc_interval;
3300a2430fSAndrzej Pietrasiewicz 	unsigned isoc_maxpacket;
3400a2430fSAndrzej Pietrasiewicz 	unsigned isoc_mult;
3500a2430fSAndrzej Pietrasiewicz 	unsigned isoc_maxburst;
3600a2430fSAndrzej Pietrasiewicz 	unsigned bulk_buflen;
370d6c3d96SPeter Chen 	unsigned bulk_qlen;
380d6c3d96SPeter Chen 	unsigned iso_qlen;
3900a2430fSAndrzej Pietrasiewicz 
4000a2430fSAndrzej Pietrasiewicz 	/*
4100a2430fSAndrzej Pietrasiewicz 	 * Read/write access to configfs attributes is handled by configfs.
4200a2430fSAndrzej Pietrasiewicz 	 *
4300a2430fSAndrzej Pietrasiewicz 	 * This is to protect the data from concurrent access by read/write
4400a2430fSAndrzej Pietrasiewicz 	 * and create symlink/remove symlink.
4500a2430fSAndrzej Pietrasiewicz 	 */
4600a2430fSAndrzej Pietrasiewicz 	struct mutex			lock;
4700a2430fSAndrzej Pietrasiewicz 	int				refcnt;
4800a2430fSAndrzej Pietrasiewicz };
4900a2430fSAndrzej Pietrasiewicz 
5000a2430fSAndrzej Pietrasiewicz struct f_lb_opts {
5100a2430fSAndrzej Pietrasiewicz 	struct usb_function_instance func_inst;
5200a2430fSAndrzej Pietrasiewicz 	unsigned bulk_buflen;
5300a2430fSAndrzej Pietrasiewicz 	unsigned qlen;
5400a2430fSAndrzej Pietrasiewicz 
5500a2430fSAndrzej Pietrasiewicz 	/*
5600a2430fSAndrzej Pietrasiewicz 	 * Read/write access to configfs attributes is handled by configfs.
5700a2430fSAndrzej Pietrasiewicz 	 *
5800a2430fSAndrzej Pietrasiewicz 	 * This is to protect the data from concurrent access by read/write
5900a2430fSAndrzej Pietrasiewicz 	 * and create symlink/remove symlink.
6000a2430fSAndrzej Pietrasiewicz 	 */
6100a2430fSAndrzej Pietrasiewicz 	struct mutex			lock;
6200a2430fSAndrzej Pietrasiewicz 	int				refcnt;
6300a2430fSAndrzej Pietrasiewicz };
6400a2430fSAndrzej Pietrasiewicz 
6500a2430fSAndrzej Pietrasiewicz void lb_modexit(void);
6600a2430fSAndrzej Pietrasiewicz int lb_modinit(void);
6700a2430fSAndrzej Pietrasiewicz 
6800a2430fSAndrzej Pietrasiewicz /* common utilities */
6900a2430fSAndrzej Pietrasiewicz void disable_endpoints(struct usb_composite_dev *cdev,
7000a2430fSAndrzej Pietrasiewicz 		struct usb_ep *in, struct usb_ep *out,
712c247804SFelipe Balbi 		struct usb_ep *iso_in, struct usb_ep *iso_out);
7200a2430fSAndrzej Pietrasiewicz 
7300a2430fSAndrzej Pietrasiewicz #endif /* __G_ZERO_H */
74