/* SPDX-License-Identifier: (GPL-2.0-only 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) 2019 Intel Corporation. All rights reserved.
 */

#ifndef __IPC_CHANNEL_MAP_H__
#define __IPC_CHANNEL_MAP_H__

#include <uapi/sound/sof/header.h>
#include <sound/sof/header.h>

/**
 * \brief Channel map, specifies transformation of one-to-many or many-to-one.
 *
 * In case of one-to-many specifies how the output channels are computed out of
 * a single source channel,
 * in case of many-to-one specifies how a single target channel is computed
 * from a multichannel input stream.
 *
 * Channel index specifies position of the channel in the stream on the 'one'
 * side.
 *
 * Ext ID is the identifier of external part of the transformation. Depending
 * on the context, it may be pipeline ID, dai ID, ...
 *
 * Channel mask describes which channels are taken into account on the "many"
 * side. Bit[i] set to 1 means that i-th channel is used for computation
 * (either as source or as a target).
 *
 * Channel mask is followed by array of coefficients in Q2.30 format,
 * one per each channel set in the mask (left to right, LS bit set in the
 * mask corresponds to ch_coeffs[0]).
 */
struct sof_ipc_channel_map {
	uint32_t ch_index;
	uint32_t ext_id;
	uint32_t ch_mask;
	uint32_t reserved;
	int32_t ch_coeffs[];
} __packed;

/**
 * \brief Complete map for each channel of a multichannel stream.
 *
 * num_ch_map Specifies number of items in the ch_map.
 * More than one transformation per a single channel is allowed (in case
 * multiple external entities are transformed).
 * A channel may be skipped in the transformation list, then it is filled
 * with 0's by the transformation function.
 */
struct sof_ipc_stream_map {
	struct sof_ipc_cmd_hdr hdr;
	uint32_t num_ch_map;
	uint32_t reserved[3];
	struct sof_ipc_channel_map ch_map[];
} __packed;

#endif /* __IPC_CHANNEL_MAP_H__ */
