xref: /onnv-gate/usr/src/uts/common/io/audio/drv/audioixp/audioixp.h (revision 11936:54dc8a89ba0d)
19484Sgarrett.damore@Sun.COM /*
29484Sgarrett.damore@Sun.COM  * CDDL HEADER START
39484Sgarrett.damore@Sun.COM  *
49484Sgarrett.damore@Sun.COM  * The contents of this file are subject to the terms of the
59484Sgarrett.damore@Sun.COM  * Common Development and Distribution License (the "License").
69484Sgarrett.damore@Sun.COM  * You may not use this file except in compliance with the License.
79484Sgarrett.damore@Sun.COM  *
89484Sgarrett.damore@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
99484Sgarrett.damore@Sun.COM  * or http://www.opensolaris.org/os/licensing.
109484Sgarrett.damore@Sun.COM  * See the License for the specific language governing permissions
119484Sgarrett.damore@Sun.COM  * and limitations under the License.
129484Sgarrett.damore@Sun.COM  *
139484Sgarrett.damore@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
149484Sgarrett.damore@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
159484Sgarrett.damore@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
169484Sgarrett.damore@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
179484Sgarrett.damore@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
189484Sgarrett.damore@Sun.COM  *
199484Sgarrett.damore@Sun.COM  * CDDL HEADER END
209484Sgarrett.damore@Sun.COM  */
219484Sgarrett.damore@Sun.COM /*
22*11936Sgdamore@opensolaris.org  * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
239484Sgarrett.damore@Sun.COM  * Use is subject to license terms.
249484Sgarrett.damore@Sun.COM  */
259484Sgarrett.damore@Sun.COM 
269484Sgarrett.damore@Sun.COM #ifndef	_AUDIOIXP_H_
279484Sgarrett.damore@Sun.COM #define	_AUDIOIXP_H_
289484Sgarrett.damore@Sun.COM 
299484Sgarrett.damore@Sun.COM /*
309484Sgarrett.damore@Sun.COM  * Header file for the audioixp device driver
319484Sgarrett.damore@Sun.COM  */
329484Sgarrett.damore@Sun.COM 
339484Sgarrett.damore@Sun.COM #define	IXP_DEV_CONFIG		"onboard1"
349484Sgarrett.damore@Sun.COM #define	IXP_DEV_VERSION		"a"
359484Sgarrett.damore@Sun.COM 
369484Sgarrett.damore@Sun.COM /*
379484Sgarrett.damore@Sun.COM  * Driver supported configuration information
389484Sgarrett.damore@Sun.COM  */
399484Sgarrett.damore@Sun.COM #define	IXP_NAME		"audioixp"
409484Sgarrett.damore@Sun.COM #define	IXP_MOD_NAME		"ATI IXP audio driver"
419484Sgarrett.damore@Sun.COM #define	IXP_CONFIG_REGS		(0)	/* PCI configure register */
429484Sgarrett.damore@Sun.COM #define	IXP_IO_AM_REGS		(1)	/* PCI base register 0x10 */
439484Sgarrett.damore@Sun.COM 
449484Sgarrett.damore@Sun.COM #define	IXP_PLAY		0
459484Sgarrett.damore@Sun.COM #define	IXP_REC			1
469484Sgarrett.damore@Sun.COM 
479484Sgarrett.damore@Sun.COM #define	IXP_BD_NUMS			(8)
489484Sgarrett.damore@Sun.COM 
499484Sgarrett.damore@Sun.COM /*
509484Sgarrett.damore@Sun.COM  * PCI configuration registers and bits
519484Sgarrett.damore@Sun.COM  */
529484Sgarrett.damore@Sun.COM #define	IXP_PCI_ID_200		(0x10024341U)
539484Sgarrett.damore@Sun.COM #define	IXP_PCI_ID_300		(0x10024361U)
549484Sgarrett.damore@Sun.COM #define	IXP_PCI_ID_400		(0x10024370U)
559484Sgarrett.damore@Sun.COM #define	IXP_PCI_ID_SB600	(0x10024382U)
569484Sgarrett.damore@Sun.COM 
579484Sgarrett.damore@Sun.COM /*
589484Sgarrett.damore@Sun.COM  * Audio controller registers and bits
599484Sgarrett.damore@Sun.COM  */
609484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_INT				(0x00)
619484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_INT_IN_DMA_OVERFLOW		(1U<<0)
629484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_INT_IN_DMA			(1U<<1)
639484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_INT_OUT_DMA_UNDERFLOW		(1U<<2)
649484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_INT_OUT_DMA			(1U<<3)
659484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_INT_CODEC0_NOT_READY		(1U<<10)
669484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_INT_CODEC1_NOT_READY		(1U<<11)
679484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_INT_CODEC2_NOT_READY		(1U<<12)
689484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_INT_NEW_FRAME			(1U<<13)
699484Sgarrett.damore@Sun.COM 
709484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_INT_EN			(0x04)
719484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_INT_EN_IN_DMA_OVERFLOW	(1U<<0)
729484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_INT_EN_STATUS			(1U<<1)
739484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_INT_EN_OUT_DMA_UNDERFLOW	(1U<<2)
749484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_INT_EN_CODEC0_NOT_READY	(1U<<10)
759484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_INT_EN_CODEC1_NOT_READY	(1U<<11)
769484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_INT_EN_CODEC2_NOT_READY	(1U<<12)
779484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_INT_EN_NEW_FRAME		(1U<<13)
789484Sgarrett.damore@Sun.COM 
799484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_CMD				(0x08)
809484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_CMD_POWER_DOWN		(1U<<0)
819484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_CMD_EN_IN			(1U<<1)
829484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_CMD_EN_OUT			(1U<<2)
839484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_CMD_EN_IN_DMA			(1U<<8)
849484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_CMD_EN_OUT_DMA		(1U<<9)
859484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_CMD_INTER_IN			(1U<<21)
869484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_CMD_INTER_OUT			(1U<<22)
879484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_CMD_BURST_EN			(1U<<25)
889484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_CMD_AC_ACTIVE			(1U<<28)
899484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_CMD_AC_SOFT_RESET		(1U<<29)
909484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_CMD_AC_SYNC			(1U<<30)
919484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_CMD_AC_RESET			(1U<<31)
929484Sgarrett.damore@Sun.COM 
939484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_PHY_ADDR_DATA		(0x0c)
949484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_PHY_PRIMARY_CODEC	(0u)
959484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_PHY_SECOND_CODEC	(1u)
969484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_PHY_THIRD_CODEC	(2u)
979484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_PHY_READ		(1u<<2)
989484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_PHY_WRITE		(0u)
999484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_PHY_EN			(1u<<8)
1009484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_PHY_ADDR_SHIFT		(9)
1019484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_PHY_ADDR_MASK		(0x7fu<<9)
1029484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_PHY_DATA_SHIFT		(16)
1039484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_PHY_DATA_MASK		(0xffffu<<16)
1049484Sgarrett.damore@Sun.COM 
1059484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_IN_PHY_ADDR_DATA		(0x10)
1069484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_IN_PHY_READY			(1u<<8)
1079484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_IN_PHY_ADDR_SHIFT		(9)
1089484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_IN_PHY_ADDR_MASK		(0x7fu<<9)
1099484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_IN_PHY_DATA_SHIFT		(16)
1109484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_IN_PHY_DATA_MASK		(0xffffu<<16)
1119484Sgarrett.damore@Sun.COM 
1129484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_SLOTREQ			(0x14)
1139484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_COUNTER			(0x18)
1149484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_IN_FIFO_THRESHOLD		(0x1c)
1159484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_IN_DMA_LINK_P			(0x20)
1169484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_IN_DMA_LINK_P_EN		(1u<<0)
1179484Sgarrett.damore@Sun.COM 
1189484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_IN_DMA_DT_START		(0x24)
1199484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_IN_DMA_DT_NEXT		(0x28)
1209484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_IN_DMA_DT_CUR			(0x2c)
1219484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_IN_DT_SIZE_FIFO_INFO		(0x30)
1229484Sgarrett.damore@Sun.COM 
1239484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_DMA_SLOT_EN_THRESHOLD	(0x34)
1249484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_DMA_SLOT_3		(1U<<0)
1259484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_DMA_SLOT_4		(1U<<1)
1269484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_DMA_SLOT_5		(1U<<2)
1279484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_DMA_SLOT_6		(1U<<3)
1289484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_DMA_SLOT_7		(1U<<4)
1299484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_DMA_SLOT_8		(1U<<5)
1309484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_DMA_SLOT_9		(1U<<6)
1319484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_DMA_SLOT_10		(1U<<7)
1329484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_DMA_SLOT_11		(1U<<8)
1339484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_DMA_SLOT_12		(1U<<9)
1349484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_DMA_THRESHOLD_MASK	(0x7fU<<11)
1359484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_DMA_THRESHOLD_SHIFT	(11)
1369484Sgarrett.damore@Sun.COM 
1379484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_DMA_LINK_P		(0x38)
1389484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_DMA_LINK_P_EN		(1U<<0)
1399484Sgarrett.damore@Sun.COM 
1409484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_DMA_DT_START		(0x3c)
1419484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_DMA_DT_NEXT		(0x40)
1429484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_DMA_DT_CUR		(0x44)
1439484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_DT_SIZE_USED_FREE		(0x48)
1449484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_SPDIF_CMD			(0x4c)
1459484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_SPDIF_LINK_P			(0x50)
1469484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_SPDIF_DT_START		(0x54)
1479484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_SPDIF_DT_NEXT			(0x58)
1489484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_SPDIF_DT_CUR			(0x5c)
1499484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_SPDIF_DT_SIZE_FIFO_INFO	(0x60)
1509484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_MODEM_MIRROR			(0x7c)
1519484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_AUDIO_MIRROR			(0x80)
1529484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_6CH_RECORDER_EN		(0x84)
1539484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_FIFO_FLUSH		(0x88)
1549484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_FIFO_FLUSH_OUT		(1u<<0)
1559484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_FIFO_FLUSH_IN			(1u<<1)
1569484Sgarrett.damore@Sun.COM 
1579484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_OUT_FIFO_INFO		(0x8c)
1589484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_SPDIF_STATUS_BITS_REG1	(0x90)
1599484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_SPDIF_STATUS_BITS_REG2	(0x94)
1609484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_SPDIF_STATUS_BITS_REG3	(0x98)
1619484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_SPDIF_STATUS_BITS_REG4	(0x9c)
1629484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_SPDIF_STATUS_BITS_REG5	(0xa0)
1639484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_SPDIF_STATUS_BITS_REG6	(0xa4)
1649484Sgarrett.damore@Sun.COM #define	IXP_AUDIO_PHY_SEMA			(0xa8)
1659484Sgarrett.damore@Sun.COM 
1669484Sgarrett.damore@Sun.COM /*
1679484Sgarrett.damore@Sun.COM  * AC97 status and link control registers are located
1689484Sgarrett.damore@Sun.COM  * in PCI configuration space.
1699484Sgarrett.damore@Sun.COM  */
1709484Sgarrett.damore@Sun.COM #define	IXP_REG_GSR				0x40
1719484Sgarrett.damore@Sun.COM #define	IXP_REG_GCR				0x41
1729484Sgarrett.damore@Sun.COM 
1739484Sgarrett.damore@Sun.COM /* AC link interface status register */
1749484Sgarrett.damore@Sun.COM #define	IXP_GSR_PRI_READY			0x01
1759484Sgarrett.damore@Sun.COM #define	IXP_GSR_SEC_READY			0x04
1769484Sgarrett.damore@Sun.COM #define	IXP_GSR_TRI_READY			0x10
1779484Sgarrett.damore@Sun.COM #define	IXP_GSR_FOUR_READY			0x20
1789484Sgarrett.damore@Sun.COM 
1799484Sgarrett.damore@Sun.COM /* AC link interface control register */
1809484Sgarrett.damore@Sun.COM #define	IXP_GCR_ENAC97				0x80
1819484Sgarrett.damore@Sun.COM #define	IXP_GCR_RST				0x40
1829484Sgarrett.damore@Sun.COM #define	IXP_GCR_RSYNCHI				0x20
1839484Sgarrett.damore@Sun.COM #define	IXP_GCR_SDO				0x10
1849484Sgarrett.damore@Sun.COM #define	IXP_GCR_VSR				0x08
1859484Sgarrett.damore@Sun.COM #define	IXP_GCR_3D_AUDIO_CHANNEL		0x04
1869484Sgarrett.damore@Sun.COM 
1879484Sgarrett.damore@Sun.COM /*
1889484Sgarrett.damore@Sun.COM  * Macro for AD1980 codec
1899484Sgarrett.damore@Sun.COM  */
1909484Sgarrett.damore@Sun.COM #define	AD1980_VID1		0x4144
1919484Sgarrett.damore@Sun.COM #define	AD1980_VID2		0x5370
1929484Sgarrett.damore@Sun.COM #define	AD1985_VID2		0x5375
1939484Sgarrett.damore@Sun.COM #define	CODEC_AD_REG_MISC	0x76	/* offset of ad1980 misc control reg */
1949484Sgarrett.damore@Sun.COM #define	AD1980_MISC_LOSEL	0x0020	/* Line-out amplifier output selector */
1959484Sgarrett.damore@Sun.COM #define	AD1980_MISC_HPSEL	0x0400	/* HP-out amplifier output selector */
1969484Sgarrett.damore@Sun.COM 
1979484Sgarrett.damore@Sun.COM struct audioixp_port {
1989484Sgarrett.damore@Sun.COM 	int			num;
1999484Sgarrett.damore@Sun.COM 	struct audioixp_state	*statep;
2009484Sgarrett.damore@Sun.COM 	ddi_dma_handle_t	samp_dmah;
2019484Sgarrett.damore@Sun.COM 	ddi_acc_handle_t	samp_acch;
2029484Sgarrett.damore@Sun.COM 	size_t			samp_size;
2039484Sgarrett.damore@Sun.COM 	caddr_t			samp_kaddr;
2049484Sgarrett.damore@Sun.COM 	uint32_t		samp_paddr;
2059484Sgarrett.damore@Sun.COM 
2069484Sgarrett.damore@Sun.COM 	ddi_dma_handle_t	bdl_dmah;
2079484Sgarrett.damore@Sun.COM 	ddi_acc_handle_t	bdl_acch;
2089484Sgarrett.damore@Sun.COM 	size_t			bdl_size;
2099484Sgarrett.damore@Sun.COM 	caddr_t			bdl_kaddr;
2109484Sgarrett.damore@Sun.COM 	uint32_t		bdl_paddr;
2119484Sgarrett.damore@Sun.COM 
212*11936Sgdamore@opensolaris.org 	unsigned		nframes;
2139484Sgarrett.damore@Sun.COM 	unsigned		fragfr;
2149484Sgarrett.damore@Sun.COM 	unsigned		fragsz;
2159484Sgarrett.damore@Sun.COM 	uint64_t		count;
2169484Sgarrett.damore@Sun.COM 	uint32_t		offset;
2179484Sgarrett.damore@Sun.COM 	uint8_t			nchan;
2189484Sgarrett.damore@Sun.COM 
2199484Sgarrett.damore@Sun.COM 	unsigned		sync_dir;
2209484Sgarrett.damore@Sun.COM 
2219484Sgarrett.damore@Sun.COM 	boolean_t		started;
2229484Sgarrett.damore@Sun.COM 
2239484Sgarrett.damore@Sun.COM 	audio_engine_t		*engine;
2249484Sgarrett.damore@Sun.COM };
2259484Sgarrett.damore@Sun.COM typedef struct audioixp_port audioixp_port_t;
2269484Sgarrett.damore@Sun.COM 
2279484Sgarrett.damore@Sun.COM /*
2289484Sgarrett.damore@Sun.COM  * buffer descriptor list entry, see datasheet
2299484Sgarrett.damore@Sun.COM  */
2309484Sgarrett.damore@Sun.COM struct audioixp_bd_entry {
2319484Sgarrett.damore@Sun.COM 	uint32_t	buf_base;	/* the address of the buffer */
2329484Sgarrett.damore@Sun.COM 	uint16_t	status;		/* status of the buffer */
2339484Sgarrett.damore@Sun.COM 	uint16_t	buf_len;	/* size of the buffer in DWORD */
2349484Sgarrett.damore@Sun.COM 	uint32_t	next;		/* physical addr of next bd_entry */
2359484Sgarrett.damore@Sun.COM };
2369484Sgarrett.damore@Sun.COM typedef struct	audioixp_bd_entry	audioixp_bd_entry_t;
2379484Sgarrett.damore@Sun.COM 
2389484Sgarrett.damore@Sun.COM /*
2399484Sgarrett.damore@Sun.COM  * audioixp_state_t	-per instance state and operation data
2409484Sgarrett.damore@Sun.COM  */
2419484Sgarrett.damore@Sun.COM struct audioixp_state {
2429484Sgarrett.damore@Sun.COM 	kmutex_t		inst_lock;	/* state protection lock */
2439484Sgarrett.damore@Sun.COM 	dev_info_t		*dip;
2449484Sgarrett.damore@Sun.COM 	audio_dev_t		*adev;		/* audio handle */
2459484Sgarrett.damore@Sun.COM 	ac97_t			*ac97;
2469484Sgarrett.damore@Sun.COM 	audioixp_port_t		*play_port;
2479484Sgarrett.damore@Sun.COM 	audioixp_port_t		*rec_port;
2489484Sgarrett.damore@Sun.COM 
2499484Sgarrett.damore@Sun.COM 	ddi_acc_handle_t	pcih;		/* pci configuration space */
2509484Sgarrett.damore@Sun.COM 	ddi_acc_handle_t	regsh;		/* for audio mixer register */
2519484Sgarrett.damore@Sun.COM 	caddr_t			regsp;		/* base of audio mixer regs */
2529484Sgarrett.damore@Sun.COM 
2539484Sgarrett.damore@Sun.COM 	boolean_t		suspended;
2549484Sgarrett.damore@Sun.COM 	boolean_t		swap_out;	/* swap line-out and sur-out */
2559484Sgarrett.damore@Sun.COM 
2569484Sgarrett.damore@Sun.COM 	uint32_t		ixp_codec_not_ready_bits; /* for codec detect */
2579484Sgarrett.damore@Sun.COM };
2589484Sgarrett.damore@Sun.COM typedef struct audioixp_state	 audioixp_state_t;
2599484Sgarrett.damore@Sun.COM 
2609484Sgarrett.damore@Sun.COM /*
2619484Sgarrett.damore@Sun.COM  * Useful bit twiddlers
2629484Sgarrett.damore@Sun.COM  */
2639484Sgarrett.damore@Sun.COM #define	GET32(reg)	\
2649484Sgarrett.damore@Sun.COM 	ddi_get32(statep->regsh, (void *)(statep->regsp + (reg)))
2659484Sgarrett.damore@Sun.COM 
2669484Sgarrett.damore@Sun.COM #define	PUT32(reg, val)	\
2679484Sgarrett.damore@Sun.COM 	ddi_put32(statep->regsh, (void *)(statep->regsp + (reg)), (val))
2689484Sgarrett.damore@Sun.COM 
2699484Sgarrett.damore@Sun.COM #define	SET32(reg, val)	PUT32(reg, GET32(reg) | ((uint32_t)(val)))
2709484Sgarrett.damore@Sun.COM 
2719484Sgarrett.damore@Sun.COM #define	CLR32(reg, val)	PUT32(reg, GET32(reg) & ~((uint32_t)(val)))
2729484Sgarrett.damore@Sun.COM 
2739484Sgarrett.damore@Sun.COM #define	IXP_INTS		(175)	/* default interrupt rate */
2749484Sgarrett.damore@Sun.COM #define	IXP_MIN_INTS		(24)	/* minimum interrupt rate */
2759484Sgarrett.damore@Sun.COM #define	IXP_MAX_INTS		(500)	/* maximum interrupt rate */
2769484Sgarrett.damore@Sun.COM 
2779484Sgarrett.damore@Sun.COM #endif /* _AUDIOIXP_H_ */
278