usbusx2y.h revision a014bbadb53121e243cac254593e79e3ca89742d
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 11struct snd_usX2Y_AsyncSeq { 12 struct urb *urb[URBS_AsyncSeq]; 13 char *buffer; 14}; 15 16struct snd_usX2Y_urbSeq { 17 int submitted; 18 int len; 19 struct urb *urb[0]; 20}; 21 22#include "usx2yhwdeppcm.h" 23 24struct usX2Ydev { 25 struct usb_device *dev; 26 int card_index; 27 int stride; 28 struct urb *In04urb; 29 void *In04Buf; 30 char In04Last[24]; 31 unsigned In04IntCalls; 32 struct snd_usX2Y_urbSeq *US04; 33 wait_queue_head_t In04WaitQueue; 34 struct snd_usX2Y_AsyncSeq AS04; 35 unsigned int rate, 36 format; 37 int chip_status; 38 struct mutex prepare_mutex; 39 struct us428ctls_sharedmem *us428ctls_sharedmem; 40 int wait_iso_frame; 41 wait_queue_head_t us428ctls_wait_queue_head; 42 struct snd_usX2Y_hwdep_pcm_shm *hwdep_pcm_shm; 43 struct snd_usX2Y_substream *subs[4]; 44 struct snd_usX2Y_substream * volatile prepare_subs; 45 wait_queue_head_t prepare_wait_queue; 46 struct list_head midi_list; 47 struct list_head pcm_list; 48 int pcm_devs; 49}; 50 51 52struct snd_usX2Y_substream { 53 struct usX2Ydev *usX2Y; 54 struct snd_pcm_substream *pcm_substream; 55 56 int endpoint; 57 unsigned int maxpacksize; /* max packet size in bytes */ 58 59 atomic_t state; 60#define state_STOPPED 0 61#define state_STARTING1 1 62#define state_STARTING2 2 63#define state_STARTING3 3 64#define state_PREPARED 4 65#define state_PRERUNNING 6 66#define state_RUNNING 8 67 68 int hwptr; /* free frame position in the buffer (only for playback) */ 69 int hwptr_done; /* processed frame position in the buffer */ 70 int transfer_done; /* processed frames since last period update */ 71 72 struct urb *urb[NRURBS]; /* data urb table */ 73 struct urb *completed_urb; 74 char *tmpbuf; /* temporary buffer for playback */ 75}; 76 77 78#define usX2Y(c) ((struct usX2Ydev *)(c)->private_data) 79 80int usX2Y_audio_create(struct snd_card *card); 81 82int usX2Y_AsyncSeq04_init(struct usX2Ydev *usX2Y); 83int usX2Y_In04_init(struct usX2Ydev *usX2Y); 84 85#define NAME_ALLCAPS "US-X2Y" 86 87#endif 88