linux/sound/core/seq/oss/seq_oss_device.h
<<
>>
Prefs
   1/*
   2 * OSS compatible sequencer driver
   3 *
   4 * Copyright (C) 1998,99 Takashi Iwai <tiwai@suse.de>
   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 __SEQ_OSS_DEVICE_H
  22#define __SEQ_OSS_DEVICE_H
  23
  24#include <linux/time.h>
  25#include <linux/wait.h>
  26#include <linux/slab.h>
  27#include <linux/sched.h>
  28#include <sound/core.h>
  29#include <sound/seq_oss.h>
  30#include <sound/rawmidi.h>
  31#include <sound/seq_kernel.h>
  32#include <sound/info.h>
  33
  34/* enable debug print */
  35#define SNDRV_SEQ_OSS_DEBUG
  36
  37/* max. applications */
  38#define SNDRV_SEQ_OSS_MAX_CLIENTS       16
  39#define SNDRV_SEQ_OSS_MAX_SYNTH_DEVS    16
  40#define SNDRV_SEQ_OSS_MAX_MIDI_DEVS     32
  41
  42/* version */
  43#define SNDRV_SEQ_OSS_MAJOR_VERSION     0
  44#define SNDRV_SEQ_OSS_MINOR_VERSION     1
  45#define SNDRV_SEQ_OSS_TINY_VERSION      8
  46#define SNDRV_SEQ_OSS_VERSION_STR       "0.1.8"
  47
  48/* device and proc interface name */
  49#define SNDRV_SEQ_OSS_DEVNAME           "seq_oss"
  50#define SNDRV_SEQ_OSS_PROCNAME          "oss"
  51
  52
  53/*
  54 * type definitions
  55 */
  56
  57typedef unsigned int reltime_t;
  58typedef unsigned int abstime_t;
  59
  60
  61/*
  62 * synthesizer channel information
  63 */
  64struct seq_oss_chinfo {
  65        int note, vel;
  66};
  67
  68/*
  69 * synthesizer information
  70 */
  71struct seq_oss_synthinfo {
  72        struct snd_seq_oss_arg arg;
  73        struct seq_oss_chinfo *ch;
  74        struct seq_oss_synth_sysex *sysex;
  75        int nr_voices;
  76        int opened;
  77        int is_midi;
  78        int midi_mapped;
  79};
  80
  81
  82/*
  83 * sequencer client information
  84 */
  85
  86struct seq_oss_devinfo {
  87
  88        int index;      /* application index */
  89        int cseq;       /* sequencer client number */
  90        int port;       /* sequencer port number */
  91        int queue;      /* sequencer queue number */
  92
  93        struct snd_seq_addr addr;       /* address of this device */
  94
  95        int seq_mode;   /* sequencer mode */
  96        int file_mode;  /* file access */
  97
  98        /* midi device table */
  99        int max_mididev;
 100
 101        /* synth device table */
 102        int max_synthdev;
 103        struct seq_oss_synthinfo synths[SNDRV_SEQ_OSS_MAX_SYNTH_DEVS];
 104        int synth_opened;
 105
 106        /* output queue */
 107        struct seq_oss_writeq *writeq;
 108
 109        /* midi input queue */
 110        struct seq_oss_readq *readq;
 111
 112        /* timer */
 113        struct seq_oss_timer *timer;
 114};
 115
 116
 117/*
 118 * function prototypes
 119 */
 120
 121/* create/delete OSS sequencer client */
 122int snd_seq_oss_create_client(void);
 123int snd_seq_oss_delete_client(void);
 124
 125/* device file interface */
 126int snd_seq_oss_open(struct file *file, int level);
 127void snd_seq_oss_release(struct seq_oss_devinfo *dp);
 128int snd_seq_oss_ioctl(struct seq_oss_devinfo *dp, unsigned int cmd, unsigned long arg);
 129int snd_seq_oss_read(struct seq_oss_devinfo *dev, char __user *buf, int count);
 130int snd_seq_oss_write(struct seq_oss_devinfo *dp, const char __user *buf, int count, struct file *opt);
 131unsigned int snd_seq_oss_poll(struct seq_oss_devinfo *dp, struct file *file, poll_table * wait);
 132
 133void snd_seq_oss_reset(struct seq_oss_devinfo *dp);
 134void snd_seq_oss_drain_write(struct seq_oss_devinfo *dp);
 135
 136/* */
 137void snd_seq_oss_process_queue(struct seq_oss_devinfo *dp, abstime_t time);
 138
 139
 140/* proc interface */
 141void snd_seq_oss_system_info_read(struct snd_info_buffer *buf);
 142void snd_seq_oss_midi_info_read(struct snd_info_buffer *buf);
 143void snd_seq_oss_synth_info_read(struct snd_info_buffer *buf);
 144void snd_seq_oss_readq_info_read(struct seq_oss_readq *q, struct snd_info_buffer *buf);
 145
 146/* file mode macros */
 147#define is_read_mode(mode)      ((mode) & SNDRV_SEQ_OSS_FILE_READ)
 148#define is_write_mode(mode)     ((mode) & SNDRV_SEQ_OSS_FILE_WRITE)
 149#define is_nonblock_mode(mode)  ((mode) & SNDRV_SEQ_OSS_FILE_NONBLOCK)
 150
 151/* dispatch event */
 152static inline int
 153snd_seq_oss_dispatch(struct seq_oss_devinfo *dp, struct snd_seq_event *ev, int atomic, int hop)
 154{
 155        return snd_seq_kernel_client_dispatch(dp->cseq, ev, atomic, hop);
 156}
 157
 158/* ioctl */
 159static inline int
 160snd_seq_oss_control(struct seq_oss_devinfo *dp, unsigned int type, void *arg)
 161{
 162        return snd_seq_kernel_client_ctl(dp->cseq, type, arg);
 163}
 164
 165/* fill the addresses in header */
 166static inline void
 167snd_seq_oss_fill_addr(struct seq_oss_devinfo *dp, struct snd_seq_event *ev,
 168                     int dest_client, int dest_port)
 169{
 170        ev->queue = dp->queue;
 171        ev->source = dp->addr;
 172        ev->dest.client = dest_client;
 173        ev->dest.port = dest_port;
 174}
 175
 176
 177/* misc. functions for proc interface */
 178char *enabled_str(int bool);
 179
 180
 181/* for debug */
 182#ifdef SNDRV_SEQ_OSS_DEBUG
 183extern int seq_oss_debug;
 184#define debug_printk(x) do { if (seq_oss_debug > 0) snd_printd x; } while (0)
 185#else
 186#define debug_printk(x) /**/
 187#endif
 188
 189#endif /* __SEQ_OSS_DEVICE_H */
 190