usbusx2y.h revision a014bbadb53121e243cac254593e79e3ca89742d
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
11struct snd_usX2Y_AsyncSeq {
12	struct urb	*urb[URBS_AsyncSeq];
13	char		*buffer;
14};
15
16struct snd_usX2Y_urbSeq {
17	int	submitted;
18	int	len;
19	struct urb	*urb[0];
20};
21
22#include "usx2yhwdeppcm.h"
23
24struct usX2Ydev {
25	struct usb_device	*dev;
26	int			card_index;
27	int			stride;
28	struct urb		*In04urb;
29	void			*In04Buf;
30	char			In04Last[24];
31	unsigned		In04IntCalls;
32	struct snd_usX2Y_urbSeq	*US04;
33	wait_queue_head_t	In04WaitQueue;
34	struct snd_usX2Y_AsyncSeq	AS04;
35	unsigned int		rate,
36				format;
37	int			chip_status;
38	struct mutex		prepare_mutex;
39	struct us428ctls_sharedmem	*us428ctls_sharedmem;
40	int			wait_iso_frame;
41	wait_queue_head_t	us428ctls_wait_queue_head;
42	struct snd_usX2Y_hwdep_pcm_shm	*hwdep_pcm_shm;
43	struct snd_usX2Y_substream	*subs[4];
44	struct snd_usX2Y_substream	* volatile  prepare_subs;
45	wait_queue_head_t	prepare_wait_queue;
46	struct list_head	midi_list;
47	struct list_head	pcm_list;
48	int			pcm_devs;
49};
50
51
52struct snd_usX2Y_substream {
53	struct usX2Ydev	*usX2Y;
54	struct snd_pcm_substream *pcm_substream;
55
56	int			endpoint;
57	unsigned int		maxpacksize;		/* max packet size in bytes */
58
59	atomic_t		state;
60#define state_STOPPED	0
61#define state_STARTING1 1
62#define state_STARTING2 2
63#define state_STARTING3 3
64#define state_PREPARED	4
65#define state_PRERUNNING  6
66#define state_RUNNING	8
67
68	int			hwptr;			/* free frame position in the buffer (only for playback) */
69	int			hwptr_done;		/* processed frame position in the buffer */
70	int			transfer_done;		/* processed frames since last period update */
71
72	struct urb		*urb[NRURBS];	/* data urb table */
73	struct urb		*completed_urb;
74	char			*tmpbuf;			/* temporary buffer for playback */
75};
76
77
78#define usX2Y(c) ((struct usX2Ydev *)(c)->private_data)
79
80int usX2Y_audio_create(struct snd_card *card);
81
82int usX2Y_AsyncSeq04_init(struct usX2Ydev *usX2Y);
83int usX2Y_In04_init(struct usX2Ydev *usX2Y);
84
85#define NAME_ALLCAPS "US-X2Y"
86
87#endif
88