usbusx2y.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #ifndef USBUSX2Y_H
  2. #define USBUSX2Y_H
  3. #include "../usbaudio.h"
  4. #include "usbus428ctldefs.h"
  5. #define NRURBS 2
  6. #define URBS_AsyncSeq 10
  7. #define URB_DataLen_AsyncSeq 32
  8. struct snd_usX2Y_AsyncSeq {
  9. struct urb *urb[URBS_AsyncSeq];
  10. char *buffer;
  11. };
  12. struct snd_usX2Y_urbSeq {
  13. int submitted;
  14. int len;
  15. struct urb *urb[0];
  16. };
  17. #include "usx2yhwdeppcm.h"
  18. struct usX2Ydev {
  19. struct snd_usb_audio chip;
  20. int stride;
  21. struct urb *In04urb;
  22. void *In04Buf;
  23. char In04Last[24];
  24. unsigned In04IntCalls;
  25. struct snd_usX2Y_urbSeq *US04;
  26. wait_queue_head_t In04WaitQueue;
  27. struct snd_usX2Y_AsyncSeq AS04;
  28. unsigned int rate,
  29. format;
  30. int chip_status;
  31. struct mutex prepare_mutex;
  32. struct us428ctls_sharedmem *us428ctls_sharedmem;
  33. int wait_iso_frame;
  34. wait_queue_head_t us428ctls_wait_queue_head;
  35. struct snd_usX2Y_hwdep_pcm_shm *hwdep_pcm_shm;
  36. struct snd_usX2Y_substream *subs[4];
  37. struct snd_usX2Y_substream * volatile prepare_subs;
  38. wait_queue_head_t prepare_wait_queue;
  39. };
  40. struct snd_usX2Y_substream {
  41. struct usX2Ydev *usX2Y;
  42. struct snd_pcm_substream *pcm_substream;
  43. int endpoint;
  44. unsigned int maxpacksize; /* max packet size in bytes */
  45. atomic_t state;
  46. #define state_STOPPED 0
  47. #define state_STARTING1 1
  48. #define state_STARTING2 2
  49. #define state_STARTING3 3
  50. #define state_PREPARED 4
  51. #define state_PRERUNNING 6
  52. #define state_RUNNING 8
  53. int hwptr; /* free frame position in the buffer (only for playback) */
  54. int hwptr_done; /* processed frame position in the buffer */
  55. int transfer_done; /* processed frames since last period update */
  56. struct urb *urb[NRURBS]; /* data urb table */
  57. struct urb *completed_urb;
  58. char *tmpbuf; /* temporary buffer for playback */
  59. };
  60. #define usX2Y(c) ((struct usX2Ydev *)(c)->private_data)
  61. int usX2Y_audio_create(struct snd_card *card);
  62. int usX2Y_AsyncSeq04_init(struct usX2Ydev *usX2Y);
  63. int usX2Y_In04_init(struct usX2Ydev *usX2Y);
  64. #define NAME_ALLCAPS "US-X2Y"
  65. #endif