1d5ac70f0Sopenharmony_ci/* 2d5ac70f0Sopenharmony_ci * Mixer Interface - local header file 3d5ac70f0Sopenharmony_ci * Copyright (c) 2000 by Jaroslav Kysela <perex@perex.cz> 4d5ac70f0Sopenharmony_ci * Copyright (c) 2001 by Abramo Bagnara <abramo@alsa-project.org> 5d5ac70f0Sopenharmony_ci * 6d5ac70f0Sopenharmony_ci * 7d5ac70f0Sopenharmony_ci * This library is free software; you can redistribute it and/or modify 8d5ac70f0Sopenharmony_ci * it under the terms of the GNU Lesser General Public License as 9d5ac70f0Sopenharmony_ci * published by the Free Software Foundation; either version 2.1 of 10d5ac70f0Sopenharmony_ci * the License, or (at your option) any later version. 11d5ac70f0Sopenharmony_ci * 12d5ac70f0Sopenharmony_ci * This program is distributed in the hope that it will be useful, 13d5ac70f0Sopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 14d5ac70f0Sopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15d5ac70f0Sopenharmony_ci * GNU Lesser General Public License for more details. 16d5ac70f0Sopenharmony_ci * 17d5ac70f0Sopenharmony_ci * You should have received a copy of the GNU Lesser General Public 18d5ac70f0Sopenharmony_ci * License along with this library; if not, write to the Free Software 19d5ac70f0Sopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20d5ac70f0Sopenharmony_ci * 21d5ac70f0Sopenharmony_ci */ 22d5ac70f0Sopenharmony_ci 23d5ac70f0Sopenharmony_ci#include "local.h" 24d5ac70f0Sopenharmony_ci 25d5ac70f0Sopenharmony_citypedef struct _bag1 { 26d5ac70f0Sopenharmony_ci void *ptr; 27d5ac70f0Sopenharmony_ci struct list_head list; 28d5ac70f0Sopenharmony_ci} bag1_t; 29d5ac70f0Sopenharmony_ci 30d5ac70f0Sopenharmony_citypedef struct list_head bag_t; 31d5ac70f0Sopenharmony_ci 32d5ac70f0Sopenharmony_ciint bag_new(bag_t **bag); 33d5ac70f0Sopenharmony_civoid bag_free(bag_t *bag); 34d5ac70f0Sopenharmony_ciint bag_add(bag_t *bag, void *ptr); 35d5ac70f0Sopenharmony_ciint bag_del(bag_t *bag, void *ptr); 36d5ac70f0Sopenharmony_ciint bag_empty(bag_t *bag); 37d5ac70f0Sopenharmony_civoid bag_del_all(bag_t *bag); 38d5ac70f0Sopenharmony_ci 39d5ac70f0Sopenharmony_citypedef struct list_head *bag_iterator_t; 40d5ac70f0Sopenharmony_ci 41d5ac70f0Sopenharmony_ci#define bag_iterator_entry(i) (list_entry((i), bag1_t, list)->ptr) 42d5ac70f0Sopenharmony_ci#define bag_for_each(pos, bag) list_for_each(pos, bag) 43d5ac70f0Sopenharmony_ci#define bag_for_each_safe(pos, next, bag) list_for_each_safe(pos, next, bag) 44d5ac70f0Sopenharmony_ci 45d5ac70f0Sopenharmony_cistruct _snd_mixer_class { 46d5ac70f0Sopenharmony_ci struct list_head list; 47d5ac70f0Sopenharmony_ci snd_mixer_t *mixer; 48d5ac70f0Sopenharmony_ci snd_mixer_event_t event; 49d5ac70f0Sopenharmony_ci void *private_data; 50d5ac70f0Sopenharmony_ci void (*private_free)(snd_mixer_class_t *class); 51d5ac70f0Sopenharmony_ci snd_mixer_compare_t compare; 52d5ac70f0Sopenharmony_ci}; 53d5ac70f0Sopenharmony_ci 54d5ac70f0Sopenharmony_cistruct _snd_mixer_elem { 55d5ac70f0Sopenharmony_ci snd_mixer_elem_type_t type; 56d5ac70f0Sopenharmony_ci struct list_head list; /* links for list of all elems */ 57d5ac70f0Sopenharmony_ci snd_mixer_class_t *class; 58d5ac70f0Sopenharmony_ci void *private_data; 59d5ac70f0Sopenharmony_ci void (*private_free)(snd_mixer_elem_t *elem); 60d5ac70f0Sopenharmony_ci snd_mixer_elem_callback_t callback; 61d5ac70f0Sopenharmony_ci void *callback_private; 62d5ac70f0Sopenharmony_ci bag_t helems; 63d5ac70f0Sopenharmony_ci int compare_weight; /* compare weight (reversed) */ 64d5ac70f0Sopenharmony_ci}; 65d5ac70f0Sopenharmony_ci 66d5ac70f0Sopenharmony_cistruct _snd_mixer { 67d5ac70f0Sopenharmony_ci struct list_head slaves; /* list of all slaves */ 68d5ac70f0Sopenharmony_ci struct list_head classes; /* list of all elem classes */ 69d5ac70f0Sopenharmony_ci struct list_head elems; /* list of all elems */ 70d5ac70f0Sopenharmony_ci snd_mixer_elem_t **pelems; /* array of all elems */ 71d5ac70f0Sopenharmony_ci unsigned int count; 72d5ac70f0Sopenharmony_ci unsigned int alloc; 73d5ac70f0Sopenharmony_ci unsigned int events; 74d5ac70f0Sopenharmony_ci snd_mixer_callback_t callback; 75d5ac70f0Sopenharmony_ci void *callback_private; 76d5ac70f0Sopenharmony_ci snd_mixer_compare_t compare; 77d5ac70f0Sopenharmony_ci}; 78d5ac70f0Sopenharmony_ci 79d5ac70f0Sopenharmony_cistruct _snd_mixer_selem_id { 80d5ac70f0Sopenharmony_ci char name[60]; 81d5ac70f0Sopenharmony_ci unsigned int index; 82d5ac70f0Sopenharmony_ci}; 83