brintos

brintos / linux-shallow public Read only

0
0
Text · 4.6 KiB · 1bb2548 Raw
152 lines · c
1/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */2/*3 * This file is provided under a dual BSD/GPLv2 license.  When using or4 * redistributing this file, you may do so under either license.5 *6 * Copyright(c) 2018 Intel Corporation7 */8 9#ifndef __INCLUDE_SOUND_SOF_STREAM_H__10#define __INCLUDE_SOUND_SOF_STREAM_H__11 12#include <sound/sof/header.h>13 14/*15 * Stream configuration.16 */17 18#define SOF_IPC_MAX_CHANNELS			819 20/* common sample rates for use in masks */21#define SOF_RATE_8000		(1 <<  0) /**< 8000Hz  */22#define SOF_RATE_11025		(1 <<  1) /**< 11025Hz */23#define SOF_RATE_12000		(1 <<  2) /**< 12000Hz */24#define SOF_RATE_16000		(1 <<  3) /**< 16000Hz */25#define SOF_RATE_22050		(1 <<  4) /**< 22050Hz */26#define SOF_RATE_24000		(1 <<  5) /**< 24000Hz */27#define SOF_RATE_32000		(1 <<  6) /**< 32000Hz */28#define SOF_RATE_44100		(1 <<  7) /**< 44100Hz */29#define SOF_RATE_48000		(1 <<  8) /**< 48000Hz */30#define SOF_RATE_64000		(1 <<  9) /**< 64000Hz */31#define SOF_RATE_88200		(1 << 10) /**< 88200Hz */32#define SOF_RATE_96000		(1 << 11) /**< 96000Hz */33#define SOF_RATE_176400		(1 << 12) /**< 176400Hz */34#define SOF_RATE_192000		(1 << 13) /**< 192000Hz */35 36/* continuous and non-standard rates for flexibility */37#define SOF_RATE_CONTINUOUS	(1 << 30)  /**< range */38#define SOF_RATE_KNOT		(1 << 31)  /**< non-continuous */39 40/* generic PCM flags for runtime settings */41#define SOF_PCM_FLAG_XRUN_STOP	(1 << 0) /**< Stop on any XRUN */42 43/* stream PCM frame format */44enum sof_ipc_frame {45	SOF_IPC_FRAME_S16_LE = 0,46	SOF_IPC_FRAME_S24_4LE,47	SOF_IPC_FRAME_S32_LE,48	SOF_IPC_FRAME_FLOAT,49	/* other formats here */50};51 52/* stream buffer format */53enum sof_ipc_buffer_format {54	SOF_IPC_BUFFER_INTERLEAVED,55	SOF_IPC_BUFFER_NONINTERLEAVED,56	/* other formats here */57};58 59/* stream direction */60enum sof_ipc_stream_direction {61	SOF_IPC_STREAM_PLAYBACK = 0,62	SOF_IPC_STREAM_CAPTURE,63};64 65/* stream ring info */66struct sof_ipc_host_buffer {67	struct sof_ipc_hdr hdr;68	uint32_t phy_addr;69	uint32_t pages;70	uint32_t size;71	uint32_t reserved[3];72} __packed;73 74struct sof_ipc_stream_params {75	struct sof_ipc_hdr hdr;76	struct sof_ipc_host_buffer buffer;77	uint32_t direction;	/**< enum sof_ipc_stream_direction */78	uint32_t frame_fmt;	/**< enum sof_ipc_frame */79	uint32_t buffer_fmt;	/**< enum sof_ipc_buffer_format */80	uint32_t rate;81	uint16_t stream_tag;82	uint16_t channels;83	uint16_t sample_valid_bytes;84	uint16_t sample_container_bytes;85 86	uint32_t host_period_bytes;87	uint16_t no_stream_position; /**< 1 means don't send stream position */88	uint8_t cont_update_posn; /**< 1 means continuous update stream position */89	uint8_t reserved0;90	int16_t ext_data_length; /**< 0, means no extended data */91	uint8_t reserved[2];92	uint16_t chmap[SOF_IPC_MAX_CHANNELS];	/**< channel map - SOF_CHMAP_ */93	uint8_t ext_data[]; /**< extended data */94} __packed;95 96/* PCM params info - SOF_IPC_STREAM_PCM_PARAMS */97struct sof_ipc_pcm_params {98	struct sof_ipc_cmd_hdr hdr;99	uint32_t comp_id;100	uint32_t flags;		/**< generic PCM flags - SOF_PCM_FLAG_ */101	uint32_t reserved[2];102	struct sof_ipc_stream_params params;103}  __packed;104 105/* PCM params info reply - SOF_IPC_STREAM_PCM_PARAMS_REPLY */106struct sof_ipc_pcm_params_reply {107	struct sof_ipc_reply rhdr;108	uint32_t comp_id;109	uint32_t posn_offset;110} __packed;111 112/* free stream - SOF_IPC_STREAM_PCM_PARAMS */113struct sof_ipc_stream {114	struct sof_ipc_cmd_hdr hdr;115	uint32_t comp_id;116} __packed;117 118/* flags indicating which time stamps are in sync with each other */119#define	SOF_TIME_HOST_SYNC	(1 << 0)120#define	SOF_TIME_DAI_SYNC	(1 << 1)121#define	SOF_TIME_WALL_SYNC	(1 << 2)122#define	SOF_TIME_STAMP_SYNC	(1 << 3)123 124/* flags indicating which time stamps are valid */125#define	SOF_TIME_HOST_VALID	(1 << 8)126#define	SOF_TIME_DAI_VALID	(1 << 9)127#define	SOF_TIME_WALL_VALID	(1 << 10)128#define	SOF_TIME_STAMP_VALID	(1 << 11)129 130/* flags indicating time stamps are 64bit else 3use low 32bit */131#define	SOF_TIME_HOST_64	(1 << 16)132#define	SOF_TIME_DAI_64		(1 << 17)133#define	SOF_TIME_WALL_64	(1 << 18)134#define	SOF_TIME_STAMP_64	(1 << 19)135 136struct sof_ipc_stream_posn {137	struct sof_ipc_reply rhdr;138	uint32_t comp_id;	/**< host component ID */139	uint32_t flags;		/**< SOF_TIME_ */140	uint32_t wallclock_hz;	/**< frequency of wallclock in Hz */141	uint32_t timestamp_ns;	/**< resolution of timestamp in ns */142	uint64_t host_posn;	/**< host DMA position in bytes */143	uint64_t dai_posn;	/**< DAI DMA position in bytes */144	uint64_t comp_posn;	/**< comp position in bytes */145	uint64_t wallclock;	/**< audio wall clock */146	uint64_t timestamp;	/**< system time stamp */147	uint32_t xrun_comp_id;	/**< comp ID of XRUN component */148	int32_t xrun_size;	/**< XRUN size in bytes */149}  __packed;150 151#endif152