vserver 2.0 rc7
[linux-2.6.git] / include / sound / emu10k1.h
index 29a24cb..43b6786 100644 (file)
@@ -51,7 +51,9 @@
 #define NUM_MIDI        16
 #define NUM_G           64              /* use all channels */
 #define NUM_FXSENDS     4
+#define NUM_EFX_PLAYBACK    16
 
+/* FIXME? - according to the OSS driver the EMU10K1 needs a 29 bit DMA mask */
 #define EMU10K1_DMA_MASK       0x7fffffffUL    /* 31bit */
 #define AUDIGY_DMA_MASK                0xffffffffUL    /* 32bit */
 
                                                /* Clear pending interrupts by writing a 1 to   */
                                                /* the relevant bits and zero to the other bits */
 
+#define IPR_GPIOMSG            0x20000000      /* GPIO message interrupt (RE'd, still not sure 
+                                                  which INTE bits enable it)                   */
+
 /* The next two interrupts are for the midi port on the Audigy Drive (A_MPU1)                  */
 #define IPR_A_MIDITRANSBUFEMPTY2 0x10000000    /* MIDI UART transmit buffer empty              */
 #define IPR_A_MIDIRECVBUFEMPTY2        0x08000000      /* MIDI UART receive buffer empty               */
 
+#define IPR_SPDIFBUFFULL       0x04000000      /* SPDIF capture related, 10k2 only? (RE)       */
+#define IPR_SPDIFBUFHALFFULL   0x02000000      /* SPDIF capture related? (RE)                  */
+
 #define IPR_SAMPLERATETRACKER  0x01000000      /* Sample rate tracker lock status change       */
 #define IPR_FXDSP              0x00800000      /* Enable FX DSP interrupts                     */
 #define IPR_FORCEINT           0x00400000      /* Force Sound Blaster interrupt                */
 #define IPR_INTERVALTIMER      0x00000200      /* Interval timer terminal count                */
 #define IPR_MIDITRANSBUFEMPTY  0x00000100      /* MIDI UART transmit buffer empty              */
 #define IPR_MIDIRECVBUFEMPTY   0x00000080      /* MIDI UART receive buffer empty               */
-#define IPR_CHANNELLOOP                0x00000040      /* One or more channel loop interrupts pending  */
+#define IPR_CHANNELLOOP                0x00000040      /* Channel (half) loop interrupt(s) pending     */
 #define IPR_CHANNELNUMBERMASK  0x0000003f      /* When IPR_CHANNELLOOP is set, indicates the   */
-                                               /* Highest set channel in CLIPL or CLIPH.  When */
-                                               /* IP is written with CL set, the bit in CLIPL  */
-                                               /* or CLIPH corresponding to the CIN value      */
-                                               /* written will be cleared.                     */
+                                               /* highest set channel in CLIPL, CLIPH, HLIPL,  */
+                                               /* or HLIPH.  When IP is written with CL set,   */
+                                               /* the bit in H/CLIPL or H/CLIPH corresponding  */
+                                               /* to the CIN value written will be cleared.    */
 
 #define INTE                   0x0c            /* Interrupt enable register                    */
 #define INTE_VIRTUALSB_MASK    0xc0000000      /* Virtual Soundblaster I/O port capture        */
 #define A_IOCFG                        0x18            /* GPIO on Audigy card (16bits)                 */
 #define A_GPINPUT_MASK         0xff00
 #define A_GPOUTPUT_MASK                0x00ff
-#define A_IOCFG_GPOUT0         0x0044          /* analog/digital? */
-#define A_IOCFG_GPOUT1         0x0002          /* IR */
+
+// Audigy output/GPIO stuff taken from the kX drivers
+#define A_IOCFG_GPOUT0         0x0044          /* analog/digital                               */
+#define A_IOCFG_DISABLE_ANALOG 0x0040          /* = 'enable' for Audigy2 (chiprev=4)           */
+#define A_IOCFG_ENABLE_DIGITAL 0x0004
+#define A_IOCFG_UNKNOWN_20      0x0020
+#define A_IOCFG_DISABLE_AC97_FRONT      0x0080  /* turn off ac97 front -> front (10k2.1)       */
+#define A_IOCFG_GPOUT1         0x0002          /* IR? drive's internal bypass (?)              */
 #define A_IOCFG_GPOUT2         0x0001          /* IR */
