xref: /openbmc/linux/sound/usb/usx2y/usbusx2y.h (revision 762f99f4f3cb41a775b5157dd761217beba65873)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
21da177e4SLinus Torvalds #ifndef USBUSX2Y_H
31da177e4SLinus Torvalds #define USBUSX2Y_H
41da177e4SLinus Torvalds #include "../usbaudio.h"
5e5779998SDaniel Mack #include "../midi.h"
61da177e4SLinus Torvalds #include "usbus428ctldefs.h"
71da177e4SLinus Torvalds 
81da177e4SLinus Torvalds #define NRURBS	        2
91da177e4SLinus Torvalds 
101da177e4SLinus Torvalds 
11bae3ce49STakashi Iwai #define URBS_ASYNC_SEQ 10
12bae3ce49STakashi Iwai #define URB_DATA_LEN_ASYNC_SEQ 32
13bae3ce49STakashi Iwai struct snd_usx2y_async_seq {
14bae3ce49STakashi Iwai 	struct urb	*urb[URBS_ASYNC_SEQ];
151da177e4SLinus Torvalds 	char		*buffer;
16bbe85bbdSTakashi Iwai };
171da177e4SLinus Torvalds 
18bae3ce49STakashi Iwai struct snd_usx2y_urb_seq {
191da177e4SLinus Torvalds 	int	submitted;
201da177e4SLinus Torvalds 	int	len;
219ad06ebbSGustavo A. R. Silva 	struct urb	*urb[];
22bbe85bbdSTakashi Iwai };
231da177e4SLinus Torvalds 
241da177e4SLinus Torvalds #include "usx2yhwdeppcm.h"
251da177e4SLinus Torvalds 
26bae3ce49STakashi Iwai struct usx2ydev {
27a014bbadSClemens Ladisch 	struct usb_device	*dev;
28a014bbadSClemens Ladisch 	int			card_index;
291da177e4SLinus Torvalds 	int			stride;
30bae3ce49STakashi Iwai 	struct urb		*in04_urb;
31bae3ce49STakashi Iwai 	void			*in04_buf;
32bae3ce49STakashi Iwai 	char			in04_last[24];
33*a829dd5bSTakashi Iwai 	unsigned int		in04_int_calls;
34bae3ce49STakashi Iwai 	struct snd_usx2y_urb_seq	*us04;
35bae3ce49STakashi Iwai 	wait_queue_head_t	in04_wait_queue;
36bae3ce49STakashi Iwai 	struct snd_usx2y_async_seq	as04;
371da177e4SLinus Torvalds 	unsigned int		rate,
381da177e4SLinus Torvalds 				format;
391da177e4SLinus Torvalds 	int			chip_status;
40e2439a54STakashi Iwai 	struct mutex		pcm_mutex;
41bbe85bbdSTakashi Iwai 	struct us428ctls_sharedmem	*us428ctls_sharedmem;
421da177e4SLinus Torvalds 	int			wait_iso_frame;
431da177e4SLinus Torvalds 	wait_queue_head_t	us428ctls_wait_queue_head;
44bae3ce49STakashi Iwai 	struct snd_usx2y_hwdep_pcm_shm	*hwdep_pcm_shm;
45bae3ce49STakashi Iwai 	struct snd_usx2y_substream	*subs[4];
46bae3ce49STakashi Iwai 	struct snd_usx2y_substream	* volatile  prepare_subs;
471da177e4SLinus Torvalds 	wait_queue_head_t	prepare_wait_queue;
48d82af9f9SClemens Ladisch 	struct list_head	midi_list;
49a014bbadSClemens Ladisch 	int			pcm_devs;
50bbe85bbdSTakashi Iwai };
511da177e4SLinus Torvalds 
521da177e4SLinus Torvalds 
53bae3ce49STakashi Iwai struct snd_usx2y_substream {
54bae3ce49STakashi Iwai 	struct usx2ydev	*usx2y;
55bbe85bbdSTakashi Iwai 	struct snd_pcm_substream *pcm_substream;
561da177e4SLinus Torvalds 
571da177e4SLinus Torvalds 	int			endpoint;
581da177e4SLinus Torvalds 	unsigned int		maxpacksize;		/* max packet size in bytes */
591da177e4SLinus Torvalds 
601da177e4SLinus Torvalds 	atomic_t		state;
61bae3ce49STakashi Iwai #define STATE_STOPPED	0
62bae3ce49STakashi Iwai #define STATE_STARTING1 1
63bae3ce49STakashi Iwai #define STATE_STARTING2 2
64bae3ce49STakashi Iwai #define STATE_STARTING3 3
65bae3ce49STakashi Iwai #define STATE_PREPARED	4
66bae3ce49STakashi Iwai #define STATE_PRERUNNING  6
67bae3ce49STakashi Iwai #define STATE_RUNNING	8
681da177e4SLinus Torvalds 
691da177e4SLinus Torvalds 	int			hwptr;			/* free frame position in the buffer (only for playback) */
701da177e4SLinus Torvalds 	int			hwptr_done;		/* processed frame position in the buffer */
711da177e4SLinus Torvalds 	int			transfer_done;		/* processed frames since last period update */
721da177e4SLinus Torvalds 
731da177e4SLinus Torvalds 	struct urb		*urb[NRURBS];	/* data urb table */
741da177e4SLinus Torvalds 	struct urb		*completed_urb;
751da177e4SLinus Torvalds 	char			*tmpbuf;			/* temporary buffer for playback */
761da177e4SLinus Torvalds };
771da177e4SLinus Torvalds 
781da177e4SLinus Torvalds 
79bae3ce49STakashi Iwai #define usx2y(c) ((struct usx2ydev *)(c)->private_data)
801da177e4SLinus Torvalds 
81bae3ce49STakashi Iwai int usx2y_audio_create(struct snd_card *card);
821da177e4SLinus Torvalds 
83bae3ce49STakashi Iwai int usx2y_async_seq04_init(struct usx2ydev *usx2y);
84bae3ce49STakashi Iwai int usx2y_in04_init(struct usx2ydev *usx2y);
851da177e4SLinus Torvalds 
861da177e4SLinus Torvalds #define NAME_ALLCAPS "US-X2Y"
871da177e4SLinus Torvalds 
881da177e4SLinus Torvalds #endif
89