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 85