[BACK]Return to azalia.h CVS log [TXT][DIR] Up to [local] / sys / dev / pci

Annotation of sys/dev/pci/azalia.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: azalia.h,v 1.11 2007/07/23 02:03:42 deanna Exp $      */
        !             2: /*     $NetBSD: azalia.h,v 1.6 2006/01/16 14:15:26 kent Exp $  */
        !             3:
        !             4: /*-
        !             5:  * Copyright (c) 2005 The NetBSD Foundation, Inc.
        !             6:  * All rights reserved.
        !             7:  *
        !             8:  * This code is derived from software contributed to The NetBSD Foundation
        !             9:  * by TAMURA Kent
        !            10:  *
        !            11:  * Redistribution and use in source and binary forms, with or without
        !            12:  * modification, are permitted provided that the following conditions
        !            13:  * are met:
        !            14:  * 1. Redistributions of source code must retain the above copyright
        !            15:  *    notice, this list of conditions and the following disclaimer.
        !            16:  * 2. Redistributions in binary form must reproduce the above copyright
        !            17:  *    notice, this list of conditions and the following disclaimer in the
        !            18:  *    documentation and/or other materials provided with the distribution.
        !            19:  * 3. All advertising materials mentioning features or use of this software
        !            20:  *    must display the following acknowledgement:
        !            21:  *        This product includes software developed by the NetBSD
        !            22:  *        Foundation, Inc. and its contributors.
        !            23:  * 4. Neither the name of The NetBSD Foundation nor the names of its
        !            24:  *    contributors may be used to endorse or promote products derived
        !            25:  *    from this software without specific prior written permission.
        !            26:  *
        !            27:  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
        !            28:  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
        !            29:  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
        !            30:  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
        !            31:  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
        !            32:  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
        !            33:  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
        !            34:  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
        !            35:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
        !            36:  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
        !            37:  * POSSIBILITY OF SUCH DAMAGE.
        !            38:  */
        !            39:
        !            40: #include <sys/types.h>
        !            41: #include <sys/audioio.h>
        !            42:
        !            43: /* ----------------------------------------------------------------
        !            44:  * High Definition Audio constant values
        !            45:  * ---------------------------------------------------------------- */
        !            46:
        !            47: /* High Definition Audio registers */
        !            48: #define HDA_GCAP       0x000   /* 2 */
        !            49: #define                HDA_GCAP_OSS(x) ((x & 0xf000) >> 12)
        !            50: #define                HDA_GCAP_ISS(x) ((x & 0x0f00) >> 8)
        !            51: #define                HDA_GCAP_BSS(x) ((x & 0x00f8) >> 3)
        !            52: #define                HDA_GCAP_NSDO_MASK      0x0006
        !            53: #define                HDA_GCAP_NSDO_1         0x0000
        !            54: #define                HDA_GCAP_NSDO_2         0x0002
        !            55: #define                HDA_GCAP_NSDO_4         0x0004
        !            56: #define                HDA_GCAP_NSDO_RESERVED  0x0006
        !            57: #define                HDA_GCAP_64OK   0x0001
        !            58: #define HDA_VMIN       0x002   /* 1 */
        !            59: #define HDA_VMAJ       0x003   /* 1 */
        !            60: #define HDA_OUTPAY     0x004   /* 2 */
        !            61: #define HDA_INPAY      0x006   /* 2 */
        !            62: #define HDA_GCTL       0x008   /* 4 */
        !            63: #define                HDA_GCTL_UNSOL  0x00000100
        !            64: #define                HDA_GCTL_FCNTRL 0x00000002
        !            65: #define                HDA_GCTL_CRST   0x00000001
        !            66: #define HDA_WAKEEN     0x00c   /* 2 */
        !            67: #define                HDA_WAKEEN_SDIWEN       0x7fff
        !            68: #define HDA_STATESTS   0x00e   /* 2 */
        !            69: #define                HDA_STATESTS_SDIWAKE    0x7fff
        !            70: #define HDA_GSTS       0x010   /* 2 */
        !            71: #define                HDA_GSTS_FSTS           0x0002
        !            72: #define HDA_OUTSTRMPAY 0x018   /* 2 */
        !            73: #define HDA_INSTRMPAY  0x01a   /* 2 */
        !            74: #define HDA_INTCTL     0x020   /* 4 */
        !            75: #define                HDA_INTCTL_GIE  0x80000000
        !            76: #define                HDA_INTCTL_CIE  0x40000000
        !            77: #define                HDA_INTCTL_SIE  0x3fffffff
        !            78: #define HDA_INTSTS     0x024   /* 4 */
        !            79: #define                HDA_INTSTS_GIS  0x80000000
        !            80: #define                HDA_INTSTS_CIS  0x40000000
        !            81: #define                HDA_INTSTS_SIS  0x3fffffff
        !            82: #define HDA_WALCLK     0x030   /* 4 */
        !            83: #define HDA_SSYNC      0x034   /* 4 */
        !            84: #define                HDA_SSYNC_SSYNC 0x3fffffff
        !            85: #define HDA_CORBLBASE  0x040   /* 4 */
        !            86: #define HDA_CORBUBASE  0x044   /* 4 */
        !            87: #define HDA_CORBWP     0x048   /* 2 */
        !            88: #define                HDA_CORBWP_CORBWP       0x00ff
        !            89: #define HDA_CORBRP     0x04a   /* 2 */
        !            90: #define                HDA_CORBRP_CORBRPRST    0x8000
        !            91: #define                HDA_CORBRP_CORBRP       0x00ff
        !            92: #define HDA_CORBCTL    0x04c   /* 1 */
        !            93: #define                HDA_CORBCTL_CORBRUN     0x02
        !            94: #define                HDA_CORBCTL_CMEIE       0x01
        !            95: #define HDA_CORBSTS    0x04d   /* 1 */
        !            96: #define                HDA_CORBSTS_CMEI        0x01
        !            97: #define HDA_CORBSIZE   0x04e   /* 1 */
        !            98: #define                HDA_CORBSIZE_CORBSZCAP_MASK     0xf0
        !            99: #define                HDA_CORBSIZE_CORBSZCAP_2        0x10
        !           100: #define                HDA_CORBSIZE_CORBSZCAP_16       0x20
        !           101: #define                HDA_CORBSIZE_CORBSZCAP_256      0x40
        !           102: #define                HDA_CORBSIZE_CORBSIZE_MASK      0x03
        !           103: #define                HDA_CORBSIZE_CORBSIZE_2         0x00
        !           104: #define                HDA_CORBSIZE_CORBSIZE_16        0x01
        !           105: #define                HDA_CORBSIZE_CORBSIZE_256       0x02
        !           106: #define HDA_RIRBLBASE  0x050   /* 4 */
        !           107: #define HDA_RIRBUBASE  0x054   /* 4 */
        !           108: #define HDA_RIRBWP     0x058   /* 2 */
        !           109: #define                HDA_RIRBWP_RIRBWPRST    0x8000
        !           110: #define                HDA_RIRBWP_RIRBWP       0x00ff
        !           111: #define HDA_RINTCNT    0x05a   /* 2 */
        !           112: #define                HDA_RINTCNT_RINTCNT     0x00ff
        !           113: #define HDA_RIRBCTL    0x05c   /* 1 */
        !           114: #define                HDA_RIRBCTL_RIRBOIC     0x04
        !           115: #define                HDA_RIRBCTL_RIRBDMAEN   0x02
        !           116: #define                HDA_RIRBCTL_RINTCTL     0x01
        !           117: #define HDA_RIRBSTS    0x05d   /* 1 */
        !           118: #define                HDA_RIRBSTS_RIRBOIS     0x04
        !           119: #define                HDA_RIRBSTS_RINTFL      0x01
        !           120: #define HDA_RIRBSIZE   0x05e   /* 1 */
        !           121: #define                HDA_RIRBSIZE_RIRBSZCAP_MASK     0xf0
        !           122: #define                HDA_RIRBSIZE_RIRBSZCAP_2        0x10
        !           123: #define                HDA_RIRBSIZE_RIRBSZCAP_16       0x20
        !           124: #define                HDA_RIRBSIZE_RIRBSZCAP_256      0x40
        !           125: #define                HDA_RIRBSIZE_RIRBSIZE_MASK      0x03
        !           126: #define                HDA_RIRBSIZE_RIRBSIZE_2         0x00
        !           127: #define                HDA_RIRBSIZE_RIRBSIZE_16        0x01
        !           128: #define                HDA_RIRBSIZE_RIRBSIZE_256       0x02
        !           129: #define HDA_IC         0x060   /* 4 */
        !           130: #define HDA_IR         0x064   /* 4 */
        !           131: #define HDA_IRS                0x068   /* 2 */
        !           132: #define                HDA_IRS_IRRADD          0x00f0
        !           133: #define                HDA_IRS_IRRUNSOL        0x0008
        !           134: #define                HDA_IRS_IRV             0x0002
        !           135: #define                HDA_IRS_ICB             0x0001
        !           136: #define HDA_DPLBASE    0x070   /* 4 */
        !           137: #define                HDA_DPLBASE_DPLBASE     0xffffff80
        !           138: #define                HDA_DPLBASE_ENABLE      0x00000001
        !           139: #define HDA_DPUBASE    0x074
        !           140:
        !           141: #define HDA_SD_BASE    0x080
        !           142: #define                HDA_SD_CTL      0x00 /* 2 */
        !           143: #define                        HDA_SD_CTL_DEIE 0x0010
        !           144: #define                        HDA_SD_CTL_FEIE 0x0008
        !           145: #define                        HDA_SD_CTL_IOCE 0x0004
        !           146: #define                        HDA_SD_CTL_RUN  0x0002
        !           147: #define                        HDA_SD_CTL_SRST 0x0001
        !           148: #define                HDA_SD_CTL2     0x02 /* 1 */
        !           149: #define                        HDA_SD_CTL2_STRM        0xf0
        !           150: #define                        HDA_SD_CTL2_STRM_SHIFT  4
        !           151: #define                        HDA_SD_CTL2_DIR         0x08
        !           152: #define                        HDA_SD_CTL2_TP          0x04
        !           153: #define                        HDA_SD_CTL2_STRIPE      0x03
        !           154: #define                HDA_SD_STS      0x03 /* 1 */
        !           155: #define                        HDA_SD_STS_FIFORDY      0x20
        !           156: #define                        HDA_SD_STS_DESE         0x10
        !           157: #define                        HDA_SD_STS_FIFOE        0x08
        !           158: #define                        HDA_SD_STS_BCIS         0x04
        !           159: #define                HDA_SD_LPIB     0x04 /* 4 */
        !           160: #define                HDA_SD_CBL      0x08 /* 4 */
        !           161: #define                HDA_SD_LVI      0x0c /* 2 */
        !           162: #define                        HDA_SD_LVI_LVI  0x00ff
        !           163: #define                HDA_SD_FIFOW    0x0e /* 2 */
        !           164: #define                HDA_SD_FIFOS    0x10 /* 2 */
        !           165: #define                HDA_SD_FMT      0x12 /* 2 */
        !           166: #define                        HDA_SD_FMT_BASE 0x4000
        !           167: #define                        HDA_SD_FMT_BASE_48      0x0000
        !           168: #define                        HDA_SD_FMT_BASE_44      0x4000
        !           169: #define                        HDA_SD_FMT_MULT 0x3800
        !           170: #define                        HDA_SD_FMT_MULT_X1      0x0000
        !           171: #define                        HDA_SD_FMT_MULT_X2      0x0800
        !           172: #define                        HDA_SD_FMT_MULT_X3      0x1000
        !           173: #define                        HDA_SD_FMT_MULT_X4      0x1800
        !           174: #define                        HDA_SD_FMT_DIV  0x0700
        !           175: #define                        HDA_SD_FMT_DIV_BY1      0x0000
        !           176: #define                        HDA_SD_FMT_DIV_BY2      0x0100
        !           177: #define                        HDA_SD_FMT_DIV_BY3      0x0200
        !           178: #define                        HDA_SD_FMT_DIV_BY4      0x0300
        !           179: #define                        HDA_SD_FMT_DIV_BY5      0x0400
        !           180: #define                        HDA_SD_FMT_DIV_BY6      0x0500
        !           181: #define                        HDA_SD_FMT_DIV_BY7      0x0600
        !           182: #define                        HDA_SD_FMT_DIV_BY8      0x0700
        !           183: #define                        HDA_SD_FMT_BITS 0x0070
        !           184: #define                        HDA_SD_FMT_BITS_8_16    0x0000
        !           185: #define                        HDA_SD_FMT_BITS_16_16   0x0010
        !           186: #define                        HDA_SD_FMT_BITS_20_32   0x0020
        !           187: #define                        HDA_SD_FMT_BITS_24_32   0x0030
        !           188: #define                        HDA_SD_FMT_BITS_32_32   0x0040
        !           189: #define                        HDA_SD_FMT_CHAN 0x000f
        !           190: #define                HDA_SD_BDPL     0x18 /* 4 */
        !           191: #define                HDA_SD_BDPU     0x1c /* 4 */
        !           192: #define                HDA_SD_SIZE     0x20
        !           193:
        !           194: /* CORB commands */
        !           195: #define CORB_GET_PARAMETER             0xf00
        !           196: #define                COP_VENDOR_ID                   0x00
        !           197: #define                        COP_VID_VENDOR(x)       (x >> 16)
        !           198: #define                        COP_VID_DEVICE(x)       (x & 0xffff)
        !           199: #define                COP_REVISION_ID                 0x02
        !           200: #define                        COP_RID_MAJ(x)          ((x >> 20) & 0x0f)
        !           201: #define                        COP_RID_MIN(x)          ((x >> 16) & 0x0f)
        !           202: #define                        COP_RID_REVISION(x)     ((x >> 8) & 0xff)
        !           203: #define                        COP_RID_STEPPING(x)     (x & 0xff)
        !           204: #define                COP_SUBORDINATE_NODE_COUNT      0x04
        !           205: #define                        COP_START_NID(x)        ((x & 0x00ff0000) >> 16)
        !           206: #define                        COP_NSUBNODES(x)        (x & 0x000000ff)
        !           207: #define                COP_FUNCTION_GROUP_TYPE         0x05
        !           208: #define                        COP_FTYPE(x)            (x & 0x000000ff)
        !           209: #define                        COP_FTYPE_RESERVED      0x01
        !           210: #define                        COP_FTYPE_AUDIO         0x01
        !           211: #define                        COP_FTYPE_MODEM         0x02
        !           212: #define                COP_AUDIO_FUNCTION_GROUP_CAPABILITY     0x08
        !           213: #define                COP_AUDIO_WIDGET_CAP    0x09
        !           214: #define                        COP_AWCAP_TYPE(x)       ((x >> 20) & 0xf)
        !           215: #define                        COP_AWTYPE_AUDIO_OUTPUT         0x0
        !           216: #define                        COP_AWTYPE_AUDIO_INPUT          0x1
        !           217: #define                        COP_AWTYPE_AUDIO_MIXER          0x2
        !           218: #define                        COP_AWTYPE_AUDIO_SELECTOR       0x3
        !           219: #define                        COP_AWTYPE_PIN_COMPLEX          0x4
        !           220: #define                        COP_AWTYPE_POWER                0x5
        !           221: #define                        COP_AWTYPE_VOLUME_KNOB          0x6
        !           222: #define                        COP_AWTYPE_BEEP_GENERATOR       0x7
        !           223: #define                        COP_AWTYPE_VENDOR_DEFINED       0xf
        !           224: #define                        COP_AWCAP_STEREO        0x001
        !           225: #define                        COP_AWCAP_INAMP         0x002
        !           226: #define                        COP_AWCAP_OUTAMP        0x004
        !           227: #define                        COP_AWCAP_AMPOV         0x008
        !           228: #define                        COP_AWCAP_FORMATOV      0x010
        !           229: #define                        COP_AWCAP_STRIPE        0x020
        !           230: #define                        COP_AWCAP_PROC          0x040
        !           231: #define                        COP_AWCAP_UNSOL         0x080
        !           232: #define                        COP_AWCAP_CONNLIST      0x100
        !           233: #define                        COP_AWCAP_DIGITAL       0x200
        !           234: #define                        COP_AWCAP_POWER         0x400
        !           235: #define                        COP_AWCAP_LRSWAP        0x800
        !           236: #define                        COP_AWCAP_DELAY(x)      ((x >> 16) & 0xf)
        !           237: #define                COP_PCM                         0x0a
        !           238: #define                        COP_PCM_B32     0x00100000
        !           239: #define                        COP_PCM_B24     0x00080000
        !           240: #define                        COP_PCM_B20     0x00040000
        !           241: #define                        COP_PCM_B16     0x00020000
        !           242: #define                        COP_PCM_B8      0x00010000
        !           243: #define                        COP_PCM_R3840   0x00000800
        !           244: #define                        COP_PCM_R1920   0x00000400
        !           245: #define                        COP_PCM_R1764   0x00000200
        !           246: #define                        COP_PCM_R960    0x00000100
        !           247: #define                        COP_PCM_R882    0x00000080
        !           248: #define                        COP_PCM_R480    0x00000040
        !           249: #define                        COP_PCM_R441    0x00000020
        !           250: #define                        COP_PCM_R320    0x00000010
        !           251: #define                        COP_PCM_R220    0x00000008
        !           252: #define                        COP_PCM_R160    0x00000004
        !           253: #define                        COP_PCM_R110    0x00000002
        !           254: #define                        COP_PCM_R80     0x00000001
        !           255: #define                COP_STREAM_FORMATS              0x0b
        !           256: #define                        COP_STREAM_FORMAT_PCM           0x00000001
        !           257: #define                        COP_STREAM_FORMAT_FLOAT32       0x00000002
        !           258: #define                        COP_STREAM_FORMAT_AC3           0x00000003
        !           259: #define                COP_PINCAP              0x0c
        !           260: #define                        COP_PINCAP_IMPEDANCE    0x00000001
        !           261: #define                        COP_PINCAP_TRIGGER      0x00000002
        !           262: #define                        COP_PINCAP_PRESENCE     0x00000004
        !           263: #define                        COP_PINCAP_HEADPHONE    0x00000008
        !           264: #define                        COP_PINCAP_OUTPUT       0x00000010
        !           265: #define                        COP_PINCAP_INPUT        0x00000020
        !           266: #define                        COP_PINCAP_BALANCE      0x00000040
        !           267: #define                        COP_PINCAP_VREF(x)      ((x >> 8) & 0xff)
        !           268: #define                        COP_PINCAP_EAPD         0x00010000
        !           269: #define                COP_INPUT_AMPCAP        0x0d
        !           270: #define                        COP_AMPCAP_OFFSET(x)    (x & 0x0000007f)
        !           271: #define                        COP_AMPCAP_NUMSTEPS(x)  ((x >> 8) & 0x7f)
        !           272: #define                        COP_AMPCAP_STEPSIZE(x)  ((x >> 16) & 0x7f)
        !           273: #define                        COP_AMPCAP_MUTE         0x80000000
        !           274: #define                COP_CONNECTION_LIST_LENGTH      0x0e
        !           275: #define                        COP_CLL_LONG            0x00000080
        !           276: #define                        COP_CLL_LENGTH(x)       (x & 0x0000007f)
        !           277: #define                COP_SUPPORTED_POWER_STATES      0x0f
        !           278: #define                COP_PROCESSING_CAPABILITIES     0x10
        !           279: #define                COP_GPIO_COUNT                  0x11
        !           280: #define                COP_OUTPUT_AMPCAP               0x12
        !           281: #define                COP_VOLUME_KNOB_CAPABILITIES    0x13
        !           282: #define                        COP_VKCAP_DELTA         0x00000080
        !           283: #define                        COP_VKCAP_NUMSTEPS(x)   (x & 0x7f)
        !           284: #define CORB_GET_CONNECTION_SELECT_CONTROL     0xf01
        !           285: #define                CORB_CSC_INDEX(x)               (x & 0xff)
        !           286: #define CORB_SET_CONNECTION_SELECT_CONTROL     0x701
        !           287: #define CORB_GET_CONNECTION_LIST_ENTRY 0xf02
        !           288: #define                CORB_CLE_LONG_0(x)      (x & 0x0000ffff)
        !           289: #define                CORB_CLE_LONG_1(x)      ((x & 0xffff0000) >> 16)
        !           290: #define                CORB_CLE_SHORT_0(x)     (x & 0xff)
        !           291: #define                CORB_CLE_SHORT_1(x)     ((x >> 8) & 0xff)
        !           292: #define                CORB_CLE_SHORT_2(x)     ((x >> 16) & 0xff)
        !           293: #define                CORB_CLE_SHORT_3(x)     ((x >> 24) & 0xff)
        !           294: #define CORB_GET_PROCESSING_STATE      0xf03
        !           295: #define CORB_SET_PROCESSING_STATE      0x703
        !           296: #define CORB_GET_COEFFICIENT_INDEX     0xd00
        !           297: #define CORB_SET_COEFFICIENT_INDEX     0x500
        !           298: #define CORB_GET_PROCESSING_COEFFICIENT        0xc00
        !           299: #define CORB_SET_PROCESSING_COEFFICIENT        0x400
        !           300: #define CORB_GET_AMPLIFIER_GAIN_MUTE   0xb00
        !           301: #define                CORB_GAGM_INPUT         0x0000
        !           302: #define                CORB_GAGM_OUTPUT        0x8000
        !           303: #define                CORB_GAGM_RIGHT         0x0000
        !           304: #define                CORB_GAGM_LEFT          0x2000
        !           305: #define                CORB_GAGM_MUTE          0x00000080
        !           306: #define                CORB_GAGM_GAIN(x)       (x & 0x0000007f)
        !           307: #define CORB_SET_AMPLIFIER_GAIN_MUTE   0x300
        !           308: #define                CORB_AGM_GAIN_MASK      0x007f
        !           309: #define                CORB_AGM_MUTE           0x0080
        !           310: #define                CORB_AGM_INDEX_SHIFT    8
        !           311: #define                CORB_AGM_RIGHT          0x1000
        !           312: #define                CORB_AGM_LEFT           0x2000
        !           313: #define                CORB_AGM_INPUT          0x4000
        !           314: #define                CORB_AGM_OUTPUT         0x8000
        !           315: #define CORB_GET_CONVERTER_FORMAT      0xa00
        !           316: #define CORB_SET_CONVERTER_FORMAT      0x200
        !           317: #define CORB_GET_DIGITAL_CONVERTER_CONTROL     0xf0d
        !           318: #define CORB_SET_DIGITAL_CONVERTER_CONTROL_L   0x70d
        !           319: #define CORB_SET_DIGITAL_CONVERTER_CONTROL_H   0x70e
        !           320: #define CORB_GET_POWER_STATE           0xf05
        !           321: #define CORB_SET_POWER_STATE           0x705
        !           322: #define                CORB_PS_D0              0x0
        !           323: #define                CORB_PS_D1              0x1
        !           324: #define                CORB_PS_D2              0x2
        !           325: #define                CORB_PS_D3              0x3
        !           326: #define CORB_GET_CONVERTER_STREAM_CHANNEL      0xf06
        !           327: #define CORB_SET_CONVERTER_STREAM_CHANNEL      0x706
        !           328: #define CORB_GET_INPUT_CONVERTER_SDI_SELECT    0xf04
        !           329: #define CORB_SET_INPUT_CONVERTER_SDI_SELECT    0x704
        !           330: #define CORB_GET_PIN_WIDGET_CONTROL    0xf07
        !           331: #define CORB_SET_PIN_WIDGET_CONTROL    0x707
        !           332: #define                CORB_PWC_HEADPHONE      0x80
        !           333: #define                CORB_PWC_OUTPUT         0x40
        !           334: #define                CORB_PWC_INPUT          0x20
        !           335: #define                CORB_PWC_VREF_HIZ       0x00
        !           336: #define                CORB_PWC_VREF_50        0x01
        !           337: #define                CORB_PWC_VREF_GND       0x02
        !           338: #define                CORB_PWC_VREF_80        0x04
        !           339: #define                CORB_PWC_VREF_100       0x05
        !           340: #define CORB_GET_UNSOLICITED_RESPONSE  0xf08
        !           341: #define CORB_SET_UNSOLICITED_RESPONSE  0x708
        !           342: #define                CORB_UNSOL_ENABLE       0x80
        !           343: #define                CORB_UNSOL_TAG(x)       (x & 0x3f)
        !           344: #define CORB_GET_PIN_SENSE             0xf09
        !           345: #define                CORB_PS_PRESENCE        0x80000000
        !           346: #define                CORB_PS_IMPEDANCE(x)    (x & 0x7fffffff)
        !           347: #define CORB_EXECUTE_PIN_SENSE         0x709
        !           348: #define                CORB_PS_RIGHT           0x1
        !           349: #define CORB_GET_EAPD_BTL_ENABLE       0xf0c
        !           350: #define CORB_SET_EAPD_BTL_ENABLE       0x70c
        !           351: #define CORB_GET_GPI_DATA              0xf10
        !           352: #define CORB_SET_GPI_DATA              0x710
        !           353: #define CORB_GET_GPI_WAKE_ENABLE_MASK  0xf11
        !           354: #define CORB_SET_GPI_WAKE_ENABLE_MASK  0x711
        !           355: #define CORB_GET_GPI_UNSOLICITED_ENABLE_MASK   0xf12
        !           356: #define CORB_SET_GPI_UNSOLICITED_ENABLE_MASK   0x712
        !           357: #define CORB_GET_GPI_STICKY_MASK       0xf13
        !           358: #define CORB_SET_GPI_STICKY_MASK       0x713
        !           359: #define CORB_GET_GPO_DATA              0xf14
        !           360: #define CORB_SET_GPO_DATA              0x714
        !           361: #define CORB_GET_GPIO_DATA             0xf15
        !           362: #define CORB_SET_GPIO_DATA             0x715
        !           363: #define CORB_GET_GPIO_ENABLE_MASK      0xf16
        !           364: #define CORB_SET_GPIO_ENABLE_MASK      0x716
        !           365: #define CORB_GET_GPIO_DIRECTION                0xf17
        !           366: #define CORB_SET_GPIO_DIRECTION                0x717
        !           367: #define CORB_GET_GPIO_WAKE_ENABLE_MASK 0xf18
        !           368: #define CORB_SET_GPIO_WAKE_ENABLE_MASK 0x718
        !           369: #define CORB_GET_GPIO_UNSOLICITED_ENABLE_MASK  0xf19
        !           370: #define CORB_SET_GPIO_UNSOLICITED_ENABLE_MASK  0x719
        !           371: #define CORB_GET_GPIO_STICKY_MASK      0xf1a
        !           372: #define CORB_SET_GPIO_STICKY_MASK      0x71a
        !           373: #define CORB_GET_BEEP_GENERATION       0xf0a
        !           374: #define CORB_SET_BEEP_GENERATION       0x70a
        !           375: #define CORB_GET_VOLUME_KNOB           0xf0f
        !           376: #define CORB_SET_VOLUME_KNOB           0x70f
        !           377: #define                CORB_VKNOB_DIRECT       0x80
        !           378: #define                CORB_VKNOB_VOLUME(x)    (x & 0x7f)
        !           379: #define CORB_GET_SUBSYSTEM_ID          0xf20
        !           380: #define CORB_SET_SUBSYSTEM_ID_1                0x720
        !           381: #define CORB_SET_SUBSYSTEM_ID_2                0x721
        !           382: #define CORB_SET_SUBSYSTEM_ID_3                0x722
        !           383: #define CORB_SET_SUBSYSTEM_ID_4                0x723
        !           384: #define CORB_GET_CONFIGURATION_DEFAULT 0xf1c
        !           385: #define CORB_SET_CONFIGURATION_DEFAULT_1       0x71c
        !           386: #define CORB_SET_CONFIGURATION_DEFAULT_2       0x71d
        !           387: #define CORB_SET_CONFIGURATION_DEFAULT_3       0x71e
        !           388: #define CORB_SET_CONFIGURATION_DEFAULT_4       0x71f
        !           389: #define                CORB_CD_SEQUENCE(x)     (x & 0x0000000f)
        !           390: #define                CORB_CD_SEQUENCE_MAX    0x0f
        !           391: #define                CORB_CD_ASSOCIATION(x)  ((x >> 4) & 0xf)
        !           392: #define                CORB_CD_ASSOCIATION_MAX 0x0f
        !           393: #define                CORB_CD_MISC_MASK       0x00000f00
        !           394: #define                CORB_CD_COLOR(x)        ((x >> 12) & 0xf)
        !           395: #define                        CORB_CD_COLOR_UNKNOWN   0x0
        !           396: #define                        CORB_CD_BLACK   0x1
        !           397: #define                        CORB_CD_GRAY    0x2
        !           398: #define                        CORB_CD_BLUE    0x3
        !           399: #define                        CORB_CD_GREEN   0x4
        !           400: #define                        CORB_CD_RED     0x5
        !           401: #define                        CORB_CD_ORANGE  0x6
        !           402: #define                        CORB_CD_YELLOW  0x7
        !           403: #define                        CORB_CD_PURPLE  0x8
        !           404: #define                        CORB_CD_PINK    0x9
        !           405: #define                        CORB_CD_WHITE   0xe
        !           406: #define                        CORB_CD_COLOR_OTHER     0xf
        !           407: #define                CORB_CD_CONNECTION_MASK 0x000f0000
        !           408: #define                CORB_CD_DEVICE(x)       ((x >> 20) & 0xf)
        !           409: #define                        CORB_CD_LINEOUT         0x0
        !           410: #define                        CORB_CD_SPEAKER         0x1
        !           411: #define                        CORB_CD_HEADPHONE       0x2
        !           412: #define                        CORB_CD_CD              0x3
        !           413: #define                        CORB_CD_SPDIFOUT        0x4
        !           414: #define                        CORB_CD_DIGITALOUT      0x5
        !           415: #define                        CORB_CD_MODEMLINE       0x6
        !           416: #define                        CORB_CD_MODEMHANDSET    0x7
        !           417: #define                        CORB_CD_LINEIN          0x8
        !           418: #define                        CORB_CD_AUX             0x9
        !           419: #define                        CORB_CD_MICIN           0xa
        !           420: #define                        CORB_CD_TELEPHONY       0xb
        !           421: #define                        CORB_CD_SPDIFIN         0xc
        !           422: #define                        CORB_CD_DIGITALIN       0xd
        !           423: #define                        CORB_CD_DEVICE_OTHER    0xf
        !           424: #define                CORB_CD_LOCATION_MASK   0x3f000000
        !           425: #define                CORB_CD_PORT_MASK       0xc0000000
        !           426: #define CORB_GET_STRIPE_CONTROL                0xf24
        !           427: #define CORB_SET_STRIPE_CONTROL                0x720   /* XXX typo in the spec? */
        !           428: #define CORB_EXECUTE_FUNCTION_RESET    0x7ff
        !           429:
        !           430: #define CORB_NID_ROOT          0
        !           431: #define HDA_MAX_CHANNELS       16
        !           432:
        !           433: /* memory-mapped types */
        !           434: typedef struct {
        !           435:        uint32_t low;
        !           436:        uint32_t high;
        !           437:        uint32_t length;
        !           438:        uint32_t flags;
        !           439: #define        BDLIST_ENTRY_IOC        0x00000001
        !           440: } __packed bdlist_entry_t;
        !           441: #define HDA_BDL_MAX    256
        !           442:
        !           443: typedef struct {
        !           444:        uint32_t position;
        !           445:        uint32_t reserved;
        !           446: } __packed dmaposition_t;
        !           447:
        !           448: typedef uint32_t corb_entry_t;
        !           449: typedef struct {
        !           450:        uint32_t resp;
        !           451:        uint32_t resp_ex;
        !           452: #define RIRB_UNSOL_TAG(resp)   ((resp) >> 26)
        !           453: #define RIRB_RESP_UNSOL                (1 << 4)
        !           454: #define RIRB_RESP_CODEC(ex)    ((ex) & 0xf)
        !           455: } __packed rirb_entry_t;
        !           456:
        !           457:
        !           458: /* #define AZALIA_DEBUG */
        !           459: #ifdef AZALIA_DEBUG
        !           460: # define DPRINTF(x)    do { printf x; } while (0/*CONSTCOND*/)
        !           461: #else
        !           462: # define DPRINTF(x)    do {} while (0/*CONSTCOND*/)
        !           463: #endif
        !           464: #define PTR_UPPER32(x) ((uint64_t)(x) >> 32)
        !           465: #define FLAGBUFLEN     256
        !           466: #define MAX_VOLUME_255 1
        !           467:
        !           468: typedef int nid_t;
        !           469:
        !           470: typedef struct {
        !           471:        nid_t nid;
        !           472:        uint32_t widgetcap;
        !           473:        int type;               /* = bit20-24 of widgetcap */
        !           474:        int nconnections;
        !           475:        nid_t *connections;
        !           476:        int selected;
        !           477:        uint32_t inamp_cap;
        !           478:        uint32_t outamp_cap;
        !           479:        char name[MAX_AUDIO_DEV_LEN];
        !           480:        union {
        !           481:                struct {        /* for AUDIO_INPUT/OUTPUT */
        !           482:                        uint32_t encodings;
        !           483:                        uint32_t bits_rates;
        !           484:                } audio;
        !           485:                struct {        /* for PIN */
        !           486:                        uint32_t cap;
        !           487:                        uint32_t config;
        !           488:                        int sequence;
        !           489:                        int association;
        !           490:                        int color;
        !           491:                        int device;
        !           492:                } pin;
        !           493:                struct {        /* for VOLUME_KNOB */
        !           494:                        uint32_t cap;
        !           495:                } volume;
        !           496:        } d;
        !           497: } widget_t;
        !           498: #define        WIDGET_CHANNELS(w)      ((w)->widgetcap & COP_AWCAP_STEREO ? 2 : 1)
        !           499:
        !           500: typedef struct {
        !           501:        mixer_devinfo_t devinfo;
        !           502:        nid_t nid;              /* target NID; 0 is invalid. */
        !           503:        int target;             /* 0-15: inamp index, 0x100: outamp, ... */
        !           504: #define IS_MI_TARGET_INAMP(x)  ((x) <= 15)
        !           505: #define MI_TARGET_INAMP(x)     (x)
        !           506: #define MI_TARGET_OUTAMP       0x100
        !           507: #define MI_TARGET_CONNLIST     0x101
        !           508: #define MI_TARGET_PINDIR       0x102 /* for bidirectional pin */
        !           509: #define MI_TARGET_PINBOOST     0x103 /* for headphone pin */
        !           510: #define MI_TARGET_DAC          0x104
        !           511: #define MI_TARGET_ADC          0x105
        !           512: #define MI_TARGET_VOLUME       0x106
        !           513: } mixer_item_t;
        !           514:
        !           515: #define VALID_WIDGET_NID(nid, codec)   (nid == (codec)->audiofunc || \
        !           516:                                         (nid >= (codec)->wstart &&   \
        !           517:                                          nid < (codec)->wend))
        !           518:
        !           519: typedef struct {
        !           520:        int nconv;
        !           521:        nid_t conv[HDA_MAX_CHANNELS]; /* front, surround, clfe, side, ... */
        !           522: } convgroup_t;
        !           523: typedef struct {
        !           524:        int cur;
        !           525:        int ngroups;
        !           526:        convgroup_t groups[32];
        !           527: } convgroupset_t;
        !           528:
        !           529: typedef struct codec_t {
        !           530:        int (*comresp)(const struct codec_t *, nid_t, uint32_t, uint32_t, uint32_t *);
        !           531:        int (*init_dacgroup)(struct codec_t *);
        !           532:        int (*init_widget)(const struct codec_t *, widget_t *, nid_t);
        !           533:        int (*mixer_init)(struct codec_t *);
        !           534:        int (*mixer_delete)(struct codec_t *);
        !           535:        int (*set_port)(struct codec_t *, mixer_ctrl_t *);
        !           536:        int (*get_port)(struct codec_t *, mixer_ctrl_t *);
        !           537:        int (*unsol_event)(struct codec_t *, int);
        !           538:
        !           539:        struct azalia_t *az;
        !           540:        uint32_t vid;           /* codec vendor/device ID */
        !           541:        uint32_t subid;         /* PCI subvendor/device ID */
        !           542:        const char *name;
        !           543:        int address;
        !           544:        int nfunctions;
        !           545:        nid_t audiofunc;        /* NID of an audio function node */
        !           546:        nid_t wstart;           /* start NID of audio widgets */
        !           547:        nid_t wend;             /* the last NID of audio widgets + 1 */
        !           548:        widget_t *w;            /* widgets in the audio function.
        !           549:                                 * w[0] to w[wstart-1] are unused. */
        !           550: #define FOR_EACH_WIDGET(this, i)       for (i = (this)->wstart; i < (this)->wend; i++)
        !           551:
        !           552:        convgroupset_t dacs;
        !           553:        convgroupset_t adcs;
        !           554:        int running;
        !           555:
        !           556:        int nmixers, maxmixers;
        !           557:        mixer_item_t *mixers;
        !           558:
        !           559:        struct audio_format* formats;
        !           560:        int nformats;
        !           561:        struct audio_encoding_set *encodings;
        !           562:
        !           563:        uint32_t *extra;
        !           564: } codec_t;
        !           565:
        !           566:
        !           567: int    azalia_codec_init_vtbl(codec_t *);
        !           568: int    azalia_codec_construct_format(codec_t *, int, int);

CVSweb