/*
**********************************************************************
* isblive_mid.h
* Copyright 1999, 2000 Creative Labs, Inc.
*
**********************************************************************
*
* Date Author Summary of changes
* ---- ------ ------------------
* October 20, 1999 Bertrand Lee base code release
*
**********************************************************************
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
* USA.
*
**********************************************************************
*/
#ifndef _ICARDMIDI_H
#define _ICARDMIDI_H
/* MIDI defines */
#define MIDI_DATA_FIRST 0x00
#define MIDI_DATA_LAST 0x7F
#define MIDI_STATUS_FIRST 0x80
#define MIDI_STATUS_LAST 0xFF
/* Channel status bytes */
#define MIDI_STATUS_CHANNEL_FIRST 0x80
#define MIDI_STATUS_CHANNEL_LAST 0xE0
#define MIDI_STATUS_CHANNEL_MASK 0xF0
/* Channel voice messages */
#define MIDI_VOICE_NOTE_OFF 0x80
#define MIDI_VOICE_NOTE_ON 0x90
#define MIDI_VOICE_POLY_PRESSURE 0xA0
#define MIDI_VOICE_CONTROL_CHANGE 0xB0
#define MIDI_VOICE_PROGRAM_CHANGE 0xC0
#define MIDI_VOICE_CHANNEL_PRESSURE 0xD0
#define MIDI_VOICE_PITCH_BEND 0xE0
/* Channel mode messages */
#define MIDI_MODE_CHANNEL MIDI_VOICE_CONTROL_CHANGE
/* System status bytes */
#define MIDI_STATUS_SYSTEM_FIRST 0xF0
#define MIDI_STATUS_SYSTEM_LAST 0xFF
/* System exclusive messages */
#define MIDI_SYSEX_BEGIN 0xF0
#define MIDI_SYSEX_EOX 0xF7
/* System common messages */
#define MIDI_COMMON_TCQF 0xF1 /* Time code quarter frame */
#define MIDI_COMMON_SONG_POSITION 0xF2
#define MIDI_COMMON_SONG_SELECT 0xF3
#define MIDI_COMMON_UNDEFINED_F4 0xF4
#define MIDI_COMMON_UNDEFINED_F5 0xF5
#define MIDI_COMMON_TUNE_REQUEST 0xF6
/* System real-time messages */
#define MIDI_RTIME_TIMING_CLOCK 0xF8
#define MIDI_RTIME_UNDEFINED_F9 0xF9
#define MIDI_RTIME_START 0xFA
#define MIDI_RTIME_CONTINUE 0xFB
#define MIDI_RTIME_STOP 0xFC
#define MIDI_RTIME_UNDEFINED_FD 0xFD
#define MIDI_RTIME_ACTIVE_SENSING 0xFE
#define MIDI_RTIME_SYSTEM_RESET 0xFF
/* Flags for flags parm of midiOutCachePatches(), midiOutCacheDrumPatches() */
#define MIDI_CACHE_ALL 1
#define MIDI_CACHE_BESTFIT 2
#define MIDI_CACHE_QUERY 3
#define MIDI_UNCACHE 4
/* Event declarations for MPU IRQ Callbacks */
#define ICARDMIDI_INLONGDATA 0x00000001 /* MIM_LONGDATA */
#define ICARDMIDI_INLONGERROR 0x00000002 /* MIM_LONGERROR */
#define ICARDMIDI_OUTLONGDATA 0x00000004 /* MOM_DONE for MPU OUT buffer */
#define ICARDMIDI_INDATA 0x00000010 /* MIM_DATA */
#define ICARDMIDI_INDATAERROR 0x00000020 /* MIM_ERROR */
/* Declaration for flags in CARDMIDIBUFFERHDR */
/* Make it the same as MHDR_DONE, MHDR_INQUEUE in mmsystem.h */
#define MIDIBUF_DONE 0x00000001
#define MIDIBUF_INQUEUE 0x00000004
/* Declaration for msg parameter in midiCallbackFn */
#define ICARDMIDI_OUTBUFFEROK 0x00000001
#define ICARDMIDI_INMIDIOK 0x00000002
/* Declaration for technology in struct midi_caps */
#define MT_MIDIPORT 0x00000001 /* In original MIDIOUTCAPS structure */
#define MT_FMSYNTH 0x00000004 /* In original MIDIOUTCAPS structure */
#define MT_AWESYNTH 0x00001000
#define MT_PCISYNTH 0x00002000
#define MT_PCISYNTH64 0x00004000
#define CARDMIDI_AWEMASK 0x0000F000
enum LocalErrorCode
{
CTSTATUS_NOTENABLED = 0x7000,
CTSTATUS_READY,
CTSTATUS_BUSY,
CTSTATUS_DATAAVAIL,
CTSTATUS_NODATA,
CTSTATUS_NEXT_BYTE
};
/* MIDI data block header */
struct midi_hdr
{
u8 *reserved; /* Pointer to original locked data block */
u32 bufferlength; /* Length of data in data block */
u32 bytesrecorded; /* Used for input only */
u32 user; /* For client's use */
u32 flags; /* Assorted flags (see defines) */
struct list_head list; /* Reserved for driver */
u8 *data; /* Second copy of first pointer */
};
/* Enumeration for SetControl */
enum
{
MIDIOBJVOLUME = 0x1,
MIDIQUERYACTIVEINST
};
struct midi_queue
{
struct midi_queue *next;
u32 qtype; /* 0 = short message, 1 = long data */
u32 length;
u32 sizeLeft;
u8 *midibyte;
unsigned long refdata;
};
struct midi_openinfo
{
u32 cbsize;
u32 flags;
unsigned long refdata;
u32 streamid;
};
int emu10k1_midi_callback(unsigned long , unsigned long, unsigned long *);
#endif /* _ICARDMIDI_H */