xref: /openbmc/linux/sound/usb/usx2y/usbusx2y.h (revision 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2)
1 #ifndef USBUSX2Y_H
2 #define USBUSX2Y_H
3 #include "../usbaudio.h"
4 #include "usbus428ctldefs.h"
5 
6 #define NRURBS	        2
7 
8 
9 #define URBS_AsyncSeq 10
10 #define URB_DataLen_AsyncSeq 32
11 typedef struct {
12 	struct urb*	urb[URBS_AsyncSeq];
13 	char*   buffer;
14 } snd_usX2Y_AsyncSeq_t;
15 
16 typedef struct {
17 	int	submitted;
18 	int	len;
19 	struct urb*	urb[0];
20 } snd_usX2Y_urbSeq_t;
21 
22 typedef struct snd_usX2Y_substream snd_usX2Y_substream_t;
23 #include "usx2yhwdeppcm.h"
24 
25 typedef struct {
26 	snd_usb_audio_t 	chip;
27 	int			stride;
28 	struct urb		*In04urb;
29 	void			*In04Buf;
30 	char			In04Last[24];
31 	unsigned		In04IntCalls;
32 	snd_usX2Y_urbSeq_t	*US04;
33 	wait_queue_head_t	In04WaitQueue;
34 	snd_usX2Y_AsyncSeq_t	AS04;
35 	unsigned int		rate,
36 				format;
37 	int			chip_status;
38 	struct semaphore	prepare_mutex;
39 	us428ctls_sharedmem_t	*us428ctls_sharedmem;
40 	int			wait_iso_frame;
41 	wait_queue_head_t	us428ctls_wait_queue_head;
42 	snd_usX2Y_hwdep_pcm_shm_t	*hwdep_pcm_shm;
43 	snd_usX2Y_substream_t	*subs[4];
44 	snd_usX2Y_substream_t	* volatile  prepare_subs;
45 	wait_queue_head_t	prepare_wait_queue;
46 } usX2Ydev_t;
47 
48 
49 struct snd_usX2Y_substream {
50 	usX2Ydev_t	*usX2Y;
51 	snd_pcm_substream_t *pcm_substream;
52 
53 	int			endpoint;
54 	unsigned int		maxpacksize;		/* max packet size in bytes */
55 
56 	atomic_t		state;
57 #define state_STOPPED	0
58 #define state_STARTING1 1
59 #define state_STARTING2 2
60 #define state_STARTING3 3
61 #define state_PREPARED	4
62 #define state_PRERUNNING  6
63 #define state_RUNNING	8
64 
65 	int			hwptr;			/* free frame position in the buffer (only for playback) */
66 	int			hwptr_done;		/* processed frame position in the buffer */
67 	int			transfer_done;		/* processed frames since last period update */
68 
69 	struct urb		*urb[NRURBS];	/* data urb table */
70 	struct urb		*completed_urb;
71 	char			*tmpbuf;			/* temporary buffer for playback */
72 };
73 
74 
75 #define usX2Y(c) ((usX2Ydev_t*)(c)->private_data)
76 
77 int usX2Y_audio_create(snd_card_t* card);
78 
79 int usX2Y_AsyncSeq04_init(usX2Ydev_t* usX2Y);
80 int usX2Y_In04_init(usX2Ydev_t* usX2Y);
81 
82 #define NAME_ALLCAPS "US-X2Y"
83 
84 #endif
85