123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388 |
- /* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
- /*
- * Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved.
- */
- #ifndef __EAVB_SHARED_H__
- #define __EAVB_SHARED_H__
- #include <linux/types.h>
- #define EAVB_IOCTL_MAGIC 'B'
- /* ioctl request */
- /* EAVB_IOCTL_CREATE_STREAM DEPRECATED Do not use this in new code */
- #define EAVB_IOCTL_CREATE_STREAM \
- _IOWR(EAVB_IOCTL_MAGIC, 1, struct eavb_ioctl_create_stream)
- #define EAVB_IOCTL_GET_STREAM_INFO \
- _IOWR(EAVB_IOCTL_MAGIC, 2, struct eavb_ioctl_get_stream_info)
- #define EAVB_IOCTL_CONNECT_STREAM \
- _IOWR(EAVB_IOCTL_MAGIC, 3, struct eavb_ioctl_connect_stream)
- #define EAVB_IOCTL_RECEIVE \
- _IOWR(EAVB_IOCTL_MAGIC, 4, struct eavb_ioctl_receive)
- #define EAVB_IOCTL_RECV_DONE \
- _IOWR(EAVB_IOCTL_MAGIC, 5, struct eavb_ioctl_recv_done)
- #define EAVB_IOCTL_TRANSMIT \
- _IOWR(EAVB_IOCTL_MAGIC, 6, struct eavb_ioctl_transmit)
- #define EAVB_IOCTL_DISCONNECT_STREAM \
- _IOW(EAVB_IOCTL_MAGIC, 9, struct eavb_ioctl_disconnect_stream)
- #define EAVB_IOCTL_DESTROY_STREAM \
- _IOW(EAVB_IOCTL_MAGIC, 10, struct eavb_ioctl_destroy_stream)
- #define EAVB_IOCTL_CREATE_STREAM_WITH_PATH \
- _IOWR(EAVB_IOCTL_MAGIC, 11, struct eavb_ioctl_create_stream_with_path)
- #define EAVB_IOCTL_GET_CRF_TS \
- _IOWR(EAVB_IOCTL_MAGIC, 12, __u64)
- /* default value */
- #define STATION_ADDR_SIZE 8
- #define IF_NAMESIZE 16
- #define MAX_CONFIG_FILE_PATH 512
- /* Invalid value for config file */
- #define AVB_INVALID_ADDR (0xFF)
- #define AVB_INVALID_INTEGER (-1)
- #define AVB_INVALID_UINT (-1)
- enum avb_role {
- AVB_ROLE_TALKER = 0,
- AVB_ROLE_LISTENER,
- AVB_ROLE_CRF_TALKER,
- AVB_ROLE_INVALID = -1
- };
- enum stream_mapping_type {
- NONE = 0,
- PCM,
- H264,
- MPEG2TS,
- MJPEG,
- CRF,
- MAPPING_TYPE_INVALID = -1
- };
- enum ring_buffer_mode {
- /* Return error when new data doesn't fit in ring buffer */
- RING_BUFFER_MODE_FILL = 0,
- /* Drop oldest samples to make room for new data */
- RING_BUFFER_MODE_DROP_OLD = 1,
- /* Drop oldest samples to make room for new data */
- RING_BUFFER_MODE_INVALID = -1
- };
- enum avb_class {
- CLASS_A = 0,
- CLASS_B = 1,
- CLASS_AAF = 2,
- CLASS_INVALID = -1
- };
- enum data_endianness {
- ENDIAN_BIG = 0,
- ENDIAN_LITTLE = 1,
- ENDIAN_INVALID = -1
- };
- enum avb_ieee1722_version {
- QAVB_IEEE_1722_ver_2010 = 0,
- QAVB_IEEE_1722_ver_2016,
- QAVB_IEEE_1722_ver_INVALID = -1,
- };
- enum avtp_crf_mode {
- /* CRF disabled */
- QAVB_AVTP_CRF_MODE_DISABLED = 0,
- /* CRF talker */
- QAVB_AVTP_CRF_MODE_TALKER,
- /* CRF listener, PPM = local - remote */
- QAVB_AVTP_CRF_MODE_LISTENER,
- /* CRF listener, PPM = nominal - remote */
- QAVB_AVTP_CRF_MODE_LISTENER_NOMINAL,
- QAVB_AVTP_CRF_MODE_MAX
- };
- enum avtp_crf_type {
- /* user specified */
- QAVB_AVTP_CRF_TYPE_USER = 0,
- /* audio ample timestamp */
- QAVB_AVTP_CRF_TYPE_AUDIO_SAMPLE,
- /* video frame sync timestamp */
- QAVB_AVTP_CRF_TYPE_VIDEO_FRAME,
- /* video line timestamp */
- QAVB_AVTP_CRF_TYPE_VIDEO_LINE,
- /* machine cycle timestamp */
- QAVB_AVTP_CRF_TYPE_MACHINE_CYCLE,
- QAVB_AVTP_CRF_TYPE_MAX
- };
- enum avtp_crf_pull {
- /* Multiply base_frequency field by 1.0 */
- QAVB_AVTP_CRF_PULL_1_DIV_1_0 = 0,
- /* Multiply base_frequency field by 1/1.1001 */
- QAVB_AVTP_CRF_PULL_1_DIV_1_DOT_1001,
- /* Multiply base_frequency field by 1.1001 */
- QAVB_AVTP_CRF_PULL_1_DOT_1001,
- /* Multiply base_frequency field by 24/25 */
- QAVB_AVTP_CRF_PULL_24_DIV_25,
- /* Multiply base_frequency field by 25/24 */
- QAVB_AVTP_CRF_PULL_25_DIV_24,
- /* Multiply base_frequency field by 8 */
- QAVB_AVTP_CRF_PULL_8,
- QAVB_AVTP_CRF_PULL_MAX
- };
- struct eavb_ioctl_hdr {
- __u64 streamCtx;
- };
- /*
- * EAVB_IOCTL_CREATE_STREAM
- */
- /* DEPRECATED Do not use this in new code */
- struct eavb_ioctl_stream_config {
- __u16 stream_id;
- char eth_interface[IF_NAMESIZE];
- __u16 vlan_id;
- __u16 ring_buffer_elem_count;
- enum ring_buffer_mode ring_buffer_mode;
- /* talker = 0 or listener = 1 */
- enum avb_role avb_role;
- __u8 dest_macaddr[STATION_ADDR_SIZE];
- __u8 stream_addr[STATION_ADDR_SIZE];
- /* "crf_macaddr" or "crf_dest_macaddr" */
- __u8 crf_dest_macaddr[STATION_ADDR_SIZE];
- __u8 crf_stream_addr[STATION_ADDR_SIZE];
- enum stream_mapping_type mapping_type;
- int wakeup_interval; /* "wakeup_interval" or "tx_interval" */
- int tx_pkts_per_sec; /* if not set, do default */
- int max_stale_ms; /* int max_stale_ns = max_stale_ms*1000; */
- int presentation_time_ms; /* if not set, do default */
- int enforce_presentation_time;
- int sr_class_type; /* A = 0 B = 1 AAF = 2 */
- /* sets number of items to se sent on each tx / rx */
- int packing_factor;
- int bandwidth;
- /* H.264 */
- int max_payload; /* "max_payload" or "max_video_payload" */
- int mrp_enabled;
- /* Audio Specific */
- int pcm_bit_depth;
- int pcm_channels;
- int sample_rate; /* in hz */
- unsigned char endianness; /* 0 = big 1 = little */
- int ieee1722_standard;
- /* Thread priority in QNX side */
- int talker_priority;
- int listener_priority;
- int crf_priority;
- /* CRF */
- /* 0 - disabled
- * 1 - CRF talker (listener drives reference)
- * 2 - CRF with talker reference (talker has CRF talker)
- */
- int crf_mode;
- /* 0 - custom
- * 1- audio
- * 2- video frame
- * 3 - video line
- * 4 - machine cycle
- */
- int crf_type;
- /* time interval after how many events timestamp is to be produced
- * (base_frequency * pull) / timestamp_interval =
- * # of timestamps per second
- */
- int crf_timestamping_interval;
- int crf_timestamping_interval_remote;
- int crf_timestamping_interval_local;
- /* enables/disables dynamic IPG adjustments */
- int crf_allow_dynamic_tx_adjust;
- /* indicates how many CRF timestamps per each CRF packet */
- int crf_num_timestamps_per_pkt;
- __s64 crf_mcr_adjust_min_ppm;
- __s64 crf_mcr_adjust_max_ppm;
- __u16 crf_stream_id; /* CRF stream ID */
- __s32 crf_base_frequency; /* CRF base frequency */
- __s32 crf_listener_ts_smoothing;
- __s32 crf_talker_ts_smoothing;
- /* multiplier for the base frequency */
- int crf_pull;
- /* indicates how often to issue MCR callback events
- * how many packets will generate one callback.
- */
- int crf_event_callback_interval;
- /* Indicates how often to update IPG */
- int crf_dynamic_tx_adjust_interval;
- /* stats */
- __s32 enable_stats_reporting;
- __s32 stats_reporting_interval;
- __s32 stats_reporting_samples;
- /* packet tracking */
- __s32 enable_packet_tracking;
- __s32 packet_tracking_interval;
- int blocking_write_enabled;
- double blocking_write_fill_level;
- int app_tx_block_enabled;
- int stream_interleaving_enabled;
- int create_talker_thread;
- int create_crf_threads;
- int listener_bpf_pkts_per_buff;
- } __packed;
- /* DEPRECATED Do not use this in new code */
- struct eavb_ioctl_create_stream {
- struct eavb_ioctl_stream_config config; /* IN */
- struct eavb_ioctl_hdr hdr; /* OUT */
- };
- struct eavb_ioctl_create_stream_with_path {
- char path[MAX_CONFIG_FILE_PATH]; /* IN */
- struct eavb_ioctl_hdr hdr; /* OUT */
- };
- /*
- * EAVB_IOCTL_GET_STREAM_INFO
- */
- struct eavb_ioctl_stream_info {
- enum avb_role role;
- enum stream_mapping_type mapping_type;
- /* Max packet payload size */
- unsigned int max_payload;
- /* Number of packets sent per wake */
- unsigned int pkts_per_wake;
- /* Time to sleep between wakes */
- unsigned int wakeup_period_us;
- /* Audio Specific */
- /* Audio bit depth 8/16/24/32 */
- int pcm_bit_depth;
- /* Audio channels 1/2 */
- int num_pcm_channels;
- /* Audio sample rate in hz */
- int sample_rate;
- /* Audio sample endianness 0(big)/1(little) */
- unsigned char endianness;
- /* Max buffer size (Bytes) allowed */
- unsigned int max_buffer_size;
- /* qavb ring buffer size */
- __u32 ring_buffer_size;
- } __packed;
- struct eavb_ioctl_get_stream_info {
- struct eavb_ioctl_hdr hdr; /* IN */
- struct eavb_ioctl_stream_info info; /* OUT */
- };
- /*
- * EAVB_IOCTL_CONNECT_STREAM
- */
- struct eavb_ioctl_connect_stream {
- struct eavb_ioctl_hdr hdr; /* IN */
- };
- /*
- * EAVB_IOCTL_RECEIVE
- */
- struct eavb_ioctl_buf_hdr {
- /* This flag is used for H.264 and MJPEG streams:
- * 1. H.264: Set for the very last packet of an access unit.
- * 2. MJPEG Set the last packet of a video frame.
- */
- __u32 flag_end_of_frame:1;
- /* This flag is used in file transfer only:
- * Set for the last packet in the file
- */
- __u32 flag_end_of_file:1;
- __u32 flag_reserved:30;
- /* Audio event Layout D3scription Valid Channels
- * event value
- * 0 Static layout Based on config
- * 1 Mono 0
- * 2 Stereo 0, 1
- * 3 5.1 0,1,2,3,4,5
- * 4 7.1 0,1,2,3,4,5,6,7
- * 5-15 Custom Defined by System
- * Integrator
- */
- __u32 event;
- __u32 reserved;
- /* Size of the payload (bytes) */
- __u32 payload_size;
- __u32 buf_ele_count;
- } __packed;
- struct eavb_ioctl_buf_data {
- struct eavb_ioctl_buf_hdr hdr;
- /* virtual address of buffer */
- __u64 pbuf;
- } __packed;
- struct eavb_ioctl_receive {
- struct eavb_ioctl_hdr hdr; /* IN */
- struct eavb_ioctl_buf_data data; /* IN/OUT */
- __s32 received; /* OUT */
- };
- /*
- * EAVB_IOCTL_RECV_DONE
- */
- struct eavb_ioctl_recv_done {
- struct eavb_ioctl_hdr hdr; /* IN */
- struct eavb_ioctl_buf_data data; /* IN */
- };
- /*
- * EAVB_IOCTL_TRANSMIT
- */
- struct eavb_ioctl_transmit {
- struct eavb_ioctl_hdr hdr; /* IN */
- struct eavb_ioctl_buf_data data; /* IN/OUT */
- __s32 written;
- };
- /*
- * EAVB_IOCTL_DISCONNECT_STREAM
- */
- struct eavb_ioctl_disconnect_stream {
- struct eavb_ioctl_hdr hdr; /* IN */
- };
- /*
- * EAVB_IOCTL_DESTROY_STREAM
- */
- struct eavb_ioctl_destroy_stream {
- struct eavb_ioctl_hdr hdr; /* IN */
- };
- #endif /*__EAVB_SHARED_H__*/
|