xref: /OK3568_Linux_fs/kernel/sound/usb/usx2y/usb_stream.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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