/* * @(#)hardware.h 1.0 1998/12/22 Carlos Hasan (chasan@dcc.uchile.cl) * * Hardware definitions for the Sound Blaster 16 device driver. * * Copyright (C) 1998 Carlos Hasan. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #ifndef __HARDWARE_H #define __HARDWARE_H /***************************************************************************** * SOUND BLASTER 16 PLUG-AND-PLAY DEVICE IDENTIFIERS *****************************************************************************/ /***************************************************************************** * ========================================================================== * Product ID Description * ========================================================================== * CTL0001 Creative Sound Blaster 16 Plug and Play * * CTL0021 Creative AWE32 Wavetable MIDI * CTL0022 Creative AWE64 Wavetable MIDI * CTL0023 Creative AWE64 Gold Wavetable MIDI * CTL0024 Creative AWE64 Compatible Wavetable MIDI * * CTL0031 Creative AWE32 16-bit Audio (SB16 compatible) * * CTL0041 Creative SB16 Value Plug and Play (V16CL/V32D/V32G) * CTL0042 Creative SB AWE32 Plug and Play * CTL0043 Creative ViBRA 16X Plug and Play * CTL0044 Creative SB AWE64 Gold Plug and Play * CTL0045 Creative SB AWE64 * CTL0046 Creative SB AWE64 Compatible Plug and Play * CTL0047 Creative SB16 Plug and Play * CTL0048 Creative SB AWE64 Gold Plug and Play * * CTL0051 Creative 3D Stereo Enhancement * * CTL00F0 Creative ViBRA 16X Plug and Play * * CTL7001 Creative Programmable Game Port * CTL7002 Creative Programmable Game Port * CTL7005 Creative Programmable Game Port (1 I/O) * * CTL8001 SB Legacy Device * PNPB003 SB16 Legacy Device * * ========================================================================== * Serial Card Name Device Name Vendor ID Device ID * ========================================================================== * CT3980 Creative SB AWE32 PnP Audio CTL0042 CTL0031 * WaveTable CTL0042 CTL0021 * Game CTL0042 CTL7001 * IDE CTL0042 CTL2011 * * CT2230 Creative ViBRA 16X PnP Audio CTL00f0 CTL0043 * Game CTL00f0 CTL7005 */ #define PNP_ISA_PRODUCT_ID(ch0, ch1, ch2, prod, rev) \ (((ch0 & 0x1f) << 2) | ((ch1 & 0x18) >> 3) | \ ((ch1 & 0x07) << 13) | ((ch2 & 0x1f) << 8) | \ ((prod & 0xff0) << 12) | ((prod & 0x00f) << 28) | ((rev & 0xf) << 24)) #define PNP_IS_SB16_DEVICE(id) \ (((id & 0xf0ffffff) == PNP_ISA_PRODUCT_ID('C', 'T', 'L', 0x000, 0x0)) || \ ((id & 0xf0ffffff) == PNP_ISA_PRODUCT_ID('C', 'T', 'L', 0x003, 0x0)) || \ ((id & 0xf0ffffff) == PNP_ISA_PRODUCT_ID('C', 'T', 'L', 0x004, 0x0))) /***************************************************************************** * SOUND BLASTER 16 HARDWARE SPECIFICATIONS *****************************************************************************/ /***************************************************************************** * Sound Blaster 16 DSP I/O port register offsets */ enum { SB16_MIXER_ADDRESS = 0x004, SB16_MIXER_DATA = 0x005, SB16_CODEC_RESET = 0x006, SB16_CODEC_READ_DATA = 0x00a, SB16_CODEC_WRITE_DATA = 0x00c, SB16_CODEC_WRITE_STATUS = 0x00c, SB16_CODEC_READ_STATUS = 0x00e, SB16_CODEC_ACK_8_BIT = 0x00e, SB16_CODEC_ACK_16_BIT = 0x00f }; /***************************************************************************** * Sound Blaster 16 DSP programming commands */ enum { SB16_SPEAKER_ENABLE = 0xd1, SB16_SPEAKER_DISABLE = 0xd3, SB16_SPEAKER_STATUS = 0xd8, SB16_PLAYBACK_RATE = 0x41, SB16_CAPTURE_RATE = 0x42, SB16_PLAYBACK_8_BIT = 0xc6, SB16_CAPTURE_8_BIT = 0xce, SB16_DMA_DISABLE_8_BIT = 0xd0, SB16_DMA_ENABLE_8_BIT = 0xd4, SB16_DMA_EXIT_8_BIT = 0xda, SB16_PLAYBACK_16_BIT = 0xb6, SB16_CAPTURE_16_BIT = 0xbe, SB16_DMA_DISABLE_16_BIT = 0xd5, SB16_DMA_ENABLE_16_BIT = 0xd6, SB16_DMA_EXIT_16_BIT = 0xd9, SB16_CODEC_VERSION = 0xe1 }; /***************************************************************************** * Sound Blaster 16 mixer indirect registers */ enum { SB16_MIXER_RESET = 0x00, SB16_LINE_OUT_LEFT = 0x30, SB16_LINE_OUT_RIGHT = 0x31, SB16_DAC_LEFT = 0x32, SB16_DAC_RIGHT = 0x33, SB16_SYNTH_LEFT = 0x34, SB16_SYNTH_RIGHT = 0x35, SB16_CD_LEFT = 0x36, SB16_CD_RIGHT = 0x37, SB16_LINE_IN_LEFT = 0x38, SB16_LINE_IN_RIGHT = 0x39, SB16_MIC = 0x3a, SB16_PC_BEEP = 0x3b, SB16_OUTPUT_MUX = 0x3c, SB16_INPUT_MUX_LEFT = 0x3d, SB16_INPUT_MUX_RIGHT = 0x3e, SB16_ADC_GAIN_LEFT = 0x3f, SB16_ADC_GAIN_RIGHT = 0x40, SB16_DAC_GAIN_LEFT = 0x41, SB16_DAC_GAIN_RIGHT = 0x42, SB16_MIC_BOOST = 0x43, SB16_TREBLE_LEFT = 0x44, SB16_TREBLE_RIGHT = 0x45, SB16_BASS_LEFT = 0x46, SB16_BASS_RIGHT = 0x47, SB16_IRQ_SETUP = 0x80, SB16_DMA_SETUP = 0x81, SB16_IRQ_STATUS = 0x82, SB16_STEREO_ENHANCEMENT = 0x90 }; /***************************************************************************** * Sound Blaster 16 playback and capture sample formats */ enum { B_SB16_FORMAT_UNSIGNED = 0x00, B_SB16_FORMAT_SIGNED = 0x10, B_SB16_FORMAT_MONO = 0x00, B_SB16_FORMAT_STEREO = 0x20 }; /***************************************************************************** * Sound Blaster 16 playback and capture control bits */ enum { B_SB16_MUX_SYNTH_LEFT = 0x20, B_SB16_MUX_SYNTH_RIGHT = 0x40, B_SB16_MUX_LINE_LEFT = 0x10, B_SB16_MUX_LINE_RIGHT = 0x08, B_SB16_MUX_CD_LEFT = 0x04, B_SB16_MUX_CD_RIGHT = 0x02, B_SB16_MUX_MIC = 0x01, B_SB16_MUX_ALL_LEFT = 0x35, B_SB16_MUX_ALL_RIGHT = 0x4b }; /***************************************************************************** * Sound Blaster 16 Stereo Enhancenment */ enum { B_SB16_SE_ENABLE = 0x01, B_SB16_SE_DETECT_ENABLE = 0x40, B_SB16_SE_DETECT_STATUS = 0x80 }; /***************************************************************************** * Sound Blaster 16 DSP I/O port delays */ enum { SB16_CODEC_IO_DELAY = 200000, SB16_CODEC_RESET_DELAY = 200 }; /***************************************************************************** * Sound Blaster 16 DMA low memory buffer */ typedef struct { area_id area; char *address; int size; } hw_dma_buffer; /***************************************************************************** * SOUND BLASTER 16 MPU-401 MIDI PORT HARDWARE SPECIFICATIONS *****************************************************************************/ /***************************************************************************** * Sound Blaster 16 MPU-401 I/O port register offsets */ enum { MPU401_DATA = 0x000, MPU401_STATUS = 0x001, MPU401_COMMAND = 0x001 }; /***************************************************************************** * Sound Blaster 16 MPU-401 status register bit fields */ enum { B_MPU401_WRITE_BUSY = 0x40, B_MPU401_READ_BUSY = 0x80 }; /***************************************************************************** * Sound Blaster 16 MPU-401 MIDI port commands */ enum { MPU401_CMD_RESET = 0xff, MPU401_CMD_UART_MODE = 0x3f }; /***************************************************************************** * Sound Blaster 16 MPU-401 port timeout and latency */ enum { MPU401_IO_LATENCY = 1000, MPU401_IO_TIMEOUT = 10000 }; #endif