212 lines · c
1/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */2#ifndef __SOUND_HDSPM_H3#define __SOUND_HDSPM_H4/*5 * Copyright (C) 2003 Winfried Ritsch (IEM)6 * based on hdsp.h from Thomas Charbonnel (thomas@undata.org)7 */8 9#ifdef __linux__10#include <linux/types.h>11#endif12 13/* Maximum channels is 64 even on 56Mode you have 64playbacks to matrix */14#define HDSPM_MAX_CHANNELS 6415 16enum hdspm_io_type {17 MADI,18 MADIface,19 AIO,20 AES32,21 RayDAT22};23 24enum hdspm_speed {25 ss,26 ds,27 qs28};29 30/* -------------------- IOCTL Peak/RMS Meters -------------------- */31 32struct hdspm_peak_rms {33 __u32 input_peaks[64];34 __u32 playback_peaks[64];35 __u32 output_peaks[64];36 37 __u64 input_rms[64];38 __u64 playback_rms[64];39 __u64 output_rms[64];40 41 __u8 speed; /* enum {ss, ds, qs} */42 int status2;43};44 45#define SNDRV_HDSPM_IOCTL_GET_PEAK_RMS \46 _IOR('H', 0x42, struct hdspm_peak_rms)47 48/* ------------ CONFIG block IOCTL ---------------------- */49 50struct hdspm_config {51 unsigned char pref_sync_ref;52 unsigned char wordclock_sync_check;53 unsigned char madi_sync_check;54 unsigned int system_sample_rate;55 unsigned int autosync_sample_rate;56 unsigned char system_clock_mode;57 unsigned char clock_source;58 unsigned char autosync_ref;59 unsigned char line_out;60 unsigned int passthru;61 unsigned int analog_out;62};63 64#define SNDRV_HDSPM_IOCTL_GET_CONFIG \65 _IOR('H', 0x41, struct hdspm_config)66 67/*68 * If there's a TCO (TimeCode Option) board installed,69 * there are further options and status data available.70 * The hdspm_ltc structure contains the current SMPTE71 * timecode and some status information and can be72 * obtained via SNDRV_HDSPM_IOCTL_GET_LTC or in the73 * hdspm_status struct.74 */75 76enum hdspm_ltc_format {77 format_invalid,78 fps_24,79 fps_25,80 fps_2997,81 fps_3082};83 84enum hdspm_ltc_frame {85 frame_invalid,86 drop_frame,87 full_frame88};89 90enum hdspm_ltc_input_format {91 ntsc,92 pal,93 no_video94};95 96struct hdspm_ltc {97 unsigned int ltc;98 99 enum hdspm_ltc_format format;100 enum hdspm_ltc_frame frame;101 enum hdspm_ltc_input_format input_format;102};103 104#define SNDRV_HDSPM_IOCTL_GET_LTC _IOR('H', 0x46, struct hdspm_ltc)105 106/*107 * The status data reflects the device's current state108 * as determined by the card's configuration and109 * connection status.110 */111 112enum hdspm_sync {113 hdspm_sync_no_lock = 0,114 hdspm_sync_lock = 1,115 hdspm_sync_sync = 2116};117 118enum hdspm_madi_input {119 hdspm_input_optical = 0,120 hdspm_input_coax = 1121};122 123enum hdspm_madi_channel_format {124 hdspm_format_ch_64 = 0,125 hdspm_format_ch_56 = 1126};127 128enum hdspm_madi_frame_format {129 hdspm_frame_48 = 0,130 hdspm_frame_96 = 1131};132 133enum hdspm_syncsource {134 syncsource_wc = 0,135 syncsource_madi = 1,136 syncsource_tco = 2,137 syncsource_sync = 3,138 syncsource_none = 4139};140 141struct hdspm_status {142 __u8 card_type; /* enum hdspm_io_type */143 enum hdspm_syncsource autosync_source;144 145 __u64 card_clock;146 __u32 master_period;147 148 union {149 struct {150 __u8 sync_wc; /* enum hdspm_sync */151 __u8 sync_madi; /* enum hdspm_sync */152 __u8 sync_tco; /* enum hdspm_sync */153 __u8 sync_in; /* enum hdspm_sync */154 __u8 madi_input; /* enum hdspm_madi_input */155 __u8 channel_format; /* enum hdspm_madi_channel_format */156 __u8 frame_format; /* enum hdspm_madi_frame_format */157 } madi;158 } card_specific;159};160 161#define SNDRV_HDSPM_IOCTL_GET_STATUS \162 _IOR('H', 0x47, struct hdspm_status)163 164/*165 * Get information about the card and its add-ons.166 */167 168#define HDSPM_ADDON_TCO 1169 170struct hdspm_version {171 __u8 card_type; /* enum hdspm_io_type */172 char cardname[20];173 unsigned int serial;174 unsigned short firmware_rev;175 int addons;176};177 178#define SNDRV_HDSPM_IOCTL_GET_VERSION _IOR('H', 0x48, struct hdspm_version)179 180/* ------------- get Matrix Mixer IOCTL --------------- */181 182/* MADI mixer: 64inputs+64playback in 64outputs = 8192 => *4Byte =183 * 32768 Bytes184 */185 186/* organisation is 64 channelfader in a continuous memory block */187/* equivalent to hardware definition, maybe for future feature of mmap of188 * them189 */190/* each of 64 outputs has 64 infader and 64 outfader:191 Ins to Outs mixer[out].in[in], Outstreams to Outs mixer[out].pb[pb] */192 193#define HDSPM_MIXER_CHANNELS HDSPM_MAX_CHANNELS194 195struct hdspm_channelfader {196 unsigned int in[HDSPM_MIXER_CHANNELS];197 unsigned int pb[HDSPM_MIXER_CHANNELS];198};199 200struct hdspm_mixer {201 struct hdspm_channelfader ch[HDSPM_MIXER_CHANNELS];202};203 204struct hdspm_mixer_ioctl {205 struct hdspm_mixer *mixer;206};207 208/* use indirect access due to the limit of ioctl bit size */209#define SNDRV_HDSPM_IOCTL_GET_MIXER _IOR('H', 0x44, struct hdspm_mixer_ioctl)210 211#endif212