11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef __SOUND_SEQ_OSS_H
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __SOUND_SEQ_OSS_H
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * OSS compatible sequencer driver
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 1998,99 Takashi Iwai
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is free software; you can redistribute it and/or modify
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * it under the terms of the GNU General Public License as published by
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * the Free Software Foundation; either version 2 of the License, or
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * (at your option) any later version.
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is distributed in the hope that it will be useful,
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * but WITHOUT ANY WARRANTY; without even the implied warranty of
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * GNU General Public License for more details.
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * You should have received a copy of the GNU General Public License
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * along with this program; if not, write to the Free Software
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
24a1ce39288e6fbefdd8d607021d02384eb4a20b99David Howells#include <sound/asequencer.h>
25a1ce39288e6fbefdd8d607021d02384eb4a20b99David Howells#include <sound/seq_kernel.h>
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * argument structure for synthesizer operations
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
30080dece3460b534bedc4ef4ba3abaa57e9486331Takashi Iwaistruct snd_seq_oss_arg {
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* given by OSS sequencer */
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int app_index;	/* application unique index */
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int file_mode;	/* file mode - see below */
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int seq_mode;	/* sequencer mode - see below */
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* following must be initialized in open callback */
37080dece3460b534bedc4ef4ba3abaa57e9486331Takashi Iwai	struct snd_seq_addr addr;	/* opened port address */
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void *private_data;	/* private data for lowlevel drivers */
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* note-on event passing mode: initially given by OSS seq,
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * but configurable by drivers - see below
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 */
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int event_passing;
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * synthesizer operation callbacks
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
50080dece3460b534bedc4ef4ba3abaa57e9486331Takashi Iwaistruct snd_seq_oss_callback {
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct module *owner;
52080dece3460b534bedc4ef4ba3abaa57e9486331Takashi Iwai	int (*open)(struct snd_seq_oss_arg *p, void *closure);
53080dece3460b534bedc4ef4ba3abaa57e9486331Takashi Iwai	int (*close)(struct snd_seq_oss_arg *p);
54080dece3460b534bedc4ef4ba3abaa57e9486331Takashi Iwai	int (*ioctl)(struct snd_seq_oss_arg *p, unsigned int cmd, unsigned long arg);
55080dece3460b534bedc4ef4ba3abaa57e9486331Takashi Iwai	int (*load_patch)(struct snd_seq_oss_arg *p, int format, const char __user *buf, int offs, int count);
56080dece3460b534bedc4ef4ba3abaa57e9486331Takashi Iwai	int (*reset)(struct snd_seq_oss_arg *p);
57080dece3460b534bedc4ef4ba3abaa57e9486331Takashi Iwai	int (*raw_event)(struct snd_seq_oss_arg *p, unsigned char *data);
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* flag: file_mode */
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_SEQ_OSS_FILE_ACMODE		3
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_SEQ_OSS_FILE_READ		1
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_SEQ_OSS_FILE_WRITE		2
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_SEQ_OSS_FILE_NONBLOCK	4
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* flag: seq_mode */
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_SEQ_OSS_MODE_SYNTH		0
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_SEQ_OSS_MODE_MUSIC		1
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* flag: event_passing */
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_SEQ_OSS_PROCESS_EVENTS	0	/* key == 255 is processed as velocity change */
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_SEQ_OSS_PASS_EVENTS		1	/* pass all events to callback */
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_SEQ_OSS_PROCESS_KEYPRESS	2	/* key >= 128 will be processed as key-pressure */
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* default control rate: fixed */
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_SEQ_OSS_CTRLRATE		100
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* default max queue length: configurable by module option */
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_SEQ_OSS_MAX_QLEN		1024
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * data pointer to snd_seq_register_device
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
85080dece3460b534bedc4ef4ba3abaa57e9486331Takashi Iwaistruct snd_seq_oss_reg {
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int type;
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int subtype;
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int nvoices;
89080dece3460b534bedc4ef4ba3abaa57e9486331Takashi Iwai	struct snd_seq_oss_callback oper;
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void *private_data;
91080dece3460b534bedc4ef4ba3abaa57e9486331Takashi Iwai};
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* device id */
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SNDRV_SEQ_DEV_ID_OSS		"seq-oss"
951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* __SOUND_SEQ_OSS_H */
97