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