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