OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [include/] [sound/] [ainstr_simple.h] - Blame information for rev 62

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
/*
2
 *  Advanced Linux Sound Architecture
3
 *
4
 *  Simple (MOD player) Instrument Format
5
 *  Copyright (c) 1994-99 by Jaroslav Kysela <perex@perex.cz>
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_SIMPLE_H
25
#define __SOUND_AINSTR_SIMPLE_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 SIMPLE_SHARE_FILE               0
37
 
38
/*
39
 *  wave formats
40
 */
41
 
42
#define SIMPLE_WAVE_16BIT               0x0001  /* 16-bit wave */
43
#define SIMPLE_WAVE_UNSIGNED            0x0002  /* unsigned wave */
44
#define SIMPLE_WAVE_INVERT              0x0002  /* same as unsigned wave */
45
#define SIMPLE_WAVE_BACKWARD            0x0004  /* backward mode (maybe used for reverb or ping-ping loop) */
46
#define SIMPLE_WAVE_LOOP                0x0008  /* loop mode */
47
#define SIMPLE_WAVE_BIDIR               0x0010  /* bidirectional mode */
48
#define SIMPLE_WAVE_STEREO              0x0100  /* stereo wave */
49
#define SIMPLE_WAVE_ULAW                0x0200  /* uLaw compression mode */
50
 
51
/*
52
 *  instrument effects
53
 */
54
 
55
#define SIMPLE_EFFECT_NONE              0
56
#define SIMPLE_EFFECT_REVERB            1
57
#define SIMPLE_EFFECT_CHORUS            2
58
#define SIMPLE_EFFECT_ECHO              3
59
 
60
/*
61
 *  instrument info
62
 */
63
 
64
struct simple_instrument_info {
65
        unsigned int format;            /* supported format bits */
66
        unsigned int effects;           /* supported effects (1 << SIMPLE_EFFECT_*) */
67
        unsigned int max8_len;          /* maximum 8-bit wave length */
68
        unsigned int max16_len;         /* maximum 16-bit wave length */
69
};
70
 
71
/*
72
 *  Instrument
73
 */
74
 
75
struct simple_instrument {
76
        unsigned int share_id[4];       /* share id - zero = no sharing */
77
        unsigned int format;            /* wave format */
78
 
79
        struct {
80
                unsigned int number;    /* some other ID for this instrument */
81
                unsigned int memory;    /* begin of waveform in onboard memory */
82
                unsigned char *ptr;     /* pointer to waveform in system memory */
83
        } address;
84
 
85
        unsigned int size;              /* size of waveform in samples */
86
        unsigned int start;             /* start offset in samples * 16 (lowest 4 bits - fraction) */
87
        unsigned int loop_start;        /* loop start offset in samples * 16 (lowest 4 bits - fraction) */
88
        unsigned int loop_end;          /* loop end offset in samples * 16 (lowest 4 bits - fraction) */
89
        unsigned short loop_repeat;     /* loop repeat - 0 = forever */
90
 
91
        unsigned char effect1;          /* effect 1 */
92
        unsigned char effect1_depth;    /* 0-127 */
93
        unsigned char effect2;          /* effect 2 */
94
        unsigned char effect2_depth;    /* 0-127 */
95
};
96
 
97
/*
98
 *
99
 *    Kernel <-> user space
100
 *    Hardware (CPU) independent section
101
 *
102
 *    * = zero or more
103
 *    + = one or more
104
 *
105
 *    simple_xinstrument        SIMPLE_STRU_INSTR
106
 *
107
 */
108
 
109
#define SIMPLE_STRU_INSTR       __cpu_to_be32(('I'<<24)|('N'<<16)|('S'<<8)|'T')
110
 
111
/*
112
 *  Instrument
113
 */
114
 
115
struct simple_xinstrument {
116
        __u32 stype;
117
 
118
        __u32 share_id[4];              /* share id - zero = no sharing */
119
        __u32 format;                   /* wave format */
120
 
121
        __u32 size;                     /* size of waveform in samples */
122
        __u32 start;                    /* start offset in samples * 16 (lowest 4 bits - fraction) */
123
        __u32 loop_start;               /* bits loop start offset in samples * 16 (lowest 4 bits - fraction) */
124
        __u32 loop_end;                 /* loop start offset in samples * 16 (lowest 4 bits - fraction) */
125
        __u16 loop_repeat;              /* loop repeat - 0 = forever */
126
 
127
        __u8 effect1;                   /* effect 1 */
128
        __u8 effect1_depth;             /* 0-127 */
129
        __u8 effect2;                   /* effect 2 */
130
        __u8 effect2_depth;             /* 0-127 */
131
};
132
 
133
#ifdef __KERNEL__
134
 
135
#include "seq_instr.h"
136
 
137
struct snd_simple_ops {
138
        void *private_data;
139
        int (*info)(void *private_data, struct simple_instrument_info *info);
140
        int (*put_sample)(void *private_data, struct simple_instrument *instr,
141
                          char __user *data, long len, int atomic);
142
        int (*get_sample)(void *private_data, struct simple_instrument *instr,
143
                          char __user *data, long len, int atomic);
144
        int (*remove_sample)(void *private_data, struct simple_instrument *instr,
145
                             int atomic);
146
        void (*notify)(void *private_data, struct snd_seq_kinstr *instr, int what);
147
        struct snd_seq_kinstr_ops kops;
148
};
149
 
150
int snd_seq_simple_init(struct snd_simple_ops *ops,
151
                        void *private_data,
152
                        struct snd_seq_kinstr_ops *next);
153
 
154
#endif
155
 
156
/* typedefs for compatibility to user-space */
157
typedef struct simple_xinstrument simple_xinstrument_t;
158
 
159
#endif /* __SOUND_AINSTR_SIMPLE_H */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.