Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/sound/pci/lx6464es/lx6464es.h
10817 views
1
/* -*- linux-c -*- *
2
*
3
* ALSA driver for the digigram lx6464es interface
4
*
5
* Copyright (c) 2009 Tim Blechmann <[email protected]>
6
*
7
*
8
* This program is free software; you can redistribute it and/or modify
9
* it under the terms of the GNU General Public License as published by
10
* the Free Software Foundation; either version 2 of the License, or
11
* (at your option) any later version.
12
*
13
* This program is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
* GNU General Public License for more details.
17
*
18
* You should have received a copy of the GNU General Public License
19
* along with this program; see the file COPYING. If not, write to
20
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21
* Boston, MA 02111-1307, USA.
22
*
23
*/
24
25
#ifndef LX6464ES_H
26
#define LX6464ES_H
27
28
#include <linux/spinlock.h>
29
#include <asm/atomic.h>
30
31
#include <sound/core.h>
32
#include <sound/pcm.h>
33
34
#include "lx_core.h"
35
36
#define LXP "LX6464ES: "
37
38
enum {
39
ES_cmd_free = 0, /* no command executing */
40
ES_cmd_processing = 1, /* execution of a read/write command */
41
ES_read_pending = 2, /* a asynchron read command is pending */
42
ES_read_finishing = 3, /* a read command has finished waiting (set by
43
* Interrupt or CancelIrp) */
44
};
45
46
enum lx_stream_status {
47
LX_STREAM_STATUS_FREE,
48
/* LX_STREAM_STATUS_OPEN, */
49
LX_STREAM_STATUS_SCHEDULE_RUN,
50
/* LX_STREAM_STATUS_STARTED, */
51
LX_STREAM_STATUS_RUNNING,
52
LX_STREAM_STATUS_SCHEDULE_STOP,
53
/* LX_STREAM_STATUS_STOPPED, */
54
/* LX_STREAM_STATUS_PAUSED */
55
};
56
57
58
struct lx_stream {
59
struct snd_pcm_substream *stream;
60
snd_pcm_uframes_t frame_pos;
61
enum lx_stream_status status; /* free, open, running, draining
62
* pause */
63
unsigned int is_capture:1;
64
};
65
66
67
struct lx6464es {
68
struct snd_card *card;
69
struct pci_dev *pci;
70
int irq;
71
72
spinlock_t lock; /* interrupt spinlock */
73
struct mutex setup_mutex; /* mutex used in hw_params, open
74
* and close */
75
76
struct tasklet_struct trigger_tasklet; /* trigger tasklet */
77
struct tasklet_struct tasklet_capture;
78
struct tasklet_struct tasklet_playback;
79
80
/* ports */
81
unsigned long port_plx; /* io port (size=256) */
82
void __iomem *port_plx_remapped; /* remapped plx port */
83
void __iomem *port_dsp_bar; /* memory port (32-bit,
84
* non-prefetchable,
85
* size=8K) */
86
87
/* messaging */
88
spinlock_t msg_lock; /* message spinlock */
89
struct lx_rmh rmh;
90
91
/* configuration */
92
uint freq_ratio : 2;
93
uint playback_mute : 1;
94
uint hardware_running[2];
95
u32 board_sample_rate; /* sample rate read from
96
* board */
97
u16 pcm_granularity; /* board blocksize */
98
99
/* dma */
100
struct snd_dma_buffer capture_dma_buf;
101
struct snd_dma_buffer playback_dma_buf;
102
103
/* pcm */
104
struct snd_pcm *pcm;
105
106
/* streams */
107
struct lx_stream capture_stream;
108
struct lx_stream playback_stream;
109
};
110
111
112
#endif /* LX6464ES_H */
113
114