162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#ifndef USBUSX2Y_H 362306a36Sopenharmony_ci#define USBUSX2Y_H 462306a36Sopenharmony_ci#include "../usbaudio.h" 562306a36Sopenharmony_ci#include "../midi.h" 662306a36Sopenharmony_ci#include "usbus428ctldefs.h" 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#define NRURBS 2 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#define URBS_ASYNC_SEQ 10 1262306a36Sopenharmony_ci#define URB_DATA_LEN_ASYNC_SEQ 32 1362306a36Sopenharmony_cistruct snd_usx2y_async_seq { 1462306a36Sopenharmony_ci struct urb *urb[URBS_ASYNC_SEQ]; 1562306a36Sopenharmony_ci char *buffer; 1662306a36Sopenharmony_ci}; 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_cistruct snd_usx2y_urb_seq { 1962306a36Sopenharmony_ci int submitted; 2062306a36Sopenharmony_ci int len; 2162306a36Sopenharmony_ci struct urb *urb[]; 2262306a36Sopenharmony_ci}; 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci#include "usx2yhwdeppcm.h" 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_cistruct usx2ydev { 2762306a36Sopenharmony_ci struct usb_device *dev; 2862306a36Sopenharmony_ci int card_index; 2962306a36Sopenharmony_ci int stride; 3062306a36Sopenharmony_ci struct urb *in04_urb; 3162306a36Sopenharmony_ci void *in04_buf; 3262306a36Sopenharmony_ci char in04_last[24]; 3362306a36Sopenharmony_ci unsigned int in04_int_calls; 3462306a36Sopenharmony_ci struct snd_usx2y_urb_seq *us04; 3562306a36Sopenharmony_ci wait_queue_head_t in04_wait_queue; 3662306a36Sopenharmony_ci struct snd_usx2y_async_seq as04; 3762306a36Sopenharmony_ci unsigned int rate, 3862306a36Sopenharmony_ci format; 3962306a36Sopenharmony_ci int chip_status; 4062306a36Sopenharmony_ci struct mutex pcm_mutex; 4162306a36Sopenharmony_ci struct us428ctls_sharedmem *us428ctls_sharedmem; 4262306a36Sopenharmony_ci int wait_iso_frame; 4362306a36Sopenharmony_ci wait_queue_head_t us428ctls_wait_queue_head; 4462306a36Sopenharmony_ci struct snd_usx2y_hwdep_pcm_shm *hwdep_pcm_shm; 4562306a36Sopenharmony_ci struct snd_usx2y_substream *subs[4]; 4662306a36Sopenharmony_ci struct snd_usx2y_substream * volatile prepare_subs; 4762306a36Sopenharmony_ci wait_queue_head_t prepare_wait_queue; 4862306a36Sopenharmony_ci struct list_head midi_list; 4962306a36Sopenharmony_ci int pcm_devs; 5062306a36Sopenharmony_ci}; 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_cistruct snd_usx2y_substream { 5462306a36Sopenharmony_ci struct usx2ydev *usx2y; 5562306a36Sopenharmony_ci struct snd_pcm_substream *pcm_substream; 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci int endpoint; 5862306a36Sopenharmony_ci unsigned int maxpacksize; /* max packet size in bytes */ 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci atomic_t state; 6162306a36Sopenharmony_ci#define STATE_STOPPED 0 6262306a36Sopenharmony_ci#define STATE_STARTING1 1 6362306a36Sopenharmony_ci#define STATE_STARTING2 2 6462306a36Sopenharmony_ci#define STATE_STARTING3 3 6562306a36Sopenharmony_ci#define STATE_PREPARED 4 6662306a36Sopenharmony_ci#define STATE_PRERUNNING 6 6762306a36Sopenharmony_ci#define STATE_RUNNING 8 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci int hwptr; /* free frame position in the buffer (only for playback) */ 7062306a36Sopenharmony_ci int hwptr_done; /* processed frame position in the buffer */ 7162306a36Sopenharmony_ci int transfer_done; /* processed frames since last period update */ 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci struct urb *urb[NRURBS]; /* data urb table */ 7462306a36Sopenharmony_ci struct urb *completed_urb; 7562306a36Sopenharmony_ci char *tmpbuf; /* temporary buffer for playback */ 7662306a36Sopenharmony_ci}; 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci#define usx2y(c) ((struct usx2ydev *)(c)->private_data) 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ciint usx2y_audio_create(struct snd_card *card); 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ciint usx2y_async_seq04_init(struct usx2ydev *usx2y); 8462306a36Sopenharmony_ciint usx2y_in04_init(struct usx2ydev *usx2y); 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_ci#define NAME_ALLCAPS "US-X2Y" 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci#endif 89