brintos

brintos / linux-shallow public Read only

0
0
Text · 4.4 KiB · 7043bb3 Raw
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