Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
lx6464es.h
Go to the documentation of this file.
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 <linux/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 
48 /* LX_STREAM_STATUS_OPEN, */
50 /* LX_STREAM_STATUS_STARTED, */
53 /* LX_STREAM_STATUS_STOPPED, */
54 /* LX_STREAM_STATUS_PAUSED */
55 };
56 
57 
58 struct lx_stream {
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 
73 
74  spinlock_t lock; /* interrupt spinlock */
75  struct mutex setup_mutex; /* mutex used in hw_params, open
76  * and close */
77 
78  struct tasklet_struct trigger_tasklet; /* trigger tasklet */
81 
82  /* ports */
83  unsigned long port_plx; /* io port (size=256) */
84  void __iomem *port_plx_remapped; /* remapped plx port */
85  void __iomem *port_dsp_bar; /* memory port (32-bit,
86  * non-prefetchable,
87  * size=8K) */
88 
89  /* messaging */
90  spinlock_t msg_lock; /* message spinlock */
91  struct lx_rmh rmh;
92 
93  /* configuration */
97  u32 board_sample_rate; /* sample rate read from
98  * board */
99  u16 pcm_granularity; /* board blocksize */
100 
101  /* dma */
104 
105  /* pcm */
106  struct snd_pcm *pcm;
107 
108  /* streams */
111 };
112 
113 
114 #endif /* LX6464ES_H */