usbusx2y.h (2097B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef USBUSX2Y_H 3#define USBUSX2Y_H 4#include "../usbaudio.h" 5#include "../midi.h" 6#include "usbus428ctldefs.h" 7 8#define NRURBS 2 9 10 11#define URBS_ASYNC_SEQ 10 12#define URB_DATA_LEN_ASYNC_SEQ 32 13struct snd_usx2y_async_seq { 14 struct urb *urb[URBS_ASYNC_SEQ]; 15 char *buffer; 16}; 17 18struct snd_usx2y_urb_seq { 19 int submitted; 20 int len; 21 struct urb *urb[]; 22}; 23 24#include "usx2yhwdeppcm.h" 25 26struct usx2ydev { 27 struct usb_device *dev; 28 int card_index; 29 int stride; 30 struct urb *in04_urb; 31 void *in04_buf; 32 char in04_last[24]; 33 unsigned int in04_int_calls; 34 struct snd_usx2y_urb_seq *us04; 35 wait_queue_head_t in04_wait_queue; 36 struct snd_usx2y_async_seq as04; 37 unsigned int rate, 38 format; 39 int chip_status; 40 struct mutex pcm_mutex; 41 struct us428ctls_sharedmem *us428ctls_sharedmem; 42 int wait_iso_frame; 43 wait_queue_head_t us428ctls_wait_queue_head; 44 struct snd_usx2y_hwdep_pcm_shm *hwdep_pcm_shm; 45 struct snd_usx2y_substream *subs[4]; 46 struct snd_usx2y_substream * volatile prepare_subs; 47 wait_queue_head_t prepare_wait_queue; 48 struct list_head midi_list; 49 int pcm_devs; 50}; 51 52 53struct snd_usx2y_substream { 54 struct usx2ydev *usx2y; 55 struct snd_pcm_substream *pcm_substream; 56 57 int endpoint; 58 unsigned int maxpacksize; /* max packet size in bytes */ 59 60 atomic_t state; 61#define STATE_STOPPED 0 62#define STATE_STARTING1 1 63#define STATE_STARTING2 2 64#define STATE_STARTING3 3 65#define STATE_PREPARED 4 66#define STATE_PRERUNNING 6 67#define STATE_RUNNING 8 68 69 int hwptr; /* free frame position in the buffer (only for playback) */ 70 int hwptr_done; /* processed frame position in the buffer */ 71 int transfer_done; /* processed frames since last period update */ 72 73 struct urb *urb[NRURBS]; /* data urb table */ 74 struct urb *completed_urb; 75 char *tmpbuf; /* temporary buffer for playback */ 76}; 77 78 79#define usx2y(c) ((struct usx2ydev *)(c)->private_data) 80 81int usx2y_audio_create(struct snd_card *card); 82 83int usx2y_async_seq04_init(struct usx2ydev *usx2y); 84int usx2y_in04_init(struct usx2ydev *usx2y); 85 86#define NAME_ALLCAPS "US-X2Y" 87 88#endif