18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 28c2ecf20Sopenharmony_ci/* -*- linux-c -*- * 38c2ecf20Sopenharmony_ci * 48c2ecf20Sopenharmony_ci * ALSA driver for the digigram lx6464es interface 58c2ecf20Sopenharmony_ci * 68c2ecf20Sopenharmony_ci * Copyright (c) 2009 Tim Blechmann <tim@klingt.org> 78c2ecf20Sopenharmony_ci */ 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#ifndef LX6464ES_H 108c2ecf20Sopenharmony_ci#define LX6464ES_H 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci#include <linux/spinlock.h> 138c2ecf20Sopenharmony_ci#include <linux/atomic.h> 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci#include <sound/core.h> 168c2ecf20Sopenharmony_ci#include <sound/pcm.h> 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_ci#include "lx_core.h" 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci#define LXP "LX6464ES: " 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_cienum { 238c2ecf20Sopenharmony_ci ES_cmd_free = 0, /* no command executing */ 248c2ecf20Sopenharmony_ci ES_cmd_processing = 1, /* execution of a read/write command */ 258c2ecf20Sopenharmony_ci ES_read_pending = 2, /* a asynchron read command is pending */ 268c2ecf20Sopenharmony_ci ES_read_finishing = 3, /* a read command has finished waiting (set by 278c2ecf20Sopenharmony_ci * Interrupt or CancelIrp) */ 288c2ecf20Sopenharmony_ci}; 298c2ecf20Sopenharmony_ci 308c2ecf20Sopenharmony_cienum lx_stream_status { 318c2ecf20Sopenharmony_ci LX_STREAM_STATUS_FREE, 328c2ecf20Sopenharmony_ci/* LX_STREAM_STATUS_OPEN, */ 338c2ecf20Sopenharmony_ci LX_STREAM_STATUS_SCHEDULE_RUN, 348c2ecf20Sopenharmony_ci/* LX_STREAM_STATUS_STARTED, */ 358c2ecf20Sopenharmony_ci LX_STREAM_STATUS_RUNNING, 368c2ecf20Sopenharmony_ci LX_STREAM_STATUS_SCHEDULE_STOP, 378c2ecf20Sopenharmony_ci/* LX_STREAM_STATUS_STOPPED, */ 388c2ecf20Sopenharmony_ci/* LX_STREAM_STATUS_PAUSED */ 398c2ecf20Sopenharmony_ci}; 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_cistruct lx_stream { 438c2ecf20Sopenharmony_ci struct snd_pcm_substream *stream; 448c2ecf20Sopenharmony_ci snd_pcm_uframes_t frame_pos; 458c2ecf20Sopenharmony_ci enum lx_stream_status status; /* free, open, running, draining 468c2ecf20Sopenharmony_ci * pause */ 478c2ecf20Sopenharmony_ci unsigned int is_capture:1; 488c2ecf20Sopenharmony_ci}; 498c2ecf20Sopenharmony_ci 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_cistruct lx6464es { 528c2ecf20Sopenharmony_ci struct snd_card *card; 538c2ecf20Sopenharmony_ci struct pci_dev *pci; 548c2ecf20Sopenharmony_ci int irq; 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_ci u8 mac_address[6]; 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_ci struct mutex lock; /* interrupt lock */ 598c2ecf20Sopenharmony_ci struct mutex setup_mutex; /* mutex used in hw_params, open 608c2ecf20Sopenharmony_ci * and close */ 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_ci /* ports */ 638c2ecf20Sopenharmony_ci unsigned long port_plx; /* io port (size=256) */ 648c2ecf20Sopenharmony_ci void __iomem *port_plx_remapped; /* remapped plx port */ 658c2ecf20Sopenharmony_ci void __iomem *port_dsp_bar; /* memory port (32-bit, 668c2ecf20Sopenharmony_ci * non-prefetchable, 678c2ecf20Sopenharmony_ci * size=8K) */ 688c2ecf20Sopenharmony_ci 698c2ecf20Sopenharmony_ci /* messaging */ 708c2ecf20Sopenharmony_ci struct mutex msg_lock; /* message lock */ 718c2ecf20Sopenharmony_ci struct lx_rmh rmh; 728c2ecf20Sopenharmony_ci u32 irqsrc; 738c2ecf20Sopenharmony_ci 748c2ecf20Sopenharmony_ci /* configuration */ 758c2ecf20Sopenharmony_ci uint freq_ratio : 2; 768c2ecf20Sopenharmony_ci uint playback_mute : 1; 778c2ecf20Sopenharmony_ci uint hardware_running[2]; 788c2ecf20Sopenharmony_ci u32 board_sample_rate; /* sample rate read from 798c2ecf20Sopenharmony_ci * board */ 808c2ecf20Sopenharmony_ci u16 pcm_granularity; /* board blocksize */ 818c2ecf20Sopenharmony_ci 828c2ecf20Sopenharmony_ci /* dma */ 838c2ecf20Sopenharmony_ci struct snd_dma_buffer capture_dma_buf; 848c2ecf20Sopenharmony_ci struct snd_dma_buffer playback_dma_buf; 858c2ecf20Sopenharmony_ci 868c2ecf20Sopenharmony_ci /* pcm */ 878c2ecf20Sopenharmony_ci struct snd_pcm *pcm; 888c2ecf20Sopenharmony_ci 898c2ecf20Sopenharmony_ci /* streams */ 908c2ecf20Sopenharmony_ci struct lx_stream capture_stream; 918c2ecf20Sopenharmony_ci struct lx_stream playback_stream; 928c2ecf20Sopenharmony_ci}; 938c2ecf20Sopenharmony_ci 948c2ecf20Sopenharmony_ci 958c2ecf20Sopenharmony_ci#endif /* LX6464ES_H */ 96