hdspm.h 5.4 KB
Newer Older
T
Takashi Iwai 已提交
1
#ifndef __SOUND_HDSPM_H
T
Takashi Iwai 已提交
2 3 4 5
#define __SOUND_HDSPM_H
/*
 *   Copyright (C) 2003 Winfried Ritsch (IEM)
 *   based on hdsp.h from Thomas Charbonnel (thomas@undata.org)
6 7
 *
 *
T
Takashi Iwai 已提交
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program; if not, write to the Free Software
 *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

23 24 25 26 27 28
#ifdef __KERNEL__
#include <linux/types.h>
#else
#include <stdint.h>
#endif

T
Takashi Iwai 已提交
29 30 31
/* Maximum channels is 64 even on 56Mode you have 64playbacks to matrix */
#define HDSPM_MAX_CHANNELS      64

32 33 34 35 36 37 38
enum hdspm_io_type {
	MADI,
	MADIface,
	AIO,
	AES32,
	RayDAT
};
T
Takashi Iwai 已提交
39

40 41 42 43 44
enum hdspm_speed {
	ss,
	ds,
	qs
};
T
Takashi Iwai 已提交
45

46
/* -------------------- IOCTL Peak/RMS Meters -------------------- */
T
Takashi Iwai 已提交
47

48 49 50 51
struct hdspm_peak_rms {
	uint32_t input_peaks[64];
	uint32_t playback_peaks[64];
	uint32_t output_peaks[64];
T
Takashi Iwai 已提交
52

53 54 55
	uint64_t input_rms[64];
	uint64_t playback_rms[64];
	uint64_t output_rms[64];
T
Takashi Iwai 已提交
56

57 58
	uint8_t speed; /* enum {ss, ds, qs} */
	int status2;
T
Takashi Iwai 已提交
59 60
};

T
Takashi Iwai 已提交
61
#define SNDRV_HDSPM_IOCTL_GET_PEAK_RMS \
62
	_IOR('H', 0x42, struct hdspm_peak_rms)
T
Takashi Iwai 已提交
63 64 65

/* ------------ CONFIG block IOCTL ---------------------- */

66
struct hdspm_config {
T
Takashi Iwai 已提交
67 68 69 70 71 72 73 74 75 76 77 78 79
	unsigned char pref_sync_ref;
	unsigned char wordclock_sync_check;
	unsigned char madi_sync_check;
	unsigned int system_sample_rate;
	unsigned int autosync_sample_rate;
	unsigned char system_clock_mode;
	unsigned char clock_source;
	unsigned char autosync_ref;
	unsigned char line_out;
	unsigned int passthru;
	unsigned int analog_out;
};

80 81 82
#define SNDRV_HDSPM_IOCTL_GET_CONFIG \
	_IOR('H', 0x41, struct hdspm_config)

T
Takashi Iwai 已提交
83
/*
84 85 86 87 88 89
 * If there's a TCO (TimeCode Option) board installed,
 * there are further options and status data available.
 * The hdspm_ltc structure contains the current SMPTE
 * timecode and some status information and can be
 * obtained via SNDRV_HDSPM_IOCTL_GET_LTC or in the
 * hdspm_status struct.
T
Takashi Iwai 已提交
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

enum hdspm_ltc_format {
	format_invalid,
	fps_24,
	fps_25,
	fps_2997,
	fps_30
};

enum hdspm_ltc_frame {
	frame_invalid,
	drop_frame,
	full_frame
};

enum hdspm_ltc_input_format {
	ntsc,
	pal,
	no_video
};

struct hdspm_ltc {
	unsigned int ltc;

	enum hdspm_ltc_format format;
	enum hdspm_ltc_frame frame;
	enum hdspm_ltc_input_format input_format;
};

120
#define SNDRV_HDSPM_IOCTL_GET_LTC _IOR('H', 0x46, struct hdspm_ltc)
121

T
Takashi Iwai 已提交
122
/*
123 124 125
 * The status data reflects the device's current state
 * as determined by the card's configuration and
 * connection status.
T
Takashi Iwai 已提交
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

enum hdspm_sync {
	hdspm_sync_no_lock = 0,
	hdspm_sync_lock = 1,
	hdspm_sync_sync = 2
};

enum hdspm_madi_input {
	hdspm_input_optical = 0,
	hdspm_input_coax = 1
};

enum hdspm_madi_channel_format {
	hdspm_format_ch_64 = 0,
	hdspm_format_ch_56 = 1
};

enum hdspm_madi_frame_format {
	hdspm_frame_48 = 0,
	hdspm_frame_96 = 1
};

enum hdspm_syncsource {
	syncsource_wc = 0,
	syncsource_madi = 1,
	syncsource_tco = 2,
	syncsource_sync = 3,
	syncsource_none = 4
};

struct hdspm_status {
	uint8_t card_type; /* enum hdspm_io_type */
	enum hdspm_syncsource autosync_source;
