fix paniced->panicked typos
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / sound / core / seq / seq_memory.h
CommitLineData
1da177e4
LT
1/*
2 * ALSA sequencer Memory Manager
3 * Copyright (c) 1998 by Frank van de Pol <fvdpol@coil.demon.nl>
4 *
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 *
20 */
21#ifndef __SND_SEQ_MEMORYMGR_H
22#define __SND_SEQ_MEMORYMGR_H
23
24#include <sound/seq_kernel.h>
25#include <linux/poll.h>
26
1da177e4 27/* container for sequencer event (internal use) */
c7e0b5bf
TI
28struct snd_seq_event_cell {
29 struct snd_seq_event event;
30 struct snd_seq_pool *pool; /* used pool */
31 struct snd_seq_event_cell *next; /* next cell */
32};
1da177e4
LT
33
34/* design note: the pool is a contigious block of memory, if we dynamicly
35 want to add additional cells to the pool be better store this in another
36 pool as we need to know the base address of the pool when releasing
37 memory. */
38
c7e0b5bf
TI
39struct snd_seq_pool {
40 struct snd_seq_event_cell *ptr; /* pointer to first event chunk */
41 struct snd_seq_event_cell *free; /* pointer to the head of the free list */
1da177e4
LT
42
43 int total_elements; /* pool size actually allocated */
44 atomic_t counter; /* cells free */
45
46 int size; /* pool size to be allocated */
47 int room; /* watermark for sleep/wakeup */
48
49 int closing;
50
51 /* statistics */
52 int max_used;
53 int event_alloc_nopool;
54 int event_alloc_failures;
55 int event_alloc_success;
56
57 /* Write locking */
58 wait_queue_head_t output_sleep;
59
60 /* Pool lock */
61 spinlock_t lock;
62};
63
c7e0b5bf 64void snd_seq_cell_free(struct snd_seq_event_cell *cell);
1da177e4 65
c7e0b5bf
TI
66int snd_seq_event_dup(struct snd_seq_pool *pool, struct snd_seq_event *event,
67 struct snd_seq_event_cell **cellp, int nonblock, struct file *file);
1da177e4
LT
68
69/* return number of unused (free) cells */
c7e0b5bf 70static inline int snd_seq_unused_cells(struct snd_seq_pool *pool)
1da177e4
LT
71{
72 return pool ? pool->total_elements - atomic_read(&pool->counter) : 0;
73}
74
75/* return total number of allocated cells */
c7e0b5bf 76static inline int snd_seq_total_cells(struct snd_seq_pool *pool)
1da177e4
LT
77{
78 return pool ? pool->total_elements : 0;
79}
80
81/* init pool - allocate events */
c7e0b5bf 82int snd_seq_pool_init(struct snd_seq_pool *pool);
1da177e4
LT
83
84/* done pool - free events */
c7e0b5bf 85int snd_seq_pool_done(struct snd_seq_pool *pool);
1da177e4
LT
86
87/* create pool */
c7e0b5bf 88struct snd_seq_pool *snd_seq_pool_new(int poolsize);
1da177e4
LT
89
90/* remove pool */
c7e0b5bf 91int snd_seq_pool_delete(struct snd_seq_pool **pool);
1da177e4
LT
92
93/* init memory */
94int snd_sequencer_memory_init(void);
95
96/* release event memory */
97void snd_sequencer_memory_done(void);
98
99/* polling */
c7e0b5bf 100int snd_seq_pool_poll_wait(struct snd_seq_pool *pool, struct file *file, poll_table *wait);
1da177e4
LT
101
102
103#endif