root/dev/pci/azalia.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. bdlist_entry_t
  2. dmaposition_t
  3. rirb_entry_t
  4. widget_t
  5. mixer_item_t
  6. convgroup_t
  7. convgroupset_t
  8. codec_t

    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);

/* [<][>][^][v][top][bottom][index][help] */