T
Takashi Iwai 已提交
160

161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
	uint64_t card_clock;
	uint32_t master_period;

	union {
		struct {
			uint8_t sync_wc; /* enum hdspm_sync */
			uint8_t sync_madi; /* enum hdspm_sync */
			uint8_t sync_tco; /* enum hdspm_sync */
			uint8_t sync_in; /* enum hdspm_sync */
			uint8_t madi_input; /* enum hdspm_madi_input */
			uint8_t channel_format; /* enum hdspm_madi_channel_format */
			uint8_t frame_format; /* enum hdspm_madi_frame_format */
		} madi;
	} card_specific;
};
T
Takashi Iwai 已提交
176

177 178 179
#define SNDRV_HDSPM_IOCTL_GET_STATUS \
	_IOR('H', 0x47, struct hdspm_status)

T
Takashi Iwai 已提交
180
/*
181
 * Get information about the card and its add-ons.
T
Takashi Iwai 已提交
182
 */
183 184

#define HDSPM_ADDON_TCO 1
T
Takashi Iwai 已提交
185

186
struct hdspm_version {
187 188 189
	uint8_t card_type; /* enum hdspm_io_type */
	char cardname[20];
	unsigned int serial;
T
Takashi Iwai 已提交
190
	unsigned short firmware_rev;
191
	int addons;
T
Takashi Iwai 已提交
192 193
};

194
#define SNDRV_HDSPM_IOCTL_GET_VERSION _IOR('H', 0x48, struct hdspm_version)
T
Takashi Iwai 已提交
195 196 197

/* ------------- get Matrix Mixer IOCTL --------------- */

T
Takashi Iwai 已提交
198 199 200
/* MADI mixer: 64inputs+64playback in 64outputs = 8192 => *4Byte =
 * 32768 Bytes
 */
T
Takashi Iwai 已提交
201

L
Lucas De Marchi 已提交
202
/* organisation is 64 channelfader in a continuous memory block */
T
Takashi Iwai 已提交
203 204 205
/* equivalent to hardware definition, maybe for future feature of mmap of
 * them
 */
206
/* each of 64 outputs has 64 infader and 64 outfader:
T
Takashi Iwai 已提交
207 208 209 210
   Ins to Outs mixer[out].in[in], Outstreams to Outs mixer[out].pb[pb] */

#define HDSPM_MIXER_CHANNELS HDSPM_MAX_CHANNELS

211
struct hdspm_channelfader {
T
Takashi Iwai 已提交
212 213 214 215
	unsigned int in[HDSPM_MIXER_CHANNELS];
	unsigned int pb[HDSPM_MIXER_CHANNELS];
};

216 217
struct hdspm_mixer {
	struct hdspm_channelfader ch[HDSPM_MIXER_CHANNELS];
T
Takashi Iwai 已提交
218 219
};

220 221
struct hdspm_mixer_ioctl {
	struct hdspm_mixer *mixer;
T
Takashi Iwai 已提交
222 223 224
};

/* use indirect access due to the limit of ioctl bit size */
225 226 227 228 229 230 231 232
#define SNDRV_HDSPM_IOCTL_GET_MIXER _IOR('H', 0x44, struct hdspm_mixer_ioctl)

/* typedefs for compatibility to user-space */
typedef struct hdspm_peak_rms hdspm_peak_rms_t;
typedef struct hdspm_config_info hdspm_config_info_t;
typedef struct hdspm_version hdspm_version_t;
typedef struct hdspm_channelfader snd_hdspm_channelfader_t;
typedef struct hdspm_mixer hdspm_mixer_t;
T
Takashi Iwai 已提交
233

234 235

#endif