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

Annotation of sys/dev/pci/cmpcivar.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $NetBSD: cmpcivar.h,v 1.9 2005/12/11 12:22:48 christos Exp $    */
                      2:
                      3: /*
                      4:  * Copyright (c) 2000, 2001 The NetBSD Foundation, Inc.
                      5:  * All rights reserved.
                      6:  *
                      7:  * This code is derived from software contributed to The NetBSD Foundation
                      8:  * by Takuya SHIOZAKI <tshiozak@NetBSD.org> .
                      9:  *
                     10:  * This code is derived from software contributed to The NetBSD Foundation
                     11:  * by ITOH Yasufumi.
                     12:  *
                     13:  * Redistribution and use in source and binary forms, with or without
                     14:  * modification, are permitted provided that the following conditions
                     15:  * are met:
                     16:  * 1. Redistributions of source code must retain the above copyright
                     17:  *    notice, this list of conditions and the following disclaimer.
                     18:  * 2. Redistributions in binary form must reproduce the above copyright
                     19:  *    notice, this list of conditions and the following disclaimer in the
                     20:  *    documentation and/or other materials provided with the distribution.
                     21:  *
                     22:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
                     23:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     24:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     25:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
                     26:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     27:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     28:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     29:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     30:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     31:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     32:  * SUCH DAMAGE.
                     33:  *
                     34:  */
                     35:
                     36: /* C-Media CMI8x38 Audio Chip Support */
                     37:
                     38: #ifndef _DEV_PCI_CMPCIVAR_H_
                     39: #define _DEV_PCI_CMPCIVAR_H_
                     40:
                     41:
                     42: /*
                     43:  * DMA pool
                     44:  */
                     45: struct cmpci_dmanode {
                     46:        bus_dma_tag_t           cd_tag;
                     47:        int                     cd_nsegs;
                     48:        bus_dma_segment_t       cd_segs[1];
                     49:        bus_dmamap_t            cd_map;
                     50:        caddr_t                 cd_addr;
                     51:        size_t                  cd_size;
                     52:        struct cmpci_dmanode    *cd_next;
                     53: };
                     54:
                     55: typedef struct cmpci_dmanode *cmpci_dmapool_t;
                     56: #define KVADDR(dma)  ((void *)(dma)->cd_addr)
                     57: #define DMAADDR(dma) ((dma)->cd_map->dm_segs[0].ds_addr)
                     58:
                     59:
                     60: /*
                     61:  * Mixer device
                     62:  *
                     63:  * Note that cmpci_query_devinfo() is optimized depending on
                     64:  * the order of this.  Be careful if you change the values.
                     65:  */
                     66: #define CMPCI_DAC_VOL                  0       /* inputs.dac */
                     67: #define CMPCI_FM_VOL                   1       /* inputs.fmsynth */
                     68: #define CMPCI_CD_VOL                   2       /* inputs.cd */
                     69: #define CMPCI_LINE_IN_VOL              3       /* inputs.line */
                     70: #define CMPCI_AUX_IN_VOL               4       /* inputs.aux */
                     71: #define CMPCI_MIC_VOL                  5       /* inputs.mic */
                     72:
                     73: #define CMPCI_DAC_MUTE                 6       /* inputs.dac.mute */
                     74: #define CMPCI_FM_MUTE                  7       /* inputs.fmsynth.mute */
                     75: #define CMPCI_CD_MUTE                  8       /* inputs.cd.mute */
                     76: #define CMPCI_LINE_IN_MUTE             9       /* inputs.line.mute */
                     77: #define CMPCI_AUX_IN_MUTE              10      /* inputs.aux.mute */
                     78: #define CMPCI_MIC_MUTE                 11      /* inputs.mic.mute */
                     79:
                     80: #define CMPCI_MIC_PREAMP               12      /* inputs.mic.preamp */
                     81: #define CMPCI_PCSPEAKER                        13      /* inputs.speaker */
                     82:
                     83: #define CMPCI_RECORD_SOURCE            14      /* record.source */
                     84: #define CMPCI_MIC_RECVOL               15      /* record.mic */
                     85:
                     86: #define CMPCI_PLAYBACK_MODE            16      /* playback.mode */
                     87: #define CMPCI_SPDIF_IN_SELECT          17      /* spdif.input */
                     88: #define CMPCI_SPDIF_IN_PHASE           18      /* spdif.input.phase */
                     89: #define CMPCI_SPDIF_LOOP               19      /* spdif.output */
                     90: #define CMPCI_SPDIF_OUT_PLAYBACK       20      /* spdif.output.playback */
                     91: #define CMPCI_SPDIF_OUT_VOLTAGE                21      /* spdif.output.voltage */
                     92: #define CMPCI_MONITOR_DAC              22      /* spdif.monitor */
                     93:
                     94: #define CMPCI_MASTER_VOL               23      /* outputs.master */
                     95: #define CMPCI_REAR                     24      /* outputs.rear */
                     96: #define CMPCI_INDIVIDUAL               25      /* outputs.rear.individual */
                     97: #define CMPCI_REVERSE                  26      /* outputs.rear.reverse */
                     98: #define CMPCI_SURROUND                 27      /* outputs.surround */
                     99:
                    100: #define CMPCI_NDEVS                    28
                    101:
                    102: #define CMPCI_INPUT_CLASS              28
                    103: #define CMPCI_OUTPUT_CLASS             29
                    104: #define CMPCI_RECORD_CLASS             30
                    105: #define CMPCI_PLAYBACK_CLASS           31
                    106: #define CMPCI_SPDIF_CLASS              32
                    107:
                    108: #define CmpciNspdif                    "spdif"
                    109: #define CmpciCspdif                    "spdif"
                    110: #define CmpciNspdin                    "spdin"
                    111: #define CmpciNspdin1                   "spdin1"
                    112: #define CmpciNspdin2                   "spdin2"
                    113: #define CmpciNspdout                   "spdout"
                    114: #define CmpciNplayback                 "playback"
                    115: #define CmpciCplayback                 "playback"
                    116: #define CmpciNlegacy                   "legacy"
                    117: #define CmpciNvoltage                  "voltage"
                    118: #define CmpciNphase                    "phase"
                    119: #define CmpciNpositive                 "positive"
                    120: #define CmpciNnegative                 "negative"
                    121: #define CmpciNrear                     "rear"
                    122: #define CmpciNindividual               "individual"
                    123: #define CmpciNreverse                  "reverse"
                    124: #define CmpciNhigh_v                   "5V"
                    125: #define CmpciNlow_v                    "0.5V"
                    126: #define CmpciNsurround                 "surround"
                    127:
                    128: /* record.source bitmap (see cmpci_set_in_ports()) */
                    129: #define CMPCI_RECORD_SOURCE_MIC                CMPCI_SB16_MIXER_MIC_SRC    /* mic */
                    130: #define CMPCI_RECORD_SOURCE_CD         CMPCI_SB16_MIXER_CD_SRC_R   /* cd */
                    131: #define CMPCI_RECORD_SOURCE_LINE_IN    CMPCI_SB16_MIXER_LINE_SRC_R /* line */
                    132: #define CMPCI_RECORD_SOURCE_AUX_IN     (1 << 8)                    /* aux */
                    133: #define CMPCI_RECORD_SOURCE_WAVE       (1 << 9)                    /* wave */
                    134: #define CMPCI_RECORD_SOURCE_FM         CMPCI_SB16_MIXER_FM_SRC_R   /* fmsynth*/
                    135: #define CMPCI_RECORD_SOURCE_SPDIF      (1 << 10)                   /* spdif */
                    136:
                    137: /* playback.mode */
                    138: #define CMPCI_PLAYBACK_MODE_WAVE       0               /* dac */
                    139: #define CMPCI_PLAYBACK_MODE_SPDIF      1               /* spdif */
                    140:
                    141: /* spdif.input */
                    142: #define CMPCI_SPDIFIN_SPDIFIN2 0x01
                    143: #define CMPCI_SPDIFIN_SPDIFOUT 0x02
                    144: #define CMPCI_SPDIF_IN_SPDIN1  0                       /* spdin1 */
                    145: #define CMPCI_SPDIF_IN_SPDIN2  CMPCI_SPDIFIN_SPDIFIN2  /* spdin2 */
                    146: #define CMPCI_SPDIF_IN_SPDOUT  (CMPCI_SPDIFIN_SPDIFIN2|CMPCI_SPDIFIN_SPDIFOUT)
                    147:                                                        /* spdout */
                    148: /* spdif.input.phase */
                    149: #define CMPCI_SPDIF_IN_PHASE_POSITIVE  0               /* positive */
                    150: #define CMPCI_SPDIF_IN_PHASE_NEGATIVE  1               /* negative */
                    151:
                    152: /* spdif.output */
                    153: #define CMPCI_SPDIF_LOOP_OFF           0               /* playback */
                    154: #define CMPCI_SPDIF_LOOP_ON            1               /* spdin */
                    155:
                    156: /* spdif.output.playback */
                    157: #define CMPCI_SPDIF_OUT_PLAYBACK_WAVE  0               /* wave */
                    158: #define CMPCI_SPDIF_OUT_PLAYBACK_LEGACY        1               /* legacy */
                    159:
                    160: /* spdif.output.voltage */
                    161: #define CMPCI_SPDIF_OUT_VOLTAGE_HIGH   0               /* 5V */
                    162: #define CMPCI_SPDIF_OUT_VOLTAGE_LOW    1               /* 0.5V */
                    163:
                    164: /* spdif.monitor */
                    165: #define CMPCI_MONDAC_ENABLE    0x01
                    166: #define CMPCI_MONDAC_SPDOUT    0x02
                    167: #define CMPCI_MONITOR_DAC_OFF   0                      /* off */
                    168: #define CMPCI_MONITOR_DAC_SPDIN  CMPCI_MONDAC_ENABLE   /* spdin */
                    169: #define CMPCI_MONITOR_DAC_SPDOUT (CMPCI_MONDAC_ENABLE | CMPCI_MONDAC_SPDOUT)
                    170:                                                        /* spdout */
                    171:
                    172: /*
                    173:  * softc
                    174:  */
                    175: struct cmpci_softc {
                    176:        struct device           sc_dev;
                    177:
                    178:        /* model/rev */
                    179:        uint32_t                sc_id;
                    180:        uint32_t                sc_class;
                    181:        uint32_t                sc_capable;
                    182: #define CMPCI_CAP_SPDIN                        0x00000001
                    183: #define CMPCI_CAP_SPDOUT               0x00000002
                    184: #define CMPCI_CAP_SPDLOOP              0x00000004
                    185: #define CMPCI_CAP_SPDLEGACY            0x00000008
                    186: #define CMPCI_CAP_SPDIN_MONITOR                0x00000010
                    187: #define CMPCI_CAP_XSPDOUT              0x00000020
                    188: #define CMPCI_CAP_SPDOUT_VOLTAGE       0x00000040
                    189: #define CMPCI_CAP_SPDOUT_48K           0x00000080
                    190: #define CMPCI_CAP_SURROUND             0x00000100
                    191: #define CMPCI_CAP_REAR                 0x00000200
                    192: #define CMPCI_CAP_INDIVIDUAL_REAR      0x00000400
                    193: #define CMPCI_CAP_REVERSE_FR           0x00000800
                    194: #define CMPCI_CAP_SPDIN_PHASE          0x00001000
                    195: #define CMPCI_CAP_2ND_SPDIN            0x00002000
                    196:
                    197: #define CMPCI_CAP_CMI8338      (CMPCI_CAP_SPDIN | CMPCI_CAP_SPDOUT | \
                    198:                                CMPCI_CAP_SPDLOOP | CMPCI_CAP_SPDLEGACY)
                    199:
                    200: #define CMPCI_CAP_CMI8738      (CMPCI_CAP_CMI8338 | \
                    201:                                CMPCI_CAP_SPDIN_MONITOR | \
                    202:                                CMPCI_CAP_XSPDOUT | \
                    203:                                CMPCI_CAP_SPDOUT_VOLTAGE | \
                    204:                                CMPCI_CAP_SPDOUT_48K | CMPCI_CAP_SURROUND |\
                    205:                                CMPCI_CAP_REAR | \
                    206:                                CMPCI_CAP_INDIVIDUAL_REAR | \
                    207:                                CMPCI_CAP_REVERSE_FR | \
                    208:                                CMPCI_CAP_SPDIN_PHASE | \
                    209:                                CMPCI_CAP_2ND_SPDIN /* XXX 6ch only */)
                    210: #define CMPCI_ISCAP(sc, name)  (sc->sc_capable & CMPCI_CAP_ ## name)
                    211:
                    212:        /* I/O Base device */
                    213:        bus_space_tag_t         sc_iot;
                    214:        bus_space_handle_t      sc_ioh;
                    215:
                    216:        bus_space_handle_t      sc_mpu_ioh;
                    217:        struct device           *sc_mpudev;
                    218:
                    219:        /* intr handle */
                    220:        pci_intr_handle_t       *sc_ih;
                    221:
                    222:        /* DMA */
                    223:        bus_dma_tag_t           sc_dmat;
                    224:        cmpci_dmapool_t         sc_dmap;
                    225:
                    226:        /* each channel */
                    227:        struct {
                    228:                void            (*intr)(void *);
                    229:                void            *intr_arg;
                    230:                int             md_divide;
                    231:        } sc_play, sc_rec;
                    232:
                    233:        /* value of CMPCI_REG_MISC register */
                    234:        uint32_t                sc_reg_misc;
                    235:
                    236:        /* mixer */
                    237:        uint8_t                 sc_gain[CMPCI_NDEVS][2];
                    238: #define CMPCI_LEFT     0
                    239: #define CMPCI_RIGHT    1
                    240: #define CMPCI_LR       0
                    241:        uint16_t                sc_in_mask;
                    242: };
                    243:
                    244:
                    245: #endif /* _DEV_PCI_CMPCIVAR_H_ */
                    246:
                    247: /* end of file */

CVSweb