vserver 1.9.3
[linux-2.6.git] / include / sound / emu10k1.h
index 604625c..31b0df1 100644 (file)
@@ -30,6 +30,7 @@
 #include <sound/hwdep.h>
 #include <sound/ac97_codec.h>
 #include <sound/util_mem.h>
+#include <sound/pcm-indirect.h>
 #include <linux/interrupt.h>
 #include <asm/io.h>
 
 #define SPBYPASS_FORMAT                0x00000f00      /* If 1, SPDIF XX uses 24 bit, if 0 - 20 bit    */
 
 #define AC97SLOT               0x5f            /* additional AC97 slots enable bits            */
-#define AC97SLOT_10K2          0x03
+#define AC97SLOT_REAR_RIGHT    0x01            /* Rear left */
+#define AC97SLOT_REAR_LEFT     0x02            /* Rear right */
 #define AC97SLOT_CNTR          0x10            /* Center enable */
 #define AC97SLOT_LFE           0x20            /* LFE enable */
 
@@ -886,10 +888,7 @@ typedef struct {
        unsigned char gpr_trigger;      /* GPR containing trigger (activate) information (host) */
        unsigned char gpr_running;      /* GPR containing info if PCM is running (FX8010) */
        unsigned char etram[32];        /* external TRAM address & data */
-       unsigned int sw_data, hw_data;
-       unsigned int sw_io, hw_io;
-       unsigned int sw_ready, hw_ready;
-       unsigned int appl_ptr;
+       snd_pcm_indirect_t pcm_rec;
        unsigned int tram_pos;
        unsigned int tram_shift;
        snd_emu10k1_fx8010_irq_t *irq;
@@ -934,10 +933,11 @@ struct _snd_emu10k1 {
        int irq;
 
        unsigned long port;                     /* I/O port number */
-       struct resource *res_port;
        int APS: 1,                             /* APS flag */
            no_ac97: 1,                         /* no AC'97 */
-           tos_link: 1;                        /* tos link detected */
+           tos_link: 1,                        /* tos link detected */
+           rear_ac97: 1,                       /* rear channels are on AC'97 */
+           spk71:1;                            /* 7.1 configuration (Audigy 2 ZS) */
        unsigned int audigy;                    /* is Audigy? */
        unsigned int revision;                  /* chip revision */
        unsigned int serial;                    /* serial number */
@@ -945,7 +945,6 @@ struct _snd_emu10k1 {
        unsigned int card_type;                 /* EMU10K1_CARD_* */
        unsigned int ecard_ctrl;                /* ecard control bits */
        unsigned long dma_mask;                 /* PCI DMA mask */
-       struct snd_dma_device dma_dev;          /* DMA device description */
        int max_cache_pages;                    /* max memory size / PAGE_SIZE */
        struct snd_dma_buffer silent_page;      /* silent page */
        struct snd_dma_buffer ptb_pages;        /* page table pages */
@@ -970,7 +969,6 @@ struct _snd_emu10k1 {
        snd_pcm_t *pcm;
        snd_pcm_t *pcm_mic;
        snd_pcm_t *pcm_efx;
-       snd_pcm_t *pcm_fx8010;
 
        spinlock_t synth_lock;
        void *synth;
@@ -1067,6 +1065,15 @@ int snd_emu10k1_audigy_midi(emu10k1_t * emu);
 /* proc interface */
 int snd_emu10k1_proc_init(emu10k1_t * emu);
 
+/* fx8010 irq handler */
+int snd_emu10k1_fx8010_register_irq_handler(emu10k1_t *emu,
+                                           snd_fx8010_irq_handler_t *handler,
+                                           unsigned char gpr_running,
+                                           void *private_data,
+                                           snd_emu10k1_fx8010_irq_t **r_irq);
+int snd_emu10k1_fx8010_unregister_irq_handler(emu10k1_t *emu,
+                                             snd_emu10k1_fx8010_irq_t *irq);
+
 #endif /* __KERNEL__ */
 
 /*
@@ -1160,6 +1167,8 @@ int snd_emu10k1_proc_init(emu10k1_t * emu);
 #define FXBUS_PCM_RIGHT_FRONT  0x09
 #define FXBUS_MIDI_REVERB      0x0c
 #define FXBUS_MIDI_CHORUS      0x0d
+#define FXBUS_PCM_LEFT_SIDE    0x0e
+#define FXBUS_PCM_RIGHT_SIDE   0x0f
 #define FXBUS_PT_LEFT          0x14
 #define FXBUS_PT_RIGHT         0x15
 
@@ -1184,8 +1193,8 @@ int snd_emu10k1_proc_init(emu10k1_t * emu);
 #define EXTOUT_AC97_R     0x01 /* AC'97 playback channel - right */
 #define EXTOUT_TOSLINK_L   0x02        /* LiveDrive - TOSLink Optical - left */
 #define EXTOUT_TOSLINK_R   0x03        /* LiveDrive - TOSLink Optical - right */
-#define EXTOUT_CENTER      0x04        /* SB Live 5.1 - center */
-#define EXTOUT_LFE         0x05 /* SB Live 5.1 - LFE */
+#define EXTOUT_AC97_CENTER 0x04        /* SB Live 5.1 - center */
+#define EXTOUT_AC97_LFE           0x05 /* SB Live 5.1 - LFE */
 #define EXTOUT_HEADPHONE_L 0x06        /* LiveDrive - Headphone - left */
 #define EXTOUT_HEADPHONE_R 0x07        /* LiveDrive - Headphone - right */
 #define EXTOUT_REAR_L     0x08 /* Rear channel - left */
@@ -1193,6 +1202,8 @@ int snd_emu10k1_proc_init(emu10k1_t * emu);
 #define EXTOUT_ADC_CAP_L   0x0a        /* ADC Capture buffer - left */
 #define EXTOUT_ADC_CAP_R   0x0b        /* ADC Capture buffer - right */
 #define EXTOUT_MIC_CAP    0x0c /* MIC Capture buffer */
+#define EXTOUT_AC97_REAR_L 0x0d        /* SB Live 5.1 (c) 2003 - Rear Left */
+#define EXTOUT_AC97_REAR_R 0x0e        /* SB Live 5.1 (c) 2003 - Rear Right */
 #define EXTOUT_ACENTER    0x11 /* Analog Center */
 #define EXTOUT_ALFE       0x12 /* Analog LFE */
 
@@ -1223,8 +1234,8 @@ int snd_emu10k1_proc_init(emu10k1_t * emu);
 #define A_EXTOUT_AFRONT_R      0x09    /*              right */
 #define A_EXTOUT_ACENTER       0x0a    /* analog center */
 #define A_EXTOUT_ALFE          0x0b    /* analog LFE */
-/* 0x0c ?? */
-/* 0x0d ?? */
+#define A_EXTOUT_ASIDE_L       0x0c    /* analog side left  - Audigy 2 ZS */
+#define A_EXTOUT_ASIDE_R       0x0d    /*             right - Audigy 2 ZS */
 #define A_EXTOUT_AREAR_L       0x0e    /* analog rear left */
 #define A_EXTOUT_AREAR_R       0x0f    /*             right */
 #define A_EXTOUT_AC97_L                0x10    /* AC97 left (front) */
@@ -1313,14 +1324,14 @@ typedef struct {
        unsigned int gpr_map[0x100];      /* initializers */
 
        unsigned int gpr_add_control_count; /* count of GPR controls to add/replace */
-       emu10k1_fx8010_control_gpr_t *gpr_add_controls; /* GPR controls to add/replace */
+       emu10k1_fx8010_control_gpr_t __user *gpr_add_controls; /* GPR controls to add/replace */
 
        unsigned int gpr_del_control_count; /* count of GPR controls to remove */
-       snd_ctl_elem_id_t *gpr_del_controls; /* IDs of GPR controls to remove */
+       snd_ctl_elem_id_t __user *gpr_del_controls; /* IDs of GPR controls to remove */
 
        unsigned int gpr_list_control_count; /* count of GPR controls to list */
        unsigned int gpr_list_control_total; /* total count of GPR controls */
-       emu10k1_fx8010_control_gpr_t *gpr_list_controls; /* listed GPR controls */
+       emu10k1_fx8010_control_gpr_t __user *gpr_list_controls; /* listed GPR controls */
 
        unsigned long tram_valid[0xa0/(sizeof(unsigned long)*8)]; /* bitmask of valid initializers */
        unsigned int tram_data_map[0xa0]; /* data initializers */