GNU Linux-libre 6.7.9-gnu
[releases.git] / include / uapi / sound / asound_fm.h
1 /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
2 #ifndef __SOUND_ASOUND_FM_H
3 #define __SOUND_ASOUND_FM_H
4
5 /*
6  *  Advanced Linux Sound Architecture - ALSA
7  *
8  *  Interface file between ALSA driver & user space
9  *  Copyright (c) 1994-98 by Jaroslav Kysela <perex@perex.cz>,
10  *                           4Front Technologies
11  *
12  *  Direct FM control
13  */
14
15 #define SNDRV_DM_FM_MODE_OPL2   0x00
16 #define SNDRV_DM_FM_MODE_OPL3   0x01
17
18 struct snd_dm_fm_info {
19         unsigned char fm_mode;          /* OPL mode, see SNDRV_DM_FM_MODE_XXX */
20         unsigned char rhythm;           /* percussion mode flag */
21 };
22
23 /*
24  *  Data structure composing an FM "note" or sound event.
25  */
26
27 struct snd_dm_fm_voice {
28         unsigned char op;               /* operator cell (0 or 1) */
29         unsigned char voice;            /* FM voice (0 to 17) */
30
31         unsigned char am;               /* amplitude modulation */
32         unsigned char vibrato;          /* vibrato effect */
33         unsigned char do_sustain;       /* sustain phase */
34         unsigned char kbd_scale;        /* keyboard scaling */
35         unsigned char harmonic;         /* 4 bits: harmonic and multiplier */
36         unsigned char scale_level;      /* 2 bits: decrease output freq rises */
37         unsigned char volume;           /* 6 bits: volume */
38
39         unsigned char attack;           /* 4 bits: attack rate */
40         unsigned char decay;            /* 4 bits: decay rate */
41         unsigned char sustain;          /* 4 bits: sustain level */
42         unsigned char release;          /* 4 bits: release rate */
43
44         unsigned char feedback;         /* 3 bits: feedback for op0 */
45         unsigned char connection;       /* 0 for serial, 1 for parallel */
46         unsigned char left;             /* stereo left */
47         unsigned char right;            /* stereo right */
48         unsigned char waveform;         /* 3 bits: waveform shape */
49 };
50
51 /*
52  *  This describes an FM note by its voice, octave, frequency number (10bit)
53  *  and key on/off.
54  */
55
56 struct snd_dm_fm_note {
57         unsigned char voice;    /* 0-17 voice channel */
58         unsigned char octave;   /* 3 bits: what octave to play */
59         unsigned int fnum;      /* 10 bits: frequency number */
60         unsigned char key_on;   /* set for active, clear for silent */
61 };
62
63 /*
64  *  FM parameters that apply globally to all voices, and thus are not "notes"
65  */
66
67 struct snd_dm_fm_params {
68         unsigned char am_depth;         /* amplitude modulation depth (1=hi) */
69         unsigned char vib_depth;        /* vibrato depth (1=hi) */
70         unsigned char kbd_split;        /* keyboard split */
71         unsigned char rhythm;           /* percussion mode select */
72
73         /* This block is the percussion instrument data */
74         unsigned char bass;
75         unsigned char snare;
76         unsigned char tomtom;
77         unsigned char cymbal;
78         unsigned char hihat;
79 };
80
81 /*
82  *  FM mode ioctl settings
83  */
84
85 #define SNDRV_DM_FM_IOCTL_INFO          _IOR('H', 0x20, struct snd_dm_fm_info)
86 #define SNDRV_DM_FM_IOCTL_RESET         _IO ('H', 0x21)
87 #define SNDRV_DM_FM_IOCTL_PLAY_NOTE     _IOW('H', 0x22, struct snd_dm_fm_note)
88 #define SNDRV_DM_FM_IOCTL_SET_VOICE     _IOW('H', 0x23, struct snd_dm_fm_voice)
89 #define SNDRV_DM_FM_IOCTL_SET_PARAMS    _IOW('H', 0x24, struct snd_dm_fm_params)
90 #define SNDRV_DM_FM_IOCTL_SET_MODE      _IOW('H', 0x25, int)
91 /* for OPL3 only */
92 #define SNDRV_DM_FM_IOCTL_SET_CONNECTION        _IOW('H', 0x26, int)
93 /* SBI patch management */
94 #define SNDRV_DM_FM_IOCTL_CLEAR_PATCHES _IO ('H', 0x40)
95
96 #define SNDRV_DM_FM_OSS_IOCTL_RESET             0x20
97 #define SNDRV_DM_FM_OSS_IOCTL_PLAY_NOTE         0x21
98 #define SNDRV_DM_FM_OSS_IOCTL_SET_VOICE         0x22
99 #define SNDRV_DM_FM_OSS_IOCTL_SET_PARAMS        0x23
100 #define SNDRV_DM_FM_OSS_IOCTL_SET_MODE          0x24
101 #define SNDRV_DM_FM_OSS_IOCTL_SET_OPL           0x25
102
103 /*
104  * Patch Record - fixed size for write
105  */
106
107 #define FM_KEY_SBI      "SBI\032"
108 #define FM_KEY_2OP      "2OP\032"
109 #define FM_KEY_4OP      "4OP\032"
110
111 struct sbi_patch {
112         unsigned char prog;
113         unsigned char bank;
114         char key[4];
115         char name[25];
116         char extension[7];
117         unsigned char data[32];
118 };
119
120 #endif /* __SOUND_ASOUND_FM_H */