1 /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
2 /*
3  * Copyright (C) 2007, 2008 Karsten Wiese <fzu@wemgehoertderstaat.de>
4  */
5 
6 #ifndef _UAPI__SOUND_USB_STREAM_H
7 #define _UAPI__SOUND_USB_STREAM_H
8 
9 #define USB_STREAM_INTERFACE_VERSION 2
10 
11 #define SNDRV_USB_STREAM_IOCTL_SET_PARAMS \
12 	_IOW('H', 0x90, struct usb_stream_config)
13 
14 struct usb_stream_packet {
15 	unsigned offset;
16 	unsigned length;
17 };
18 
19 
20 struct usb_stream_config {
21 	unsigned version;
22 	unsigned sample_rate;
23 	unsigned period_frames;
24 	unsigned frame_size;
25 };
26 
27 struct usb_stream {
28 	struct usb_stream_config cfg;
29 	unsigned read_size;
30 	unsigned write_size;
31 
32 	int period_size;
33 
34 	unsigned state;
35 
36 	int idle_insize;
37 	int idle_outsize;
38 	int sync_packet;
39 	unsigned insize_done;
40 	unsigned periods_done;
41 	unsigned periods_polled;
42 
43 	struct usb_stream_packet outpacket[2];
44 	unsigned		 inpackets;
45 	unsigned		 inpacket_head;
46 	unsigned		 inpacket_split;
47 	unsigned		 inpacket_split_at;
48 	unsigned		 next_inpacket_split;
49 	unsigned		 next_inpacket_split_at;
50 	struct usb_stream_packet inpacket[];
51 };
52 
53 enum usb_stream_state {
54 	usb_stream_invalid,
55 	usb_stream_stopped,
56 	usb_stream_sync0,
57 	usb_stream_sync1,
58 	usb_stream_ready,
59 	usb_stream_running,
60 	usb_stream_xrun,
61 };
62 
63 #endif /* _UAPI__SOUND_USB_STREAM_H */
64