]> nv-tegra.nvidia Code Review - linux-2.6.git/blob - include/sound/ainstr_fm.h
[ALSA] Update A_SAMPLE_RATE register details.
[linux-2.6.git] / include / sound / ainstr_fm.h
1 /*
2  *  Advanced Linux Sound Architecture
3  *
4  *  FM (OPL2/3) Instrument Format
5  *  Copyright (c) 2000 Uros Bizjak <uros@kss-loka.si>
6  *
7  *
8  *   This program is free software; you can redistribute it and/or modify
9  *   it under the terms of the GNU General Public License as published by
10  *   the Free Software Foundation; either version 2 of the License, or
11  *   (at your option) any later version.
12  *
13  *   This program is distributed in the hope that it will be useful,
14  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  *   GNU General Public License for more details.
17  *
18  *   You should have received a copy of the GNU General Public License
19  *   along with this program; if not, write to the Free Software
20  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
21  *
22  */
23
24 #ifndef __SOUND_AINSTR_FM_H
25 #define __SOUND_AINSTR_FM_H
26
27 #ifndef __KERNEL__
28 #include <asm/types.h>
29 #include <asm/byteorder.h>
30 #endif
31
32 /*
33  *  share types (share ID 1)
34  */
35
36 #define FM_SHARE_FILE           0
37
38 /*
39  * FM operator
40  */
41
42 typedef struct fm_operator {
43         unsigned char am_vib;
44         unsigned char ksl_level;
45         unsigned char attack_decay;
46         unsigned char sustain_release;
47         unsigned char wave_select;
48 } fm_operator_t;
49
50 /*
51  *  Instrument
52  */
53
54 #define FM_PATCH_OPL2   0x01            /* OPL2 2 operators FM instrument */
55 #define FM_PATCH_OPL3   0x02            /* OPL3 4 operators FM instrument */
56
57 typedef struct {
58         unsigned int share_id[4];       /* share id - zero = no sharing */
59         unsigned char type;             /* instrument type */
60
61         fm_operator_t op[4];
62         unsigned char feedback_connection[2];
63
64         unsigned char echo_delay;
65         unsigned char echo_atten;
66         unsigned char chorus_spread;
67         unsigned char trnsps;
68         unsigned char fix_dur;
69         unsigned char modes;
70         unsigned char fix_key;
71 } fm_instrument_t;
72
73 /*
74  *
75  *    Kernel <-> user space
76  *    Hardware (CPU) independent section
77  *
78  *    * = zero or more
79  *    + = one or more
80  *
81  *    fm_xinstrument    FM_STRU_INSTR
82  *
83  */
84
85 #define FM_STRU_INSTR   __cpu_to_be32(('I'<<24)|('N'<<16)|('S'<<8)|'T')
86
87 /*
88  * FM operator
89  */
90
91 typedef struct fm_xoperator {
92         __u8 am_vib;
93         __u8 ksl_level;
94         __u8 attack_decay;
95         __u8 sustain_release;
96         __u8 wave_select;
97 } fm_xoperator_t;
98
99 /*
100  *  Instrument
101  */
102
103 typedef struct fm_xinstrument {
104         __u32 stype;                    /* structure type */
105
106         __u32 share_id[4];              /* share id - zero = no sharing */
107         __u8 type;                      /* instrument type */
108
109         fm_xoperator_t op[4];           /* fm operators */
110         __u8 feedback_connection[2];
111
112         __u8 echo_delay;
113         __u8 echo_atten;
114         __u8 chorus_spread;
115         __u8 trnsps;
116         __u8 fix_dur;
117         __u8 modes;
118         __u8 fix_key;
119 } fm_xinstrument_t;
120
121 #ifdef __KERNEL__
122
123 #include "seq_instr.h"
124
125 int snd_seq_fm_init(snd_seq_kinstr_ops_t * ops,
126                     snd_seq_kinstr_ops_t * next);
127
128 #endif
129
130 #endif  /* __SOUND_AINSTR_FM_H */