2 Copyright © 2005-2013, Davy Wentzler. All rights reserved.
3 Copyright © 2010-2013, The AROS Development Team. All rights reserved.
7 #ifndef AHI_Drivers_VIAAC97_DriverData_h
8 #define AHI_Drivers_VIAAC97_DriverData_h
10 #include <exec/types.h>
11 #include <exec/interrupts.h>
12 #include <devices/ahi.h>
16 /** Make the common library code initialize a global SysBase for us.
17 It's required for hwaccess.c */
19 #define DRIVER_NEEDS_GLOBAL_EXECBASE
20 #include "DriverBase.h"
26 /** Skeleton's variables *************************************************/
28 struct DriverBase driverbase
;
31 /** The driver's global data *********************************************/
34 /** A sempahore used for locking */
35 struct SignalSemaphore semaphore
;
37 /** The number of cards found */
40 /** A CardData structure for each card found */
41 struct CardData
** driverdatas
;
44 #define DRIVERBASE_SIZEOF (sizeof (struct CardBase))
46 #define RECORD_BUFFER_SAMPLES 4096
47 #define RECORD_BUFFER_SIZE_VALUE ADCBS_BUFSIZE_16384
50 struct snd_dma_device
{
51 int type
; /* SNDRV_DMA_TYPE_XXX */
52 // struct device *dev; /* generic device */
55 struct snd_dma_buffer
{
56 struct snd_dma_device dev
; /* device type */
57 unsigned char *area
; /* virtual pointer */
58 void *addr
; /* physical address */
59 int bytes
; /* buffer size in bytes */
60 void *private_data
; /* private for allocator; don't touch */
63 struct snd_via_sg_table
{ // scatter/gather format. Oh joy, the docs talk about EOL, base counts etc...
71 struct PCIDevice
*pci_dev
;
80 struct snd_dma_buffer table
;
81 struct snd_via_sg_table
*play_idx_table
;
82 struct snd_via_sg_table
*rec_idx_table
;
84 APTR play_idx_table_nonaligned
;
85 APTR rec_idx_table_nonaligned
;
87 /*** PCI/Card initialization progress *********************************/
89 /** TRUE if bus mastering is activated */
90 BOOL pci_master_enabled
;
92 /** TRUE if the Card chip has been initialized */
93 BOOL card_initialized
;
95 /*** The driverbase ******************************************************/
97 /** This field is also used as a lock and access to is is
98 * semaphore protected. */
99 struct DriverBase
* ahisubbase
;
101 /*** The AudioCtrl currently using this DriverData structure *************/
103 struct AHIAudioCtrlDrv
* audioctrl
;
105 /*** Playback/recording interrupts ***************************************/
107 /** TRUE when playback is enabled */
110 /** TRUE when recording is enabled */
113 /** The main (hardware) interrupt */
114 struct Interrupt interrupt
;
116 /** TRUE if the hardware interrupt has been added to the PCI subsystem */
117 BOOL interrupt_added
;
119 /** The playback software interrupt */
120 struct Interrupt playback_interrupt
;
122 /** TRUE if the hardware interrupt may Cause() playback_interrupt */
123 BOOL playback_interrupt_enabled
;
125 /** The recording software interrupt */
126 struct Interrupt record_interrupt
;
128 /** TRUE if the hardware interrupt may Cause() playback_interrupt */
129 BOOL record_interrupt_enabled
;
131 /** The reset handler */
132 struct Interrupt reset_handler
;
134 /** TRUE if the reset handler has been added to the system */
135 BOOL reset_handler_added
;
137 /*** CAMD support functions **********************************************/
139 /** CAMD transmitter function wrapped as a Hook */
140 struct Hook
* camd_transmitfunc
;
142 /** CAMD receiver function wrapped as a Hook */
143 struct Hook
* camd_receivefunc
;
145 /** True if CMAD V40 mode */
148 /*** Card structures **************************************************/
150 APTR playback_buffer1
;
151 APTR playback_buffer2
;
152 APTR playback_buffer1_nonaligned
;
153 APTR playback_buffer2_nonaligned
;
156 /*** Playback interrupt variables ****************************************/
158 /** The mixing buffer (a cyclic buffer filled by AHI) */
161 /** The length of each playback buffer in sample frames */
162 ULONG current_frames
;
164 /** The length of each playback buffer in sample bytes */
165 ULONG current_bytesize
;
167 /** Where (inside the cyclic buffer) we're currently writing */
172 /*** Recording interrupt variables ***************************************/
174 /** The recording buffer (simple double buffering is used */
177 APTR record_buffer1_nonaligned
;
178 APTR record_buffer2_nonaligned
;
180 /** Were (inside the recording buffer) the current data is */
181 APTR current_record_buffer
;
183 /** The length of each record buffer in sample bytes */
184 ULONG current_record_bytesize
;
186 /** Analog mixer variables ***********************************************/
188 /** The currently selected input */
191 /** The currently selected output */
194 /** The current (recording) monitor volume */
195 Fixed monitor_volume
;
197 /** The current (recording) input gain */
200 /** The current (playback) output volume */
203 /** The hardware register value corresponding to monitor_volume */
204 UWORD monitor_volume_bits
;
206 /** The hardware register value corresponding to input_gain */
207 UWORD input_gain_bits
;
209 /** The hardware register value corresponding to output_volume */
210 UWORD output_volume_bits
;
212 /** Saved state for AC97 mike */
215 /** Saved state for AC97 cd */
218 /** Saved state for AC97 vide */
221 /** Saved state for AC97 aux */
224 /** Saved state for AC97 line in */
227 /** Saved state for AC97 phone */
231 #endif /* AHI_Drivers_VIAAC97_DriverData_h */