+#define A_IOCFG_MULTIPURPOSE_JACK      0x2000  /* center+lfe+rear_center (a2/a2ex)             */
+                                                /* + digital for generic 10k2                  */
+#define A_IOCFG_DIGITAL_JACK    0x1000          /* digital for a2 platinum                     */
+#define A_IOCFG_FRONT_JACK      0x4000
+#define A_IOCFG_REAR_JACK       0x8000
+#define A_IOCFG_PHONES_JACK     0x0100          /* LiveDrive                                   */
+
+/* outputs:
+ *     for audigy2 platinum:   0xa00
+ *     for a2 platinum ex:     0x1c00
+ *     for a1 platinum:        0x0
+ */
 
 #define TIMER                  0x1a            /* Timer terminal count register                */
                                                /* NOTE: After the rate is changed, a maximum   */
 #define AC97ADDRESS_READY      0x80            /* Read-only bit, reflects CODEC READY signal   */
 #define AC97ADDRESS_ADDRESS    0x7f            /* Address of indexed AC97 register             */
 
+/* Available on the Audigy 2 and Audigy 4 only. This is the P16V chip. */
+#define PTR2                   0x20            /* Indexed register set pointer register        */
+#define DATA2                  0x24            /* Indexed register set data register           */
+#define IPR2                   0x28            /* P16V interrupt pending register              */
+#define IPR2_PLAYBACK_CH_0_LOOP      0x00001000 /* Playback Channel 0 loop                               */
+#define IPR2_PLAYBACK_CH_0_HALF_LOOP 0x00000100 /* Playback Channel 0 half loop                          */
+#define IPR2_CAPTURE_CH_0_LOOP       0x00100000 /* Capture Channel 0 loop                               */
+#define IPR2_CAPTURE_CH_0_HALF_LOOP  0x00010000 /* Capture Channel 0 half loop                          */
+                                               /* 0x00000100 Playback. Only in once per period.
+                                                * 0x00110000 Capture. Int on half buffer.
+                                                */
+#define INTE2                  0x2c            /* P16V Interrupt enable register.      */
+#define INTE2_PLAYBACK_CH_0_LOOP      0x00001000 /* Playback Channel 0 loop                               */
+#define INTE2_PLAYBACK_CH_0_HALF_LOOP 0x00000100 /* Playback Channel 0 half loop                          */
+#define INTE2_PLAYBACK_CH_1_LOOP      0x00002000 /* Playback Channel 1 loop                               */
+#define INTE2_PLAYBACK_CH_1_HALF_LOOP 0x00000200 /* Playback Channel 1 half loop                          */
+#define INTE2_PLAYBACK_CH_2_LOOP      0x00004000 /* Playback Channel 2 loop                               */
+#define INTE2_PLAYBACK_CH_2_HALF_LOOP 0x00000400 /* Playback Channel 2 half loop                          */
+#define INTE2_PLAYBACK_CH_3_LOOP      0x00008000 /* Playback Channel 3 loop                               */
+#define INTE2_PLAYBACK_CH_3_HALF_LOOP 0x00000800 /* Playback Channel 3 half loop                          */
+#define INTE2_CAPTURE_CH_0_LOOP       0x00100000 /* Capture Channel 0 loop                               */
+#define INTE2_CAPTURE_CH_0_HALF_LOOP  0x00010000 /* Caputre Channel 0 half loop                          */
+#define HCFG2                  0x34            /* Defaults: 0, win2000 sets it to 00004201 */
+                                               /* 0x00000000 2-channel output. */
+                                               /* 0x00000200 8-channel output. */
+                                               /* 0x00000004 pauses stream/irq fail. */
+                                               /* Rest of bits no nothing to sound output */
+                                               /* bit 0: Enable P16V audio.
+                                                * bit 1: Lock P16V record memory cache.
+                                                * bit 2: Lock P16V playback memory cache.
+                                                * bit 3: Dummy record insert zero samples.
+                                                * bit 8: Record 8-channel in phase.
+                                                * bit 9: Playback 8-channel in phase.
+                                                * bit 11-12: Playback mixer attenuation: 0=0dB, 1=-6dB, 2=-12dB, 3=Mute.
+                                                * bit 13: Playback mixer enable.
+                                                * bit 14: Route SRC48 mixer output to fx engine.
+                                                * bit 15: Enable IEEE 1394 chip.
+                                                */
+#define IPR3                   0x38            /* Cdif interrupt pending register              */
+#define INTE3                  0x3c            /* Cdif interrupt enable register.      */
 /************************************************************************************************/
 /* PCI function 1 registers, address = <val> + PCIBASE1                                                */
 /************************************************************************************************/
                                                /* NOTE: All channels contain internal variables; do    */
                                                /* not write to these locations.                        */
 
