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

Annotation of sys/dev/isa/sbdspvar.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: sbdspvar.h,v 1.16 2002/03/14 03:16:05 millert Exp $   */
        !             2: /*     $NetBSD: sbdspvar.h,v 1.37 1998/08/10 00:20:39 mycroft Exp $    */
        !             3:
        !             4: /*
        !             5:  * Copyright (c) 1991-1993 Regents of the University of California.
        !             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:  * 3. All advertising materials mentioning features or use of this software
        !            17:  *    must display the following acknowledgement:
        !            18:  *     This product includes software developed by the Computer Systems
        !            19:  *     Engineering Group at Lawrence Berkeley Laboratory.
        !            20:  * 4. Neither the name of the University nor of the Laboratory may be used
        !            21:  *    to endorse or promote products derived from this software without
        !            22:  *    specific prior written permission.
        !            23:  *
        !            24:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
        !            25:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            26:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            27:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
        !            28:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            29:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            30:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            31:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            32:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            33:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            34:  * SUCH DAMAGE.
        !            35:  *
        !            36:  */
        !            37:
        !            38: #include "midi.h"
        !            39: #if NMIDI > 0
        !            40: #include <dev/ic/mpuvar.h>
        !            41: #endif
        !            42:
        !            43: #include <sys/timeout.h>
        !            44:
        !            45: #define SB_MASTER_VOL  0
        !            46: #define SB_MIDI_VOL    1
        !            47: #define SB_CD_VOL      2
        !            48: #define SB_VOICE_VOL   3
        !            49: #define SB_OUTPUT_CLASS        4
        !            50:
        !            51: #define SB_MIC_VOL     5
        !            52: #define SB_LINE_IN_VOL 6
        !            53: #define        SB_RECORD_SOURCE 7
        !            54: #define SB_TREBLE      8
        !            55: #define SB_BASS                9
        !            56: #define SB_RECORD_CLASS        10
        !            57: #define SB_INPUT_CLASS 11
        !            58:
        !            59: #define SB_PCSPEAKER   12
        !            60: #define SB_INPUT_GAIN  13
        !            61: #define SB_OUTPUT_GAIN 14
        !            62: #define SB_AGC         15
        !            63: #define SB_EQUALIZATION_CLASS 16
        !            64:
        !            65: #define SB_CD_IN_MUTE  17
        !            66: #define SB_MIC_IN_MUTE 18
        !            67: #define SB_LINE_IN_MUTE        19
        !            68: #define SB_MIDI_IN_MUTE        20
        !            69:
        !            70: #define SB_CD_SWAP     21
        !            71: #define SB_MIC_SWAP    22
        !            72: #define SB_LINE_SWAP   23
        !            73: #define SB_MIDI_SWAP   24
        !            74:
        !            75: #define SB_CD_OUT_MUTE 25
        !            76: #define SB_MIC_OUT_MUTE        26
        !            77: #define SB_LINE_OUT_MUTE 27
        !            78:
        !            79: #define SB_NDEVS       28
        !            80:
        !            81: #define SB_IS_IN_MUTE(x) ((x) < SB_CD_SWAP)
        !            82:
        !            83: /*
        !            84:  * Software state, per SoundBlaster card.
        !            85:  * The soundblaster has multiple functionality, which we must demultiplex.
        !            86:  * One approach is to have one major device number for the soundblaster card,
        !            87:  * and use different minor numbers to indicate which hardware function
        !            88:  * we want.  This would make for one large driver.  Instead our approach
        !            89:  * is to partition the design into a set of drivers that share an underlying
        !            90:  * piece of hardware.  Most things are hard to share, for example, the audio
        !            91:  * and midi ports.  For audio, we might want to mix two processes' signals,
        !            92:  * and for midi we might want to merge streams (this is hard due to
        !            93:  * running status).  Moreover, we should be able to re-use the high-level
        !            94:  * modules with other kinds of hardware.  In this module, we only handle the
        !            95:  * most basic communications with the sb card.
        !            96:  */
        !            97: struct sbdsp_softc {
        !            98:        struct  device sc_dev;          /* base device */
        !            99:        struct  isadev sc_id;           /* ISA device */
        !           100:        isa_chipset_tag_t sc_ic;
        !           101:        bus_space_tag_t sc_iot;         /* tag */
        !           102:        bus_space_handle_t sc_ioh;      /* handle */
        !           103:        void    *sc_ih;                 /* interrupt vectoring */
        !           104:        struct device *sc_isa;
        !           105:        struct timeout sc_tmo;
        !           106:
        !           107:        int     sc_iobase;              /* I/O port base address */
        !           108:        int     sc_irq;                 /* interrupt */
        !           109:        int     sc_ist;                 /* interrupt share type */
        !           110:        int     sc_drq8;                /* DMA (8-bit) */
        !           111:        int     sc_drq16;               /* DMA (16-bit) */
        !           112:
        !           113:        int     sc_open;                /* reference count of open calls */
        !           114: #define SB_CLOSED 0
        !           115: #define SB_OPEN_AUDIO 1
        !           116: #define SB_OPEN_MIDI 2
        !           117:        int     sc_openflags;           /* flags used on open */
        !           118:        u_char  sc_fullduplex;          /* can do full duplex */
        !           119:
        !           120:        u_char  gain[SB_NDEVS][2];      /* kept in input levels */
        !           121: #define SB_LEFT 0
        !           122: #define SB_RIGHT 1
        !           123: #define SB_LR 0
        !           124:
        !           125:        u_int   in_mask;                /* input ports */
        !           126:        u_int   in_port;                /* XXX needed for MI interface */
        !           127:        u_int   in_filter;              /* one of SB_TREBLE_EQ, SB_BASS_EQ, 0 */
        !           128:
        !           129:        u_int   spkr_state;             /* non-null is on */
        !           130:
        !           131:        struct sbdsp_state {
        !           132:                u_int   rate;           /* Sample rate */
        !           133:                u_char  tc;             /* Time constant */
        !           134:                struct  sbmode *modep;
        !           135:                u_char  bmode;
        !           136:                int     dmachan;        /* DMA channel */
        !           137:                int     blksize;        /* Block size, preadjusted */
        !           138:                u_char  run;
        !           139: #define SB_NOTRUNNING 0                /* Not running, not initialized */
        !           140: #define SB_RUNNING 3           /* non-looping mode */
        !           141: #define SB_LOOPING 2           /* DMA&PCM running (looping mode) */
        !           142:        } sc_i, sc_o;                   /* Input and output state */
        !           143:
        !           144:        u_long  sc_interrupts;          /* number of interrupts taken */
        !           145:
        !           146:        int     (*sc_intr8)(void *);    /* dma completion intr handler */
        !           147:        void    *sc_arg8;               /* arg for sc_intr8() */
        !           148:        int     (*sc_intr16)(void *);   /* dma completion intr handler */
        !           149:        void    *sc_arg16;              /* arg for sc_intr16() */
        !           150:        void    (*sc_intrp)(void *);    /* PCM output intr handler */
        !           151:        void    *sc_argp;               /* arg for sc_intrp() */
        !           152:        void    (*sc_intrr)(void *);    /* PCM input intr handler */
        !           153:        void    *sc_argr;               /* arg for sc_intrr() */
        !           154:        void    (*sc_intrm)(void *, int);/* midi input intr handler */
        !           155:        void    *sc_argm;               /* arg for sc_intrm() */
        !           156:
        !           157:        u_int   sc_mixer_model;
        !           158: #define SBM_NONE       0
        !           159: #define SBM_CT1335     1
        !           160: #define SBM_CT1345     2
        !           161: #define SBM_CT1XX5     3
        !           162: #define SBM_CT1745     4
        !           163: #define ISSBM1745(x) ((x)->sc_mixer_model >= SBM_CT1XX5)
        !           164:
        !           165:        u_int   sc_model;               /* DSP model */
        !           166: #define SB_UNK -1
        !           167: #define SB_1   0                       /* original SB */
        !           168: #define SB_20  1                       /* SB 2 */
        !           169: #define SB_2x  2                       /* SB 2, new version */
        !           170: #define SB_PRO 3                       /* SB Pro */
        !           171: #define SB_JAZZ        4                       /* Jazz 16 */
        !           172: #define SB_16  5                       /* SB 16 */
        !           173: #define SB_32  6                       /* SB AWE 32 */
        !           174: #define SB_64  7                       /* SB AWE 64 */
        !           175:
        !           176: #define SB_NAMES { "SB_1", "SB_2.0", "SB_2.x", "SB_Pro", "Jazz_16", "SB_16", "SB_AWE_32", "SB_AWE_64" }
        !           177:
        !           178:        u_int   sc_version;             /* DSP version */
        !           179: #define SBVER_MAJOR(v) (((v)>>8) & 0xff)
        !           180: #define SBVER_MINOR(v) ((v)&0xff)
        !           181:
        !           182: #if NMIDI > 0
        !           183:        int     sc_hasmpu;
        !           184:        struct  mpu_softc sc_mpu_sc;    /* MPU401 Uart state */
        !           185: #endif
        !           186: };
        !           187:
        !           188: #define ISSBPRO(sc) ((sc)->sc_model == SB_PRO || (sc)->sc_model == SB_JAZZ)
        !           189: #define ISSBPROCLASS(sc) ((sc)->sc_model >= SB_PRO)
        !           190: #define ISSB16CLASS(sc) ((sc)->sc_model >= SB_16)
        !           191:
        !           192: #ifdef _KERNEL
        !           193: int    sbdsp_open(void *, int);
        !           194: void   sbdsp_close(void *);
        !           195:
        !           196: int    sbdsp_probe(struct sbdsp_softc *);
        !           197: void   sbdsp_attach(struct sbdsp_softc *);
        !           198:
        !           199: int    sbdsp_set_in_gain(void *, u_int, u_char);
        !           200: int    sbdsp_set_in_gain_real(void *, u_int, u_char);
        !           201: int    sbdsp_get_in_gain(void *);
        !           202: int    sbdsp_set_out_gain(void *, u_int, u_char);
        !           203: int    sbdsp_set_out_gain_real(void *, u_int, u_char);
        !           204: int    sbdsp_get_out_gain(void *);
        !           205: int    sbdsp_set_monitor_gain(void *, u_int);
        !           206: int    sbdsp_get_monitor_gain(void *);
        !           207: int    sbdsp_query_encoding(void *, struct audio_encoding *);
        !           208: int    sbdsp_set_params(void *, int, int, struct audio_params *, struct audio_params *);
        !           209: int    sbdsp_round_blocksize(void *, int);
        !           210: int    sbdsp_get_avail_in_ports(void *);
        !           211: int    sbdsp_get_avail_out_ports(void *);
        !           212: int    sbdsp_speaker_ctl(void *, int);
        !           213:
        !           214: int    sbdsp_commit(void *);
        !           215: int    sbdsp_trigger_output(void *, void *, void *, int, void (*)(void *),
        !           216:            void *, struct audio_params *);
        !           217: int    sbdsp_trigger_input(void *, void *, void *, int, void (*)(void *),
        !           218:            void *, struct audio_params *);
        !           219:
        !           220: int    sbdsp_haltdma(void *);
        !           221:
        !           222: void   sbdsp_compress(int, u_char *, int);
        !           223: void   sbdsp_expand(int, u_char *, int);
        !           224:
        !           225: int    sbdsp_reset(struct sbdsp_softc *);
        !           226: void   sbdsp_spkron(struct sbdsp_softc *);
        !           227: void   sbdsp_spkroff(struct sbdsp_softc *);
        !           228:
        !           229: int    sbdsp_wdsp(struct sbdsp_softc *, int v);
        !           230: int    sbdsp_rdsp(struct sbdsp_softc *);
        !           231:
        !           232: int    sbdsp_intr(void *);
        !           233:
        !           234: int    sbdsp_set_sr(struct sbdsp_softc *, u_long *, int);
        !           235:
        !           236: void   sbdsp_mix_write(struct sbdsp_softc *, int, int);
        !           237: int    sbdsp_mix_read(struct sbdsp_softc *, int);
        !           238:
        !           239: int    sbdsp_mixer_set_port(void *, mixer_ctrl_t *);
        !           240: int    sbdsp_mixer_get_port(void *, mixer_ctrl_t *);
        !           241: int    sbdsp_mixer_query_devinfo(void *, mixer_devinfo_t *);
        !           242:
        !           243: void   *sb_malloc(void *, int, size_t, int, int);
        !           244: void   sb_free(void *, void *, int);
        !           245: size_t sb_round(void *, int, size_t);
        !           246: paddr_t        sb_mappage(void *, void *, off_t, int);
        !           247:
        !           248: int    sbdsp_get_props(void *);
        !           249:
        !           250:
        !           251: int    sbdsp_midi_open(void *, int,
        !           252:                             void (*iintr)(void *, int),
        !           253:                             void (*ointr)(void *), void *arg);
        !           254: void   sbdsp_midi_close(void *);
        !           255: int    sbdsp_midi_output(void *, int);
        !           256: void   sbdsp_midi_getinfo(void *, struct midi_info *);
        !           257: #endif

CVSweb