11a59d1b8SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */ 21da177e4SLinus Torvalds #ifndef __SOUND_SEQ_KERNEL_H 31da177e4SLinus Torvalds #define __SOUND_SEQ_KERNEL_H 41da177e4SLinus Torvalds 51da177e4SLinus Torvalds /* 61da177e4SLinus Torvalds * Main kernel header file for the ALSA sequencer 71da177e4SLinus Torvalds * Copyright (c) 1998 by Frank van de Pol <[email protected]> 81da177e4SLinus Torvalds */ 91da177e4SLinus Torvalds #include <linux/time.h> 10a1ce3928SDavid Howells #include <sound/asequencer.h> 111da177e4SLinus Torvalds 12c7e0b5bfSTakashi Iwai typedef struct snd_seq_real_time snd_seq_real_time_t; 13c7e0b5bfSTakashi Iwai typedef union snd_seq_timestamp snd_seq_timestamp_t; 141da177e4SLinus Torvalds 151da177e4SLinus Torvalds /* maximum number of queues */ 161001fb81SClemens Ladisch #define SNDRV_SEQ_MAX_QUEUES 32 171da177e4SLinus Torvalds 181da177e4SLinus Torvalds /* max number of concurrent clients */ 191da177e4SLinus Torvalds #define SNDRV_SEQ_MAX_CLIENTS 192 201da177e4SLinus Torvalds 211da177e4SLinus Torvalds /* max number of concurrent ports */ 221da177e4SLinus Torvalds #define SNDRV_SEQ_MAX_PORTS 254 231da177e4SLinus Torvalds 241da177e4SLinus Torvalds /* max number of events in memory pool */ 251da177e4SLinus Torvalds #define SNDRV_SEQ_MAX_EVENTS 2000 261da177e4SLinus Torvalds 271da177e4SLinus Torvalds /* default number of events in memory pool */ 281da177e4SLinus Torvalds #define SNDRV_SEQ_DEFAULT_EVENTS 500 291da177e4SLinus Torvalds 301da177e4SLinus Torvalds /* max number of events in memory pool for one client (outqueue) */ 311da177e4SLinus Torvalds #define SNDRV_SEQ_MAX_CLIENT_EVENTS 2000 321da177e4SLinus Torvalds 331da177e4SLinus Torvalds /* default number of events in memory pool for one client (outqueue) */ 341da177e4SLinus Torvalds #define SNDRV_SEQ_DEFAULT_CLIENT_EVENTS 200 351da177e4SLinus Torvalds 361da177e4SLinus Torvalds /* max delivery path length */ 373510c7aaSTakashi Iwai /* NOTE: this shouldn't be greater than MAX_LOCKDEP_SUBCLASSES */ 383510c7aaSTakashi Iwai #define SNDRV_SEQ_MAX_HOPS 8 391da177e4SLinus Torvalds 401da177e4SLinus Torvalds /* max size of event size */ 411da177e4SLinus Torvalds #define SNDRV_SEQ_MAX_EVENT_LEN 0x3fffffff 421da177e4SLinus Torvalds 431da177e4SLinus Torvalds /* call-backs for kernel port */ 44c7e0b5bfSTakashi Iwai struct snd_seq_port_callback { 451da177e4SLinus Torvalds struct module *owner; 461da177e4SLinus Torvalds void *private_data; 47c7e0b5bfSTakashi Iwai int (*subscribe)(void *private_data, struct snd_seq_port_subscribe *info); 48c7e0b5bfSTakashi Iwai int (*unsubscribe)(void *private_data, struct snd_seq_port_subscribe *info); 49c7e0b5bfSTakashi Iwai int (*use)(void *private_data, struct snd_seq_port_subscribe *info); 50c7e0b5bfSTakashi Iwai int (*unuse)(void *private_data, struct snd_seq_port_subscribe *info); 51c7e0b5bfSTakashi Iwai int (*event_input)(struct snd_seq_event *ev, int direct, void *private_data, int atomic, int hop); 52c7e0b5bfSTakashi Iwai void (*private_free)(void *private_data); 531da177e4SLinus Torvalds /*...*/ 54c7e0b5bfSTakashi Iwai }; 551da177e4SLinus Torvalds 561da177e4SLinus Torvalds /* interface for kernel client */ 57b9075fa9SJoe Perches __printf(3, 4) 587b6d9245SClemens Ladisch int snd_seq_create_kernel_client(struct snd_card *card, int client_index, 59b9075fa9SJoe Perches const char *name_fmt, ...); 60c7e0b5bfSTakashi Iwai int snd_seq_delete_kernel_client(int client); 616740ea67STakashi Iwai int snd_seq_kernel_client_enqueue(int client, struct snd_seq_event *ev, 626740ea67STakashi Iwai struct file *file, bool blocking); 63c7e0b5bfSTakashi Iwai int snd_seq_kernel_client_dispatch(int client, struct snd_seq_event *ev, int atomic, int hop); 64c7e0b5bfSTakashi Iwai int snd_seq_kernel_client_ctl(int client, unsigned int cmd, void *arg); 651da177e4SLinus Torvalds 661da177e4SLinus Torvalds #define SNDRV_SEQ_EXT_MASK 0xc0000000 671da177e4SLinus Torvalds #define SNDRV_SEQ_EXT_USRPTR 0x80000000 681da177e4SLinus Torvalds #define SNDRV_SEQ_EXT_CHAINED 0x40000000 691da177e4SLinus Torvalds 701da177e4SLinus Torvalds typedef int (*snd_seq_dump_func_t)(void *ptr, void *buf, int count); 71c7e0b5bfSTakashi Iwai int snd_seq_expand_var_event(const struct snd_seq_event *event, int count, char *buf, 72c7e0b5bfSTakashi Iwai int in_kernel, int size_aligned); 73*ea46f797STakashi Iwai int snd_seq_expand_var_event_at(const struct snd_seq_event *event, int count, 74*ea46f797STakashi Iwai char *buf, int offset); 75c7e0b5bfSTakashi Iwai int snd_seq_dump_var_event(const struct snd_seq_event *event, 76c7e0b5bfSTakashi Iwai snd_seq_dump_func_t func, void *private_data); 771da177e4SLinus Torvalds 781da177e4SLinus Torvalds /* interface for OSS emulation */ 79c7e0b5bfSTakashi Iwai int snd_seq_set_queue_tempo(int client, struct snd_seq_queue_tempo *tempo); 801da177e4SLinus Torvalds 811da177e4SLinus Torvalds /* port callback routines */ 82c7e0b5bfSTakashi Iwai void snd_port_init_callback(struct snd_seq_port_callback *p); 83c7e0b5bfSTakashi Iwai struct snd_seq_port_callback *snd_port_alloc_callback(void); 841da177e4SLinus Torvalds 851da177e4SLinus Torvalds /* port attach/detach */ 86c7e0b5bfSTakashi Iwai int snd_seq_event_port_attach(int client, struct snd_seq_port_callback *pcbp, 871da177e4SLinus Torvalds int cap, int type, int midi_channels, int midi_voices, char *portname); 881da177e4SLinus Torvalds int snd_seq_event_port_detach(int client, int port); 891da177e4SLinus Torvalds 90ee2da997SJohannes Berg #ifdef CONFIG_MODULES 9168ab6108STakashi Iwai void snd_seq_autoload_init(void); 9254a721abSTakashi Iwai void snd_seq_autoload_exit(void); 931da177e4SLinus Torvalds #else 9468ab6108STakashi Iwai #define snd_seq_autoload_init() 9568ab6108STakashi Iwai #define snd_seq_autoload_exit() 961da177e4SLinus Torvalds #endif 971da177e4SLinus Torvalds 981da177e4SLinus Torvalds #endif /* __SOUND_SEQ_KERNEL_H */ 99