| /* SPDX-License-Identifier: GPL-2.0 */ | 
 | #ifndef USBUSX2Y_H | 
 | #define USBUSX2Y_H | 
 | #include "../usbaudio.h" | 
 | #include "../midi.h" | 
 | #include "usbus428ctldefs.h"  | 
 |  | 
 | #define NRURBS	        2	 | 
 |  | 
 |  | 
 | #define URBS_AsyncSeq 10 | 
 | #define URB_DataLen_AsyncSeq 32 | 
 | struct snd_usX2Y_AsyncSeq { | 
 | 	struct urb	*urb[URBS_AsyncSeq]; | 
 | 	char		*buffer; | 
 | }; | 
 |  | 
 | struct snd_usX2Y_urbSeq { | 
 | 	int	submitted; | 
 | 	int	len; | 
 | 	struct urb	*urb[]; | 
 | }; | 
 |  | 
 | #include "usx2yhwdeppcm.h" | 
 |  | 
 | struct usX2Ydev { | 
 | 	struct usb_device	*dev; | 
 | 	int			card_index; | 
 | 	int			stride; | 
 | 	struct urb		*In04urb; | 
 | 	void			*In04Buf; | 
 | 	char			In04Last[24]; | 
 | 	unsigned		In04IntCalls; | 
 | 	struct snd_usX2Y_urbSeq	*US04; | 
 | 	wait_queue_head_t	In04WaitQueue; | 
 | 	struct snd_usX2Y_AsyncSeq	AS04; | 
 | 	unsigned int		rate, | 
 | 				format; | 
 | 	int			chip_status; | 
 | 	struct mutex		pcm_mutex; | 
 | 	struct us428ctls_sharedmem	*us428ctls_sharedmem; | 
 | 	int			wait_iso_frame; | 
 | 	wait_queue_head_t	us428ctls_wait_queue_head; | 
 | 	struct snd_usX2Y_hwdep_pcm_shm	*hwdep_pcm_shm; | 
 | 	struct snd_usX2Y_substream	*subs[4]; | 
 | 	struct snd_usX2Y_substream	* volatile  prepare_subs; | 
 | 	wait_queue_head_t	prepare_wait_queue; | 
 | 	struct list_head	midi_list; | 
 | 	struct list_head	pcm_list; | 
 | 	int			pcm_devs; | 
 | }; | 
 |  | 
 |  | 
 | struct snd_usX2Y_substream { | 
 | 	struct usX2Ydev	*usX2Y; | 
 | 	struct snd_pcm_substream *pcm_substream; | 
 |  | 
 | 	int			endpoint;		 | 
 | 	unsigned int		maxpacksize;		/* max packet size in bytes */ | 
 |  | 
 | 	atomic_t		state; | 
 | #define state_STOPPED	0 | 
 | #define state_STARTING1 1 | 
 | #define state_STARTING2 2 | 
 | #define state_STARTING3 3 | 
 | #define state_PREPARED	4 | 
 | #define state_PRERUNNING  6 | 
 | #define state_RUNNING	8 | 
 |  | 
 | 	int			hwptr;			/* free frame position in the buffer (only for playback) */ | 
 | 	int			hwptr_done;		/* processed frame position in the buffer */ | 
 | 	int			transfer_done;		/* processed frames since last period update */ | 
 |  | 
 | 	struct urb		*urb[NRURBS];	/* data urb table */ | 
 | 	struct urb		*completed_urb; | 
 | 	char			*tmpbuf;			/* temporary buffer for playback */ | 
 | }; | 
 |  | 
 |  | 
 | #define usX2Y(c) ((struct usX2Ydev *)(c)->private_data) | 
 |  | 
 | int usX2Y_audio_create(struct snd_card *card); | 
 |  | 
 | int usX2Y_AsyncSeq04_init(struct usX2Ydev *usX2Y); | 
 | int usX2Y_In04_init(struct usX2Ydev *usX2Y); | 
 |  | 
 | #define NAME_ALLCAPS "US-X2Y" | 
 |  | 
 | #endif |