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