Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / sound / usb / usx2y / usbusx2y.h
1 #ifndef USBUSX2Y_H
2 #define USBUSX2Y_H
3 #include "../usbaudio.h"
4 #include "../midi.h"
5 #include "usbus428ctldefs.h" 
6
7 #define NRURBS          2       
8
9
10 #define URBS_AsyncSeq 10
11 #define URB_DataLen_AsyncSeq 32
12 struct snd_usX2Y_AsyncSeq {
13         struct urb      *urb[URBS_AsyncSeq];
14         char            *buffer;
15 };
16
17 struct snd_usX2Y_urbSeq {
18         int     submitted;
19         int     len;
20         struct urb      *urb[0];
21 };
22
23 #include "usx2yhwdeppcm.h"
24
25 struct usX2Ydev {
26         struct usb_device       *dev;
27         int                     card_index;
28         int                     stride;
29         struct urb              *In04urb;
30         void                    *In04Buf;
31         char                    In04Last[24];
32         unsigned                In04IntCalls;
33         struct snd_usX2Y_urbSeq *US04;
34         wait_queue_head_t       In04WaitQueue;
35         struct snd_usX2Y_AsyncSeq       AS04;
36         unsigned int            rate,
37                                 format;
38         int                     chip_status;
39         struct mutex            pcm_mutex;
40         struct us428ctls_sharedmem      *us428ctls_sharedmem;
41         int                     wait_iso_frame;
42         wait_queue_head_t       us428ctls_wait_queue_head;
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;
46         wait_queue_head_t       prepare_wait_queue;
47         struct list_head        midi_list;
48         struct list_head        pcm_list;
49         int                     pcm_devs;
50 };
51
52
53 struct snd_usX2Y_substream {
54         struct usX2Ydev *usX2Y;
55         struct snd_pcm_substream *pcm_substream;
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
79 #define usX2Y(c) ((struct usX2Ydev *)(c)->private_data)
80
81 int usX2Y_audio_create(struct snd_card *card);
82
83 int usX2Y_AsyncSeq04_init(struct usX2Ydev *usX2Y);
84 int usX2Y_In04_init(struct usX2Ydev *usX2Y);
85
86 #define NAME_ALLCAPS "US-X2Y"
87
88 #endif