4
4
* Copyright (C) 2003 Winfried Ritsch (IEM)
5
5
* based on hdsp.h from Thomas Charbonnel (thomas@undata.org)
8
8
* This program is free software; you can redistribute it and/or modify
9
9
* it under the terms of the GNU General Public License as published by
10
10
* the Free Software Foundation; either version 2 of the License, or
23
23
/* Maximum channels is 64 even on 56Mode you have 64playbacks to matrix */
24
24
#define HDSPM_MAX_CHANNELS 64
26
40
/* -------------------- IOCTL Peak/RMS Meters -------------------- */
28
/* peam rms level structure like we get from hardware
30
maybe in future we can memory map it so I just copy it
31
to user on ioctl call now an dont change anything
32
rms are made out of low and high values
33
where (long) ????_rms = (????_rms_l >> 8) + ((????_rms_h & 0xFFFFFF00)<<24)
34
(i asume so from the code)
37
42
struct hdspm_peak_rms {
39
unsigned int level_offset[1024];
41
unsigned int input_peak[64];
42
unsigned int playback_peak[64];
43
unsigned int output_peak[64];
44
unsigned int xxx_peak[64]; /* not used */
46
unsigned int reserved[256]; /* not used */
48
unsigned int input_rms_l[64];
49
unsigned int playback_rms_l[64];
50
unsigned int output_rms_l[64];
51
unsigned int xxx_rms_l[64]; /* not used */
53
unsigned int input_rms_h[64];
54
unsigned int playback_rms_h[64];
55
unsigned int output_rms_h[64];
56
unsigned int xxx_rms_h[64]; /* not used */
59
struct hdspm_peak_rms_ioctl {
60
struct hdspm_peak_rms *peak;
63
/* use indirect access due to the limit of ioctl bit size */
43
uint32_t input_peaks[64];
44
uint32_t playback_peaks[64];
45
uint32_t output_peaks[64];
47
uint64_t input_rms[64];
48
uint64_t playback_rms[64];
49
uint64_t output_rms[64];
51
uint8_t speed; /* enum {ss, ds, qs} */
64
55
#define SNDRV_HDSPM_IOCTL_GET_PEAK_RMS \
65
_IOR('H', 0x40, struct hdspm_peak_rms_ioctl)
56
_IOR('H', 0x42, struct hdspm_peak_rms)
67
58
/* ------------ CONFIG block IOCTL ---------------------- */
69
struct hdspm_config_info {
70
61
unsigned char pref_sync_ref;
71
62
unsigned char wordclock_sync_check;
72
63
unsigned char madi_sync_check;
80
71
unsigned int analog_out;
83
#define SNDRV_HDSPM_IOCTL_GET_CONFIG_INFO \
84
_IOR('H', 0x41, struct hdspm_config_info)
87
/* get Soundcard Version */
74
#define SNDRV_HDSPM_IOCTL_GET_CONFIG \
75
_IOR('H', 0x41, struct hdspm_config)
78
* If there's a TCO (TimeCode Option) board installed,
79
* there are further options and status data available.
80
* The hdspm_ltc structure contains the current SMPTE
81
* timecode and some status information and can be
82
* obtained via SNDRV_HDSPM_IOCTL_GET_LTC or in the
83
* hdspm_status struct.
86
enum hdspm_ltc_format {
94
enum hdspm_ltc_frame {
100
enum hdspm_ltc_input_format {
109
enum hdspm_ltc_format format;
110
enum hdspm_ltc_frame frame;
111
enum hdspm_ltc_input_format input_format;
114
#define SNDRV_HDSPM_IOCTL_GET_LTC _IOR('H', 0x46, struct hdspm_mixer_ioctl)
117
* The status data reflects the device's current state
118
* as determined by the card's configuration and
123
hdspm_sync_no_lock = 0,
128
enum hdspm_madi_input {
129
hdspm_input_optical = 0,
133
enum hdspm_madi_channel_format {
134
hdspm_format_ch_64 = 0,
135
hdspm_format_ch_56 = 1
138
enum hdspm_madi_frame_format {
143
enum hdspm_syncsource {
151
struct hdspm_status {
152
uint8_t card_type; /* enum hdspm_io_type */
153
enum hdspm_syncsource autosync_source;
156
uint32_t master_period;
160
uint8_t sync_wc; /* enum hdspm_sync */
161
uint8_t sync_madi; /* enum hdspm_sync */
162
uint8_t sync_tco; /* enum hdspm_sync */
163
uint8_t sync_in; /* enum hdspm_sync */
164
uint8_t madi_input; /* enum hdspm_madi_input */
165
uint8_t channel_format; /* enum hdspm_madi_channel_format */
166
uint8_t frame_format; /* enum hdspm_madi_frame_format */
171
#define SNDRV_HDSPM_IOCTL_GET_STATUS \
172
_IOR('H', 0x47, struct hdspm_status)
175
* Get information about the card and its add-ons.
178
#define HDSPM_ADDON_TCO 1
89
180
struct hdspm_version {
181
uint8_t card_type; /* enum hdspm_io_type */
90
184
unsigned short firmware_rev;
93
#define SNDRV_HDSPM_IOCTL_GET_VERSION _IOR('H', 0x43, struct hdspm_version)
188
#define SNDRV_HDSPM_IOCTL_GET_VERSION _IOR('H', 0x48, struct hdspm_version)
96
190
/* ------------- get Matrix Mixer IOCTL --------------- */
102
/* organisation is 64 channelfader in a continous memory block */
196
/* organisation is 64 channelfader in a continuous memory block */
103
197
/* equivalent to hardware definition, maybe for future feature of mmap of
106
/* each of 64 outputs has 64 infader and 64 outfader:
200
/* each of 64 outputs has 64 infader and 64 outfader:
107
201
Ins to Outs mixer[out].in[in], Outstreams to Outs mixer[out].pb[pb] */
109
203
#define HDSPM_MIXER_CHANNELS HDSPM_MAX_CHANNELS