seq_kernel.h 3.9 KB
Newer Older
Linus Torvalds's avatar
Linus Torvalds committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#ifndef __SOUND_SEQ_KERNEL_H
#define __SOUND_SEQ_KERNEL_H

/*
 *  Main kernel header file for the ALSA sequencer
 *  Copyright (c) 1998 by Frank van de Pol <fvdpol@coil.demon.nl>
 *
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 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 General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program; if not, write to the Free Software
 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 *
 */
#include <linux/time.h>
25
#include <sound/asequencer.h>
Linus Torvalds's avatar
Linus Torvalds committed
26

27 28
typedef struct snd_seq_real_time snd_seq_real_time_t;
typedef union snd_seq_timestamp snd_seq_timestamp_t;
Linus Torvalds's avatar
Linus Torvalds committed
29 30

/* maximum number of queues */
31
#define SNDRV_SEQ_MAX_QUEUES		32
Linus Torvalds's avatar
Linus Torvalds committed
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

/* max number of concurrent clients */
#define SNDRV_SEQ_MAX_CLIENTS 		192

/* max number of concurrent ports */
#define SNDRV_SEQ_MAX_PORTS 		254

/* max number of events in memory pool */
#define SNDRV_SEQ_MAX_EVENTS		2000

/* default number of events in memory pool */
#define SNDRV_SEQ_DEFAULT_EVENTS	500

/* max number of events in memory pool for one client (outqueue) */
#define SNDRV_SEQ_MAX_CLIENT_EVENTS	2000

/* default number of events in memory pool for one client (outqueue) */
#define SNDRV_SEQ_DEFAULT_CLIENT_EVENTS	200

/* max delivery path length */
#define SNDRV_SEQ_MAX_HOPS		10

/* max size of event size */
#define SNDRV_SEQ_MAX_EVENT_LEN		0x3fffffff

/* call-backs for kernel port */
58
struct snd_seq_port_callback {
Linus Torvalds's avatar
Linus Torvalds committed
59 60
	struct module *owner;
	void *private_data;
61 62 63 64 65 66
	int (*subscribe)(void *private_data, struct snd_seq_port_subscribe *info);
	int (*unsubscribe)(void *private_data, struct snd_seq_port_subscribe *info);
	int (*use)(void *private_data, struct snd_seq_port_subscribe *info);
	int (*unuse)(void *private_data, struct snd_seq_port_subscribe *info);
	int (*event_input)(struct snd_seq_event *ev, int direct, void *private_data, int atomic, int hop);
	void (*private_free)(void *private_data);
Linus Torvalds's avatar
Linus Torvalds committed
67
	/*...*/
68
};
Linus Torvalds's avatar
Linus Torvalds committed
69 70

/* interface for kernel client */
71
__printf(3, 4)
72
int snd_seq_create_kernel_client(struct snd_card *card, int client_index,
73
				 const char *name_fmt, ...);
74 75 76 77
int snd_seq_delete_kernel_client(int client);
int snd_seq_kernel_client_enqueue(int client, struct snd_seq_event *ev, int atomic, int hop);
int snd_seq_kernel_client_dispatch(int client, struct snd_seq_event *ev, int atomic, int hop);
int snd_seq_kernel_client_ctl(int client, unsigned int cmd, void *arg);
Linus Torvalds's avatar
Linus Torvalds committed
78 79 80 81 82 83

#define SNDRV_SEQ_EXT_MASK	0xc0000000
#define SNDRV_SEQ_EXT_USRPTR	0x80000000
#define SNDRV_SEQ_EXT_CHAINED	0x40000000

typedef int (*snd_seq_dump_func_t)(void *ptr, void *buf, int count);
84 85 86 87
int snd_seq_expand_var_event(const struct snd_seq_event *event, int count, char *buf,
			     int in_kernel, int size_aligned);
int snd_seq_dump_var_event(const struct snd_seq_event *event,
			   snd_seq_dump_func_t func, void *private_data);
Linus Torvalds's avatar
Linus Torvalds committed
88 89

/* interface for OSS emulation */
90
int snd_seq_set_queue_tempo(int client, struct snd_seq_queue_tempo *tempo);
Linus Torvalds's avatar
Linus Torvalds committed
91 92

/* port callback routines */
93 94
void snd_port_init_callback(struct snd_seq_port_callback *p);
struct snd_seq_port_callback *snd_port_alloc_callback(void);
Linus Torvalds's avatar
Linus Torvalds committed
95 96

/* port attach/detach */
97
int snd_seq_event_port_attach(int client, struct snd_seq_port_callback *pcbp,
Linus Torvalds's avatar
Linus Torvalds committed
98 99 100
			      int cap, int type, int midi_channels, int midi_voices, char *portname);
int snd_seq_event_port_detach(int client, int port);

101
#ifdef CONFIG_MODULES
102
void snd_seq_autoload_init(void);
103
void snd_seq_autoload_exit(void);
Linus Torvalds's avatar
Linus Torvalds committed
104
#else
105 106
#define snd_seq_autoload_init()
#define snd_seq_autoload_exit()
Linus Torvalds's avatar
Linus Torvalds committed
107 108 109
#endif

#endif /* __SOUND_SEQ_KERNEL_H */