Linux-2.6.12-rc2
[linux-2.6.git] / sound / usb / usx2y / usbusx2y.h
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