48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore/*
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore * CDDL HEADER START
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore *
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore * The contents of this file are subject to the terms of the
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore * Common Development and Distribution License (the "License").
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore * You may not use this file except in compliance with the License.
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore *
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore * or http://www.opensolaris.org/os/licensing.
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore * See the License for the specific language governing permissions
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore * and limitations under the License.
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore *
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore * When distributing Covered Code, include this CDDL HEADER in each
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore * If applicable, add the following below this CDDL HEADER, with the
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore * fields enclosed by brackets "[]" replaced with your own identifying
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore * information: Portions Copyright [yyyy] [name of copyright owner]
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore *
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore * CDDL HEADER END
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore/*
68c47f65208790c466e5e484f2293d3baed71c6aGarrett D'Amore * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore * Use is subject to license terms.
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore/*
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore * Purpose: Definitions for the Creative Audigy LS driver
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore/*
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore * This file is part of Open Sound System
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore *
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore * Copyright (C) 4Front Technologies 1996-2009.
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore *
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore * This software is released under CDDL 1.0 source license.
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore * See the COPYING file included in the main directory of this source
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore * distribution for the license terms and conditions.
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#ifndef AUDIGYLS_H
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define AUDIGYLS_H
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define AUDIGYLS_NAME "audiols"
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define AUDIGYLS_NUM_PORT 2
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define AUDIGYLS_PLAY_PORT 0
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define AUDIGYLS_REC_PORT 1
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define PCI_VENDOR_ID_CREATIVE 0x1102
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define PCI_DEVICE_ID_CREATIVE_AUDIGYLS 0x0007
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore/*
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore * PCI registers
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define PR 0x00
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define DR 0x04
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define IPR 0x08
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define IER 0x0C
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define INTR_PCI (1 << 0)
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define INTR_TXA (1 << 1) /* midi-a tx */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define INTR_RXA (1 << 2) /* midi-a rx */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define INTR_IT2 (1 << 3) /* timer 2, 44.1 kHz */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define INTR_IT1 (1 << 4) /* timer 1, 192 kHz */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define INTR_SS_ (1 << 5) /* spdif status */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define INTR_SRT (1 << 6) /* sample rate status */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define INTR_GP (1 << 7)
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define INTR_AI (1 << 8) /* audio pending interrupt */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define INTR_I2CDAC (1 << 9)
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define INTR_I2CEE (1 << 10)
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define INTR_SPI (1 << 11)
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define INTR_SPF (1 << 12)
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define INTR_SUO (1 << 13)
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define INTR_SUI (1 << 14)
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define INTR_TXB (1 << 16) /* midi-b tx */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define INTR_RXB (1 << 17) /* midi-b rx */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define HC 0x14
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define HC_PF (1 << 11) /* play fmt 1 = 32b, 0 = 16b */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define HC_RF (1 << 10) /* rec fmt 1 = 32b, 0 = 16b */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define HC_AC97 (1 << 3)
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define HC_AEN (1 << 0) /* audio enable */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define GPIO 0x18
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define AC97D 0x1C
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define AC97A 0x1E
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore/*
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore * Indirect registers
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define PTBA 0x000 /* gather play table base address */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define PTBS 0x001 /* gather play table buffer size */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define PTCA 0x002 /* gather play table current addr ptr */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define PFBA 0x004 /* play fifo base address */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define PFBS 0x005 /* play fifo buffer size */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define CPFA 0x006 /* current play fifo address */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define PFEA 0x007 /* play fifo end address */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define CPCAV 0x008 /* current play fifo offset/cache sz valid */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define RFBA 0x010 /* record fifo base address */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define RFBS 0x011 /* record fifo buffer size */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define CRFA 0x012 /* current record fifo address */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define CRCAV 0x013 /* current record fifo offset/cache sz valid */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define CDL 0x020 /* play fifo cache data, 0x20-0x2f */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define SA 0x040 /* start audio */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define SCS3 0x041
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define SCS0 0x042
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define SCS1 0x043
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define SCS2 0x044
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define SPC 0x045 /* spdif output control */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define WMARK 0x046 /* test purposes only */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define SPSC 0x049 /* spdif input control */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define RCD 0x050 /* record cache data, 0x50-0x5f */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define P17RECSEL 0x060 /* record fifo map address */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define P17RECVOLL 0x061 /* record fifo volume control (lo) */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define P17RECVOLH 0x062 /* record fifo volume control (hi) */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define HMIXMAP_SPDIF 0x063 /* spdif router map address */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define SMIXMAP_SPDIF 0x064 /* spdif router map address */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define MIXCTL_SPDIF 0x065 /* spdif mixer control */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define MIXVOL_SPDIF 0x066 /* spdif mixer input volume control */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define HMIXMAP_I2S 0x067 /* i2s router map address */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define SMIXMAP_I2S 0x068 /* i2s router map address */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define MIXCTL_I2S 0x069 /* i2s mixer control */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define MIXVOL_I2S 0x06a /* i2s mixer input volume control */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore/* MIDI UART */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define MUDATA 0x06c /* midi uart a data */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define MUCMDA 0x06d /* midi uart a command/status */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define MUDATB 0x06e /* midi uart b data */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define MUCMDB 0x06f /* midi uart b command/status */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define SRT 0x070 /* sample rate tracker status */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define SRCTL 0x071 /* sample rate control */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define AUDCTL 0x072 /* audio output control */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define CHIP_ID 0x074 /* chip id */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define AIE 0x075 /* audio interrupt enable */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define AIP 0x076 /* audio interrupt */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define WALL192 0x077 /* wall clock @ 192 kHz */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define WALL441 0x078 /* wall clock @ 44.1 kHz */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define IT 0x079 /* interval timer */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define SPI 0x07a /* spi interface */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define I2C_A 0x07b /* i2c address */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define I2C_0 0x07c /* i2c data */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define I2C_1 0x07d /* i2c data */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore/*
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore * Audio interrupt bits
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define AI_PFH 0x00000001 /* playback fifo half loop */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define AI_PFF 0x00000010 /* playback fifo loop */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define AI_TFH 0x00000100 /* playback table half loop */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define AI_TFF 0x00001000 /* playback table loop */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define AI_RFH 0x00010000 /* capture table half loop */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define AI_RFF 0x00100000 /* capture fifo loop */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define AI_EAI 0x01000000 /* enables audio end interrupt */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define SA_48K 0
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define SA_44K 1
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define SA_96K 2
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define SA_192K 3
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define SA_MIX_OUT_EN(ch) (1 << ((ch) + 28))
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define SA_MIX_IN_EN(ch) (1 << ((ch) + 24))
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define SA_PLAY_RATE(ch, rate) ((rate) << (((ch) * 2) + 16))
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define SA_PLAY_START(ch) (1 << (ch))
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define SA_RECORD_START(ch) (1 << ((ch) + 8))
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define SA_SPA(ch) (1U << (ch))
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define SA_SRA(ch) (1U << ((ch) + 8))
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define RECSEL_SPDIFOUT 0
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define RECSEL_I2SOUT 1
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define RECSEL_SPDIFIN 2
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define RECSEL_I2SIN 3
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define RECSEL_AC97 4
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define RECSEL_SRC 5
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amoretypedef struct _audigyls_dev_t audigyls_dev_t;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amoretypedef struct _audigyls_port_t audigyls_port_t;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amoretypedef enum {
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore CTL_FRONT = 0,
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore CTL_SURROUND,
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore CTL_CENTER,
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore CTL_LFE,
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore CTL_RECORDVOL,
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore CTL_MONGAIN,
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore CTL_RECSRC,
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore CTL_SPREAD,
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore CTL_LOOP,
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore CTL_NUM /* must be last */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore} audigyls_ctrl_num_t;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amoretypedef struct audigyls_ctrl
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore{
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore audigyls_dev_t *dev;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore audio_ctrl_t *ctrl;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore audigyls_ctrl_num_t num;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore uint64_t val;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore} audigyls_ctrl_t;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amorestruct _audigyls_port_t
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore{
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore audigyls_dev_t *dev;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore audio_engine_t *engine;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore int direction;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore unsigned nchan;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore ddi_dma_handle_t buf_dmah; /* dma for buffers */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore ddi_acc_handle_t buf_acch;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore uint32_t buf_paddr;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore caddr_t buf_kaddr;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore uint32_t buf_size;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore uint32_t buf_frames; /* Buffer size in frames */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore uint32_t offset;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore int syncdir;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore uint64_t count;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore};
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amorestruct _audigyls_dev_t
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore{
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore dev_info_t *dip;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore audio_dev_t *adev;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore ac97_t *ac97;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore int nactive; /* Num active ports */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore char digital_enable; /* Orange combo-jack mode */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore ddi_acc_handle_t pcih;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore ddi_acc_handle_t regsh;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore caddr_t base;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore kmutex_t mutex; /* For normal locking */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore kmutex_t low_mutex; /* For low level routines */
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore audigyls_port_t *port[AUDIGYLS_NUM_PORT];
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore audigyls_ctrl_t controls[CTL_NUM];
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore ac97_ctrl_t *ac97_recgain;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore ac97_ctrl_t *ac97_recsrc;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore uint64_t recmask;
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore};
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define INB(dev, reg) \
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore ddi_get8(dev->regsh, (void *)(dev->base + reg))
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define OUTB(dev, reg, val) \
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore ddi_put8(dev->regsh, (void *)(dev->base + reg), (val))
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define INW(dev, reg) \
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore ddi_get16(dev->regsh, (void *)(dev->base + reg))
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define OUTW(dev, reg, val) \
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore ddi_put16(dev->regsh, (void *)(dev->base + reg), (val))
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define INL(dev, reg) \
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore ddi_get32(dev->regsh, (void *)(dev->base + reg))
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#define OUTL(dev, reg, val) \
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore ddi_put32(dev->regsh, (void *)(dev->base + reg), (val))
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore
48722b5f422aa5e059f333d8c7384ffd184fe739Garrett D'Amore#endif /* AUDIGYLS_H */