1/*
2 **********************************************************************
3 *     sblive_mi.h
4 *     Copyright 1999, 2000 Creative Labs, Inc.
5 *
6 **********************************************************************
7 *
8 *     Date                 Author          Summary of changes
9 *     ----                 ------          ------------------
10 *     October 20, 1999     Bertrand Lee    base code release
11 *     November 2, 1999     Alan Cox        cleaned up
12 *
13 **********************************************************************
14 *
15 *     This program is free software; you can redistribute it and/or
16 *     modify it under the terms of the GNU General Public License as
17 *     published by the Free Software Foundation; either version 2 of
18 *     the License, or (at your option) any later version.
19 *
20 *     This program is distributed in the hope that it will be useful,
21 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
22 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23 *     GNU General Public License for more details.
24 *
25 *     You should have received a copy of the GNU General Public
26 *     License along with this program; if not, write to the Free
27 *     Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
28 *     USA.
29 *
30 **********************************************************************
31 */
32
33#ifndef _CARDMI_H
34#define _CARDMI_H
35
36#include "icardmid.h"
37#include <linux/interrupt.h>
38
39typedef enum
40{
41	STIN_PARSE = 0,
42	STIN_3BYTE,                     /* 0x80, 0x90, 0xA0, 0xB0, 0xE0 */
43	STIN_3BYTE_KEY,                 /* Byte 1 */
44	STIN_3BYTE_VEL,                 /* Byte 1 */
45	STIN_2BYTE,                     /* 0xC0, 0xD0 */
46	STIN_2BYTE_KEY,                 /* Byte 1 */
47	STIN_SYS_COMMON_2,              /* 0xF1, 0xF3  */
48	STIN_SYS_COMMON_2_KEY,
49	STIN_SYS_COMMON_3,              /* 0xF2 */
50	STIN_SYS_COMMON_3_KEY,
51	STIN_SYS_COMMON_3_VEL,
52	STIN_SYS_EX_NORM,               /* 0xF0, Normal mode */
53	STIN_SYS_REAL
54} midi_in_state;
55
56
57/* flags for card MIDI in object */
58#define FLAGS_MIDM_STARTED          0x00001000      // Data has started to come in after Midm Start
59#define MIDIIN_MAX_BUFFER_SIZE      200             // Definition for struct emu10k1_mpuin
60
61struct midi_data
62{
63	u8 data;
64	u32 timein;
65};
66
67struct emu10k1_mpuin
68{
69	spinlock_t        lock;
70	struct midi_queue *firstmidiq;
71	struct midi_queue *lastmidiq;
72	unsigned          qhead, qtail;
73	struct midi_data  midiq[MIDIIN_MAX_BUFFER_SIZE];
74	struct tasklet_struct tasklet;
75	struct midi_openinfo    openinfo;
76
77	/* For MIDI state machine */
78	u8              status;        /* For MIDI running status */
79	u8              fstatus;       /* For 0xFn status only */
80	midi_in_state   curstate;
81	midi_in_state   laststate;
82	u32             timestart;
83	u32             timein;
84	u8              data;
85};
86
87int emu10k1_mpuin_open(struct emu10k1_card *, struct midi_openinfo *);
88int emu10k1_mpuin_close(struct emu10k1_card *);
89int emu10k1_mpuin_add_buffer(struct emu10k1_mpuin *, struct midi_hdr *);
90int emu10k1_mpuin_start(struct emu10k1_card *);
91int emu10k1_mpuin_stop(struct emu10k1_card *);
92int emu10k1_mpuin_reset(struct emu10k1_card *);
93
94int emu10k1_mpuin_irqhandler(struct emu10k1_card *);
95void emu10k1_mpuin_bh(unsigned long);
96
97#endif  /* _CARDMI_H */
98