+/* 1f something */
+
 #define CD0                    0x20            /* Cache data 0 register                                */
 #define CD1                    0x21            /* Cache data 1 register                                */
 #define CD2                    0x22            /* Cache data 2 register                                */
 #define CDE                    0x2e            /* Cache data E register                                */
 #define CDF                    0x2f            /* Cache data F register                                */
 
+/* 0x30-3f seem to be the same as 0x20-2f */
+
 #define PTB                    0x40            /* Page table base register                             */
 #define PTB_MASK               0xfffff000      /* Physical address of the page table in host memory    */
 
 
 #define FXWC                   0x43            /* FX output write channels register                    */
                                                /* When set, each bit enables the writing of the        */
-                                               /* corresponding FX output channel into host memory     */
+                                               /* corresponding FX output channel (internal registers  */
+                                               /* 0x20-0x3f) to host memory.  This mode of recording   */
+                                               /* is 16bit, 48KHz only. All 32 channels can be enabled */
+                                               /* simultaneously.                                      */
+
 #define FXWC_DEFAULTROUTE_C     (1<<0)         /* left emu out? */
 #define FXWC_DEFAULTROUTE_B     (1<<1)         /* right emu out? */
 #define FXWC_DEFAULTROUTE_A     (1<<12)
 #define FXBA                   0x47            /* FX Buffer Address */
 #define FXBA_MASK              0xfffff000      /* 20 bit base address                                  */
 
+/* 0x48 something - word access, defaults to 3f */
+
 #define MICBS                  0x49            /* Microphone buffer size register                      */
 
 #define ADCBS                  0x4a            /* ADC buffer size register                             */
 
 #define FXBS                   0x4b            /* FX buffer size register                              */
 
+/* register: 0x4c..4f: ffff-ffff current amounts, per-channel */
+
 /* The following mask values define the size of the ADC, MIX and FX buffers in bytes */
 #define ADCBS_BUFSIZE_NONE     0x00000000
 #define ADCBS_BUFSIZE_384      0x00000001
 #define A_DBG_SATURATION_OCCURED 0x20000000
 #define A_DBG_SATURATION_ADDR   0x0ffc0000
 
+// NOTE: 0x54,55,56: 64-bit
 #define SPCS0                  0x54            /* SPDIF output Channel Status 0 register       */
 
 #define SPCS1                  0x55            /* SPDIF output Channel Status 1 register       */
 #define AC97SLOT_CNTR          0x10            /* Center enable */
 #define AC97SLOT_LFE           0x20            /* LFE enable */
 
+// NOTE: 0x60,61,62: 64-bit
 #define CDSRCS                 0x60            /* CD-ROM Sample Rate Converter status register */
 
 #define GPSRCS                 0x61            /* General Purpose SPDIF sample rate cvt status */
 #define FXIDX_MASK             0x0000ffff      /* 16-bit value                                 */
 #define FXIDX_IDX              0x10000065
 
+/* The 32-bit HLIx and HLIPx registers all have one bit per channel control/status                     */
+#define HLIEL                  0x66            /* Channel half loop interrupt enable low register      */
+
+#define HLIEH                  0x67            /* Channel half loop interrupt enable high register     */
+
+#define HLIPL                  0x68            /* Channel half loop interrupt pending low register     */
+
+#define HLIPH                  0x69            /* Channel half loop interrupt pending high register    */
+
+// 0x6a,6b,6c used for some recording
+// 0x6d unused
+// 0x6e,6f - tanktable base / offset
+
 /* This is the MPU port on the card (via the game port)                                                */
 #define A_MUDATA1              0x70
 #define A_MUCMD1               0x71
 #define A_FXWC2                        0x75            /* Selects 0x9f-0x80 for FX recording           */
 
 #define A_SPDIF_SAMPLERATE     0x76            /* Set the sample rate of SPDIF output          */
