Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 #ifndef __SOUND_ASOUND_FM_H
  2 #define __SOUND_ASOUND_FM_H
  3 
  4 /*
  5  *  Advanced Linux Sound Architecture - ALSA
  6  *
  7  *  Interface file between ALSA driver & user space
  8  *  Copyright (c) 1994-98 by Jaroslav Kysela <perex@perex.cz>,
  9  *                           4Front Technologies
 10  *
 11  *  Direct FM control
 12  *
 13  *   This program is free software; you can redistribute it and/or modify
 14  *   it under the terms of the GNU General Public License as published by
 15  *   the Free Software Foundation; either version 2 of the License, or
 16  *   (at your option) any later version.
 17  *
 18  *   This program is distributed in the hope that it will be useful,
 19  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 20  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 21  *   GNU General Public License for more details.
 22  *
 23  *   You should have received a copy of the GNU General Public License
 24  *   along with this program; if not, write to the Free Software
 25  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 26  *
 27  */
 28 
 29 #define SNDRV_DM_FM_MODE_OPL2   0x00
 30 #define SNDRV_DM_FM_MODE_OPL3   0x01
 31 
 32 struct snd_dm_fm_info {
 33         unsigned char fm_mode;          /* OPL mode, see SNDRV_DM_FM_MODE_XXX */
 34         unsigned char rhythm;           /* percussion mode flag */
 35 };
 36 
 37 /*
 38  *  Data structure composing an FM "note" or sound event.
 39  */
 40 
 41 struct snd_dm_fm_voice {
 42         unsigned char op;               /* operator cell (0 or 1) */
 43         unsigned char voice;            /* FM voice (0 to 17) */
 44 
 45         unsigned char am;               /* amplitude modulation */
 46         unsigned char vibrato;          /* vibrato effect */
 47         unsigned char do_sustain;       /* sustain phase */
 48         unsigned char kbd_scale;        /* keyboard scaling */
 49         unsigned char harmonic;         /* 4 bits: harmonic and multiplier */
 50         unsigned char scale_level;      /* 2 bits: decrease output freq rises */
 51         unsigned char volume;           /* 6 bits: volume */
 52 
 53         unsigned char attack;           /* 4 bits: attack rate */
 54         unsigned char decay;            /* 4 bits: decay rate */
 55         unsigned char sustain;          /* 4 bits: sustain level */
 56         unsigned char release;          /* 4 bits: release rate */
 57 
 58         unsigned char feedback;         /* 3 bits: feedback for op0 */
 59         unsigned char connection;       /* 0 for serial, 1 for parallel */
 60         unsigned char left;             /* stereo left */
 61         unsigned char right;            /* stereo right */
 62         unsigned char waveform;         /* 3 bits: waveform shape */
 63 };
 64 
 65 /*
 66  *  This describes an FM note by its voice, octave, frequency number (10bit)
 67  *  and key on/off.
 68  */
 69 
 70 struct snd_dm_fm_note {
 71         unsigned char voice;    /* 0-17 voice channel */
 72         unsigned char octave;   /* 3 bits: what octave to play */
 73         unsigned int fnum;      /* 10 bits: frequency number */
 74         unsigned char key_on;   /* set for active, clear for silent */
 75 };
 76 
 77 /*
 78  *  FM parameters that apply globally to all voices, and thus are not "notes"
 79  */
 80 
 81 struct snd_dm_fm_params {
 82         unsigned char am_depth;         /* amplitude modulation depth (1=hi) */
 83         unsigned char vib_depth;        /* vibrato depth (1=hi) */
 84         unsigned char kbd_split;        /* keyboard split */
 85         unsigned char rhythm;           /* percussion mode select */
 86 
 87         /* This block is the percussion instrument data */
 88         unsigned char bass;
 89         unsigned char snare;
 90         unsigned char tomtom;
 91         unsigned char cymbal;
 92         unsigned char hihat;
 93 };
 94 
 95 /*
 96  *  FM mode ioctl settings
 97  */
 98 
 99 #define SNDRV_DM_FM_IOCTL_INFO          _IOR('H', 0x20, struct snd_dm_fm_info)
100 #define SNDRV_DM_FM_IOCTL_RESET         _IO ('H', 0x21)
101 #define SNDRV_DM_FM_IOCTL_PLAY_NOTE     _IOW('H', 0x22, struct snd_dm_fm_note)
102 #define SNDRV_DM_FM_IOCTL_SET_VOICE     _IOW('H', 0x23, struct snd_dm_fm_voice)
103 #define SNDRV_DM_FM_IOCTL_SET_PARAMS    _IOW('H', 0x24, struct snd_dm_fm_params)
104 #define SNDRV_DM_FM_IOCTL_SET_MODE      _IOW('H', 0x25, int)
105 /* for OPL3 only */
106 #define SNDRV_DM_FM_IOCTL_SET_CONNECTION        _IOW('H', 0x26, int)
107 /* SBI patch management */
108 #define SNDRV_DM_FM_IOCTL_CLEAR_PATCHES _IO ('H', 0x40)
109 
110 #define SNDRV_DM_FM_OSS_IOCTL_RESET             0x20
111 #define SNDRV_DM_FM_OSS_IOCTL_PLAY_NOTE         0x21
112 #define SNDRV_DM_FM_OSS_IOCTL_SET_VOICE         0x22
113 #define SNDRV_DM_FM_OSS_IOCTL_SET_PARAMS        0x23
114 #define SNDRV_DM_FM_OSS_IOCTL_SET_MODE          0x24
115 #define SNDRV_DM_FM_OSS_IOCTL_SET_OPL           0x25
116 
117 /*
118  * Patch Record - fixed size for write
119  */
120 
121 #define FM_KEY_SBI      "SBI\032"
122 #define FM_KEY_2OP      "2OP\032"
123 #define FM_KEY_4OP      "4OP\032"
124 
125 struct sbi_patch {
126         unsigned char prog;
127         unsigned char bank;
128         char key[4];
129         char name[25];
130         char extension[7];
131         unsigned char data[32];
132 };
133 
134 #endif /* __SOUND_ASOUND_FM_H */
135 
  This page was automatically generated by the LXR engine.