Merge tag 'v4.5-rc1' into x86/asm, to refresh the branch before merging new changes
[linux-2.6-block.git] / sound / usb / usx2y / usbusx2y.h
CommitLineData
1da177e4
LT
1#ifndef USBUSX2Y_H
2#define USBUSX2Y_H
3#include "../usbaudio.h"
e5779998 4#include "../midi.h"
1da177e4
LT
5#include "usbus428ctldefs.h"
6
7#define NRURBS 2
8
9
10#define URBS_AsyncSeq 10
11#define URB_DataLen_AsyncSeq 32
bbe85bbd
TI
12struct snd_usX2Y_AsyncSeq {
13 struct urb *urb[URBS_AsyncSeq];
14 char *buffer;
15};
1da177e4 16
bbe85bbd 17struct snd_usX2Y_urbSeq {
1da177e4
LT
18 int submitted;
19 int len;
bbe85bbd
TI
20 struct urb *urb[0];
21};
1da177e4 22
1da177e4
LT
23#include "usx2yhwdeppcm.h"
24
bbe85bbd 25struct usX2Ydev {
a014bbad
CL
26 struct usb_device *dev;
27 int card_index;
1da177e4
LT
28 int stride;
29 struct urb *In04urb;
30 void *In04Buf;
31 char In04Last[24];
32 unsigned In04IntCalls;
bbe85bbd 33 struct snd_usX2Y_urbSeq *US04;
1da177e4 34 wait_queue_head_t In04WaitQueue;
bbe85bbd 35 struct snd_usX2Y_AsyncSeq AS04;
1da177e4
LT
36 unsigned int rate,
37 format;
38 int chip_status;
e2439a54 39 struct mutex pcm_mutex;
bbe85bbd 40 struct us428ctls_sharedmem *us428ctls_sharedmem;
1da177e4
LT
41 int wait_iso_frame;
42 wait_queue_head_t us428ctls_wait_queue_head;
bbe85bbd
TI
43 struct snd_usX2Y_hwdep_pcm_shm *hwdep_pcm_shm;
44 struct snd_usX2Y_substream *subs[4];
45 struct snd_usX2Y_substream * volatile prepare_subs;
1da177e4 46 wait_queue_head_t prepare_wait_queue;
d82af9f9 47 struct list_head midi_list;
a014bbad
CL
48 struct list_head pcm_list;
49 int pcm_devs;
bbe85bbd 50};
1da177e4
LT
51
52
53struct snd_usX2Y_substream {
bbe85bbd
TI
54 struct usX2Ydev *usX2Y;
55 struct snd_pcm_substream *pcm_substream;
1da177e4
LT
56
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
bbe85bbd 79#define usX2Y(c) ((struct usX2Ydev *)(c)->private_data)
1da177e4 80
bbe85bbd 81int usX2Y_audio_create(struct snd_card *card);
1da177e4 82
bbe85bbd
TI
83int usX2Y_AsyncSeq04_init(struct usX2Ydev *usX2Y);
84int usX2Y_In04_init(struct usX2Ydev *usX2Y);
1da177e4
LT
85
86#define NAME_ALLCAPS "US-X2Y"
87
88#endif