-#define A_SPDIF_48000          0x00000080
-#define A_SPDIF_44100          0x00000000
+#define A_SPDIF_RATE_MASK      0x000000c0
+#define A_SPDIF_48000          0x00000000
+#define A_SPDIF_44100          0x00000080
 #define A_SPDIF_96000          0x00000040
 
+/* 0x77,0x78,0x79 "something i2s-related" - default to 0x01080000 on my audigy 2 ZS --rlrevell */
+/* 0x7a, 0x7b - lookup tables */
+
 #define A_FXRT2                        0x7c
 #define A_FXRT_CHANNELE                0x0000003f      /* Effects send bus number for channel's effects send E */
 #define A_FXRT_CHANNELF                0x00003f00      /* Effects send bus number for channel's effects send F */
 #define A_FXSENDAMOUNT_F_MASK  0x00FF0000
 #define A_FXSENDAMOUNT_G_MASK  0x0000FF00
 #define A_FXSENDAMOUNT_H_MASK  0x000000FF
-
+/* 0x7c, 0x7e "high bit is used for filtering" */
 /* The send amounts for this one are the same as used with the emu10k1 */
 #define A_FXRT1                        0x7e
 #define A_FXRT_CHANNELA                0x0000003f
@@ -782,6 +880,7 @@ typedef struct _snd_emu10k1_voice emu10k1_voice_t;
 typedef struct _snd_emu10k1_pcm emu10k1_pcm_t;
 
 typedef enum {
+       EMU10K1_EFX,
        EMU10K1_PCM,
        EMU10K1_SYNTH,
        EMU10K1_MIDI
@@ -790,8 +889,9 @@ typedef enum {
 struct _snd_emu10k1_voice {
        emu10k1_t *emu;
        int number;
-       int use: 1,
+       unsigned int use: 1,
            pcm: 1,
+           efx: 1,
            synth: 1,
            midi: 1;
        void (*interrupt)(emu10k1_t *emu, emu10k1_voice_t *pvoice);
@@ -801,6 +901,7 @@ struct _snd_emu10k1_voice {
 
 typedef enum {
        PLAYBACK_EMUVOICE,
+       PLAYBACK_EFX,
        CAPTURE_AC97ADC,
        CAPTURE_AC97MIC,
        CAPTURE_EFX
@@ -810,7 +911,7 @@ struct _snd_emu10k1_pcm {
        emu10k1_t *emu;
        snd_emu10k1_pcm_type_t type;
        snd_pcm_substream_t *substream;
-       emu10k1_voice_t *voices[2];
+       emu10k1_voice_t *voices[NUM_EFX_PLAYBACK];
        emu10k1_voice_t *extra;
        unsigned short running;
        unsigned short first_ptr;
@@ -934,15 +1035,33 @@ typedef struct {
        void (*interrupt)(emu10k1_t *emu, unsigned int status);
 } emu10k1_midi_t;
 
+typedef struct {
+       u32 vendor;
+       u32 device;
+       u32 subsystem;
+       unsigned char emu10k1_chip; /* Original SB Live. Not SB Live 24bit. */
+       unsigned char emu10k2_chip; /* Audigy 1 or Audigy 2. */
+       unsigned char ca0102_chip;  /* Audigy 1 or Audigy 2. Not SB Audigy 2 Value. */
+       unsigned char ca0108_chip;  /* Audigy 2 Value */
+       unsigned char ca0151_chip;  /* P16V */
+       unsigned char spk71;        /* Has 7.1 speakers */
+       unsigned char spdif_bug;    /* Has Spdif phasing bug */
+       unsigned char ac97_chip;    /* Has an AC97 chip */
+       unsigned char ecard;        /* APS EEPROM */
+       char * driver;
+       char * name;
+} emu_chip_details_t;
+
 struct _snd_emu10k1 {
        int irq;
 
        unsigned long port;                     /* I/O port number */
-       int APS: 1,                             /* APS flag */
+       unsigned int APS: 1,                    /* APS flag */
            no_ac97: 1,                         /* no AC'97 */
            tos_link: 1,                        /* tos link detected */
            rear_ac97: 1,                       /* rear channels are on AC'97 */
            spk71:1;                            /* 7.1 configuration (Audigy 2 ZS) */
+       const emu_chip_details_t *card_capabilities;    /* Contains profile of card capabilities */
        unsigned int audigy;                    /* is Audigy? */
        unsigned int revision;                  /* chip revision */
        unsigned int serial;                    /* serial number */
@@ -953,6 +1072,9 @@ struct _snd_emu10k1 {
        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 */
+       struct snd_dma_device p16v_dma_dev;
+       struct snd_dma_buffer p16v_buffer;
+
        snd_util_memhdr_t *memhdr;              /* page allocation list */
        emu10k1_memblk_t *reserved_page;        /* reserved page */
 
@@ -974,6 +1096,7 @@ struct _snd_emu10k1 {
        snd_pcm_t *pcm;
        snd_pcm_t *pcm_mic;
        snd_pcm_t *pcm_efx;
+       snd_pcm_t *pcm_p16v;
 
        spinlock_t synth_lock;
        void *synth;
@@ -984,23 +1107,29 @@ struct _snd_emu10k1 {
        spinlock_t voice_lock;
        struct semaphore ptb_lock;
 
-       emu10k1_voice_t voices[64];
+       emu10k1_voice_t voices[NUM_G];
+       emu10k1_voice_t p16v_voices[4];
+       int p16v_device_offset;
        emu10k1_pcm_mixer_t pcm_mixer[32];
+       emu10k1_pcm_mixer_t efx_pcm_mixer[NUM_EFX_PLAYBACK];
        snd_kcontrol_t *ctl_send_routing;
        snd_kcontrol_t *ctl_send_volume;
        snd_kcontrol_t *ctl_attn;
+       snd_kcontrol_t *ctl_efx_send_routing;
+       snd_kcontrol_t *ctl_efx_send_volume;
+       snd_kcontrol_t *ctl_efx_attn;
 
        void (*hwvol_interrupt)(emu10k1_t *emu, unsigned int status);
        void (*capture_interrupt)(emu10k1_t *emu, unsigned int status);
        void (*capture_mic_interrupt)(emu10k1_t *emu, unsigned int status);
        void (*capture_efx_interrupt)(emu10k1_t *emu, unsigned int status);
-       void (*timer_interrupt)(emu10k1_t *emu);
        void (*spdif_interrupt)(emu10k1_t *emu, unsigned int status);
        void (*dsp_interrupt)(emu10k1_t *emu);
 
        snd_pcm_substream_t *pcm_capture_substream;
        snd_pcm_substream_t *pcm_capture_mic_substream;
        snd_pcm_substream_t *pcm_capture_efx_substream;
+       snd_pcm_substream_t *pcm_playback_efx_substream;
 
        snd_timer_t *timer;
 
@@ -1008,6 +1137,7 @@ struct _snd_emu10k1 {
        emu10k1_midi_t midi2; /* for audigy */
 
        unsigned int efx_voices_mask[2];
+       unsigned int next_free_voice;
 };
 
 int snd_emu10k1_create(snd_card_t * card,
@@ -1021,6 +1151,10 @@ int snd_emu10k1_create(snd_card_t * card,
 int snd_emu10k1_pcm(emu10k1_t * emu, int device, snd_pcm_t ** rpcm);
 int snd_emu10k1_pcm_mic(emu10k1_t * emu, int device, snd_pcm_t ** rpcm);
 int snd_emu10k1_pcm_efx(emu10k1_t * emu, int device, snd_pcm_t ** rpcm);
+int snd_p16v_pcm(emu10k1_t * emu, int device, snd_pcm_t ** rpcm);
+int snd_p16v_free(emu10k1_t * emu);
+int snd_p16v_mixer(emu10k1_t * emu);
+int snd_emu10k1_pcm_multi(emu10k1_t * emu, int device, snd_pcm_t ** rpcm);
 int snd_emu10k1_fx8010_pcm(emu10k1_t * emu, int device, snd_pcm_t ** rpcm);
 int snd_emu10k1_mixer(emu10k1_t * emu);
 int snd_emu10k1_timer(emu10k1_t * emu, int device);
@@ -1037,12 +1171,17 @@ int snd_emu10k1_fx8010_tram_setup(emu10k1_t *emu, u32 size);
 /* I/O functions */
 unsigned int snd_emu10k1_ptr_read(emu10k1_t * emu, unsigned int reg, unsigned int chn);
 void snd_emu10k1_ptr_write(emu10k1_t *emu, unsigned int reg, unsigned int chn, unsigned int data);
+unsigned int snd_emu10k1_ptr20_read(emu10k1_t * emu, unsigned int reg, unsigned int chn);
+void snd_emu10k1_ptr20_write(emu10k1_t *emu, unsigned int reg, unsigned int chn, unsigned int data);
 unsigned int snd_emu10k1_efx_read(emu10k1_t *emu, unsigned int pc);
 void snd_emu10k1_intr_enable(emu10k1_t *emu, unsigned int intrenb);
 void snd_emu10k1_intr_disable(emu10k1_t *emu, unsigned int intrenb);
 void snd_emu10k1_voice_intr_enable(emu10k1_t *emu, unsigned int voicenum);
 void snd_emu10k1_voice_intr_disable(emu10k1_t *emu, unsigned int voicenum);
 void snd_emu10k1_voice_intr_ack(emu10k1_t *emu, unsigned int voicenum);
+void snd_emu10k1_voice_half_loop_intr_enable(emu10k1_t *emu, unsigned int voicenum);
+void snd_emu10k1_voice_half_loop_intr_disable(emu10k1_t *emu, unsigned int voicenum);
+void snd_emu10k1_voice_half_loop_intr_ack(emu10k1_t *emu, unsigned int voicenum);
 void snd_emu10k1_voice_set_loop_stop(emu10k1_t *emu, unsigned int voicenum);
 void snd_emu10k1_voice_clear_loop_stop(emu10k1_t *emu, unsigned int voicenum);
 void snd_emu10k1_wait(emu10k1_t *emu, unsigned int wait);
@@ -1112,7 +1251,10 @@ int snd_emu10k1_fx8010_unregister_irq_handler(emu10k1_t *emu,
 /* GPRs */
 #define FXBUS(x)       (0x00 + (x))    /* x = 0x00 - 0x0f */
 #define EXTIN(x)       (0x10 + (x))    /* x = 0x00 - 0x0f */
-#define EXTOUT(x)      (0x20 + (x))    /* x = 0x00 - 0x0f */
+#define EXTOUT(x)      (0x20 + (x))    /* x = 0x00 - 0x0f physical outs -> FXWC low 16 bits */
+#define FXBUS2(x)      (0x30 + (x))    /* x = 0x00 - 0x0f copies of fx buses for capture -> FXWC high 16 bits */
+                                       /* NB: 0x31 and 0x32 are shared with Center/LFE on SB live 5.1 */
+
 #define C_00000000     0x40
 #define C_00000001     0x41
 #define C_00000002     0x42
@@ -1154,9 +1296,13 @@ int snd_emu10k1_fx8010_unregister_irq_handler(emu10k1_t *emu,
 #define A_ITRAM_CTL(x) (A_TANKMEMCTLREGBASE + 0x00 + (x)) /* x = 0x00 - 0xbf */
 #define A_ETRAM_CTL(x) (A_TANKMEMCTLREGBASE + 0xc0 + (x)) /* x = 0x00 - 0x3f */
 
-#define A_FXBUS(x)     (0x00 + (x))    /* x = 0x00 - 0x3f? */
-#define A_EXTIN(x)     (0x40 + (x))    /* x = 0x00 - 0x1f? */
-#define A_EXTOUT(x)    (0x60 + (x))    /* x = 0x00 - 0x1f? */
+#define A_FXBUS(x)     (0x00 + (x))    /* x = 0x00 - 0x3f FX buses */
+#define A_EXTIN(x)     (0x40 + (x))    /* x = 0x00 - 0x0f physical ins */
+#define A_P16VIN(x)    (0x50 + (x))    /* x = 0x00 - 0x0f p16v ins (A2 only) "EMU32 inputs" */
+#define A_EXTOUT(x)    (0x60 + (x))    /* x = 0x00 - 0x1f physical outs -> A_FXWC1 0x79-7f unknown   */
+#define A_FXBUS2(x)    (0x80 + (x))    /* x = 0x00 - 0x1f extra outs used for EFX capture -> A_FXWC2 */
+#define A_EMU32OUTH(x) (0xa0 + (x))    /* x = 0x00 - 0x0f "EMU32_OUT_10 - _1F" - ??? */
+#define A_EMU32OUTL(x) (0xb0 + (x))    /* x = 0x00 - 0x0f "EMU32_OUT_1 - _F" - ??? */
 #define A_GPR(x)       (A_FXGPREGBASE + (x))
 
 /* cc_reg constants */