usbusx2y.h 2.0 KB

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