123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322 |
- /* SPDX-License-Identifier: GPL-2.0-only */
- /*
- * Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved.
- */
- #ifndef __VDEV_VIRTIO_EAVB_H__
- #define __VDEV_VIRTIO_EAVB_H__
- #define IF_NAMESIZE 16
- #define STATION_ADDR_SIZE 8
- #define MAX_STREAM_NUM 8
- #define MAX_CONFIG_FILE_PATH 512
- #define VERSION_MAJOR 1
- #define VERSION_MINOR 1
- #define VIRTIO_EAVB_T_CREATE_STREAM 0
- #define VIRTIO_EAVB_T_GET_STREAM_INFO 1
- #define VIRTIO_EAVB_T_CONNECT_STREAM 2
- #define VIRTIO_EAVB_T_RECEIVE 3
- #define VIRTIO_EAVB_T_TRANSMIT 4
- #define VIRTIO_EAVB_T_DISCONNECT_STREAM 5
- #define VIRTIO_EAVB_T_DESTROY_STREAM 6
- #define VIRTIO_EAVB_T_CREATE_STREAM_PATH 7
- #define VIRTIO_EAVB_T_VERSION 8
- #define VIRTIO_EAVB_T_MMAP 9
- #define VIRTIO_EAVB_T_MUNMAP 10
- #define VIRTIO_EAVB_T_UPDATE_CLK 11
- struct vio_msg_hdr {
- uint16_t msgid; /* unique message id */
- uint16_t len; /* command total length */
- uint32_t cmd; /* command */
- uint64_t streamctx_hdl;/* streamCtx handle */
- int32_t stream_idx; /* streamCtx idx in BE */
- int32_t result; /* command result */
- } __packed;
- /*
- * EAVB_IOCTL_CREATE_STREAM
- */
- struct vio_stream_config {
- uint16_t stream_id;
- char eth_interface[IF_NAMESIZE];
- uint16_t vlan_id;
- uint16_t ring_buffer_elem_count;
- int ring_buffer_mode;
- int avb_role; /* talker = 0 or listener = 1 */
- uint8_t dest_macaddr[STATION_ADDR_SIZE];
- uint8_t stream_addr[STATION_ADDR_SIZE];
- /* "crf_macaddr" or "crf_dest_macaddr" */
- uint8_t crf_dest_macaddr[STATION_ADDR_SIZE];
- uint8_t crf_stream_addr[STATION_ADDR_SIZE];
- int 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;
- int64_t crf_mcr_adjust_min_ppm;
- int64_t crf_mcr_adjust_max_ppm;
- uint16_t crf_stream_id; /* CRF stream ID */
- int32_t crf_base_frequency; /* CRF base frequency */
- int32_t crf_listener_ts_smoothing;
- int32_t 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 */
- int32_t enable_stats_reporting;
- int32_t stats_reporting_interval;
- int32_t stats_reporting_samples;
- /* packet tracking */
- int32_t enable_packet_tracking;
- int32_t 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;
- struct vio_create_stream_msg {
- struct vio_msg_hdr mhdr;
- struct vio_stream_config cfg;
- uint64_t streamCtx;
- int32_t stream_idx;
- } __packed;
- struct vio_create_stream_path_msg {
- struct vio_msg_hdr mhdr;
- char path[MAX_CONFIG_FILE_PATH];
- uint64_t streamCtx;
- int32_t stream_idx;
- } __packed;
- /*
- * EAVB_IOCTL_GET_STREAM_INFO
- */
- struct eavb_stream_info {
- int role;
- int 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*/
- uint32_t ring_buffer_size;
- } __packed;
- struct vio_get_stream_info_msg {
- struct vio_msg_hdr mhdr;
- struct eavb_stream_info stream_info;
- } __packed;
- /*
- * EAVB_IOCTL_CONNECT_STREAM
- */
- struct vio_connect_stream_msg {
- struct vio_msg_hdr mhdr;
- } __packed;
- /*
- * EAVB_IOCTL_RECEIVE
- */
- struct eavb_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.
- */
- uint32_t flag_end_of_frame:1;
- /* This flag is used in file transfer only:
- * Set for the last packet in the file
- */
- uint32_t flag_end_of_file:1;
- uint32_t 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
- */
- uint32_t event;
- uint32_t reserved;
- uint32_t payload_size; /* Size of the payload (bytes) */
- uint32_t buf_ele_count;
- } __packed;
- struct eavb_buf_data {
- struct eavb_buf_hdr hdr;
- uint64_t gpa; /* GVM physical address of buffer */
- } __packed;
- struct vio_receive_msg {
- struct vio_msg_hdr mhdr;
- struct eavb_buf_data data; /* IN/OUT */
- int32_t received;
- } __packed;
- /*
- * EAVB_IOCTL_TRANSMIT
- */
- struct vio_transmit_msg {
- struct vio_msg_hdr mhdr;
- struct eavb_buf_data data; /* IN/OUT */
- int32_t written;
- uint32_t mapping_size;
- } __packed;
- /*
- * EAVB_IOCTL_DISCONNECT_STREAM
- */
- struct vio_disconnect_stream_msg {
- struct vio_msg_hdr mhdr;
- } __packed;
- /*
- * EAVB_IOCTL_DESTROY_STREAM
- */
- struct vio_destroy_stream_msg {
- struct vio_msg_hdr mhdr;
- } __packed;
- /*
- * EAVB_IOCTL_VERSION
- */
- struct vio_version_msg {
- struct vio_msg_hdr mhdr; /* IN */
- uint16_t major; /* IN */
- uint16_t minor; /* IN */
- } __packed;
- /*
- * EAVB_IOCTL_MMAP
- */
- struct vio_mmap_msg {
- struct vio_msg_hdr mhdr; /* IN */
- uint32_t size; /* IN */
- uint64_t gpa; /* IN */
- } __packed;
- /*
- * EAVB_IOCTL_MUNMAP
- */
- struct vio_munmap_msg {
- struct vio_msg_hdr mhdr; /* IN */
- uint64_t gpa; /* IN */
- } __packed;
- /*
- * EAVB_IOCTL_UPDATE_CLK
- */
- struct vio_update_clk_msg {
- struct vio_msg_hdr mhdr; /* IN */
- uint64_t clk; /* IN */
- } __packed;
- #endif /* __VDEV_VIRTIO_EAVB_H__ */
|