162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci/* -*- linux-c -*- * 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * ALSA driver for the digigram lx6464es interface 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Copyright (c) 2009 Tim Blechmann <tim@klingt.org> 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#ifndef LX6464ES_H 1062306a36Sopenharmony_ci#define LX6464ES_H 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include <linux/spinlock.h> 1362306a36Sopenharmony_ci#include <linux/atomic.h> 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci#include <sound/core.h> 1662306a36Sopenharmony_ci#include <sound/pcm.h> 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#include "lx_core.h" 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci#define LXP "LX6464ES: " 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_cienum { 2362306a36Sopenharmony_ci ES_cmd_free = 0, /* no command executing */ 2462306a36Sopenharmony_ci ES_cmd_processing = 1, /* execution of a read/write command */ 2562306a36Sopenharmony_ci ES_read_pending = 2, /* a asynchron read command is pending */ 2662306a36Sopenharmony_ci ES_read_finishing = 3, /* a read command has finished waiting (set by 2762306a36Sopenharmony_ci * Interrupt or CancelIrp) */ 2862306a36Sopenharmony_ci}; 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_cienum lx_stream_status { 3162306a36Sopenharmony_ci LX_STREAM_STATUS_FREE, 3262306a36Sopenharmony_ci/* LX_STREAM_STATUS_OPEN, */ 3362306a36Sopenharmony_ci LX_STREAM_STATUS_SCHEDULE_RUN, 3462306a36Sopenharmony_ci/* LX_STREAM_STATUS_STARTED, */ 3562306a36Sopenharmony_ci LX_STREAM_STATUS_RUNNING, 3662306a36Sopenharmony_ci LX_STREAM_STATUS_SCHEDULE_STOP, 3762306a36Sopenharmony_ci/* LX_STREAM_STATUS_STOPPED, */ 3862306a36Sopenharmony_ci/* LX_STREAM_STATUS_PAUSED */ 3962306a36Sopenharmony_ci}; 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_cistruct lx_stream { 4362306a36Sopenharmony_ci struct snd_pcm_substream *stream; 4462306a36Sopenharmony_ci snd_pcm_uframes_t frame_pos; 4562306a36Sopenharmony_ci enum lx_stream_status status; /* free, open, running, draining 4662306a36Sopenharmony_ci * pause */ 4762306a36Sopenharmony_ci unsigned int is_capture:1; 4862306a36Sopenharmony_ci}; 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_cistruct lx6464es { 5262306a36Sopenharmony_ci struct snd_card *card; 5362306a36Sopenharmony_ci struct pci_dev *pci; 5462306a36Sopenharmony_ci int irq; 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci u8 mac_address[6]; 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci struct mutex lock; /* interrupt lock */ 5962306a36Sopenharmony_ci struct mutex setup_mutex; /* mutex used in hw_params, open 6062306a36Sopenharmony_ci * and close */ 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci /* ports */ 6362306a36Sopenharmony_ci unsigned long port_plx; /* io port (size=256) */ 6462306a36Sopenharmony_ci void __iomem *port_plx_remapped; /* remapped plx port */ 6562306a36Sopenharmony_ci void __iomem *port_dsp_bar; /* memory port (32-bit, 6662306a36Sopenharmony_ci * non-prefetchable, 6762306a36Sopenharmony_ci * size=8K) */ 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci /* messaging */ 7062306a36Sopenharmony_ci struct mutex msg_lock; /* message lock */ 7162306a36Sopenharmony_ci struct lx_rmh rmh; 7262306a36Sopenharmony_ci u32 irqsrc; 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ci /* configuration */ 7562306a36Sopenharmony_ci uint freq_ratio : 2; 7662306a36Sopenharmony_ci uint playback_mute : 1; 7762306a36Sopenharmony_ci uint hardware_running[2]; 7862306a36Sopenharmony_ci u32 board_sample_rate; /* sample rate read from 7962306a36Sopenharmony_ci * board */ 8062306a36Sopenharmony_ci u16 pcm_granularity; /* board blocksize */ 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci /* dma */ 8362306a36Sopenharmony_ci struct snd_dma_buffer capture_dma_buf; 8462306a36Sopenharmony_ci struct snd_dma_buffer playback_dma_buf; 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_ci /* pcm */ 8762306a36Sopenharmony_ci struct snd_pcm *pcm; 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci /* streams */ 9062306a36Sopenharmony_ci struct lx_stream capture_stream; 9162306a36Sopenharmony_ci struct lx_stream playback_stream; 9262306a36Sopenharmony_ci}; 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_ci#endif /* LX6464ES_H */ 96