/* * Mixer Interface - local header file * Copyright (c) 2000 by Jaroslav Kysela * Copyright (c) 2001 by Abramo Bagnara * * * This library is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ #include "local.h" typedef struct _bag1 { void *ptr; struct list_head list; } bag1_t; typedef struct list_head bag_t; int bag_new(bag_t **bag); void bag_free(bag_t *bag); int bag_add(bag_t *bag, void *ptr); int bag_del(bag_t *bag, void *ptr); int bag_empty(bag_t *bag); void bag_del_all(bag_t *bag); typedef struct list_head *bag_iterator_t; #define bag_iterator_entry(i) (list_entry((i), bag1_t, list)->ptr) #define bag_for_each(pos, bag) list_for_each(pos, bag) #define bag_for_each_safe(pos, next, bag) list_for_each_safe(pos, next, bag) struct _snd_mixer_class { struct list_head list; snd_mixer_t *mixer; snd_mixer_event_t event; void *private_data; void (*private_free)(snd_mixer_class_t *class); snd_mixer_compare_t compare; }; struct _snd_mixer_elem { snd_mixer_elem_type_t type; struct list_head list; /* links for list of all elems */ snd_mixer_class_t *class; void *private_data; void (*private_free)(snd_mixer_elem_t *elem); snd_mixer_elem_callback_t callback; void *callback_private; bag_t helems; int compare_weight; /* compare weight (reversed) */ }; struct _snd_mixer { struct list_head slaves; /* list of all slaves */ struct list_head classes; /* list of all elem classes */ struct list_head elems; /* list of all elems */ snd_mixer_elem_t **pelems; /* array of all elems */ unsigned int count; unsigned int alloc; unsigned int events; snd_mixer_callback_t callback; void *callback_private; snd_mixer_compare_t compare; }; struct _snd_mixer_selem_id { char name[60]; unsigned int index; };