| 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 __SOUND_USB_STREAM_H |
| 7 | #define __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 /* __SOUND_USB_STREAM_H */ |