The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/sound/pcm/channel_if.m

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 #-
    2 # KOBJ
    3 #
    4 # Copyright (c) 2005-2009 Ariff Abdullah <ariff@FreeBSD.org>
    5 # Portions Copyright (c) Ryan Beasley <ryan.beasley@gmail.com> - GSoC 2006
    6 # Copyright (c) 2000 Cameron Grant <cg@FreeBSD.org>
    7 # All rights reserved.
    8 #
    9 # Redistribution and use in source and binary forms, with or without
   10 # modification, are permitted provided that the following conditions
   11 # are met:
   12 # 1. Redistributions of source code must retain the above copyright
   13 #    notice, this list of conditions and the following disclaimer.
   14 # 2. Redistributions in binary form must reproduce the above copyright
   15 #    notice, this list of conditions and the following disclaimer in the
   16 #    documentation and/or other materials provided with the distribution.
   17 #
   18 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   19 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   20 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   21 # ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   22 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   23 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   24 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   25 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   26 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   27 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   28 # SUCH DAMAGE.
   29 #
   30 # $FreeBSD$
   31 #
   32 
   33 #include <dev/sound/pcm/sound.h>
   34 
   35 INTERFACE channel;
   36 
   37 CODE {
   38 
   39         static int
   40         channel_noreset(kobj_t obj, void *data)
   41         {
   42                 return 0;
   43         }
   44 
   45         static int
   46         channel_noresetdone(kobj_t obj, void *data)
   47         {
   48                 return 0;
   49         }
   50 
   51         static int
   52         channel_nofree(kobj_t obj, void *data)
   53         {
   54                 return 1;
   55         }
   56 
   57         static u_int32_t
   58         channel_nogetptr(kobj_t obj, void *data)
   59         {
   60                 return 0;
   61         }
   62 
   63         static int
   64         channel_nonotify(kobj_t obj, void *data, u_int32_t changed)
   65         {
   66                 return 0;
   67         }
   68 
   69         static int
   70         channel_nogetpeaks(kobj_t obj, void *data, int *lpeak, int *rpeak)
   71         {
   72                 return -1;
   73         }
   74 
   75         static int
   76         channel_nogetrates(kobj_t obj, void *data, int **rates)
   77         {
   78                 *rates = NULL;
   79                 return 0;
   80         }
   81 
   82         static int
   83         channel_nosetfragments(kobj_t obj, void *data, u_int32_t blocksize, u_int32_t blockcount)
   84         {
   85                 return ENOTSUP;
   86         }
   87 
   88         static struct pcmchan_matrix *
   89         channel_nogetmatrix(kobj_t obj, void *data, u_int32_t format)
   90         {
   91                 format = feeder_matrix_default_format(format);
   92                 return (feeder_matrix_format_map(format));
   93         }
   94 
   95         static int
   96         channel_nosetmatrix(kobj_t obj, void *data, struct pcmchan_matrix *m)
   97         {
   98                 return ENOTSUP;
   99         }
  100 };
  101 
  102 METHOD void* init {
  103         kobj_t obj;
  104         void *devinfo;
  105         struct snd_dbuf *b;
  106         struct pcm_channel *c;
  107         int dir;
  108 };
  109 
  110 METHOD int free {
  111         kobj_t obj;
  112         void *data;
  113 } DEFAULT channel_nofree;
  114 
  115 METHOD int reset {
  116         kobj_t obj;
  117         void *data;
  118 } DEFAULT channel_noreset;
  119 
  120 METHOD int resetdone {
  121         kobj_t obj;
  122         void *data;
  123 } DEFAULT channel_noresetdone;
  124 
  125 METHOD int setformat {
  126         kobj_t obj;
  127         void *data;
  128         u_int32_t format;
  129 };
  130 
  131 METHOD u_int32_t setspeed {
  132         kobj_t obj;
  133         void *data;
  134         u_int32_t speed;
  135 };
  136 
  137 METHOD u_int32_t setblocksize {
  138         kobj_t obj;
  139         void *data;
  140         u_int32_t blocksize;
  141 };
  142 
  143 METHOD int setfragments {
  144         kobj_t obj;
  145         void *data;
  146         u_int32_t blocksize;
  147         u_int32_t blockcount;
  148 } DEFAULT channel_nosetfragments;
  149 
  150 METHOD int trigger {
  151         kobj_t obj;
  152         void *data;
  153         int go;
  154 };
  155 
  156 METHOD u_int32_t getptr {
  157         kobj_t obj;
  158         void *data;
  159 } DEFAULT channel_nogetptr;
  160 
  161 METHOD struct pcmchan_caps* getcaps {
  162         kobj_t obj;
  163         void *data;
  164 };
  165 
  166 METHOD int notify {
  167         kobj_t obj;
  168         void *data;
  169         u_int32_t changed;
  170 } DEFAULT channel_nonotify;
  171 
  172 /**
  173  * @brief Retrieve channel peak values
  174  *
  175  * This function is intended to obtain peak volume values for samples
  176  * played/recorded on a channel.  Values are on a linear scale from 0 to
  177  * 32767.  If the channel is monaural, a single value should be recorded
  178  * in @c lpeak.
  179  *
  180  * If hardware support isn't available, the SNDCTL_DSP_GET[IO]PEAKS
  181  * operation should return EINVAL.  However, we may opt to provide
  182  * software support that the user may toggle via sysctl/mixext.
  183  *
  184  * @param obj   standard kobj object (usually @c channel->methods)
  185  * @param data  driver-specific data (usually @c channel->devinfo)
  186  * @param lpeak pointer to store left peak level
  187  * @param rpeak pointer to store right peak level
  188  *
  189  * @retval -1   Error; usually operation isn't supported.
  190  * @retval 0    success
  191  */
  192 METHOD int getpeaks {
  193         kobj_t obj;
  194         void *data;
  195         int *lpeak;
  196         int *rpeak;
  197 } DEFAULT channel_nogetpeaks;
  198 
  199 /**
  200  * @brief Retrieve discrete supported sample rates
  201  *
  202  * Some cards operate at fixed rates, and this call is intended to retrieve
  203  * those rates primarily for when in-kernel rate adjustment is undesirable
  204  * (e.g., application wants direct DMA access after setting a channel to run
  205  * "uncooked").
  206  *
  207  * The parameter @c rates is a double pointer which will be reset to
  208  * point to an array of supported sample rates.  The number of elements
  209  * in the array is returned to the caller.
  210  *
  211  * @param obj   standard kobj object (usually @c channel->methods)
  212  * @param data  driver-specific data (usually @c channel->devinfo)
  213  * @param rates rate array pointer
  214  *
  215  * @return Number of rates in the array
  216  */
  217 METHOD int getrates {
  218         kobj_t obj;
  219         void *data;
  220         int **rates;
  221 } DEFAULT channel_nogetrates;
  222 
  223 METHOD struct pcmchan_matrix * getmatrix {
  224         kobj_t obj;
  225         void *data;
  226         u_int32_t format;
  227 } DEFAULT channel_nogetmatrix;
  228 
  229 METHOD int setmatrix {
  230         kobj_t obj;
  231         void *data;
  232         struct pcmchan_matrix *m;
  233 } DEFAULT channel_nosetmatrix;

Cache object: cb98ed6e8f2870df373cc5819b777d1d


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.