blob: e43c0a86441ae600c2725356e1cbf3c27ecb81a3 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001#ifndef USBUSX2Y_H
2#define USBUSX2Y_H
3#include "../usbaudio.h"
Daniel Macke5779992010-03-04 19:46:13 +01004#include "../midi.h"
Linus Torvalds1da177e2005-04-16 15:20:36 -07005#include "usbus428ctldefs.h"
6
7#define NRURBS 2
8
9
10#define URBS_AsyncSeq 10
11#define URB_DataLen_AsyncSeq 32
Takashi Iwaibbe85bb2005-11-17 15:08:26 +010012struct snd_usX2Y_AsyncSeq {
13 struct urb *urb[URBS_AsyncSeq];
14 char *buffer;
15};
Linus Torvalds1da177e2005-04-16 15:20:36 -070016
Takashi Iwaibbe85bb2005-11-17 15:08:26 +010017struct snd_usX2Y_urbSeq {
Linus Torvalds1da177e2005-04-16 15:20:36 -070018 int submitted;
19 int len;
Takashi Iwaibbe85bb2005-11-17 15:08:26 +010020 struct urb *urb[0];
21};
Linus Torvalds1da177e2005-04-16 15:20:36 -070022
Linus Torvalds1da177e2005-04-16 15:20:36 -070023#include "usx2yhwdeppcm.h"
24
Takashi Iwaibbe85bb2005-11-17 15:08:26 +010025struct usX2Ydev {
Clemens Ladischa014bba2009-11-16 12:26:30 +010026 struct usb_device *dev;
27 int card_index;
Linus Torvalds1da177e2005-04-16 15:20:36 -070028 int stride;
29 struct urb *In04urb;
30 void *In04Buf;
31 char In04Last[24];
32 unsigned In04IntCalls;
Takashi Iwaibbe85bb2005-11-17 15:08:26 +010033 struct snd_usX2Y_urbSeq *US04;
Linus Torvalds1da177e2005-04-16 15:20:36 -070034 wait_queue_head_t In04WaitQueue;
Takashi Iwaibbe85bb2005-11-17 15:08:26 +010035 struct snd_usX2Y_AsyncSeq AS04;
Linus Torvalds1da177e2005-04-16 15:20:36 -070036 unsigned int rate,
37 format;
38 int chip_status;
Ingo Molnar12aa7572006-01-16 16:36:05 +010039 struct mutex prepare_mutex;
Takashi Iwaibbe85bb2005-11-17 15:08:26 +010040 struct us428ctls_sharedmem *us428ctls_sharedmem;
Linus Torvalds1da177e2005-04-16 15:20:36 -070041 int wait_iso_frame;
42 wait_queue_head_t us428ctls_wait_queue_head;
Takashi Iwaibbe85bb2005-11-17 15:08:26 +010043 struct snd_usX2Y_hwdep_pcm_shm *hwdep_pcm_shm;
44 struct snd_usX2Y_substream *subs[4];
45 struct snd_usX2Y_substream * volatile prepare_subs;
Linus Torvalds1da177e2005-04-16 15:20:36 -070046 wait_queue_head_t prepare_wait_queue;
Clemens Ladischd82af9f2009-11-16 12:23:46 +010047 struct list_head midi_list;
Clemens Ladischa014bba2009-11-16 12:26:30 +010048 struct list_head pcm_list;
49 int pcm_devs;
Takashi Iwaibbe85bb2005-11-17 15:08:26 +010050};
Linus Torvalds1da177e2005-04-16 15:20:36 -070051
52
53struct snd_usX2Y_substream {
Takashi Iwaibbe85bb2005-11-17 15:08:26 +010054 struct usX2Ydev *usX2Y;
55 struct snd_pcm_substream *pcm_substream;
Linus Torvalds1da177e2005-04-16 15:20:36 -070056
57 int endpoint;
58 unsigned int maxpacksize; /* max packet size in bytes */
59
60 atomic_t state;
61#define state_STOPPED 0
62#define state_STARTING1 1
63#define state_STARTING2 2
64#define state_STARTING3 3
65#define state_PREPARED 4
66#define state_PRERUNNING 6
67#define state_RUNNING 8
68
69 int hwptr; /* free frame position in the buffer (only for playback) */
70 int hwptr_done; /* processed frame position in the buffer */
71 int transfer_done; /* processed frames since last period update */
72
73 struct urb *urb[NRURBS]; /* data urb table */
74 struct urb *completed_urb;
75 char *tmpbuf; /* temporary buffer for playback */
76};
77
78
Takashi Iwaibbe85bb2005-11-17 15:08:26 +010079#define usX2Y(c) ((struct usX2Ydev *)(c)->private_data)
Linus Torvalds1da177e2005-04-16 15:20:36 -070080
Takashi Iwaibbe85bb2005-11-17 15:08:26 +010081int usX2Y_audio_create(struct snd_card *card);
Linus Torvalds1da177e2005-04-16 15:20:36 -070082
Takashi Iwaibbe85bb2005-11-17 15:08:26 +010083int usX2Y_AsyncSeq04_init(struct usX2Ydev *usX2Y);
84int usX2Y_In04_init(struct usX2Ydev *usX2Y);
Linus Torvalds1da177e2005-04-16 15:20:36 -070085
86#define NAME_ALLCAPS "US-X2Y"
87
88#endif