6b13f685e
김민수
BSP 최초 추가
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
|
#ifndef __SOUND_EMUX_SYNTH_H
#define __SOUND_EMUX_SYNTH_H
#include <sound/seq_kernel.h>
#include <sound/seq_device.h>
#include <sound/soundfont.h>
#include <sound/seq_midi_emul.h>
#ifdef CONFIG_SND_SEQUENCER_OSS
#include <sound/seq_oss.h>
#endif
#include <sound/emux_legacy.h>
#include <sound/seq_virmidi.h>
#define SNDRV_EMUX_USE_RAW_EFFECT
struct snd_emux;
struct snd_emux_port;
struct snd_emux_voice;
struct snd_emux_effect_table;
struct snd_emux_operators {
struct module *owner;
struct snd_emux_voice *(*get_voice)(struct snd_emux *emu,
struct snd_emux_port *port);
int (*prepare)(struct snd_emux_voice *vp);
void (*trigger)(struct snd_emux_voice *vp);
void (*release)(struct snd_emux_voice *vp);
void (*update)(struct snd_emux_voice *vp, int update);
void (*terminate)(struct snd_emux_voice *vp);
void (*free_voice)(struct snd_emux_voice *vp);
void (*reset)(struct snd_emux *emu, int ch);
int (*sample_new)(struct snd_emux *emu, struct snd_sf_sample *sp,
struct snd_util_memhdr *hdr,
const void __user *data, long count);
int (*sample_free)(struct snd_emux *emu, struct snd_sf_sample *sp,
struct snd_util_memhdr *hdr);
void (*sample_reset)(struct snd_emux *emu);
int (*load_fx)(struct snd_emux *emu, int type, int arg,
const void __user *data, long count);
void (*sysex)(struct snd_emux *emu, char *buf, int len, int parsed,
struct snd_midi_channel_set *chset);
#ifdef CONFIG_SND_SEQUENCER_OSS
int (*oss_ioctl)(struct snd_emux *emu, int cmd, int p1, int p2);
#endif
};
#define SNDRV_EMUX_MAX_PORTS 32 /* max # of sequencer ports */
#define SNDRV_EMUX_MAX_VOICES 64 /* max # of voices */
#define SNDRV_EMUX_MAX_MULTI_VOICES 16 /* max # of playable voices
* simultineously
*/
#define SNDRV_EMUX_ACCEPT_ROM (1<<0)
struct snd_emux {
struct snd_card *card;
int max_voices;
int mem_size;
int num_ports;
int pitch_shift;
struct snd_emux_operators ops;
void *hw;
unsigned long flags;
int midi_ports;
int midi_devidx;
unsigned int linear_panning: 1;
int hwdep_idx;
struct snd_hwdep *hwdep;
int num_voices;
struct snd_sf_list *sflist;
struct snd_emux_voice *voices;
int use_time;
spinlock_t voice_lock;
struct mutex register_mutex;
int client;
int ports[SNDRV_EMUX_MAX_PORTS];
struct snd_emux_port *portptrs[SNDRV_EMUX_MAX_PORTS];
int used;
char *name;
struct snd_rawmidi **vmidi;
struct timer_list tlist;
int timer_active;
struct snd_util_memhdr *memhdr;
#ifdef CONFIG_PROC_FS
struct snd_info_entry *proc;
#endif
#ifdef CONFIG_SND_SEQUENCER_OSS
struct snd_seq_device *oss_synth;
#endif
};
struct snd_emux_port {
struct snd_midi_channel_set chset;
struct snd_emux *emu;
char port_mode;
int volume_atten;
unsigned long drum_flags;
int ctrls[EMUX_MD_END];
#ifdef SNDRV_EMUX_USE_RAW_EFFECT
struct snd_emux_effect_table *effect;
#endif
#ifdef CONFIG_SND_SEQUENCER_OSS
struct snd_seq_oss_arg *oss_arg;
#endif
};
#define SNDRV_EMUX_PORT_MODE_MIDI 0 /* normal MIDI port */
#define SNDRV_EMUX_PORT_MODE_OSS_SYNTH 1 /* OSS synth port */
#define SNDRV_EMUX_PORT_MODE_OSS_MIDI 2 /* OSS multi channel synth port */
struct snd_emux_voice {
int ch;
int state;
#define SNDRV_EMUX_ST_OFF 0x00 /* Not playing, and inactive */
#define SNDRV_EMUX_ST_ON 0x01 /* Note on */
#define SNDRV_EMUX_ST_RELEASED (0x02|SNDRV_EMUX_ST_ON) /* Note released */
#define SNDRV_EMUX_ST_SUSTAINED (0x04|SNDRV_EMUX_ST_ON) /* Note sustained */
#define SNDRV_EMUX_ST_STANDBY (0x08|SNDRV_EMUX_ST_ON) /* Waiting to be triggered */
#define SNDRV_EMUX_ST_PENDING (0x10|SNDRV_EMUX_ST_ON) /* Note will be released */
#define SNDRV_EMUX_ST_LOCKED 0x100 /* Not accessible */
unsigned int time;
unsigned char note;
unsigned char key;
unsigned char velocity;
struct snd_sf_zone *zone;
void *block;
struct snd_midi_channel *chan;
struct snd_emux_port *port;
struct snd_emux *emu;
void *hw;
unsigned long ontime;
struct soundfont_voice_info reg;
int avol;
int acutoff;
int apitch;
int apan;
int aaux;
int ptarget;
int vtarget;
int ftarget;
};
#define SNDRV_EMUX_UPDATE_VOLUME (1<<0)
#define SNDRV_EMUX_UPDATE_PITCH (1<<1)
#define SNDRV_EMUX_UPDATE_PAN (1<<2)
#define SNDRV_EMUX_UPDATE_FMMOD (1<<3)
#define SNDRV_EMUX_UPDATE_TREMFREQ (1<<4)
#define SNDRV_EMUX_UPDATE_FM2FRQ2 (1<<5)
#define SNDRV_EMUX_UPDATE_Q (1<<6)
#ifdef SNDRV_EMUX_USE_RAW_EFFECT
struct snd_emux_effect_table {
short val[EMUX_NUM_EFFECTS];
unsigned char flag[EMUX_NUM_EFFECTS];
};
#endif /* SNDRV_EMUX_USE_RAW_EFFECT */
int snd_emux_new(struct snd_emux **remu);
int snd_emux_register(struct snd_emux *emu, struct snd_card *card, int index, char *name);
int snd_emux_free(struct snd_emux *emu);
void snd_emux_terminate_all(struct snd_emux *emu);
void snd_emux_lock_voice(struct snd_emux *emu, int voice);
void snd_emux_unlock_voice(struct snd_emux *emu, int voice);
#endif /* __SOUND_EMUX_SYNTH_H */
|