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

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

1.1     ! nbrk        1: /*     $OpenBSD: ydsreg.h,v 1.5 2004/12/20 12:29:36 deraadt Exp $      */
        !             2: /*     $NetBSD$        */
        !             3:
        !             4: /*
        !             5:  * Copyright (c) 2000, 2001 Kazuki Sakamoto and Minoura Makoto.
        !             6:  * All rights reserved.
        !             7:  *
        !             8:  * Redistribution and use in source and binary forms, with or without
        !             9:  * modification, are permitted provided that the following conditions
        !            10:  * are met:
        !            11:  * 1. Redistributions of source code must retain the above copyright
        !            12:  *    notice, this list of conditions and the following disclaimer.
        !            13:  * 2. Redistributions in binary form must reproduce the above copyright
        !            14:  *    notice, this list of conditions and the following disclaimer in the
        !            15:  *    documentation and/or other materials provided with the distribution.
        !            16:  *
        !            17:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
        !            18:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
        !            19:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
        !            20:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
        !            21:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
        !            22:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
        !            23:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
        !            24:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
        !            25:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
        !            26:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
        !            27:  */
        !            28:
        !            29: /*
        !            30:  * YMF724/740/744/754 registers
        !            31:  */
        !            32:
        !            33: #ifndef _DEV_PCI_YDSREG_H_
        !            34: #define        _DEV_PCI_YDSREG_H_
        !            35:
        !            36: /*
        !            37:  * PCI Config Registers
        !            38:  */
        !            39: #define        YDS_PCI_MBA             0x10
        !            40: #define        YDS_PCI_LEGACY          0x40
        !            41: # define YDS_PCI_LEGACY_SBEN   0x0001
        !            42: # define YDS_PCI_LEGACY_FMEN   0x0002
        !            43: # define YDS_PCI_LEGACY_JPEN   0x0004
        !            44: # define YDS_PCI_LEGACY_MEN    0x0008
        !            45: # define YDS_PCI_LEGACY_MIEN   0x0010
        !            46: # define YDS_PCI_LEGACY_IO     0x0020
        !            47: # define YDS_PCI_LEGACY_SDMA0  0x0000
        !            48: # define YDS_PCI_LEGACY_SDMA1  0x0040
        !            49: # define YDS_PCI_LEGACY_SDMA3  0x00c0
        !            50: # define YDS_PCI_LEGACY_SBIRQ5 0x0000
        !            51: # define YDS_PCI_LEGACY_SBIRQ7 0x0100
        !            52: # define YDS_PCI_LEGACY_SBIRQ9 0x0200
        !            53: # define YDS_PCI_LEGACY_SBIRQ10        0x0300
        !            54: # define YDS_PCI_LEGACY_SBIRQ11        0x0400
        !            55: # define YDS_PCI_LEGACY_MPUIRQ5        0x0000
        !            56: # define YDS_PCI_LEGACY_MPUIRQ7        0x0800
        !            57: # define YDS_PCI_LEGACY_MPUIRQ9        0x1000
        !            58: # define YDS_PCI_LEGACY_MPUIRQ10 0x1800
        !            59: # define YDS_PCI_LEGACY_MPUIRQ11 0x2000
        !            60: # define YDS_PCI_LEGACY_SIEN   0x4000
        !            61: # define YDS_PCI_LEGACY_LAD    0x8000
        !            62:
        !            63: # define YDS_PCI_EX_LEGACY_FMIO_388    (0x0000 << 16)
        !            64: # define YDS_PCI_EX_LEGACY_FMIO_398    (0x0001 << 16)
        !            65: # define YDS_PCI_EX_LEGACY_FMIO_3A0    (0x0002 << 16)
        !            66: # define YDS_PCI_EX_LEGACY_FMIO_3A8    (0x0003 << 16)
        !            67: # define YDS_PCI_EX_LEGACY_SBIO_220    (0x0000 << 16)
        !            68: # define YDS_PCI_EX_LEGACY_SBIO_240    (0x0004 << 16)
        !            69: # define YDS_PCI_EX_LEGACY_SBIO_260    (0x0008 << 16)
        !            70: # define YDS_PCI_EX_LEGACY_SBIO_280    (0x000c << 16)
        !            71: # define YDS_PCI_EX_LEGACY_MPUIO_330   (0x0000 << 16)
        !            72: # define YDS_PCI_EX_LEGACY_MPUIO_300   (0x0010 << 16)
        !            73: # define YDS_PCI_EX_LEGACY_MPUIO_332   (0x0020 << 16)
        !            74: # define YDS_PCI_EX_LEGACY_MPUIO_334   (0x0030 << 16)
        !            75: # define YDS_PCI_EX_LEGACY_JSIO_201    (0x0000 << 16)
        !            76: # define YDS_PCI_EX_LEGACY_JSIO_202    (0x0040 << 16)
        !            77: # define YDS_PCI_EX_LEGACY_JSIO_204    (0x0080 << 16)
        !            78: # define YDS_PCI_EX_LEGACY_JSIO_205    (0x00c0 << 16)
        !            79: # define YDS_PCI_EX_LEGACY_MAIM                (0x0100 << 16)
        !            80: # define YDS_PCI_EX_LEGACY_SMOD_PCI    (0x0000 << 16)
        !            81: # define YDS_PCI_EX_LEGACY_SMOD_DISABLE        (0x0800 << 16)
        !            82: # define YDS_PCI_EX_LEGACY_SMOD_DDMA   (0x1000 << 16)
        !            83: # define YDS_PCI_EX_LEGACY_SBVER_3     (0x0000 << 16)
        !            84: # define YDS_PCI_EX_LEGACY_SBVER_2     (0x2000 << 16)
        !            85: # define YDS_PCI_EX_LEGACY_SBVER_1     (0x4000 << 16)
        !            86: # define YDS_PCI_EX_LEGACY_IMOD                (0x8000 << 16)
        !            87:
        !            88: #define        YDS_PCI_DSCTRL          0x48
        !            89: # define YDS_DSCTRL_CRST       0x00000001
        !            90: # define YDS_DSCTRL_WRST       0x00000004
        !            91:
        !            92: #define YDS_PCI_FM_BA          0x60
        !            93: #define YDS_PCI_SB_BA          0x62
        !            94: #define YDS_PCI_MPU_BA         0x64
        !            95: #define YDS_PCI_JS_BA          0x66
        !            96:
        !            97: /*
        !            98:  * DS-1 PCI Audio part registers
        !            99:  */
        !           100: #define YDS_INTERRUPT_FLAGS    0x0004
        !           101: #define YDS_INTERRUPT_FLAGS_TI 0x0001
        !           102: #define YDS_ACTIVITY           0x0006
        !           103: # define YDS_ACTIVITY_DOCKA    0x0010
        !           104: #define        YDS_GLOBAL_CONTROL      0x0008
        !           105: # define YDS_GLCTRL_HVE                0x0001
        !           106: # define YDS_GLCTRL_HVIE       0x0002
        !           107:
        !           108: #define YDS_GPIO_IIF           0x0050
        !           109: # define YDS_GPIO_GIO0         0x0001
        !           110: # define YDS_GPIO_GIO1         0x0002
        !           111: # define YDS_GPIO_GIO2         0x0004
        !           112: #define YDS_GPIO_IIE           0x0052
        !           113: # define YDS_GPIO_GIE0         0x0001
        !           114: # define YDS_GPIO_GIE1         0x0002
        !           115: # define YDS_GPIO_GIE2         0x0004
        !           116: #define YDS_GPIO_ISTAT         0x0054
        !           117: # define YDS_GPIO_GPI0         0x0001
        !           118: # define YDS_GPIO_GPI1         0x0002
        !           119: # define YDS_GPIO_GPI2         0x0004
        !           120: #define YDS_GPIO_OCTRL         0x0056
        !           121: # define YDS_GPIO_GPO0         0x0001
        !           122: # define YDS_GPIO_GPO1         0x0002
        !           123: # define YDS_GPIO_GPO2         0x0004
        !           124: #define YDS_GPIO_FUNCE         0x0058
        !           125: # define YDS_GPIO_GPC0         0x0001
        !           126: # define YDS_GPIO_GPC1         0x0002
        !           127: # define YDS_GPIO_GPC2         0x0004
        !           128: # define YDS_GPIO_GPE0         0x0010
        !           129: # define YDS_GPIO_GPE1         0x0020
        !           130: # define YDS_GPIO_GPE2         0x0040
        !           131: #define YDS_GPIO_ITYPE         0x005a
        !           132: # define YDS_GPIO_GPT0_LEVEL   0x0000
        !           133: # define YDS_GPIO_GPT0_RISE    0x0001
        !           134: # define YDS_GPIO_GPT0_FALL    0x0002
        !           135: # define YDS_GPIO_GPT0_BOTH    0x0003
        !           136: # define YDS_GPIO_GPT0_MASK    0x0003
        !           137: # define YDS_GPIO_GPT1_LEVEL   0x0004
        !           138: # define YDS_GPIO_GPT1_RISE    0x0005
        !           139: # define YDS_GPIO_GPT1_FALL    0x0006
        !           140: # define YDS_GPIO_GPT1_BOTH    0x0007
        !           141: # define YDS_GPIO_GPT1_MASK    0x0007
        !           142: # define YDS_GPIO_GPT2_LEVEL   0x0000
        !           143: # define YDS_GPIO_GPT2_RISE    0x0010
        !           144: # define YDS_GPIO_GPT2_FALL    0x0020
        !           145: # define YDS_GPIO_GPT2_BOTH    0x0030
        !           146: # define YDS_GPIO_GPT2_MASK    0x0030
        !           147:
        !           148: #define        YDS_GLOBAL_CONTROL      0x0008
        !           149: # define YDS_GLCTRL_HVE                0x0001
        !           150: # define YDS_GLCTRL_HVIE       0x0002
        !           151:
        !           152: #define        AC97_CMD_DATA           0x0060
        !           153: #define        AC97_CMD_ADDR           0x0062
        !           154: # define AC97_ID(id)           ((id) << 8)
        !           155: # define AC97_CMD_READ         0x8000
        !           156: # define AC97_CMD_WRITE                0x0000
        !           157: #define        AC97_STAT_DATA1         0x0064
        !           158: #define        AC97_STAT_ADDR1         0x0066
        !           159: #define        AC97_STAT_DATA2         0x0068
        !           160: #define        AC97_STAT_ADDR2         0x006a
        !           161: # define AC97_BUSY             0x8000
        !           162:
        !           163: #define        YDS_LEGACY_OUT_VOLUME   0x0080
        !           164: #define        YDS_DAC_OUT_VOLUME      0x0084
        !           165: #define        YDS_DAC_OUT_VOL_L       0x0084
        !           166: #define        YDS_DAC_OUT_VOL_R       0x0086
        !           167: #define        YDS_ZV_OUT_VOLUME       0x0088
        !           168: #define        YDS_2ND_OUT_VOLUME      0x008C
        !           169: #define        YDS_ADC_OUT_VOLUME      0x0090
        !           170: #define        YDS_LEGACY_REC_VOLUME   0x0094
        !           171: #define        YDS_DAC_REC_VOLUME      0x0098
        !           172: #define        YDS_ZV_REC_VOLUME       0x009C
        !           173: #define        YDS_2ND_REC_VOLUME      0x00A0
        !           174: #define        YDS_ADC_REC_VOLUME      0x00A4
        !           175: #define        YDS_ADC_IN_VOLUME       0x00A8
        !           176: #define        YDS_REC_IN_VOLUME       0x00AC
        !           177: #define        YDS_P44_OUT_VOLUME      0x00B0
        !           178: #define        YDS_P44_REC_VOLUME      0x00B4
        !           179: #define        YDS_SPDIFIN_OUT_VOLUME  0x00B8
        !           180: #define        YDS_SPDIFIN_REC_VOLUME  0x00BC
        !           181:
        !           182: #define        YDS_ADC_SAMPLE_RATE     0x00c0
        !           183: #define        YDS_REC_SAMPLE_RATE     0x00c4
        !           184: #define        YDS_ADC_FORMAT          0x00c8
        !           185: #define        YDS_REC_FORMAT          0x00cc
        !           186: # define YDS_FORMAT_8BIT       0x01
        !           187: # define YDS_FORMAT_STEREO     0x02
        !           188:
        !           189: #define        YDS_STATUS              0x0100
        !           190: # define YDS_STAT_ACT          0x00000001
        !           191: # define YDS_STAT_WORK         0x00000002
        !           192: # define YDS_STAT_TINT         0x00008000
        !           193: # define YDS_STAT_INT          0x80000000
        !           194: #define        YDS_CONTROL_SELECT      0x0104
        !           195: # define YDS_CSEL              0x00000001
        !           196: #define        YDS_MODE                0x0108
        !           197: # define YDS_MODE_ACTV         0x00000001
        !           198: # define YDS_MODE_ACTV2                0x00000002
        !           199: # define YDS_MODE_TOUT         0x00008000
        !           200: # define YDS_MODE_RESET                0x00010000
        !           201: # define YDS_MODE_AC3          0x40000000
        !           202: # define YDS_MODE_MUTE         0x80000000
        !           203:
        !           204: #define        YDS_CONFIG              0x0114
        !           205: # define YDS_DSP_DISABLE       0
        !           206: # define YDS_DSP_SETUP         0x00000001
        !           207:
        !           208: #define        YDS_PLAY_CTRLSIZE       0x0140
        !           209: #define        YDS_REC_CTRLSIZE        0x0144
        !           210: #define        YDS_EFFECT_CTRLSIZE     0x0148
        !           211: #define        YDS_WORK_SIZE           0x014c
        !           212: #define        YDS_MAPOF_REC           0x0150
        !           213: # define YDS_RECSLOT_VALID     0x00000001
        !           214: # define YDS_ADCSLOT_VALID     0x00000002
        !           215: #define        YDS_MAPOF_EFFECT        0x0154
        !           216: # define YDS_DL_VALID          0x00000001
        !           217: # define YDS_DR_VALID          0x00000002
        !           218: # define YDS_EFFECT1_VALID     0x00000004
        !           219: # define YDS_EFFECT2_VALID     0x00000008
        !           220: # define YDS_EFFECT3_VALID     0x00000010
        !           221:
        !           222: #define        YDS_PLAY_CTRLBASE       0x0158
        !           223: #define        YDS_REC_CTRLBASE        0x015c
        !           224: #define        YDS_EFFECT_CTRLBASE     0x0160
        !           225: #define        YDS_WORK_BASE           0x0164
        !           226:
        !           227: #define        YDS_DSP_INSTRAM         0x1000
        !           228: #define        YDS_CTRL_INSTRAM        0x4000
        !           229:
        !           230: typedef enum {
        !           231:        YDS_DS_1,
        !           232:        YDS_DS_1E
        !           233: } yds_dstype_t;
        !           234:
        !           235: #define        AC97_TIMEOUT            1000
        !           236: #define        YDS_WORK_TIMEOUT        250000
        !           237:
        !           238: /* slot control data structures */
        !           239: #define        MAX_PLAY_SLOT_CTRL      64
        !           240: #define        N_PLAY_SLOT_CTRL_BANK   2
        !           241: #define        N_REC_SLOT_CTRL         2
        !           242: #define        N_REC_SLOT_CTRL_BANK    2
        !           243:
        !           244: /*
        !           245:  * play slot
        !           246:  */
        !           247: union play_slot_table {
        !           248:        u_int32_t numofplay;
        !           249:        u_int32_t slotbase;
        !           250: };
        !           251:
        !           252: struct play_slot_ctrl_bank {
        !           253:        u_int32_t format;
        !           254: #define        PSLT_FORMAT_STEREO      0x00010000
        !           255: #define        PSLT_FORMAT_8BIT        0x80000000
        !           256: #define        PSLT_FORMAT_SRC441      0x10000000
        !           257: #define PSLT_FORMAT_RCH                0x00000001
        !           258:        u_int32_t loopdefault;
        !           259:        u_int32_t pgbase;
        !           260:        u_int32_t pgloop;
        !           261:        u_int32_t pgloopend;
        !           262:        u_int32_t pgloopfrac;
        !           263:        u_int32_t pgdeltaend;
        !           264:        u_int32_t lpfkend;
        !           265:        u_int32_t eggainend;
        !           266:        u_int32_t lchgainend;
        !           267:        u_int32_t rchgainend;
        !           268:        u_int32_t effect1gainend;
        !           269:        u_int32_t effect2gainend;
        !           270:        u_int32_t effect3gainend;
        !           271:        u_int32_t lpfq;
        !           272:        u_int32_t status;
        !           273: #define        PSLT_STATUS_DEND        0x00000001
        !           274:        u_int32_t numofframes;
        !           275:        u_int32_t loopcount;
        !           276:        u_int32_t pgstart;
        !           277:        u_int32_t pgstartfrac;
        !           278:        u_int32_t pgdelta;
        !           279:        u_int32_t lpfk;
        !           280:        u_int32_t eggain;
        !           281:        u_int32_t lchgain;
        !           282:        u_int32_t rchgain;
        !           283:        u_int32_t effect1gain;
        !           284:        u_int32_t effect2gain;
        !           285:        u_int32_t effect3gain;
        !           286:        u_int32_t lpfd1;
        !           287:        u_int32_t lpfd2;
        !           288: };
        !           289:
        !           290: /*
        !           291:  * rec slot
        !           292:  */
        !           293: struct rec_slot_ctrl_bank {
        !           294:        u_int32_t pgbase;
        !           295:        u_int32_t pgloopendadr;
        !           296:        u_int32_t pgstartadr;
        !           297:        u_int32_t numofloops;
        !           298: };
        !           299:
        !           300: struct rec_slot {
        !           301:        struct rec_slot_ctrl {
        !           302:                struct rec_slot_ctrl_bank bank[N_REC_SLOT_CTRL_BANK];
        !           303:        } ctrl[N_REC_SLOT_CTRL];
        !           304: };
        !           305:
        !           306: /*
        !           307:  * effect slot
        !           308:  */
        !           309: struct effect_slot_ctrl_bank {
        !           310:        u_int32_t pgbase;
        !           311:        u_int32_t pgloopend;
        !           312:        u_int32_t pgstart;
        !           313:        u_int32_t temp;
        !           314: };
        !           315:
        !           316: #define N_PLAY_SLOTS           2               /* We use only 2 (R and L) */
        !           317: #define        N_PLAY_SLOT_CTRL        2
        !           318: #define WORK_SIZE              0x0400
        !           319:
        !           320: /*
        !           321:  * softc
        !           322:  */
        !           323: struct yds_dma {
        !           324:        bus_dmamap_t map;
        !           325:        caddr_t addr;                   /* VA */
        !           326:        bus_dma_segment_t segs[1];
        !           327:        int nsegs;
        !           328:        size_t size;
        !           329:        struct yds_dma *next;
        !           330: };
        !           331:
        !           332: struct yds_codec_softc {
        !           333:        struct device sc_dev;           /* base device */
        !           334:        struct yds_softc *sc;
        !           335:        int id;
        !           336:        int status_data;
        !           337:        int status_addr;
        !           338:        struct ac97_host_if host_if;
        !           339:        struct ac97_codec_if *codec_if;
        !           340: };
        !           341:
        !           342: struct yds_softc {
        !           343:        struct device           sc_dev;         /* base device */
        !           344:        pci_chipset_tag_t       sc_pc;
        !           345:        pcitag_t                sc_pcitag;
        !           346:        pcireg_t                sc_id;
        !           347:        int                     sc_revision;
        !           348:        void                    *sc_ih;         /* interrupt vectoring */
        !           349:        bus_space_tag_t         memt;
        !           350:        bus_space_handle_t      memh;
        !           351:        bus_dma_tag_t           sc_dmatag;      /* DMA tag */
        !           352:        u_int                   sc_flags;
        !           353:
        !           354:        struct yds_codec_softc  sc_codec[2];    /* Primary/Secondary AC97 */
        !           355:
        !           356:        struct yds_dma          *sc_dmas;       /* List of DMA handles */
        !           357:
        !           358:        /*
        !           359:         * Play/record status
        !           360:         */
        !           361:        struct {
        !           362:                void            (*intr)(void *); /* rint/pint */
        !           363:                void            *intr_arg;      /* arg for intr */
        !           364:                u_int           offset;         /* filled up to here */
        !           365:                u_int           blksize;
        !           366:                u_int           factor;         /* byte per sample */
        !           367:                u_int           length;         /* ring buffer length */
        !           368:                struct yds_dma  *dma;           /* DMA handle for ring buf */
        !           369:        } sc_play, sc_rec;
        !           370:
        !           371:        /*
        !           372:         * DSP control data
        !           373:         *
        !           374:         * Work space, play control data table, play slot control data,
        !           375:         * rec slot control data and effect slot control data are
        !           376:         * stored in a single memory segment in this order.
        !           377:         */
        !           378:        struct yds_dma                  sc_ctrldata;
        !           379:        /* KVA and offset in buffer of play ctrl data tbl */
        !           380:        u_int32_t                       *ptbl;
        !           381:        off_t                           ptbloff;
        !           382:        /* KVA and offset in buffer of rec slot ctrl data */
        !           383:        struct rec_slot_ctrl_bank       *rbank;
        !           384:        off_t                           rbankoff;
        !           385:        /* Array of KVA pointers and offset of play slot control data */
        !           386:        struct play_slot_ctrl_bank      *pbankp[N_PLAY_SLOT_CTRL_BANK
        !           387:                                               *N_PLAY_SLOTS];
        !           388:        off_t                           pbankoff;
        !           389:
        !           390:        /*
        !           391:         * Legacy support
        !           392:         */
        !           393:        bus_space_tag_t         sc_legacy_iot;
        !           394:        bus_space_handle_t      sc_opl_ioh;
        !           395:        struct device           *sc_mpu;
        !           396:        bus_space_handle_t      sc_mpu_ioh;
        !           397:
        !           398:        /*
        !           399:         * Suspend/resume support
        !           400:         */
        !           401:        void                    *powerhook;
        !           402:        int                     suspend;
        !           403: };
        !           404: #define sc_opl_iot     sc_legacy_iot
        !           405: #define sc_mpu_iot     sc_legacy_iot
        !           406:
        !           407: #endif /* _DEV_PCI_YDSREG_H_ */

CVSweb