188447a05SGarrett D'Amore /* 288447a05SGarrett D'Amore * CDDL HEADER START 388447a05SGarrett D'Amore * 488447a05SGarrett D'Amore * The contents of this file are subject to the terms of the 588447a05SGarrett D'Amore * Common Development and Distribution License (the "License"). 688447a05SGarrett D'Amore * You may not use this file except in compliance with the License. 788447a05SGarrett D'Amore * 888447a05SGarrett D'Amore * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 988447a05SGarrett D'Amore * or http://www.opensolaris.org/os/licensing. 1088447a05SGarrett D'Amore * See the License for the specific language governing permissions 1188447a05SGarrett D'Amore * and limitations under the License. 1288447a05SGarrett D'Amore * 1388447a05SGarrett D'Amore * When distributing Covered Code, include this CDDL HEADER in each 1488447a05SGarrett D'Amore * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1588447a05SGarrett D'Amore * If applicable, add the following below this CDDL HEADER, with the 1688447a05SGarrett D'Amore * fields enclosed by brackets "[]" replaced with your own identifying 1788447a05SGarrett D'Amore * information: Portions Copyright [yyyy] [name of copyright owner] 1888447a05SGarrett D'Amore * 1988447a05SGarrett D'Amore * CDDL HEADER END 2088447a05SGarrett D'Amore */ 2188447a05SGarrett D'Amore /* 22b96a6eceSZhao Edgar Liu - Sun Microsystems * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. 2388447a05SGarrett D'Amore */ 2488447a05SGarrett D'Amore #ifndef _SYS_AUDIOHD_IMPL_H_ 2588447a05SGarrett D'Amore #define _SYS_AUDIOHD_IMPL_H_ 2688447a05SGarrett D'Amore 2788447a05SGarrett D'Amore #ifdef __cplusplus 2888447a05SGarrett D'Amore extern "C" { 2988447a05SGarrett D'Amore #endif 3088447a05SGarrett D'Amore 3188447a05SGarrett D'Amore /* 3288447a05SGarrett D'Amore * vendor IDs of PCI audio controllers 3388447a05SGarrett D'Amore */ 3488447a05SGarrett D'Amore #define AUDIOHD_VID_ATI 0x1002 350c240c64SZhao Edgar Liu - Sun Microsystems #define AUDIOHD_VID_CIRRUS 0x1013 3688447a05SGarrett D'Amore #define AUDIOHD_VID_NVIDIA 0x10de 3789e1f902SZhao Edgar Liu - Sun Microsystems #define AUDIOHD_VID_REALTEK 0x10ec 3870feb41cSZhao Edgar Liu - Sun Microsystems #define AUDIOHD_VID_CREATIVE 0x1102 3926ae4a35SZhao Edgar Liu - Sun Microsystems #define AUDIOHD_VID_IDT 0x111d 4007bec7ccSZhao Edgar Liu - Sun Microsystems #define AUDIOHD_VID_ANALOG 0x11d4 410c240c64SZhao Edgar Liu - Sun Microsystems #define AUDIOHD_VID_CONEXANT 0x14f1 4242c41cf8Slipeng sang - Sun Microsystems - Beijing China #define AUDIOHD_VID_SIGMATEL 0x8384 4326ae4a35SZhao Edgar Liu - Sun Microsystems #define AUDIOHD_VID_INTEL 0x8086 4488447a05SGarrett D'Amore 4588447a05SGarrett D'Amore /* 4689e1f902SZhao Edgar Liu - Sun Microsystems * specific audiohd controller device id 4789e1f902SZhao Edgar Liu - Sun Microsystems */ 4889e1f902SZhao Edgar Liu - Sun Microsystems #define AUDIOHD_CONTROLLER_MCP51 0x10de026c 4989e1f902SZhao Edgar Liu - Sun Microsystems 5089e1f902SZhao Edgar Liu - Sun Microsystems /* 51cbe6566fSZhao Edgar Liu - Sun Microsystems * codec special initial flags 5288447a05SGarrett D'Amore */ 53cbe6566fSZhao Edgar Liu - Sun Microsystems #define NO_GPIO 0x00000001 54cbe6566fSZhao Edgar Liu - Sun Microsystems #define NO_MIXER 0x00000002 55cbe6566fSZhao Edgar Liu - Sun Microsystems #define NO_SPDIF 0x00000004 56ee97b734SZhao Edgar Liu - Sun Microsystems #define EN_PIN_BEEP 0x00000008 5788447a05SGarrett D'Amore 5888447a05SGarrett D'Amore #define AUDIOHD_DEV_CONFIG "onboard1" 5988447a05SGarrett D'Amore #define AUDIOHD_DEV_VERSION "a" 6088447a05SGarrett D'Amore 6188447a05SGarrett D'Amore /* 6288447a05SGarrett D'Amore * Only for Intel hardware: 6388447a05SGarrett D'Amore * PCI Express traffic class select register in PCI configure space 6488447a05SGarrett D'Amore */ 6588447a05SGarrett D'Amore #define AUDIOHD_INTEL_PCI_TCSEL 0x44 66b96a6eceSZhao Edgar Liu - Sun Microsystems #define AUDIOHD_INTEL_TCS_MASK 0xf8 6788447a05SGarrett D'Amore 6888447a05SGarrett D'Amore /* 6988447a05SGarrett D'Amore * Only for ATI SB450: 7088447a05SGarrett D'Amore * MISC control register 2 7188447a05SGarrett D'Amore */ 7288447a05SGarrett D'Amore #define AUDIOHD_ATI_PCI_MISC2 0x42 73b96a6eceSZhao Edgar Liu - Sun Microsystems #define AUDIOHD_ATI_MISC2_MASK 0xf8 7488447a05SGarrett D'Amore #define AUDIOHD_ATI_MISC2_SNOOP 0x02 75b96a6eceSZhao Edgar Liu - Sun Microsystems 76b96a6eceSZhao Edgar Liu - Sun Microsystems /* NVIDIA snoop */ 77b96a6eceSZhao Edgar Liu - Sun Microsystems #define AUDIOHD_NVIDIA_SNOOP 0x0f 78b96a6eceSZhao Edgar Liu - Sun Microsystems 7988447a05SGarrett D'Amore #define AUDIOHDC_NID(x) x 8088447a05SGarrett D'Amore #define AUDIOHDC_NULL_NODE -1 8188447a05SGarrett D'Amore #define AUDIOHD_NULL_CONN ((uint_t)(-1)) 8288447a05SGarrett D'Amore 8388447a05SGarrett D'Amore #define AUDIOHD_EXT_AMP_MASK 0x00010000 8488447a05SGarrett D'Amore #define AUDIOHD_EXT_AMP_ENABLE 0x02 8588447a05SGarrett D'Amore 8688447a05SGarrett D'Amore /* Power On/Off */ 8788447a05SGarrett D'Amore #define AUDIOHD_PW_D0 0 8888447a05SGarrett D'Amore #define AUDIOHD_PW_D2 2 8988447a05SGarrett D'Amore 9088447a05SGarrett D'Amore /* Pin speaker On/Off */ 9188447a05SGarrett D'Amore #define AUDIOHD_SP_ON 1 9288447a05SGarrett D'Amore #define AUDIOHD_SP_OFF 0 9388447a05SGarrett D'Amore 9488447a05SGarrett D'Amore #define AUDIOHD_PORT_MAX 15 9588447a05SGarrett D'Amore #define AUDIOHD_CODEC_MAX 16 9688447a05SGarrett D'Amore #define AUDIOHD_MEMIO_LEN 0x4000 9788447a05SGarrett D'Amore 9888447a05SGarrett D'Amore #define AUDIOHD_RETRY_TIMES 60 9988447a05SGarrett D'Amore #define AUDIOHD_TEST_TIMES 500 10088447a05SGarrett D'Amore #define AUDIOHD_OUTSTR_NUM_OFF 12 10188447a05SGarrett D'Amore #define AUDIOHD_INSTR_NUM_OFF 8 10288447a05SGarrett D'Amore 10388447a05SGarrett D'Amore #define AUDIOHD_CORB_SIZE_OFF 0x4e 10488447a05SGarrett D'Amore 10588447a05SGarrett D'Amore #define AUDIOHD_URCAP_MASK 0x80 10688447a05SGarrett D'Amore #define AUDIOHD_DTCCAP_MASK 0x4 10788447a05SGarrett D'Amore #define AUDIOHD_UR_ENABLE_OFF 8 108989b958fSZhao Edgar Liu - Sun Microsystems #define AUDIOHD_UR_TAG_MASK 0x3f 10988447a05SGarrett D'Amore 11088447a05SGarrett D'Amore #define AUDIOHD_CIS_MASK 0x40000000 11188447a05SGarrett D'Amore 11288447a05SGarrett D'Amore #define AUDIOHD_RIRB_UR_MASK 0x10 11388447a05SGarrett D'Amore #define AUDIOHD_RIRB_CODEC_MASK 0xf 11488447a05SGarrett D'Amore #define AUDIOHD_RIRB_WID_OFF 27 11588447a05SGarrett D'Amore #define AUDIOHD_RIRB_INTRCNT 0x0 11688447a05SGarrett D'Amore #define AUDIOHD_RIRB_WPMASK 0xff 11788447a05SGarrett D'Amore 11888447a05SGarrett D'Amore #define AUDIOHD_FORM_MASK 0x0080 11988447a05SGarrett D'Amore #define AUDIOHD_LEN_MASK 0x007f 12088447a05SGarrett D'Amore #define AUDIOHD_PIN_CAP_MASK 0x00000010 12188447a05SGarrett D'Amore #define AUDIOHD_PIN_CONF_MASK 0xc0000000 12288447a05SGarrett D'Amore #define AUDIOHD_PIN_CON_MASK 3 12388447a05SGarrett D'Amore #define AUDIOHD_PIN_CON_STEP 30 12488447a05SGarrett D'Amore #define AUDIOHD_PIN_IO_MASK 0X0018 12588447a05SGarrett D'Amore #define AUDIOHD_PIN_SEQ_MASK 0x0000000f 12688447a05SGarrett D'Amore #define AUDIOHD_PIN_ASO_MASK 0x000000f0 12788447a05SGarrett D'Amore #define AUDIOHD_PIN_ASO_OFF 0x4 12888447a05SGarrett D'Amore #define AUDIOHD_PIN_DEV_MASK 0x00f00000 12988447a05SGarrett D'Amore #define AUDIOHD_PIN_DEV_OFF 20 13088447a05SGarrett D'Amore #define AUDIOHD_PIN_NUMS 6 13188447a05SGarrett D'Amore #define AUDIOHD_PIN_NO_CONN 0x40000000 13288447a05SGarrett D'Amore #define AUDIOHD_PIN_IN_ENABLE 0x20 13388447a05SGarrett D'Amore #define AUDIOHD_PIN_OUT_ENABLE 0x40 134989b958fSZhao Edgar Liu - Sun Microsystems #define AUDIOHD_PIN_PRES_MASK 0x80000000 13588447a05SGarrett D'Amore #define AUDIOHD_PIN_CONTP_OFF 0x1e 13688447a05SGarrett D'Amore #define AUDIOHD_PIN_CON_JACK 0 13788447a05SGarrett D'Amore #define AUDIOHD_PIN_CON_FIXED 0x2 13888447a05SGarrett D'Amore #define AUDIOHD_PIN_CONTP_MASK 0x3 13988447a05SGarrett D'Amore #define AUDIOHD_PIN_VREF_L1 0x20 14088447a05SGarrett D'Amore #define AUDIOHD_PIN_VREF_L2 0x10 14188447a05SGarrett D'Amore #define AUDIOHD_PIN_VREF_L3 0x04 14288447a05SGarrett D'Amore #define AUDIOHD_PIN_VREF_L4 0x02 14388447a05SGarrett D'Amore #define AUDIOHD_PIN_VREF_OFF 8 14488447a05SGarrett D'Amore #define AUDIOHD_PIN_VREF_MASK 0xff 14588447a05SGarrett D'Amore #define AUDIOHD_PIN_CLR_MASK 0xf 14688447a05SGarrett D'Amore #define AUDIOHD_PIN_CLR_OFF 12 14788447a05SGarrett D'Amore 14888447a05SGarrett D'Amore #define AUDIOHD_VERB_ADDR_OFF 28 14988447a05SGarrett D'Amore #define AUDIOHD_VERB_NID_OFF 20 15088447a05SGarrett D'Amore #define AUDIOHD_VERB_CMD_OFF 8 15188447a05SGarrett D'Amore #define AUDIOHD_VERB_CMD16_OFF 16 15288447a05SGarrett D'Amore 15388447a05SGarrett D'Amore #define AUDIOHD_RING_MAX_SIZE 0x00ff 15488447a05SGarrett D'Amore #define AUDIOHD_REC_TAG_OFF 4 15588447a05SGarrett D'Amore #define AUDIOHD_PLAY_TAG_OFF 4 15688447a05SGarrett D'Amore #define AUDIOHD_PLAY_CTL_OFF 2 15788447a05SGarrett D'Amore #define AUDIOHD_REC_CTL_OFF 2 15888447a05SGarrett D'Amore 15988447a05SGarrett D'Amore #define AUDIOHD_SPDIF_ON 1 16088447a05SGarrett D'Amore #define AUDIOHD_SPDIF_MASK 0x00ff 16188447a05SGarrett D'Amore 16288447a05SGarrett D'Amore #define AUDIOHD_GAIN_OFF 8 16388447a05SGarrett D'Amore 16488447a05SGarrett D'Amore #define AUDIOHD_CODEC_STR_OFF 16 16588447a05SGarrett D'Amore #define AUDIOHD_CODEC_STR_MASK 0x000000ff 16688447a05SGarrett D'Amore #define AUDIOHD_CODEC_NUM_MASK 0x000000ff 16788447a05SGarrett D'Amore #define AUDIOHD_CODEC_TYPE_MASK 0x000000ff 16888447a05SGarrett D'Amore 1690c240c64SZhao Edgar Liu - Sun Microsystems #define AUDIOHD_ROUNDUP(x, algn) (((x) + ((algn) - 1)) & ~((algn) - 1)) 17088447a05SGarrett D'Amore #define AUDIOHD_BDLE_BUF_ALIGN 128 17188447a05SGarrett D'Amore #define AUDIOHD_CMDIO_ENT_MASK 0x00ff /* 256 entries for CORB/RIRB */ 17288447a05SGarrett D'Amore #define AUDIOHD_CDBIO_CORB_LEN 1024 /* 256 entries for CORB, 1024B */ 17388447a05SGarrett D'Amore #define AUDIOHD_CDBIO_RIRB_LEN 2048 /* 256 entries for RIRB, 2048B */ 17488447a05SGarrett D'Amore #define AUDIOHD_BDLE_NUMS 4 /* 4 entires for record/play BD list */ 17588447a05SGarrett D'Amore 17688447a05SGarrett D'Amore #define AUDIOHD_PORT_UNMUTE (0xffffffff) 17788447a05SGarrett D'Amore 17888447a05SGarrett D'Amore /* 17988447a05SGarrett D'Amore * Audio registers of high definition 18088447a05SGarrett D'Amore */ 18188447a05SGarrett D'Amore #define AUDIOHD_REG_GCAP 0x00 18288447a05SGarrett D'Amore #define AUDIOHDR_GCAP_OUTSTREAMS 0xf000 18388447a05SGarrett D'Amore #define AUDIOHDR_GCAP_INSTREAMS 0x0f00 18488447a05SGarrett D'Amore #define AUDIOHDR_GCAP_BSTREAMS 0x00f8 18588447a05SGarrett D'Amore #define AUDIOHDR_GCAP_NSDO 0x0006 18688447a05SGarrett D'Amore #define AUDIOHDR_GCAP_64OK 0x0001 18788447a05SGarrett D'Amore 18888447a05SGarrett D'Amore #define AUDIOHD_REG_VMIN 0x02 18988447a05SGarrett D'Amore #define AUDIOHD_REG_VMAJ 0x03 19088447a05SGarrett D'Amore #define AUDIOHD_REG_OUTPAY 0x04 19188447a05SGarrett D'Amore #define AUDIOHD_REG_INPAY 0x06 19288447a05SGarrett D'Amore #define AUDIOHD_REG_GCTL 0x08 19388447a05SGarrett D'Amore #define AUDIOHD_REG_WAKEEN 0x0C 19488447a05SGarrett D'Amore #define AUDIOHD_REG_STATESTS 0x0E 19588447a05SGarrett D'Amore #define AUDIOHD_STATESTS_BIT_SDINS 0x7F 19688447a05SGarrett D'Amore 19788447a05SGarrett D'Amore #define AUDIOHD_REG_GSTS 0x10 19888447a05SGarrett D'Amore #define AUDIOHD_REG_INTCTL 0x20 19988447a05SGarrett D'Amore #define AUDIOHD_INTCTL_BIT_GIE 0x80000000 20088447a05SGarrett D'Amore #define AUDIOHD_INTCTL_BIT_CIE 0x40000000 20188447a05SGarrett D'Amore #define AUDIOHD_INTCTL_BIT_SIE 0x3FFFFFFF 20288447a05SGarrett D'Amore 20388447a05SGarrett D'Amore 20488447a05SGarrett D'Amore #define AUDIOHD_REG_INTSTS 0x24 20588447a05SGarrett D'Amore #define AUDIOHD_INTSTS_BIT_GIS 0x80000000 20688447a05SGarrett D'Amore #define AUDIOHD_INTSTS_BIT_CIS 0x40000000 20788447a05SGarrett D'Amore #define AUDIOHD_INTSTS_BIT_SINTS (0x3fffffff) 20888447a05SGarrett D'Amore 20988447a05SGarrett D'Amore #define AUDIOHD_REG_WALCLK 0x30 21088447a05SGarrett D'Amore #define AUDIOHD_REG_SYNC 0x38 21188447a05SGarrett D'Amore 21288447a05SGarrett D'Amore #define AUDIOHD_REG_CORBLBASE 0x40 21388447a05SGarrett D'Amore #define AUDIOHD_REG_CORBUBASE 0x44 21488447a05SGarrett D'Amore #define AUDIOHD_REG_CORBWP 0x48 21588447a05SGarrett D'Amore #define AUDIOHD_REG_CORBRP 0x4A 21688447a05SGarrett D'Amore #define AUDIOHD_REG_CORBCTL 0x4C 21788447a05SGarrett D'Amore #define AUDIOHD_REG_CORBST 0x4D 21888447a05SGarrett D'Amore #define AUDIOHD_REG_CORBSIZE 0x4E 21988447a05SGarrett D'Amore 22088447a05SGarrett D'Amore #define AUDIOHD_REG_RIRBLBASE 0x50 22188447a05SGarrett D'Amore #define AUDIOHD_REG_RIRBUBASE 0x54 22288447a05SGarrett D'Amore #define AUDIOHD_REG_RIRBWP 0x58 22388447a05SGarrett D'Amore #define AUDIOHD_REG_RINTCNT 0x5A 22488447a05SGarrett D'Amore #define AUDIOHD_REG_RIRBCTL 0x5C 22588447a05SGarrett D'Amore #define AUDIOHD_REG_RIRBSTS 0x5D 22688447a05SGarrett D'Amore #define AUDIOHD_REG_RIRBSIZE 0x5E 22788447a05SGarrett D'Amore 22888447a05SGarrett D'Amore #define AUDIOHD_REG_IC 0x60 22988447a05SGarrett D'Amore #define AUDIOHD_REG_IR 0x64 23088447a05SGarrett D'Amore #define AUDIOHD_REG_IRS 0x68 23188447a05SGarrett D'Amore #define AUDIOHD_REG_DPLBASE 0x70 23288447a05SGarrett D'Amore #define AUDIOHD_REG_DPUBASE 0x74 23388447a05SGarrett D'Amore 23488447a05SGarrett D'Amore #define AUDIOHD_REG_SD_BASE 0x80 23588447a05SGarrett D'Amore #define AUDIOHD_REG_SD_LEN 0x20 23688447a05SGarrett D'Amore 23788447a05SGarrett D'Amore /* 23888447a05SGarrett D'Amore * Offset of Stream Descriptor Registers 23988447a05SGarrett D'Amore */ 24088447a05SGarrett D'Amore #define AUDIOHD_SDREG_OFFSET_CTL 0x00 24188447a05SGarrett D'Amore #define AUDIOHD_SDREG_OFFSET_STS 0x03 24288447a05SGarrett D'Amore #define AUDIOHD_SDREG_OFFSET_LPIB 0x04 24388447a05SGarrett D'Amore #define AUDIOHD_SDREG_OFFSET_CBL 0x08 24488447a05SGarrett D'Amore #define AUDIOHD_SDREG_OFFSET_LVI 0x0c 24588447a05SGarrett D'Amore #define AUDIOHD_SDREG_OFFSET_FIFOW 0x0e 24688447a05SGarrett D'Amore #define AUDIOHD_SDREG_OFFSET_FIFOSIZE 0x10 24788447a05SGarrett D'Amore #define AUDIOHD_SDREG_OFFSET_FORMAT 0x12 24888447a05SGarrett D'Amore #define AUDIOHD_SDREG_OFFSET_BDLPL 0x18 24988447a05SGarrett D'Amore #define AUDIOHD_SDREG_OFFSET_BDLPU 0x1c 25088447a05SGarrett D'Amore 25188447a05SGarrett D'Amore /* bits for stream descriptor control reg */ 25288447a05SGarrett D'Amore #define AUDIOHDR_SD_CTL_DEIE 0x000010 25388447a05SGarrett D'Amore #define AUDIOHDR_SD_CTL_FEIE 0x000008 25488447a05SGarrett D'Amore #define AUDIOHDR_SD_CTL_IOCE 0x000004 25588447a05SGarrett D'Amore #define AUDIOHDR_SD_CTL_SRUN 0x000002 25688447a05SGarrett D'Amore #define AUDIOHDR_SD_CTL_SRST 0x000001 25788447a05SGarrett D'Amore 25888447a05SGarrett D'Amore /* bits for stream descriptor status register */ 25988447a05SGarrett D'Amore #define AUDIOHDR_SD_STS_BCIS 0x0004 26088447a05SGarrett D'Amore #define AUDIOHDR_SD_STS_FIFOE 0x0008 26188447a05SGarrett D'Amore #define AUDIOHDR_SD_STS_DESE 0x0010 26288447a05SGarrett D'Amore #define AUDIOHDR_SD_STS_FIFORY 0x0020 26388447a05SGarrett D'Amore #define AUDIOHDR_SD_STS_INTRS \ 26488447a05SGarrett D'Amore (AUDIOHDR_SD_STS_BCIS | \ 26588447a05SGarrett D'Amore AUDIOHDR_SD_STS_FIFOE | \ 26688447a05SGarrett D'Amore AUDIOHDR_SD_STS_DESE) 26788447a05SGarrett D'Amore 26888447a05SGarrett D'Amore /* bits for GCTL register */ 26988447a05SGarrett D'Amore #define AUDIOHDR_GCTL_CRST 0x00000001 27088447a05SGarrett D'Amore #define AUDIOHDR_GCTL_URESPE 0x00000100 27188447a05SGarrett D'Amore 27288447a05SGarrett D'Amore /* bits for CORBRP register */ 27388447a05SGarrett D'Amore #define AUDIOHDR_CORBRP_RESET 0x8000 27488447a05SGarrett D'Amore #define AUDIOHDR_CORBRP_WPTR 0x00ff 27588447a05SGarrett D'Amore 27688447a05SGarrett D'Amore /* bits for CORBCTL register */ 27788447a05SGarrett D'Amore #define AUDIOHDR_CORBCTL_CMEIE 0x01 27888447a05SGarrett D'Amore #define AUDIOHDR_CORBCTL_DMARUN 0x02 27988447a05SGarrett D'Amore 28088447a05SGarrett D'Amore /* bits for CORB SIZE register */ 28188447a05SGarrett D'Amore #define AUDIOHDR_CORBSZ_8 0 28288447a05SGarrett D'Amore #define AUDIOHDR_CORBSZ_16 1 28388447a05SGarrett D'Amore #define AUDIOHDR_CORBSZ_256 2 28488447a05SGarrett D'Amore 28588447a05SGarrett D'Amore /* bits for RIRBCTL register */ 28688447a05SGarrett D'Amore #define AUDIOHDR_RIRBCTL_RINTCTL 0x01 28788447a05SGarrett D'Amore #define AUDIOHDR_RIRBCTL_DMARUN 0x02 28888447a05SGarrett D'Amore #define AUDIOHDR_RIRBCTL_RIRBOIC 0x04 28988447a05SGarrett D'Amore #define AUDIOHDR_RIRBCTL_RSTINT 0xfe 29088447a05SGarrett D'Amore 29188447a05SGarrett D'Amore /* bits for RIRBWP register */ 29288447a05SGarrett D'Amore #define AUDIOHDR_RIRBWP_RESET 0x8000 29388447a05SGarrett D'Amore #define AUDIOHDR_RIRBWP_WPTR 0x00ff 29488447a05SGarrett D'Amore 29588447a05SGarrett D'Amore /* bits for RIRB SIZE register */ 29688447a05SGarrett D'Amore #define AUDIOHDR_RIRBSZ_8 0 29788447a05SGarrett D'Amore #define AUDIOHDR_RIRBSZ_16 1 29888447a05SGarrett D'Amore #define AUDIOHDR_RIRBSZ_256 2 29988447a05SGarrett D'Amore 30088447a05SGarrett D'Amore #define AUDIOHD_BDLE_RIRB_SDI 0x0000000f 30188447a05SGarrett D'Amore #define AUDIOHD_BDLE_RIRB_UNSOLICIT 0x00000010 30288447a05SGarrett D'Amore 30388447a05SGarrett D'Amore /* HD spec: ID of Root node is 0 */ 30488447a05SGarrett D'Amore #define AUDIOHDC_NODE_ROOT 0x00 30588447a05SGarrett D'Amore 30688447a05SGarrett D'Amore /* HD spec: ID of audio function group is "1" */ 30788447a05SGarrett D'Amore #define AUDIOHDC_AUDIO_FUNC_GROUP 1 30888447a05SGarrett D'Amore 30988447a05SGarrett D'Amore /* 31088447a05SGarrett D'Amore * HD audio verbs can be either 12-bit or 4-bit in length. 31188447a05SGarrett D'Amore */ 31288447a05SGarrett D'Amore #define AUDIOHDC_12BIT_VERB_MASK 0xfffff000 31388447a05SGarrett D'Amore #define AUDIOHDC_4BIT_VERB_MASK 0xfffffff0 31488447a05SGarrett D'Amore 31542c41cf8Slipeng sang - Sun Microsystems - Beijing China #define AUDIOHDC_SAMPR48000 48000 31642c41cf8Slipeng sang - Sun Microsystems - Beijing China #define AUDIOHDC_MAX_BEEP_GEN 12000 31742c41cf8Slipeng sang - Sun Microsystems - Beijing China #define AUDIOHDC_MIX_BEEP_GEN 47 31842c41cf8Slipeng sang - Sun Microsystems - Beijing China #define AUDIOHDC_MUTE_BEEP_GEN 0x0 31942c41cf8Slipeng sang - Sun Microsystems - Beijing China 32088447a05SGarrett D'Amore /* 32188447a05SGarrett D'Amore * 12-bit verbs 32288447a05SGarrett D'Amore */ 32388447a05SGarrett D'Amore #define AUDIOHDC_VERB_GET_PARAM 0xf00 32488447a05SGarrett D'Amore 32588447a05SGarrett D'Amore #define AUDIOHDC_VERB_GET_CONN_SEL 0xf01 32688447a05SGarrett D'Amore #define AUDIOHDC_VERB_SET_CONN_SEL 0x701 32788447a05SGarrett D'Amore 32888447a05SGarrett D'Amore #define AUDIOHDC_VERB_GET_CONN_LIST_ENT 0xf02 32988447a05SGarrett D'Amore #define AUDIOHDC_VERB_GET_PROCESS_STATE 0xf03 33088447a05SGarrett D'Amore #define AUDIOHDC_VERB_GET_SDI_SEL 0xf04 33188447a05SGarrett D'Amore 33288447a05SGarrett D'Amore #define AUDIOHDC_VERB_GET_POWER_STATE 0xf05 33388447a05SGarrett D'Amore #define AUDIOHDC_VERB_SET_POWER_STATE 0x705 33488447a05SGarrett D'Amore 33588447a05SGarrett D'Amore #define AUDIOHDC_VERB_GET_STREAM_CHANN 0xf06 33688447a05SGarrett D'Amore #define AUDIOHDC_VERB_SET_STREAM_CHANN 0x706 33788447a05SGarrett D'Amore 33888447a05SGarrett D'Amore #define AUDIOHDC_VERB_GET_PIN_CTRL 0xf07 33988447a05SGarrett D'Amore #define AUDIOHDC_VERB_SET_PIN_CTRL 0x707 34088447a05SGarrett D'Amore 34188447a05SGarrett D'Amore #define AUDIOHDC_VERB_GET_UNS_ENABLE 0xf08 342989b958fSZhao Edgar Liu - Sun Microsystems #define AUDIOHDC_VERB_SET_UNS_ENABLE 0x708 34388447a05SGarrett D'Amore 34488447a05SGarrett D'Amore #define AUDIOHDC_VERB_GET_PIN_SENSE 0xf09 345989b958fSZhao Edgar Liu - Sun Microsystems #define AUDIOHDC_VERB_GET_PIN_SENSE 0xf09 34688447a05SGarrett D'Amore #define AUDIOHDC_VERB_EXEC_PIN_SENSE 0x709 34788447a05SGarrett D'Amore 34888447a05SGarrett D'Amore #define AUDIOHDC_VERB_GET_BEEP_GEN 0xf0a 34942c41cf8Slipeng sang - Sun Microsystems - Beijing China #define AUDIOHDC_VERB_SET_BEEP_GEN 0x70a 35088447a05SGarrett D'Amore 35188447a05SGarrett D'Amore #define AUDIOHDC_VERB_GET_EAPD 0xf0c 35288447a05SGarrett D'Amore #define AUDIOHDC_VERB_SET_EAPD 0x70c 35388447a05SGarrett D'Amore 35488447a05SGarrett D'Amore #define AUDIOHDC_VERB_GET_DEFAULT_CONF 0xf1c 35588447a05SGarrett D'Amore #define AUDIOHDC_VERB_GET_SPDIF_CTL 0xf0d 35688447a05SGarrett D'Amore #define AUDIOHDC_VERB_SET_SPDIF_LCL 0x70d 35788447a05SGarrett D'Amore 35888447a05SGarrett D'Amore #define AUDIOHDC_VERB_GET_GPIO_MASK 0xf16 35988447a05SGarrett D'Amore #define AUDIOHDC_VERB_SET_GPIO_MASK 0x716 36088447a05SGarrett D'Amore 361989b958fSZhao Edgar Liu - Sun Microsystems #define AUDIOHDC_VERB_GET_UNSOL_ENABLE_MASK 0xf19 362989b958fSZhao Edgar Liu - Sun Microsystems #define AUDIOHDC_VERB_SET_UNSOL_ENABLE_MASK 0x719 363989b958fSZhao Edgar Liu - Sun Microsystems 36488447a05SGarrett D'Amore #define AUDIOHDC_VERB_GET_GPIO_DIREC 0xf17 36588447a05SGarrett D'Amore #define AUDIOHDC_VERB_SET_GPIO_DIREC 0x717 36688447a05SGarrett D'Amore 36788447a05SGarrett D'Amore #define AUDIOHDC_VERB_GET_GPIO_DATA 0xf15 36888447a05SGarrett D'Amore #define AUDIOHDC_VERB_SET_GPIO_DATA 0x715 36988447a05SGarrett D'Amore 37088447a05SGarrett D'Amore #define AUDIOHDC_VERB_GET_GPIO_STCK 0xf1a 37188447a05SGarrett D'Amore #define AUDIOHDC_VERB_SET_GPIO_STCK 0x71a 37288447a05SGarrett D'Amore 37388447a05SGarrett D'Amore #define AUDIOHDC_GPIO_ENABLE 0xff 37488447a05SGarrett D'Amore #define AUDIOHDC_GPIO_DIRECT 0xf1 37588447a05SGarrett D'Amore 37688447a05SGarrett D'Amore #define AUDIOHDC_GPIO_DATA_CTRL 0xff 37788447a05SGarrett D'Amore #define AUDIOHDC_GPIO_STCK_CTRL 0xff 37888447a05SGarrett D'Amore /* 37988447a05SGarrett D'Amore * 4-bit verbs 38088447a05SGarrett D'Amore */ 38188447a05SGarrett D'Amore #define AUDIOHDC_VERB_GET_CONV_FMT 0xa 38288447a05SGarrett D'Amore #define AUDIOHDC_VERB_SET_CONV_FMT 0x2 38388447a05SGarrett D'Amore 38488447a05SGarrett D'Amore #define AUDIOHDC_VERB_GET_AMP_MUTE 0xb 38588447a05SGarrett D'Amore #define AUDIOHDC_VERB_SET_AMP_MUTE 0x3 38642c41cf8Slipeng sang - Sun Microsystems - Beijing China #define AUDIOHDC_VERB_SET_BEEP_VOL 0x3A0 38788447a05SGarrett D'Amore 38888447a05SGarrett D'Amore /* 38988447a05SGarrett D'Amore * parameters of nodes 39088447a05SGarrett D'Amore */ 39188447a05SGarrett D'Amore #define AUDIOHDC_PAR_VENDOR_ID 0x00 39288447a05SGarrett D'Amore #define AUDIOHDC_PAR_SUBSYS_ID 0x01 39388447a05SGarrett D'Amore #define AUDIOHDC_PAR_REV_ID 0x02 39488447a05SGarrett D'Amore #define AUDIOHDC_PAR_NODE_COUNT 0x04 39588447a05SGarrett D'Amore #define AUDIOHDC_PAR_FUNCTION_TYPE 0x05 39688447a05SGarrett D'Amore #define AUDIOHDC_PAR_AUDIO_FG_CAP 0x08 39788447a05SGarrett D'Amore #define AUDIOHDC_PAR_AUDIO_WID_CAP 0x09 39888447a05SGarrett D'Amore #define AUDIOHDC_PAR_PCM 0x0a 39988447a05SGarrett D'Amore #define AUDIOHDC_PAR_STREAM 0x0b 40088447a05SGarrett D'Amore #define AUDIOHDC_PAR_PIN_CAP 0x0c 40188447a05SGarrett D'Amore #define AUDIOHDC_PAR_INAMP_CAP 0x0d 40288447a05SGarrett D'Amore #define AUDIOHDC_PAR_CONNLIST_LEN 0x0e 40388447a05SGarrett D'Amore #define AUDIOHDC_PAR_POWER_STATE 0x0f 40488447a05SGarrett D'Amore #define AUDIOHDC_PAR_PROC_CAP 0x10 40588447a05SGarrett D'Amore #define AUDIOHDC_PAR_GPIO_CAP 0x11 40688447a05SGarrett D'Amore #define AUDIOHDC_PAR_OUTAMP_CAP 0x12 40788447a05SGarrett D'Amore 40888447a05SGarrett D'Amore /* 40988447a05SGarrett D'Amore * bits for get/set amplifier gain/mute 41088447a05SGarrett D'Amore */ 41188447a05SGarrett D'Amore #define AUDIOHDC_AMP_SET_OUTPUT 0x8000 41288447a05SGarrett D'Amore #define AUDIOHDC_AMP_SET_INPUT 0x4000 41388447a05SGarrett D'Amore #define AUDIOHDC_AMP_SET_LEFT 0x2000 41488447a05SGarrett D'Amore #define AUDIOHDC_AMP_SET_RIGHT 0x1000 41588447a05SGarrett D'Amore #define AUDIOHDC_AMP_SET_MUTE 0x0080 41688447a05SGarrett D'Amore #define AUDIOHDC_AMP_SET_LNR 0x3000 41788447a05SGarrett D'Amore #define AUDIOHDC_AMP_SET_LR_INPUT 0x7000 41888447a05SGarrett D'Amore #define AUDIOHDC_AMP_SET_LR_OUTPUT 0xb000 41988447a05SGarrett D'Amore #define AUDIOHDC_AMP_SET_INDEX_OFFSET 8 42088447a05SGarrett D'Amore #define AUDIOHDC_AMP_SET_GAIN_MASK 0x007f 42188447a05SGarrett D'Amore #define AUDIOHDC_GAIN_MAX 0x7f 42288447a05SGarrett D'Amore #define AUDIOHDC_GAIN_BITS 7 42388447a05SGarrett D'Amore #define AUDIOHDC_GAIN_DEFAULT 0x0f 42488447a05SGarrett D'Amore 42588447a05SGarrett D'Amore #define AUDIOHDC_AMP_GET_OUTPUT 0x8000 42688447a05SGarrett D'Amore #define AUDIOHDC_AMP_GET_INPUT 0x0000 42788447a05SGarrett D'Amore 42888447a05SGarrett D'Amore /* value used to set max volume for left output */ 42988447a05SGarrett D'Amore #define AUDIOHDC_AMP_LOUT_MAX \ 43088447a05SGarrett D'Amore (AUDIOHDC_AMP_SET_OUTPUT | \ 43188447a05SGarrett D'Amore AUDIOHDC_AMP_SET_LEFT | \ 43288447a05SGarrett D'Amore AUDIOHDC_GAIN_MAX) 43388447a05SGarrett D'Amore 43488447a05SGarrett D'Amore /* value used to set max volume for right output */ 43588447a05SGarrett D'Amore #define AUDIOHDC_AMP_ROUT_MAX \ 43688447a05SGarrett D'Amore (AUDIOHDC_AMP_SET_OUTPUT | \ 43788447a05SGarrett D'Amore AUDIOHDC_AMP_SET_RIGHT | \ 43888447a05SGarrett D'Amore AUDIOHDC_GAIN_MAX) 43988447a05SGarrett D'Amore 44088447a05SGarrett D'Amore 44188447a05SGarrett D'Amore /* 44288447a05SGarrett D'Amore * Bits for pin widget control verb 44388447a05SGarrett D'Amore */ 44488447a05SGarrett D'Amore #define AUDIOHDC_PIN_CONTROL_HP_ENABLE 0x80 44588447a05SGarrett D'Amore #define AUDIOHDC_PIN_CONTROL_OUT_ENABLE 0x40 44688447a05SGarrett D'Amore #define AUDIOHDC_PIN_CONTROL_IN_ENABLE 0x20 44788447a05SGarrett D'Amore 44888447a05SGarrett D'Amore /* 44988447a05SGarrett D'Amore * Bits for Amplifier capabilities 45088447a05SGarrett D'Amore */ 45188447a05SGarrett D'Amore #define AUDIOHDC_AMP_CAP_MUTE_CAP 0x80000000 45288447a05SGarrett D'Amore #define AUDIOHDC_AMP_CAP_STEP_SIZE 0x007f0000 45388447a05SGarrett D'Amore #define AUDIOHDC_AMP_CAP_STEP_NUMS 0x00007f00 45488447a05SGarrett D'Amore #define AUDIOHDC_AMP_CAP_0DB_OFFSET 0x0000007f 45588447a05SGarrett D'Amore 45688447a05SGarrett D'Amore 45788447a05SGarrett D'Amore /* 45888447a05SGarrett D'Amore * Bits for Audio Widget Capabilities 45988447a05SGarrett D'Amore */ 46088447a05SGarrett D'Amore #define AUDIOHD_WIDCAP_STEREO 0x00000001 46188447a05SGarrett D'Amore #define AUDIOHD_WIDCAP_INAMP 0x00000002 46288447a05SGarrett D'Amore #define AUDIOHD_WIDCAP_OUTAMP 0x00000004 46388447a05SGarrett D'Amore #define AUDIOHD_WIDCAP_AMP_OVRIDE 0x00000008 46488447a05SGarrett D'Amore #define AUDIOHD_WIDCAP_FMT_OVRIDE 0x00000010 46588447a05SGarrett D'Amore #define AUDIOHD_WIDCAP_STRIP 0x00000020 46688447a05SGarrett D'Amore #define AUDIOHD_WIDCAP_PROC_WID 0x00000040 46788447a05SGarrett D'Amore #define AUDIOHD_WIDCAP_UNSOL 0x00000080 46888447a05SGarrett D'Amore #define AUDIOHD_WIDCAP_CONNLIST 0x00000100 46988447a05SGarrett D'Amore #define AUDIOHD_WIDCAP_DIGIT 0x00000200 47088447a05SGarrett D'Amore #define AUDIOHD_WIDCAP_PWRCTRL 0x00000400 47188447a05SGarrett D'Amore #define AUDIOHD_WIDCAP_LRSWAP 0x00000800 47288447a05SGarrett D'Amore #define AUDIOHD_WIDCAP_TYPE 0x00f00000 47388447a05SGarrett D'Amore #define AUDIOHD_WIDCAP_TO_WIDTYPE(wcap) \ 47488447a05SGarrett D'Amore ((wcap & AUDIOHD_WIDCAP_TYPE) >> 20) 47588447a05SGarrett D'Amore 47688447a05SGarrett D'Amore #define AUDIOHD_CODEC_FAILURE (uint32_t)(-1) 47788447a05SGarrett D'Amore 478a33ad26eSZhao Edgar Liu - Sun Microsystems /* Higher sample/bits support */ 479a33ad26eSZhao Edgar Liu - Sun Microsystems #define AUDIOHD_BIT_DEPTH16 0x00020000 480a33ad26eSZhao Edgar Liu - Sun Microsystems #define AUDIOHD_BIT_DEPTH24 0x00080000 481a33ad26eSZhao Edgar Liu - Sun Microsystems #define AUDIOHD_SAMP_RATE48 0x00000040 482a33ad26eSZhao Edgar Liu - Sun Microsystems #define AUDIOHD_SAMP_RATE96 0x00000100 483a33ad26eSZhao Edgar Liu - Sun Microsystems #define AUDIOHD_SAMP_RATE192 0x00000400 484a33ad26eSZhao Edgar Liu - Sun Microsystems 48588447a05SGarrett D'Amore /* 48688447a05SGarrett D'Amore * buffer descriptor list entry of stream descriptor 48788447a05SGarrett D'Amore */ 48888447a05SGarrett D'Amore typedef struct { 48988447a05SGarrett D'Amore uint64_t sbde_addr; 49088447a05SGarrett D'Amore uint32_t sbde_len; 49188447a05SGarrett D'Amore uint32_t 49288447a05SGarrett D'Amore sbde_ioc: 1, 49388447a05SGarrett D'Amore reserved: 31; 49488447a05SGarrett D'Amore }sd_bdle_t; 49588447a05SGarrett D'Amore 49688447a05SGarrett D'Amore 49788447a05SGarrett D'Amore #define AUDIOHD_PLAY_STARTED 0x00000001 49888447a05SGarrett D'Amore #define AUDIOHD_PLAY_EMPTY 0x00000002 49988447a05SGarrett D'Amore #define AUDIOHD_PLAY_PAUSED 0x00000004 50088447a05SGarrett D'Amore #define AUDIOHD_RECORD_STARTED 0x00000008 50188447a05SGarrett D'Amore 50288447a05SGarrett D'Amore enum audiohda_widget_type { 50388447a05SGarrett D'Amore WTYPE_AUDIO_OUT = 0, 50488447a05SGarrett D'Amore WTYPE_AUDIO_IN, 50588447a05SGarrett D'Amore WTYPE_AUDIO_MIX, 50688447a05SGarrett D'Amore WTYPE_AUDIO_SEL, 50788447a05SGarrett D'Amore WTYPE_PIN, 50888447a05SGarrett D'Amore WTYPE_POWER, 50988447a05SGarrett D'Amore WTYPE_VOL_KNOB, 51088447a05SGarrett D'Amore WTYPE_BEEP, 51188447a05SGarrett D'Amore WTYPE_VENDOR = 0xf 51288447a05SGarrett D'Amore }; 51388447a05SGarrett D'Amore 51488447a05SGarrett D'Amore enum audiohda_device_type { 51588447a05SGarrett D'Amore DTYPE_LINEOUT = 0, 51688447a05SGarrett D'Amore DTYPE_SPEAKER, 51788447a05SGarrett D'Amore DTYPE_HP_OUT, 51888447a05SGarrett D'Amore DTYPE_CD, 51988447a05SGarrett D'Amore DTYPE_SPDIF_OUT, 52088447a05SGarrett D'Amore DTYPE_DIGIT_OUT, 52188447a05SGarrett D'Amore DTYPE_MODEM_SIDE, 52288447a05SGarrett D'Amore DTYPE_MODEM_HNAD_SIDE, 52388447a05SGarrett D'Amore DTYPE_LINE_IN, 52488447a05SGarrett D'Amore DTYPE_AUX, 52588447a05SGarrett D'Amore DTYPE_MIC_IN, 52688447a05SGarrett D'Amore DTYPE_TEL, 52788447a05SGarrett D'Amore DTYPE_SPDIF_IN, 52888447a05SGarrett D'Amore DTYPE_DIGIT_IN, 52988447a05SGarrett D'Amore DTYPE_OTHER = 0x0f, 53088447a05SGarrett D'Amore }; 53188447a05SGarrett D'Amore 53288447a05SGarrett D'Amore enum audiohd_pin_color { 53388447a05SGarrett D'Amore AUDIOHD_PIN_UNKNOWN = 0, 53488447a05SGarrett D'Amore AUDIOHD_PIN_BLACK, 53588447a05SGarrett D'Amore AUDIOHD_PIN_GREY, 53688447a05SGarrett D'Amore AUDIOHD_PIN_BLUE, 53788447a05SGarrett D'Amore AUDIOHD_PIN_GREEN, 53888447a05SGarrett D'Amore AUDIOHD_PIN_RED, 53988447a05SGarrett D'Amore AUDIOHD_PIN_ORANGE, 54088447a05SGarrett D'Amore AUDIOHD_PIN_YELLOW, 54188447a05SGarrett D'Amore AUDIOHD_PIN_PURPLE, 54288447a05SGarrett D'Amore AUDIOHD_PIN_PINK, 54388447a05SGarrett D'Amore AUDIOHD_PIN_WHITE = 0xe, 54488447a05SGarrett D'Amore AUDIOHD_PIN_OTHER = 0xf, 54588447a05SGarrett D'Amore }; 54688447a05SGarrett D'Amore 54788447a05SGarrett D'Amore /* values for audiohd_widget.path_flags */ 54888447a05SGarrett D'Amore #define AUDIOHD_PATH_DAC (1 << 0) 54988447a05SGarrett D'Amore #define AUDIOHD_PATH_ADC (1 << 1) 55088447a05SGarrett D'Amore #define AUDIOHD_PATH_MON (1 << 2) 55188447a05SGarrett D'Amore #define AUDIOHD_PATH_NOMON (1 << 3) 55242c41cf8Slipeng sang - Sun Microsystems - Beijing China #define AUDIOHD_PATH_BEEP (1 << 4) 553*e7236f70SZhao Edgar Liu - Sun Microsystems #define AUDIOHD_PATH_LOOPBACK (1 << 5) 55488447a05SGarrett D'Amore 55588447a05SGarrett D'Amore typedef struct audiohd_path audiohd_path_t; 55688447a05SGarrett D'Amore typedef struct audiohd_widget audiohd_widget_t; 55788447a05SGarrett D'Amore typedef struct audiohd_state audiohd_state_t; 558cbe6566fSZhao Edgar Liu - Sun Microsystems typedef struct audiohd_codec_info audiohd_codec_info_t; 55988447a05SGarrett D'Amore typedef struct audiohd_pin audiohd_pin_t; 56088447a05SGarrett D'Amore typedef struct hda_codec hda_codec_t; 56188447a05SGarrett D'Amore typedef uint32_t wid_t; /* id of widget */ 56288447a05SGarrett D'Amore typedef struct audiohd_entry_prop audiohd_entry_prop_t; 56388447a05SGarrett D'Amore typedef enum audiohda_device_type audiohda_device_type_t; 56488447a05SGarrett D'Amore typedef enum audiohd_pin_color audiohd_pin_color_t; 56588447a05SGarrett D'Amore 56688447a05SGarrett D'Amore #define AUDIOHD_MAX_WIDGET 128 56788447a05SGarrett D'Amore #define AUDIOHD_MAX_CONN 16 56888447a05SGarrett D'Amore #define AUDIOHD_MAX_PINS 16 56988447a05SGarrett D'Amore #define AUDIOHD_MAX_DEPTH 8 57088447a05SGarrett D'Amore 57188447a05SGarrett D'Amore struct audiohd_entry_prop { 57288447a05SGarrett D'Amore uint32_t conn_len; 57388447a05SGarrett D'Amore uint32_t mask_range; 57488447a05SGarrett D'Amore uint32_t mask_wid; 57588447a05SGarrett D'Amore wid_t input_wid; 57688447a05SGarrett D'Amore int conns_per_entry; 57788447a05SGarrett D'Amore int bits_per_conn; 57888447a05SGarrett D'Amore }; 57988447a05SGarrett D'Amore struct audiohd_widget { 58088447a05SGarrett D'Amore wid_t wid_wid; 58188447a05SGarrett D'Amore hda_codec_t *codec; 58288447a05SGarrett D'Amore enum audiohda_widget_type type; 58388447a05SGarrett D'Amore 58488447a05SGarrett D'Amore uint32_t widget_cap; 58588447a05SGarrett D'Amore uint32_t pcm_format; 58688447a05SGarrett D'Amore uint32_t inamp_cap; 58788447a05SGarrett D'Amore uint32_t outamp_cap; 58888447a05SGarrett D'Amore 58988447a05SGarrett D'Amore uint32_t path_flags; 59088447a05SGarrett D'Amore 59188447a05SGarrett D'Amore int out_weight; 59288447a05SGarrett D'Amore int in_weight; 59388447a05SGarrett D'Amore int finish; 59488447a05SGarrett D'Amore 59588447a05SGarrett D'Amore /* 59688447a05SGarrett D'Amore * available (input) connections. 0 means this widget 59788447a05SGarrett D'Amore * has fixed connection 59888447a05SGarrett D'Amore */ 59988447a05SGarrett D'Amore int nconns; 60088447a05SGarrett D'Amore 60188447a05SGarrett D'Amore /* 602b96a6eceSZhao Edgar Liu - Sun Microsystems * wid of possible & selected input & output connections 603b96a6eceSZhao Edgar Liu - Sun Microsystems */ 604b96a6eceSZhao Edgar Liu - Sun Microsystems wid_t avail_conn[AUDIOHD_MAX_CONN]; 605b96a6eceSZhao Edgar Liu - Sun Microsystems wid_t output_path_next; /* output pin -> DAC */ 606b96a6eceSZhao Edgar Liu - Sun Microsystems wid_t input_path_next; /* ADC -> input pin */ 607b96a6eceSZhao Edgar Liu - Sun Microsystems wid_t monitor_path_next[AUDIOHD_MAX_CONN]; 608b96a6eceSZhao Edgar Liu - Sun Microsystems /* output pin -> input pin */ 609b96a6eceSZhao Edgar Liu - Sun Microsystems wid_t beep_path_next; /* output pin -> beep widget */ 610*e7236f70SZhao Edgar Liu - Sun Microsystems wid_t loopback_path_next; /* ADC -> output pin */ 611b96a6eceSZhao Edgar Liu - Sun Microsystems 612b96a6eceSZhao Edgar Liu - Sun Microsystems uint16_t used; 613b96a6eceSZhao Edgar Liu - Sun Microsystems 614b96a6eceSZhao Edgar Liu - Sun Microsystems /* 61588447a05SGarrett D'Amore * pointer to struct depending on widget type: 616*e7236f70SZhao Edgar Liu - Sun Microsystems * 1. DAC audiohd_path_t 617*e7236f70SZhao Edgar Liu - Sun Microsystems * 2. ADC audiohd_path_t 61888447a05SGarrett D'Amore * 3. PIN audiohd_pin_t 61988447a05SGarrett D'Amore */ 62088447a05SGarrett D'Amore void *priv; 62188447a05SGarrett D'Amore }; 62288447a05SGarrett D'Amore 62388447a05SGarrett D'Amore #define AUDIOHD_FLAG_LINEOUT (1 << 0) 62488447a05SGarrett D'Amore #define AUDIOHD_FLAG_SPEAKER (1 << 1) 62588447a05SGarrett D'Amore #define AUDIOHD_FLAG_HP (1 << 2) 62688447a05SGarrett D'Amore #define AUDIOHD_FLAG_MONO (1 << 3) 62788447a05SGarrett D'Amore 62888447a05SGarrett D'Amore #define AUDIOHD_MAX_MIXER 5 62988447a05SGarrett D'Amore #define AUDIOHD_MAX_PIN 4 63088447a05SGarrett D'Amore 63188447a05SGarrett D'Amore #define PORT_DAC 0 63288447a05SGarrett D'Amore #define PORT_ADC 1 63388447a05SGarrett D'Amore #define PORT_MAX 2 63488447a05SGarrett D'Amore typedef enum { 63588447a05SGarrett D'Amore PLAY = 0, 63688447a05SGarrett D'Amore RECORD = 1, 63742c41cf8Slipeng sang - Sun Microsystems - Beijing China BEEP = 2, 638*e7236f70SZhao Edgar Liu - Sun Microsystems LOOPBACK = 3, 63988447a05SGarrett D'Amore } path_type_t; 64088447a05SGarrett D'Amore 64188447a05SGarrett D'Amore struct audiohd_path { 64288447a05SGarrett D'Amore wid_t adda_wid; 64342c41cf8Slipeng sang - Sun Microsystems - Beijing China wid_t beep_wid; 64488447a05SGarrett D'Amore 64588447a05SGarrett D'Amore wid_t pin_wid[AUDIOHD_MAX_PINS]; 64688447a05SGarrett D'Amore int sum_selconn[AUDIOHD_MAX_PINS]; 64788447a05SGarrett D'Amore int mon_wid[AUDIOHD_MAX_PIN][AUDIOHD_MAX_MIXER]; 64888447a05SGarrett D'Amore int pin_nums; 64988447a05SGarrett D'Amore int maxmixer[AUDIOHD_MAX_PINS]; 65088447a05SGarrett D'Amore 65188447a05SGarrett D'Amore path_type_t path_type; 65288447a05SGarrett D'Amore 65388447a05SGarrett D'Amore wid_t mute_wid; 65488447a05SGarrett D'Amore int mute_dir; 65588447a05SGarrett D'Amore wid_t gain_wid; 65688447a05SGarrett D'Amore int gain_dir; 65788447a05SGarrett D'Amore uint32_t gain_bits; 65888447a05SGarrett D'Amore 65988447a05SGarrett D'Amore uint32_t pin_outputs; 66088447a05SGarrett D'Amore uint8_t tag; 66188447a05SGarrett D'Amore 66288447a05SGarrett D'Amore hda_codec_t *codec; 66388447a05SGarrett D'Amore 66488447a05SGarrett D'Amore wid_t sum_wid; 66588447a05SGarrett D'Amore 66688447a05SGarrett D'Amore audiohd_state_t *statep; 66788447a05SGarrett D'Amore }; 66888447a05SGarrett D'Amore 66988447a05SGarrett D'Amore typedef struct audiohd_port 67088447a05SGarrett D'Amore { 67188447a05SGarrett D'Amore uint8_t nchan; 67288447a05SGarrett D'Amore int index; 67388447a05SGarrett D'Amore uint16_t regoff; 67488447a05SGarrett D'Amore 67588447a05SGarrett D'Amore unsigned nframes; 67668c47f65SGarrett D'Amore size_t bufsize; 67768c47f65SGarrett D'Amore size_t fragsize; 67888447a05SGarrett D'Amore uint64_t count; 67988447a05SGarrett D'Amore int curpos; 68088447a05SGarrett D'Amore 68188447a05SGarrett D'Amore uint_t format; 68288447a05SGarrett D'Amore unsigned sync_dir; 68388447a05SGarrett D'Amore 68488447a05SGarrett D'Amore ddi_dma_handle_t samp_dmah; 68588447a05SGarrett D'Amore ddi_acc_handle_t samp_acch; 68688447a05SGarrett D'Amore caddr_t samp_kaddr; 68788447a05SGarrett D'Amore uint64_t samp_paddr; 68888447a05SGarrett D'Amore 68988447a05SGarrett D'Amore ddi_dma_handle_t bdl_dmah; 69088447a05SGarrett D'Amore ddi_acc_handle_t bdl_acch; 69188447a05SGarrett D'Amore size_t bdl_size; 69288447a05SGarrett D'Amore caddr_t bdl_kaddr; 69388447a05SGarrett D'Amore uint64_t bdl_paddr; 69488447a05SGarrett D'Amore 69588447a05SGarrett D'Amore audio_engine_t *engine; 69688447a05SGarrett D'Amore audiohd_state_t *statep; 69788447a05SGarrett D'Amore }audiohd_port_t; 69888447a05SGarrett D'Amore 699c1cfefcdSZhao Edgar Liu - Sun Microsystems enum { 700c1cfefcdSZhao Edgar Liu - Sun Microsystems CTL_VOLUME = 0, 701c1cfefcdSZhao Edgar Liu - Sun Microsystems CTL_FRONT, 702c1cfefcdSZhao Edgar Liu - Sun Microsystems CTL_SPEAKER, 703c1cfefcdSZhao Edgar Liu - Sun Microsystems CTL_HEADPHONE, 704c1cfefcdSZhao Edgar Liu - Sun Microsystems CTL_REAR, 705c1cfefcdSZhao Edgar Liu - Sun Microsystems CTL_CENTER, 706c1cfefcdSZhao Edgar Liu - Sun Microsystems CTL_SURROUND, 707c1cfefcdSZhao Edgar Liu - Sun Microsystems CTL_LFE, 708c1cfefcdSZhao Edgar Liu - Sun Microsystems CTL_IGAIN, 709c1cfefcdSZhao Edgar Liu - Sun Microsystems CTL_LINEIN, 710c1cfefcdSZhao Edgar Liu - Sun Microsystems CTL_MIC, 711c1cfefcdSZhao Edgar Liu - Sun Microsystems CTL_CD, 712c1cfefcdSZhao Edgar Liu - Sun Microsystems CTL_MONGAIN, 713c1cfefcdSZhao Edgar Liu - Sun Microsystems CTL_MONSRC, 714c1cfefcdSZhao Edgar Liu - Sun Microsystems CTL_RECSRC, 715c1cfefcdSZhao Edgar Liu - Sun Microsystems CTL_BEEP, 716*e7236f70SZhao Edgar Liu - Sun Microsystems CTL_LOOP, 717c1cfefcdSZhao Edgar Liu - Sun Microsystems 718c1cfefcdSZhao Edgar Liu - Sun Microsystems /* this one must be last */ 719c1cfefcdSZhao Edgar Liu - Sun Microsystems CTL_MAX 720c1cfefcdSZhao Edgar Liu - Sun Microsystems }; 721c1cfefcdSZhao Edgar Liu - Sun Microsystems 72288447a05SGarrett D'Amore typedef struct audiohd_ctrl 72388447a05SGarrett D'Amore { 72488447a05SGarrett D'Amore audiohd_state_t *statep; 72588447a05SGarrett D'Amore audio_ctrl_t *ctrl; 726c1cfefcdSZhao Edgar Liu - Sun Microsystems int num; 72788447a05SGarrett D'Amore uint64_t val; 72888447a05SGarrett D'Amore } audiohd_ctrl_t; 72988447a05SGarrett D'Amore 73088447a05SGarrett D'Amore struct audiohd_pin { 73188447a05SGarrett D'Amore audiohd_pin_t *next; 73288447a05SGarrett D'Amore wid_t wid; 73388447a05SGarrett D'Amore wid_t mute_wid; /* node used to mute this pin */ 73488447a05SGarrett D'Amore int mute_dir; /* 1: input, 2: output */ 73588447a05SGarrett D'Amore wid_t gain_wid; /* node for gain control */ 73688447a05SGarrett D'Amore int gain_dir; /* _OUTPUT/_INPUT */ 73788447a05SGarrett D'Amore uint32_t gain_bits; 73888447a05SGarrett D'Amore 73988447a05SGarrett D'Amore uint8_t vrefvalue; /* value of VRef */ 74088447a05SGarrett D'Amore 74188447a05SGarrett D'Amore uint32_t cap; 74288447a05SGarrett D'Amore uint32_t config; 74388447a05SGarrett D'Amore uint32_t ctrl; 74488447a05SGarrett D'Amore uint32_t assoc; 74588447a05SGarrett D'Amore uint32_t seq; 746*e7236f70SZhao Edgar Liu - Sun Microsystems wid_t adc_wid; 747*e7236f70SZhao Edgar Liu - Sun Microsystems wid_t dac_wid; 74842c41cf8Slipeng sang - Sun Microsystems - Beijing China wid_t beep_wid; 74988447a05SGarrett D'Amore int no_phys_conn; 75088447a05SGarrett D'Amore enum audiohda_device_type device; 75188447a05SGarrett D'Amore 75288447a05SGarrett D'Amore /* 75388447a05SGarrett D'Amore * mg_dir, mg_gain, mg_wid are used to store the monitor gain control 75488447a05SGarrett D'Amore * widget wid. 75588447a05SGarrett D'Amore */ 75688447a05SGarrett D'Amore int mg_dir[AUDIOHD_MAX_CONN]; 75788447a05SGarrett D'Amore int mg_gain[AUDIOHD_MAX_CONN]; 75888447a05SGarrett D'Amore int mg_wid[AUDIOHD_MAX_CONN]; 75988447a05SGarrett D'Amore int num; 76088447a05SGarrett D'Amore int finish; 76188447a05SGarrett D'Amore 76288447a05SGarrett D'Amore }; 76388447a05SGarrett D'Amore 76488447a05SGarrett D'Amore typedef struct { 76588447a05SGarrett D'Amore ddi_dma_handle_t ad_dmahdl; 76688447a05SGarrett D'Amore ddi_acc_handle_t ad_acchdl; 76788447a05SGarrett D'Amore caddr_t ad_vaddr; /* virtual addr */ 76888447a05SGarrett D'Amore uint64_t ad_paddr; /* physical addr */ 76988447a05SGarrett D'Amore size_t ad_req_sz; /* required size of memory */ 77088447a05SGarrett D'Amore size_t ad_real_sz; /* real size of memory */ 77188447a05SGarrett D'Amore } audiohd_dma_t; 77288447a05SGarrett D'Amore 77388447a05SGarrett D'Amore struct hda_codec { 77488447a05SGarrett D'Amore uint8_t index; /* codec address */ 77588447a05SGarrett D'Amore uint32_t vid; /* vendor id and device id */ 77688447a05SGarrett D'Amore uint32_t revid; /* revision id */ 77788447a05SGarrett D'Amore wid_t wid_afg; /* id of AFG */ 77888447a05SGarrett D'Amore wid_t first_wid; /* wid of 1st subnode of AFG */ 77988447a05SGarrett D'Amore wid_t last_wid; /* wid of the last subnode of AFG */ 78088447a05SGarrett D'Amore int nnodes; /* # of subnodes of AFG */ 78188447a05SGarrett D'Amore uint8_t nistream; 78288447a05SGarrett D'Amore 78388447a05SGarrett D'Amore uint32_t outamp_cap; 78488447a05SGarrett D'Amore uint32_t inamp_cap; 78588447a05SGarrett D'Amore uint32_t stream_format; 78688447a05SGarrett D'Amore uint32_t pcm_format; 78788447a05SGarrett D'Amore 788ea463888SZhao Edgar Liu - Sun Microsystems audiohd_state_t *statep; 789cbe6566fSZhao Edgar Liu - Sun Microsystems audiohd_codec_info_t *codec_info; 79088447a05SGarrett D'Amore 79188447a05SGarrett D'Amore /* use wid as index to the array of widget pointers */ 79288447a05SGarrett D'Amore audiohd_widget_t *widget[AUDIOHD_MAX_WIDGET]; 79388447a05SGarrett D'Amore 79488447a05SGarrett D'Amore audiohd_port_t *port[AUDIOHD_PORT_MAX]; 79588447a05SGarrett D'Amore uint8_t portnum; 79688447a05SGarrett D'Amore audiohd_pin_t *first_pin; 79788447a05SGarrett D'Amore }; 79888447a05SGarrett D'Amore 79988447a05SGarrett D'Amore #define AUDIOHD_MAX_ASSOC 15 80088447a05SGarrett D'Amore struct audiohd_state { 80188447a05SGarrett D'Amore dev_info_t *hda_dip; 80288447a05SGarrett D'Amore kstat_t *hda_ksp; 80388447a05SGarrett D'Amore kmutex_t hda_mutex; 80488447a05SGarrett D'Amore uint32_t hda_flags; 80588447a05SGarrett D'Amore 80688447a05SGarrett D'Amore caddr_t hda_reg_base; 80788447a05SGarrett D'Amore ddi_acc_handle_t hda_pci_handle; 80888447a05SGarrett D'Amore ddi_acc_handle_t hda_reg_handle; 809368517c9SYang-Rong Jerry Zhou 81088447a05SGarrett D'Amore audiohd_dma_t hda_dma_corb; 81188447a05SGarrett D'Amore audiohd_dma_t hda_dma_rirb; 81288447a05SGarrett D'Amore 81388447a05SGarrett D'Amore uint8_t hda_rirb_rp; /* read pointer for rirb */ 81488447a05SGarrett D'Amore uint16_t hda_codec_mask; 81588447a05SGarrett D'Amore 81688447a05SGarrett D'Amore audio_dev_t *adev; 81789e1f902SZhao Edgar Liu - Sun Microsystems uint32_t devid; 81888447a05SGarrett D'Amore 81988447a05SGarrett D'Amore int hda_input_streams; /* # of input stream */ 82088447a05SGarrett D'Amore int hda_output_streams; /* # of output stream */ 82188447a05SGarrett D'Amore int hda_streams_nums; /* # of stream */ 82288447a05SGarrett D'Amore 82388447a05SGarrett D'Amore uint_t hda_play_regbase; 82488447a05SGarrett D'Amore uint_t hda_record_regbase; 82588447a05SGarrett D'Amore 82688447a05SGarrett D'Amore uint_t hda_play_stag; /* tag of playback stream */ 82788447a05SGarrett D'Amore uint_t hda_record_stag; /* tag of record stream */ 82888447a05SGarrett D'Amore uint_t hda_play_lgain; /* left gain for playback */ 82988447a05SGarrett D'Amore uint_t hda_play_rgain; /* right gain for playback */ 83088447a05SGarrett D'Amore 83188447a05SGarrett D'Amore /* 83288447a05SGarrett D'Amore * Now, for the time being, we add some fields 83388447a05SGarrett D'Amore * for parsing codec topology 83488447a05SGarrett D'Amore */ 83588447a05SGarrett D'Amore hda_codec_t *codec[AUDIOHD_CODEC_MAX]; 836b96a6eceSZhao Edgar Liu - Sun Microsystems 83788447a05SGarrett D'Amore /* 83888447a05SGarrett D'Amore * Suspend/Resume used fields 83988447a05SGarrett D'Amore */ 84088447a05SGarrett D'Amore boolean_t suspended; 84188447a05SGarrett D'Amore 84288447a05SGarrett D'Amore audiohd_path_t *path[AUDIOHD_PORT_MAX]; 84388447a05SGarrett D'Amore uint8_t pathnum; 84488447a05SGarrett D'Amore audiohd_port_t *port[PORT_MAX]; 84588447a05SGarrett D'Amore uint8_t pchan; 84688447a05SGarrett D'Amore uint8_t rchan; 84788447a05SGarrett D'Amore 84888447a05SGarrett D'Amore uint64_t inmask; 84988447a05SGarrett D'Amore 85088447a05SGarrett D'Amore uint_t hda_out_ports; 85188447a05SGarrett D'Amore uint_t in_port; 85288447a05SGarrett D'Amore 853a33ad26eSZhao Edgar Liu - Sun Microsystems /* Higher sample/rate */ 854a33ad26eSZhao Edgar Liu - Sun Microsystems uint32_t sample_rate; 855a33ad26eSZhao Edgar Liu - Sun Microsystems uint32_t sample_bit_depth; 856a33ad26eSZhao Edgar Liu - Sun Microsystems uint8_t sample_packed_bytes; 857a33ad26eSZhao Edgar Liu - Sun Microsystems 85888447a05SGarrett D'Amore /* 85988447a05SGarrett D'Amore * Controls 86088447a05SGarrett D'Amore */ 861c1cfefcdSZhao Edgar Liu - Sun Microsystems audiohd_ctrl_t ctrls[CTL_MAX]; 862*e7236f70SZhao Edgar Liu - Sun Microsystems boolean_t monitor_supported; 863*e7236f70SZhao Edgar Liu - Sun Microsystems boolean_t loopback_supported; 86488447a05SGarrett D'Amore 86588447a05SGarrett D'Amore /* for multichannel */ 86688447a05SGarrett D'Amore uint8_t chann[AUDIOHD_MAX_ASSOC]; 86788447a05SGarrett D'Amore uint8_t assoc; 86888447a05SGarrett D'Amore 86988447a05SGarrett D'Amore }; 87088447a05SGarrett D'Amore 871cbe6566fSZhao Edgar Liu - Sun Microsystems struct audiohd_codec_info { 872cbe6566fSZhao Edgar Liu - Sun Microsystems uint32_t devid; 873cbe6566fSZhao Edgar Liu - Sun Microsystems const char *buf; 874cbe6566fSZhao Edgar Liu - Sun Microsystems uint32_t flags; 875cbe6566fSZhao Edgar Liu - Sun Microsystems }; 87688447a05SGarrett D'Amore 87788447a05SGarrett D'Amore /* 87888447a05SGarrett D'Amore * Operation for high definition audio control system bus 87988447a05SGarrett D'Amore * interface registers 88088447a05SGarrett D'Amore */ 88188447a05SGarrett D'Amore #define AUDIOHD_REG_GET8(reg) \ 88288447a05SGarrett D'Amore ddi_get8(statep->hda_reg_handle, \ 88388447a05SGarrett D'Amore (void *)((char *)statep->hda_reg_base + (reg))) 88488447a05SGarrett D'Amore 88588447a05SGarrett D'Amore #define AUDIOHD_REG_GET16(reg) \ 88688447a05SGarrett D'Amore ddi_get16(statep->hda_reg_handle, \ 88788447a05SGarrett D'Amore (void *)((char *)statep->hda_reg_base + (reg))) 88888447a05SGarrett D'Amore 88988447a05SGarrett D'Amore #define AUDIOHD_REG_GET32(reg) \ 89088447a05SGarrett D'Amore ddi_get32(statep->hda_reg_handle, \ 89188447a05SGarrett D'Amore (void *)((char *)statep->hda_reg_base + (reg))) 89288447a05SGarrett D'Amore 89388447a05SGarrett D'Amore #define AUDIOHD_REG_GET64(reg) \ 89488447a05SGarrett D'Amore ddi_get64(statep->hda_reg_handle, \ 89588447a05SGarrett D'Amore (void *)((char *)statep->hda_reg_base + (reg))) 89688447a05SGarrett D'Amore 89788447a05SGarrett D'Amore #define AUDIOHD_REG_SET8(reg, val) \ 89888447a05SGarrett D'Amore ddi_put8(statep->hda_reg_handle, \ 89988447a05SGarrett D'Amore (void *)((char *)statep->hda_reg_base + (reg)), (val)) 90088447a05SGarrett D'Amore 90188447a05SGarrett D'Amore #define AUDIOHD_REG_SET16(reg, val) \ 90288447a05SGarrett D'Amore ddi_put16(statep->hda_reg_handle, \ 90388447a05SGarrett D'Amore (void *)((char *)statep->hda_reg_base + (reg)), (val)) 90488447a05SGarrett D'Amore 90588447a05SGarrett D'Amore #define AUDIOHD_REG_SET32(reg, val) \ 90688447a05SGarrett D'Amore ddi_put32(statep->hda_reg_handle, \ 90788447a05SGarrett D'Amore (void *)((char *)statep->hda_reg_base + (reg)), (val)) 90888447a05SGarrett D'Amore 90988447a05SGarrett D'Amore #define AUDIOHD_REG_SET64(reg, val) \ 91088447a05SGarrett D'Amore ddi_put64(statep->hda_reg_handle, \ 91188447a05SGarrett D'Amore (void *)((char *)statep->hda_reg_base + (reg)), (val)) 91288447a05SGarrett D'Amore 91388447a05SGarrett D'Amore 91488447a05SGarrett D'Amore /* 91588447a05SGarrett D'Amore * enable a pin widget to input 91688447a05SGarrett D'Amore */ 91788447a05SGarrett D'Amore #define AUDIOHD_ENABLE_PIN_IN(statep, caddr, wid) \ 91888447a05SGarrett D'Amore { \ 91988447a05SGarrett D'Amore (void) audioha_codec_verb_get(statep, caddr, wid, \ 92088447a05SGarrett D'Amore AUDIOHDC_VERB_SET_PIN_CTRL, AUDIOHDC_PIN_CONTROL_IN_ENABLE | 4); \ 92188447a05SGarrett D'Amore } 92288447a05SGarrett D'Amore 92388447a05SGarrett D'Amore /* 92488447a05SGarrett D'Amore * disable input pin 92588447a05SGarrett D'Amore */ 92688447a05SGarrett D'Amore #define AUDIOHD_DISABLE_PIN_IN(statep, caddr, wid) \ 92788447a05SGarrett D'Amore { \ 92888447a05SGarrett D'Amore uint32_t lTmp; \ 92988447a05SGarrett D'Amore \ 93088447a05SGarrett D'Amore lTmp = audioha_codec_verb_get(statep, caddr, wid, \ 93188447a05SGarrett D'Amore AUDIOHDC_VERB_GET_PIN_CTRL, 0); \ 93288447a05SGarrett D'Amore if (lTmp == AUDIOHD_CODEC_FAILURE) \ 933c6e681c0SYang-Rong Jerry Zhou return (DDI_FAILURE); \ 93488447a05SGarrett D'Amore lTmp = audioha_codec_verb_get(statep, caddr, wid, \ 93588447a05SGarrett D'Amore AUDIOHDC_VERB_SET_PIN_CTRL, \ 93688447a05SGarrett D'Amore (lTmp & ~AUDIOHDC_PIN_CONTROL_IN_ENABLE)); \ 93788447a05SGarrett D'Amore if (lTmp == AUDIOHD_CODEC_FAILURE) \ 938c6e681c0SYang-Rong Jerry Zhou return (DDI_FAILURE); \ 93988447a05SGarrett D'Amore } 94088447a05SGarrett D'Amore 94188447a05SGarrett D'Amore /* 94288447a05SGarrett D'Amore * unmute an output pin 94388447a05SGarrett D'Amore */ 94488447a05SGarrett D'Amore #define AUDIOHD_NODE_UNMUTE_OUT(statep, caddr, wid) \ 94588447a05SGarrett D'Amore { \ 94688447a05SGarrett D'Amore if (audioha_codec_4bit_verb_get(statep, \ 94788447a05SGarrett D'Amore caddr, wid, AUDIOHDC_VERB_SET_AMP_MUTE, \ 94888447a05SGarrett D'Amore AUDIOHDC_AMP_SET_LR_OUTPUT | AUDIOHDC_GAIN_MAX) == \ 94988447a05SGarrett D'Amore AUDIOHD_CODEC_FAILURE) \ 950c6e681c0SYang-Rong Jerry Zhou return (DDI_FAILURE); \ 95188447a05SGarrett D'Amore } 95288447a05SGarrett D'Amore 953c7b817cfSZhao Edgar Liu - Sun Microsystems /* 954c7b817cfSZhao Edgar Liu - Sun Microsystems * check volume adjust value of 2 channels control 955c7b817cfSZhao Edgar Liu - Sun Microsystems */ 956c7b817cfSZhao Edgar Liu - Sun Microsystems #define AUDIOHD_CHECK_2CHANNELS_VOLUME(value) \ 957c7b817cfSZhao Edgar Liu - Sun Microsystems { \ 958c7b817cfSZhao Edgar Liu - Sun Microsystems if ((value) & ~0xffff) \ 959c7b817cfSZhao Edgar Liu - Sun Microsystems return (EINVAL); \ 960c7b817cfSZhao Edgar Liu - Sun Microsystems if ((((value) & 0xff00) >> 8) > 100 || \ 961c7b817cfSZhao Edgar Liu - Sun Microsystems ((value) & 0xff) > 100) \ 962c7b817cfSZhao Edgar Liu - Sun Microsystems return (EINVAL); \ 963c7b817cfSZhao Edgar Liu - Sun Microsystems } 964c7b817cfSZhao Edgar Liu - Sun Microsystems 965c7b817cfSZhao Edgar Liu - Sun Microsystems /* 966c7b817cfSZhao Edgar Liu - Sun Microsystems * check volume adjust value of mono channel control 967c7b817cfSZhao Edgar Liu - Sun Microsystems */ 968c7b817cfSZhao Edgar Liu - Sun Microsystems #define AUDIOHD_CHECK_CHANNEL_VOLUME(value) \ 969c7b817cfSZhao Edgar Liu - Sun Microsystems { \ 970c7b817cfSZhao Edgar Liu - Sun Microsystems if ((value) & ~0xff) \ 971c7b817cfSZhao Edgar Liu - Sun Microsystems return (EINVAL); \ 972c7b817cfSZhao Edgar Liu - Sun Microsystems if (((value) & 0xff) > 100) \ 973c7b817cfSZhao Edgar Liu - Sun Microsystems return (EINVAL); \ 974c7b817cfSZhao Edgar Liu - Sun Microsystems } 975c7b817cfSZhao Edgar Liu - Sun Microsystems 97688447a05SGarrett D'Amore #ifdef __cplusplus 97788447a05SGarrett D'Amore } 97888447a05SGarrett D'Amore #endif 97988447a05SGarrett D'Amore 980ea463888SZhao Edgar Liu - Sun Microsystems /* Warlock annotation */ 981ea463888SZhao Edgar Liu - Sun Microsystems _NOTE(DATA_READABLE_WITHOUT_LOCK(audiohd_ctrl::statep)) 982ea463888SZhao Edgar Liu - Sun Microsystems _NOTE(DATA_READABLE_WITHOUT_LOCK(audiohd_state::inmask)) 983ea463888SZhao Edgar Liu - Sun Microsystems _NOTE(DATA_READABLE_WITHOUT_LOCK(audiohd_state::adev)) 984ea463888SZhao Edgar Liu - Sun Microsystems _NOTE(DATA_READABLE_WITHOUT_LOCK(audiohd_state::sample_bit_depth)) 985ea463888SZhao Edgar Liu - Sun Microsystems _NOTE(DATA_READABLE_WITHOUT_LOCK(audiohd_state::sample_rate)) 986ea463888SZhao Edgar Liu - Sun Microsystems _NOTE(READ_ONLY_DATA(audiohd_state::hda_reg_handle)) 987ea463888SZhao Edgar Liu - Sun Microsystems _NOTE(DATA_READABLE_WITHOUT_LOCK(audiohd_widget::codec)) 988ea463888SZhao Edgar Liu - Sun Microsystems _NOTE(DATA_READABLE_WITHOUT_LOCK(audiohd_widget::wid_wid)) 989ea463888SZhao Edgar Liu - Sun Microsystems _NOTE(DATA_READABLE_WITHOUT_LOCK(hda_codec::index)) 990ea463888SZhao Edgar Liu - Sun Microsystems _NOTE(DATA_READABLE_WITHOUT_LOCK(hda_codec::statep)) 991ea463888SZhao Edgar Liu - Sun Microsystems _NOTE(DATA_READABLE_WITHOUT_LOCK(hda_codec::vid)) 992ea463888SZhao Edgar Liu - Sun Microsystems _NOTE(DATA_READABLE_WITHOUT_LOCK(audiohd_port::nchan)) 993ea463888SZhao Edgar Liu - Sun Microsystems _NOTE(DATA_READABLE_WITHOUT_LOCK(audiohd_port::statep)) 994ea463888SZhao Edgar Liu - Sun Microsystems _NOTE(DATA_READABLE_WITHOUT_LOCK(audiohd_port::sync_dir)) 995ea463888SZhao Edgar Liu - Sun Microsystems 99688447a05SGarrett D'Amore #endif /* _SYS_AUDIOHD_IMPL_H_ */ 997