hdspm.h 5.3 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 23 24 25
 *   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.
 */

/* Maximum channels is 64 even on 56Mode you have 64playbacks to matrix */
#define HDSPM_MAX_CHANNELS      64

26 27 28 29 30 31 32
enum hdspm_io_type {
	MADI,
	MADIface,
	AIO,
	AES32,
	RayDAT
};
T
Takashi Iwai 已提交
33

34 35 36 37 38
enum hdspm_speed {
	ss,
	ds,
	qs
};
T
Takashi Iwai 已提交
39

40
/* -------------------- IOCTL Peak/RMS Meters -------------------- */
T
Takashi Iwai 已提交
41

42 43 44 45
struct hdspm_peak_rms {
	uint32_t input_peaks[64];
	uint32_t playback_peaks[64];
	uint32_t output_peaks[64];
T
Takashi Iwai 已提交
46

47 48 49
	uint64_t input_rms[64];
	uint64_t playback_rms[64];
	uint64_t output_rms[64];
T
Takashi Iwai 已提交
50

51 52
	uint8_t speed; /* enum {ss, ds, qs} */
	int status2;
T
Takashi Iwai 已提交
53 54
};

T
Takashi Iwai 已提交
55
#define SNDRV_HDSPM_IOCTL_GET_PEAK_RMS \
56
	_IOR('H', 0x42, struct hdspm_peak_rms)
T
Takashi Iwai 已提交
57 58 59

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

60
struct hdspm_config {
T
Takashi Iwai 已提交
61 62 63 64 65 66 67 68 69 70 71 72 73
	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;
};

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
#define SNDRV_HDSPM_IOCTL_GET_CONFIG \
	_IOR('H', 0x41, struct hdspm_config)

/**
 * 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.
 **/

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;
};

114
#define SNDRV_HDSPM_IOCTL_GET_LTC _IOR('H', 0x46, struct hdspm_ltc)
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

/**
 * The status data reflects the device's current state
 * as determined by the card's configuration and
 * connection status.
 **/

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 已提交
154

155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
	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 已提交
170

171 172 173 174 175 176 177 178
#define SNDRV_HDSPM_IOCTL_GET_STATUS \
	_IOR('H', 0x47, struct hdspm_status)

/**
 * Get information about the card and its add-ons.
 **/

#define HDSPM_ADDON_TCO 1
T
Takashi Iwai 已提交
179

180
struct hdspm_version {
181 182 183
	uint8_t card_type; /* enum hdspm_io_type */
	char cardname[20];
	unsigned int serial;
T
Takashi Iwai 已提交
184
	unsigned short firmware_rev;
185
	int addons;
T
Takashi Iwai 已提交
186 187
};

188
#define SNDRV_HDSPM_IOCTL_GET_VERSION _IOR('H', 0x48, struct hdspm_version)
T
Takashi Iwai 已提交
189 190 191

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

T
Takashi Iwai 已提交
192 193 194
/* MADI mixer: 64inputs+64playback in 64outputs = 8192 => *4Byte =
 * 32768 Bytes
 */
T
Takashi Iwai 已提交
195

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

#define HDSPM_MIXER_CHANNELS HDSPM_MAX_CHANNELS

205
struct hdspm_channelfader {
T
Takashi Iwai 已提交
206 207 208 209
	unsigned int in[HDSPM_MIXER_CHANNELS];
	unsigned int pb[HDSPM_MIXER_CHANNELS];
};

210 211
struct hdspm_mixer {
	struct hdspm_channelfader ch[HDSPM_MIXER_CHANNELS];
T
Takashi Iwai 已提交
212 213
};

214 215
struct hdspm_mixer_ioctl {
	struct hdspm_mixer *mixer;
T
Takashi Iwai 已提交
216 217 218
};

/* use indirect access due to the limit of ioctl bit size */
219 220 221 222 223 224 225 226
#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 已提交
227

228 229

#endif