88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore/*
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore * CDDL HEADER START
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore *
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore * The contents of this file are subject to the terms of the
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore * Common Development and Distribution License (the "License").
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore * You may not use this file except in compliance with the License.
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore *
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore * or http://www.opensolaris.org/os/licensing.
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore * See the License for the specific language governing permissions
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore * and limitations under the License.
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore *
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore * When distributing Covered Code, include this CDDL HEADER in each
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore * If applicable, add the following below this CDDL HEADER, with the
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore * fields enclosed by brackets "[]" replaced with your own identifying
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore * information: Portions Copyright [yyyy] [name of copyright owner]
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore *
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore * CDDL HEADER END
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore/*
68c47f65208790c466e5e484f2293d3baed71c6aGarrett D'Amore * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore * Use is subject to license terms.
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#ifndef _AUDIO810_H_
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define _AUDIO810_H_
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore/*
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore * Header file for the audio810 device driver
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore/*
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore * Driver supported configuration information
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_NAME "audio810"
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_MOD_NAME "audio810 audio driver"
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore/*
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore * Misc. defines
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_BD_NUMS (32)
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_NUM_PORTS (2)
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_MOD_SIZE (16)
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_ROUNDUP(x, algn) (((x) + ((algn) - 1)) & ~((algn) - 1))
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore/* The size of each entry of "reg" property is 5 integers */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_INTS_PER_REG_PROP 5
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore/* offset from the base of specified DMA engine */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_OFFSET_BD_BASE (0x00)
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_OFFSET_CIV (0x04)
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_OFFSET_LVI (0x05)
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_OFFSET_SR (0x06)
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_OFFSET_PICB (0x08)
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_OFFSET_PIV (0x0A)
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_OFFSET_CR (0x0B)
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore/* DMA engine offset from base */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_BASE_PCM_IN (0x00)
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_BASE_PCM_OUT (0x10)
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_BASE_MIC (0x20)
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_REG_GCR 0x2C
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_REG_GSR 0x30
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_REG_CASR 0x34
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_REG_SISCTL 0x4C /* SiS 7012 control */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore/* bits of bus master status register */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_BM_SR_DCH 0x01
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_BM_SR_CELV 0x02
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_BM_SR_LVBCI 0x04
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_BM_SR_BCIS 0x08
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_BM_SR_FIFOE 0x10
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore/* bits of bus master control register */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_BM_CR_RUN 0x01
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_BM_CR_RST 0x02
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_BM_CR_LVBIE 0x04
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_BM_CR_FEIE 0x08
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_BM_CR_IOCE 0x10
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_BM_CR_PAUSE 0x00
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore/*
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore * Global Control Register
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GCR_GPIE 0x00000001
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GCR_COLD_RST 0x00000002
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GCR_WARM_RST 0x00000004
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GCR_ACLINK_OFF 0x00000008
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GCR_PRI_INTR_ENABLE 0x00000010
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GCR_SEC_INTR_ENABLE 0x00000020
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore/* For ICH2 or more, bit21:20 is the PCM 4/6-channel enable bits */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GCR_2_CHANNELS (0 << 20)
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GCR_4_CHANNELS (1 << 20)
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GCR_6_CHANNELS (2 << 20)
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GCR_CHANNELS_MASK (3 << 20)
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore/* SiS 7012 has its own flags here */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GCR_SIS_2_CHANNELS (0 << 6)
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GCR_SIS_4_CHANNELS (1 << 6)
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GCR_SIS_6_CHANNELS (2 << 6)
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GCR_SIS_CHANNELS_MASK (3 << 6)
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore/*
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore * Global Status Register
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GSR_TRI_READY 0x10000000 /* for ICH4/5 */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GSR_CAP8CH 0x00400000
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GSR_CAP6CH 0x00200000
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GSR_CAP4CH 0x00100000
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GSR_READ_COMPL 0x00008000
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GSR_INTR_SEC_RESUME 0x00000800
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GSR_INTR_PRI_RESUME 0x00000400
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GSR_SEC_READY 0x00000200
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GSR_PRI_READY 0x00000100
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GSR_INTR_MIC 0x00000080
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GSR_INTR_POUT 0x00000040
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GSR_INTR_PIN 0x00000020
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GSR_INTR_MO 0x00000004
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GSR_INTR_MI 0x00000002
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GSR_INTR_GSI 0x00000001
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_GSR_USE_INTR 0x00000060 /* PCM-IN ,PCM-OUT */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore/*
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore * SiS Control Register
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_SISCTL_UNMUTE 0x01
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore/*
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore * Macro for AD1980 codec
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define AD1980_VID1 0x4144
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define AD1980_VID2 0x5370
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define AD1985_VID2 0x5375
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define CODEC_AD_REG_MISC 0x76 /* offset of ad1980 misc control reg */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define AD1980_MISC_LOSEL 0x0020 /* Line-out amplifier output selector */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define AD1980_MISC_HPSEL 0x0400 /* HP-out amplifier output selector */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define AD1980_SURR_MUTE 0x8080 /* Mute for surround volume register */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_PCM_IN 0
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_PCM_OUT 1
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amorestruct audio810_port {
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore struct audio810_state *statep;
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore int num;
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore ddi_dma_handle_t samp_dmah;
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore ddi_acc_handle_t samp_acch;
68c47f65208790c466e5e484f2293d3baed71c6aGarrett D'Amore uint32_t samp_frames;
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore size_t samp_size;
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore caddr_t samp_kaddr;
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore uint32_t samp_paddr;
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore ddi_dma_handle_t bdl_dmah;
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore ddi_acc_handle_t bdl_acch;
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore size_t bdl_size;
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore caddr_t bdl_kaddr;
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore uint32_t bdl_paddr;
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
68c47f65208790c466e5e484f2293d3baed71c6aGarrett D'Amore uint32_t offset;
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore uint64_t count;
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore uint8_t nchan;
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore uint8_t regoff;
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore uint8_t stsoff; /* status offset */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore uint8_t picboff; /* picb offset */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore unsigned sync_dir;
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore audio_engine_t *engine;
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore};
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amoretypedef struct audio810_port audio810_port_t;
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore/*
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore * buffer descripter list entry, sees datasheet
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amorestruct i810_bd_entry {
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore uint32_t buf_base; /* the address of the buffer */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore uint16_t buf_len; /* the number of samples */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore uint16_t buf_cmd;
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore};
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amoretypedef struct i810_bd_entry i810_bd_entry_t;
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define BUF_CMD_BUP 0x4000
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define BUF_CMD_IOC 0x8000
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amoretypedef enum i810_quirk {
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore QUIRK_NONE = 0,
68c47f65208790c466e5e484f2293d3baed71c6aGarrett D'Amore QUIRK_OLDICH, /* likely emulated, needs deeper playahead */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore QUIRK_SIS7012, /* weird registers and such */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore} i810_quirk_t;
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore/*
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore * audio810_state_t -per instance state and operation data
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amorestruct audio810_state {
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore dev_info_t *dip; /* used by audio810_getinfo() */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore audio_dev_t *adev;
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore ac97_t *ac97;
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore audio810_port_t *ports[2];
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore ddi_acc_handle_t am_regs_handle; /* for audio mixer register */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore ddi_acc_handle_t bm_regs_handle; /* for bus master register */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore caddr_t am_regs_base; /* base of audio mixer regs */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore caddr_t bm_regs_base; /* base of bus master regs */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore kstat_t *ksp; /* kernel statistics */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore uint8_t maxch;
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore i810_quirk_t quirk;
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore};
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amoretypedef struct audio810_state audio810_state_t;
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore/*
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore * Useful bit twiddlers
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore */
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_BM_GET8(reg) \
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore ddi_get8(statep->bm_regs_handle, \
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore (void *)((char *)statep->bm_regs_base + (reg)))
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_BM_GET16(reg) \
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore ddi_get16(statep->bm_regs_handle, \
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore (void *)((char *)statep->bm_regs_base + (reg)))
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_BM_GET32(reg) \
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore ddi_get32(statep->bm_regs_handle, \
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore (void *)((char *)statep->bm_regs_base + (reg)))
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_BM_PUT8(reg, val) \
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore ddi_put8(statep->bm_regs_handle, \
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore (void *)((char *)statep->bm_regs_base + (reg)), (val))
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_BM_PUT16(reg, val) \
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore ddi_put16(statep->bm_regs_handle, \
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore (void *)((char *)statep->bm_regs_base + (reg)), (val))
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_BM_PUT32(reg, val) \
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore ddi_put32(statep->bm_regs_handle, \
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore (void *)((char *)statep->bm_regs_base + (reg)), (val))
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_AM_GET16(reg) \
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore ddi_get16(statep->am_regs_handle, \
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore (void *)((char *)statep->am_regs_base + (reg)))
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#define I810_AM_PUT16(reg, val) \
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore ddi_put16(statep->am_regs_handle, \
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore (void *)((char *)statep->am_regs_base + (reg)), (val))
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore
88447a05f537aabe9a1bc3d5313f22581ec992a7Garrett D'Amore#endif /* _AUDIO810_H_ */