1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef __USB_STREAM_H 3*4882a593Smuzhiyun #define __USB_STREAM_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #include <uapi/sound/usb_stream.h> 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #define USB_STREAM_NURBS 4 8*4882a593Smuzhiyun #define USB_STREAM_URBDEPTH 4 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun struct usb_stream_kernel { 11*4882a593Smuzhiyun struct usb_stream *s; 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun void *write_page; 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun unsigned n_o_ps; 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun struct urb *inurb[USB_STREAM_NURBS]; 18*4882a593Smuzhiyun struct urb *idle_inurb; 19*4882a593Smuzhiyun struct urb *completed_inurb; 20*4882a593Smuzhiyun struct urb *outurb[USB_STREAM_NURBS]; 21*4882a593Smuzhiyun struct urb *idle_outurb; 22*4882a593Smuzhiyun struct urb *completed_outurb; 23*4882a593Smuzhiyun struct urb *i_urb; 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun int iso_frame_balance; 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun wait_queue_head_t sleep; 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun unsigned out_phase; 30*4882a593Smuzhiyun unsigned out_phase_peeked; 31*4882a593Smuzhiyun unsigned freqn; 32*4882a593Smuzhiyun }; 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun struct usb_stream *usb_stream_new(struct usb_stream_kernel *sk, 35*4882a593Smuzhiyun struct usb_device *dev, 36*4882a593Smuzhiyun unsigned in_endpoint, unsigned out_endpoint, 37*4882a593Smuzhiyun unsigned sample_rate, unsigned use_packsize, 38*4882a593Smuzhiyun unsigned period_frames, unsigned frame_size); 39*4882a593Smuzhiyun void usb_stream_free(struct usb_stream_kernel *); 40*4882a593Smuzhiyun int usb_stream_start(struct usb_stream_kernel *); 41*4882a593Smuzhiyun void usb_stream_stop(struct usb_stream_kernel *); 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun #endif /* __USB_STREAM_H */ 44