~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/sound/timer.h

Version: ~ [ linux-5.6-rc1 ] ~ [ linux-5.5.2 ] ~ [ linux-5.4.17 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.102 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.170 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.213 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.213 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.81 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #ifndef __SOUND_TIMER_H
  2 #define __SOUND_TIMER_H
  3 
  4 /*
  5  *  Timer abstract layer
  6  *  Copyright (c) by Jaroslav Kysela <perex@perex.cz>,
  7  *                   Abramo Bagnara <abramo@alsa-project.org>
  8  *
  9  *
 10  *   This program is free software; you can redistribute it and/or modify
 11  *   it under the terms of the GNU General Public License as published by
 12  *   the Free Software Foundation; either version 2 of the License, or
 13  *   (at your option) any later version.
 14  *
 15  *   This program is distributed in the hope that it will be useful,
 16  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 17  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 18  *   GNU General Public License for more details.
 19  *
 20  *   You should have received a copy of the GNU General Public License
 21  *   along with this program; if not, write to the Free Software
 22  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 23  *
 24  */
 25 
 26 #include <sound/asound.h>
 27 #include <linux/interrupt.h>
 28 
 29 #define snd_timer_chip(timer) ((timer)->private_data)
 30 
 31 #define SNDRV_TIMER_DEVICES     16
 32 
 33 #define SNDRV_TIMER_DEV_FLG_PCM 0x10000000
 34 
 35 #define SNDRV_TIMER_HW_AUTO     0x00000001      /* auto trigger is supported */
 36 #define SNDRV_TIMER_HW_STOP     0x00000002      /* call stop before start */
 37 #define SNDRV_TIMER_HW_SLAVE    0x00000004      /* only slave timer (variable resolution) */
 38 #define SNDRV_TIMER_HW_FIRST    0x00000008      /* first tick can be incomplete */
 39 #define SNDRV_TIMER_HW_TASKLET  0x00000010      /* timer is called from tasklet */
 40 
 41 #define SNDRV_TIMER_IFLG_SLAVE    0x00000001
 42 #define SNDRV_TIMER_IFLG_RUNNING  0x00000002
 43 #define SNDRV_TIMER_IFLG_START    0x00000004
 44 #define SNDRV_TIMER_IFLG_AUTO     0x00000008    /* auto restart */
 45 #define SNDRV_TIMER_IFLG_FAST     0x00000010    /* fast callback (do not use tasklet) */
 46 #define SNDRV_TIMER_IFLG_CALLBACK 0x00000020    /* timer callback is active */
 47 #define SNDRV_TIMER_IFLG_EXCLUSIVE 0x00000040   /* exclusive owner - no more instances */
 48 #define SNDRV_TIMER_IFLG_EARLY_EVENT 0x00000080 /* write early event to the poll queue */
 49 
 50 #define SNDRV_TIMER_FLG_CHANGE  0x00000001
 51 #define SNDRV_TIMER_FLG_RESCHED 0x00000002      /* need reschedule */
 52 
 53 struct snd_timer;
 54 
 55 struct snd_timer_hardware {
 56         /* -- must be filled with low-level driver */
 57         unsigned int flags;             /* various flags */
 58         unsigned long resolution;       /* average timer resolution for one tick in nsec */
 59         unsigned long resolution_min;   /* minimal resolution */
 60         unsigned long resolution_max;   /* maximal resolution */
 61         unsigned long ticks;            /* max timer ticks per interrupt */
 62         /* -- low-level functions -- */
 63         int (*open) (struct snd_timer * timer);
 64         int (*close) (struct snd_timer * timer);
 65         unsigned long (*c_resolution) (struct snd_timer * timer);
 66         int (*start) (struct snd_timer * timer);
 67         int (*stop) (struct snd_timer * timer);
 68         int (*set_period) (struct snd_timer * timer, unsigned long period_num, unsigned long period_den);
 69         int (*precise_resolution) (struct snd_timer * timer, unsigned long *num, unsigned long *den);
 70 };
 71 
 72 struct snd_timer {
 73         int tmr_class;
 74         struct snd_card *card;
 75         struct module *module;
 76         int tmr_device;
 77         int tmr_subdevice;
 78         char id[64];
 79         char name[80];
 80         unsigned int flags;
 81         int running;                    /* running instances */
 82         unsigned long sticks;           /* schedule ticks */
 83         void *private_data;
 84         void (*private_free) (struct snd_timer *timer);
 85         struct snd_timer_hardware hw;
 86         spinlock_t lock;
 87         struct list_head device_list;
 88         struct list_head open_list_head;
 89         struct list_head active_list_head;
 90         struct list_head ack_list_head;
 91         struct list_head sack_list_head; /* slow ack list head */
 92         struct tasklet_struct task_queue;
 93         int max_instances;      /* upper limit of timer instances */
 94         int num_instances;      /* current number of timer instances */
 95 };
 96 
 97 struct snd_timer_instance {
 98         struct snd_timer *timer;
 99         char *owner;
100         unsigned int flags;
101         void *private_data;
102         void (*private_free) (struct snd_timer_instance *ti);
103         void (*callback) (struct snd_timer_instance *timeri,
104                           unsigned long ticks, unsigned long resolution);
105         void (*ccallback) (struct snd_timer_instance * timeri,
106                            int event,
107                            struct timespec * tstamp,
108                            unsigned long resolution);
109         void (*disconnect)(struct snd_timer_instance *timeri);
110         void *callback_data;
111         unsigned long ticks;            /* auto-load ticks when expired */
112         unsigned long cticks;           /* current ticks */
113         unsigned long pticks;           /* accumulated ticks for callback */
114         unsigned long resolution;       /* current resolution for tasklet */
115         unsigned long lost;             /* lost ticks */
116         int slave_class;
117         unsigned int slave_id;
118         struct list_head open_list;
119         struct list_head active_list;
120         struct list_head ack_list;
121         struct list_head slave_list_head;
122         struct list_head slave_active_head;
123         struct snd_timer_instance *master;
124 };
125 
126 /*
127  *  Registering
128  */
129 
130 int snd_timer_new(struct snd_card *card, char *id, struct snd_timer_id *tid, struct snd_timer **rtimer);
131 void snd_timer_notify(struct snd_timer *timer, int event, struct timespec *tstamp);
132 int snd_timer_global_new(char *id, int device, struct snd_timer **rtimer);
133 int snd_timer_global_free(struct snd_timer *timer);
134 int snd_timer_global_register(struct snd_timer *timer);
135 
136 int snd_timer_open(struct snd_timer_instance **ti, char *owner, struct snd_timer_id *tid, unsigned int slave_id);
137 int snd_timer_close(struct snd_timer_instance *timeri);
138 unsigned long snd_timer_resolution(struct snd_timer_instance *timeri);
139 int snd_timer_start(struct snd_timer_instance *timeri, unsigned int ticks);
140 int snd_timer_stop(struct snd_timer_instance *timeri);
141 int snd_timer_continue(struct snd_timer_instance *timeri);
142 int snd_timer_pause(struct snd_timer_instance *timeri);
143 
144 void snd_timer_interrupt(struct snd_timer *timer, unsigned long ticks_left);
145 
146 #endif /* __SOUND_TIMER_H */
147 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp