root/dev/audiovar.h

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

INCLUDED FROM


    1 /*      $OpenBSD: audiovar.h,v 1.9 2002/08/26 16:20:04 mickey Exp $     */
    2 /*      $NetBSD: audiovar.h,v 1.18 1998/03/03 09:16:16 augustss 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  *      From: Header: audiovar.h,v 1.3 93/07/18 14:07:25 mccanne Exp  (LBL)
   37  */
   38 
   39 /*
   40  * Initial/default block duration is both configurable and patchable.
   41  */
   42 #ifndef AUDIO_BLK_MS
   43 #define AUDIO_BLK_MS    50      /* 50 ms */
   44 #endif
   45 
   46 #ifndef AU_RING_SIZE
   47 #define AU_RING_SIZE            65536
   48 #endif
   49 
   50 #define AUMINBUF 512
   51 #define AUMINBLK 32
   52 #define AUMINNOBLK 2
   53 struct audio_ringbuffer {
   54         int     bufsize;        /* allocated memory */
   55         int     blksize;        /* I/O block size */
   56         int     maxblks;        /* no of blocks in ring */
   57         u_char  *start;         /* start of buffer area */
   58         u_char  *end;           /* end of buffer area */
   59         u_char  *inp;           /* input pointer (to buffer) */
   60         u_char  *outp;          /* output pointer (from buffer) */
   61         int     used;           /* no of used bytes */
   62         int     usedlow;        /* start writer when used falls below this */
   63         int     usedhigh;       /* stop writer when used goes above this */
   64         u_long  stamp;          /* bytes transferred */
   65         u_long  stamp_last;     /* old value of bytes transferred */
   66         u_long  drops;          /* missed samples from over/underrun */
   67         u_long  pdrops;         /* paused samples */
   68         char    pause;          /* transfer is paused */
   69         char    copying;        /* data is being copied */
   70         char    needfill;       /* buffer needs filling when copying is done */
   71         char    mmapped;        /* device is mmap()-ed */
   72 };
   73 
   74 #define AUDIO_N_PORTS 4
   75 
   76 struct au_mixer_ports {
   77         int     index;
   78         int     master;
   79         int     nports;
   80         u_char  isenum;
   81         u_int   allports;
   82         u_int   aumask[AUDIO_N_PORTS];
   83         u_int   misel [AUDIO_N_PORTS];
   84         u_int   miport[AUDIO_N_PORTS];
   85 };
   86 
   87 /*
   88  * Software state, per audio device.
   89  */
   90 struct audio_softc {
   91         struct  device dev;
   92         void    *hw_hdl;        /* Hardware driver handle */
   93         struct  audio_hw_if *hw_if; /* Hardware interface */
   94         struct  device *sc_dev; /* Hardware device struct */
   95         u_char  sc_open;        /* single use device */
   96 #define AUOPEN_READ     0x01
   97 #define AUOPEN_WRITE    0x02
   98         u_char  sc_mode;        /* bitmask for RECORD/PLAY */
   99 
  100         struct  selinfo sc_wsel; /* write selector */
  101         struct  selinfo sc_rsel; /* read selector */
  102         struct  proc *sc_async_audio;   /* process who wants audio SIGIO */
  103         struct  mixer_asyncs {
  104                 struct mixer_asyncs *next;
  105                 struct proc *proc;
  106         } *sc_async_mixer;  /* processes who want mixer SIGIO */
  107 
  108         /* Sleep channels for reading and writing. */
  109         int     sc_rchan;
  110         int     sc_wchan;
  111 
  112         /* Ring buffers, separate for record and play. */
  113         struct  audio_ringbuffer sc_rr; /* Record ring */
  114         struct  audio_ringbuffer sc_pr; /* Play ring */
  115 
  116         u_char  sc_blkset;      /* Blocksize has been set */
  117 
  118         u_char  *sc_sil_start;  /* start of silence in buffer */
  119         int     sc_sil_count;   /* # of silence bytes */
  120 
  121         u_char  sc_rbus;        /* input dma in progress */
  122         u_char  sc_pbus;        /* output dma in progress */
  123 
  124         struct  audio_params sc_pparams;        /* play encoding parameters */
  125         struct  audio_params sc_rparams;        /* record encoding parameters */
  126 
  127         int     sc_eof;         /* EOF, i.e. zero sized write, counter */
  128         u_long  sc_wstamp;
  129         u_long  sc_playdrop;
  130 
  131         int     sc_full_duplex; /* device in full duplex mode */
  132 
  133         struct  au_mixer_ports sc_inports, sc_outports;
  134         int     sc_monitor_port;
  135 
  136         int     sc_refcnt;
  137         int     sc_dying;
  138 
  139 #ifdef AUDIO_INTR_TIME
  140         u_long  sc_pfirstintr;  /* first time we saw a play interrupt */
  141         int     sc_pnintr;      /* number of interrupts */
  142         u_long  sc_plastintr;   /* last time we saw a play interrupt */
  143         long    sc_pblktime;    /* nominal time between interrupts */
  144         u_long  sc_rfirstintr;  /* first time we saw a rec interrupt */
  145         int     sc_rnintr;      /* number of interrupts */
  146         u_long  sc_rlastintr;   /* last time we saw a rec interrupt */
  147         long    sc_rblktime;    /* nominal time between interrupts */
  148 #endif
  149 };

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