root/dev/pci/esavar.h

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

INCLUDED FROM


    1 /* $OpenBSD: esavar.h,v 1.1 2002/04/08 01:47:33 frantzen Exp $ */
    2 /* $NetBSD: esavar.h,v 1.4 2002/03/16 14:34:01 jmcneill Exp $ */
    3 
    4 /*
    5  * Copyright (c) 2001, 2002 Jared D. McNeill <jmcneill@invisible.yi.org>
    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. The name of the author may not be used to endorse or promote products
   14  *    derived from this software without specific prior written permission.
   15  *
   16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   17  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   18  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   19  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
   20  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
   21  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   22  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
   23  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   24  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   26  * SUCH DAMAGE.
   27  */
   28 
   29 /*
   30  * ESS Allegro-1 / Maestro3 Audio Driver
   31  * 
   32  * Based on the FreeBSD maestro3 driver
   33  *
   34  */
   35 
   36 /*
   37  * Number of simultaneous voices
   38  *
   39  * NOTE: The current code attaches audio0 thru audioESA_NUM_VOICES-1
   40  *       to this driver, and a lot of people probably don't want that.
   41  *       So, we'll default to 1 but we'll allow for the possibility of
   42  *       more.
   43  *
   44  * The current MINISRC image limits us to a maximum of 4 simultaneous voices.
   45  */
   46 #ifndef ESA_NUM_VOICES
   47 #define ESA_NUM_VOICES          1
   48 #endif
   49 
   50 #define KERNADDR(p)     ((void *)((p)->addr))
   51 #define DMAADDR(p)      ((p)->map->dm_segs[0].ds_addr)
   52 
   53 #define ESA_MINRATE     8000
   54 #define ESA_MAXRATE     48000
   55 
   56 struct esa_list {
   57         int                     currlen;
   58         int                     mem_addr;
   59         int                     max;
   60         int                     indexmap[ESA_NUM_VOICES * 2];
   61 };
   62 
   63 struct esa_dma {
   64         bus_dmamap_t            map;
   65         caddr_t                 addr;
   66         bus_dma_segment_t       segs[1];
   67         int                     nsegs;
   68         size_t                  size;
   69         struct esa_dma          *next;
   70 };
   71 
   72 struct esa_channel {
   73         int                     active;
   74         int                     data_offset;
   75         int                     index;
   76         size_t                  bufsize;
   77         int                     blksize;
   78         int                     pos;
   79         void                    *buf;
   80         u_int32_t               start;
   81         u_int32_t               count;
   82 
   83         /* mode settings */
   84         struct audio_params     mode;
   85         
   86         void                    (*intr)(void *);
   87         void                    *arg;
   88 };
   89 
   90 struct esa_voice {
   91         struct device           *parent;        /* pointer to our parent */
   92         struct esa_channel      play;
   93         struct esa_channel      rec;
   94         struct esa_dma          *dma;
   95         int                     inlist;
   96         int                     index;  /* 0: play, 1: record */
   97 };
   98 
   99 struct esa_softc
  100 {
  101         struct device           sc_dev;
  102         bus_space_tag_t         sc_iot;
  103         bus_space_handle_t      sc_ioh;
  104         bus_addr_t              sc_iob;
  105         bus_size_t              sc_ios;
  106 
  107         pcitag_t                sc_tag;
  108         pci_chipset_tag_t       sc_pct;
  109         bus_dma_tag_t           sc_dmat;
  110         pcireg_t                sc_pcireg;
  111 
  112         void                    *sc_ih;
  113 
  114         struct ac97_codec_if    *codec_if;
  115         struct ac97_host_if     host_if;
  116         enum ac97_host_flags    codec_flags;
  117 
  118         struct device           *sc_audiodev[ESA_NUM_VOICES];
  119 
  120         struct esa_voice        voice[ESA_NUM_VOICES];
  121         struct esa_dma          *sc_dmas;
  122         int                     count;
  123 
  124         /* timer management */
  125         int                     sc_ntimers;
  126 
  127         /* packed list structures */
  128         struct esa_list         mixer_list;
  129         struct esa_list         adc1_list;
  130         struct esa_list         dma_list;
  131         struct esa_list         msrc_list;
  132 
  133         int                     type;           /* Allegro-1 or Maestro 3? */
  134         int                     delay1, delay2;
  135 
  136         void                    *powerhook;
  137         u_int16_t               *savemem;
  138 };

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