linux/include/uapi/sound/hdspm.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
   2#ifndef __SOUND_HDSPM_H
   3#define __SOUND_HDSPM_H
   4/*
   5 *   Copyright (C) 2003 Winfried Ritsch (IEM)
   6 *   based on hdsp.h from Thomas Charbonnel (thomas@undata.org)
   7 *
   8 *
   9 *   This program is free software; you can redistribute it and/or modify
  10 *   it under the terms of the GNU General Public License as published by
  11 *   the Free Software Foundation; either version 2 of the License, or
  12 *   (at your option) any later version.
  13 *
  14 *   This program is distributed in the hope that it will be useful,
  15 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
  16 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17 *   GNU General Public License for more details.
  18 *
  19 *   You should have received a copy of the GNU General Public License
  20 *   along with this program; if not, write to the Free Software
  21 *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  22 */
  23
  24#ifdef __linux__
  25#include <linux/types.h>
  26#endif
  27
  28/* Maximum channels is 64 even on 56Mode you have 64playbacks to matrix */
  29#define HDSPM_MAX_CHANNELS      64
  30
  31enum hdspm_io_type {
  32        MADI,
  33        MADIface,
  34        AIO,
  35        AES32,
  36        RayDAT
  37};
  38
  39enum hdspm_speed {
  40        ss,
  41        ds,
  42        qs
  43};
  44
  45/* -------------------- IOCTL Peak/RMS Meters -------------------- */
  46
  47struct hdspm_peak_rms {
  48        __u32 input_peaks[64];
  49        __u32 playback_peaks[64];
  50        __u32 output_peaks[64];
  51
  52        __u64 input_rms[64];
  53        __u64 playback_rms[64];
  54        __u64 output_rms[64];
  55
  56        __u8 speed; /* enum {ss, ds, qs} */
  57        int status2;
  58};
  59
  60#define SNDRV_HDSPM_IOCTL_GET_PEAK_RMS \
  61        _IOR('H', 0x42, struct hdspm_peak_rms)
  62
  63/* ------------ CONFIG block IOCTL ---------------------- */
  64
  65struct hdspm_config {
  66        unsigned char pref_sync_ref;
  67        unsigned char wordclock_sync_check;
  68        unsigned char madi_sync_check;
  69        unsigned int system_sample_rate;
  70        unsigned int autosync_sample_rate;
  71        unsigned char system_clock_mode;
  72        unsigned char clock_source;
  73        unsigned char autosync_ref;
  74        unsigned char line_out;
  75        unsigned int passthru;
  76        unsigned int analog_out;
  77};
  78
  79#define SNDRV_HDSPM_IOCTL_GET_CONFIG \
  80        _IOR('H', 0x41, struct hdspm_config)
  81
  82/*
  83 * If there's a TCO (TimeCode Option) board installed,
  84 * there are further options and status data available.
  85 * The hdspm_ltc structure contains the current SMPTE
  86 * timecode and some status information and can be
  87 * obtained via SNDRV_HDSPM_IOCTL_GET_LTC or in the
  88 * hdspm_status struct.
  89 */
  90
  91enum hdspm_ltc_format {
  92        format_invalid,
  93        fps_24,
  94        fps_25,
  95        fps_2997,
  96        fps_30
  97};
  98
  99enum hdspm_ltc_frame {
 100        frame_invalid,
 101        drop_frame,
 102        full_frame
 103};
 104
 105enum hdspm_ltc_input_format {
 106        ntsc,
 107        pal,
 108        no_video
 109};
 110
 111struct hdspm_ltc {
 112        unsigned int ltc;
 113
 114        enum hdspm_ltc_format format;
 115        enum hdspm_ltc_frame frame;
 116        enum hdspm_ltc_input_format input_format;
 117};
 118
 119#define SNDRV_HDSPM_IOCTL_GET_LTC _IOR('H', 0x46, struct hdspm_ltc)
 120
 121/*
 122 * The status data reflects the device's current state
 123 * as determined by the card's configuration and
 124 * connection status.
 125 */
 126
 127enum hdspm_sync {
 128        hdspm_sync_no_lock = 0,
 129        hdspm_sync_lock = 1,
 130        hdspm_sync_sync = 2
 131};
 132
 133enum hdspm_madi_input {
 134        hdspm_input_optical = 0,
 135        hdspm_input_coax = 1
 136};
 137
 138enum hdspm_madi_channel_format {
 139        hdspm_format_ch_64 = 0,
 140        hdspm_format_ch_56 = 1
 141};
 142
 143enum hdspm_madi_frame_format {
 144        hdspm_frame_48 = 0,
 145        hdspm_frame_96 = 1
 146};
 147
 148enum hdspm_syncsource {
 149        syncsource_wc = 0,
 150        syncsource_madi = 1,
 151        syncsource_tco = 2,
 152        syncsource_sync = 3,
 153        syncsource_none = 4
 154};
 155
 156struct hdspm_status {
 157        __u8 card_type; /* enum hdspm_io_type */
 158        enum hdspm_syncsource autosync_source;
 159
 160        __u64 card_clock;
 161        __u32 master_period;
 162
 163        union {
 164                struct {
 165                        __u8 sync_wc; /* enum hdspm_sync */
 166                        __u8 sync_madi; /* enum hdspm_sync */
 167                        __u8 sync_tco; /* enum hdspm_sync */
 168                        __u8 sync_in; /* enum hdspm_sync */
 169                        __u8 madi_input; /* enum hdspm_madi_input */
 170                        __u8 channel_format; /* enum hdspm_madi_channel_format */
 171                        __u8 frame_format; /* enum hdspm_madi_frame_format */
 172                } madi;
 173        } card_specific;
 174};
 175
 176#define SNDRV_HDSPM_IOCTL_GET_STATUS \
 177        _IOR('H', 0x47, struct hdspm_status)
 178
 179/*
 180 * Get information about the card and its add-ons.
 181 */
 182
 183#define HDSPM_ADDON_TCO 1
 184
 185struct hdspm_version {
 186        __u8 card_type; /* enum hdspm_io_type */
 187        char cardname[20];
 188        unsigned int serial;
 189        unsigned short firmware_rev;
 190        int addons;
 191};
 192
 193#define SNDRV_HDSPM_IOCTL_GET_VERSION _IOR('H', 0x48, struct hdspm_version)
 194
 195/* ------------- get Matrix Mixer IOCTL --------------- */
 196
 197/* MADI mixer: 64inputs+64playback in 64outputs = 8192 => *4Byte =
 198 * 32768 Bytes
 199 */
 200
 201/* organisation is 64 channelfader in a continuous memory block */
 202/* equivalent to hardware definition, maybe for future feature of mmap of
 203 * them
 204 */
 205/* each of 64 outputs has 64 infader and 64 outfader:
 206   Ins to Outs mixer[out].in[in], Outstreams to Outs mixer[out].pb[pb] */
 207
 208#define HDSPM_MIXER_CHANNELS HDSPM_MAX_CHANNELS
 209
 210struct hdspm_channelfader {
 211        unsigned int in[HDSPM_MIXER_CHANNELS];
 212        unsigned int pb[HDSPM_MIXER_CHANNELS];
 213};
 214
 215struct hdspm_mixer {
 216        struct hdspm_channelfader ch[HDSPM_MIXER_CHANNELS];
 217};
 218
 219struct hdspm_mixer_ioctl {
 220        struct hdspm_mixer *mixer;
 221};
 222
 223/* use indirect access due to the limit of ioctl bit size */
 224#define SNDRV_HDSPM_IOCTL_GET_MIXER _IOR('H', 0x44, struct hdspm_mixer_ioctl)
 225
 226#endif
 227