[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

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