xref: /linux-6.15/include/sound/seq_kernel.h (revision b0b228bb)
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);
73ea46f797STakashi Iwai int snd_seq_expand_var_event_at(const struct snd_seq_event *event, int count,
74ea46f797STakashi 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 
78*46397622STakashi Iwai /* size of the event packet; it can be greater than snd_seq_event size */
snd_seq_event_packet_size(struct snd_seq_event * ev)79*46397622STakashi Iwai static inline size_t snd_seq_event_packet_size(struct snd_seq_event *ev)
80*46397622STakashi Iwai {
81*46397622STakashi Iwai 	if (snd_seq_ev_is_ump(ev))
82*46397622STakashi Iwai 		return sizeof(struct snd_seq_ump_event);
83*46397622STakashi Iwai 	return sizeof(struct snd_seq_event);
84*46397622STakashi Iwai }
85*46397622STakashi Iwai 
861da177e4SLinus Torvalds /* interface for OSS emulation */
87c7e0b5bfSTakashi Iwai int snd_seq_set_queue_tempo(int client, struct snd_seq_queue_tempo *tempo);
881da177e4SLinus Torvalds 
891da177e4SLinus Torvalds /* port attach/detach */
90c7e0b5bfSTakashi Iwai int snd_seq_event_port_attach(int client, struct snd_seq_port_callback *pcbp,
911da177e4SLinus Torvalds 			      int cap, int type, int midi_channels, int midi_voices, char *portname);
921da177e4SLinus Torvalds int snd_seq_event_port_detach(int client, int port);
931da177e4SLinus Torvalds 
94ee2da997SJohannes Berg #ifdef CONFIG_MODULES
9568ab6108STakashi Iwai void snd_seq_autoload_init(void);
9654a721abSTakashi Iwai void snd_seq_autoload_exit(void);
971da177e4SLinus Torvalds #else
9868ab6108STakashi Iwai #define snd_seq_autoload_init()
9968ab6108STakashi Iwai #define snd_seq_autoload_exit()
1001da177e4SLinus Torvalds #endif
1011da177e4SLinus Torvalds 
1021da177e4SLinus Torvalds #endif /* __SOUND_SEQ_KERNEL_H */
103