/*
 * Copyright (c) 2022 Intel Corporation.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef __INTEL_DAI_DRIVER_ALH_H__
#define __INTEL_DAI_DRIVER_ALH_H__

#include <stdint.h>
#include <zephyr/drivers/dai.h>

#include "alh_map.h"

#define DAI_NUM_ALH_BI_DIR_LINKS_GROUP 4

#define ALH_STREAM_OFFSET 0x4

#define IPC4_ALH_MAX_NUMBER_OF_GTW 16
#define IPC4_ALH_DAI_INDEX_OFFSET 7

#define ALH_GPDMA_BURST_LENGTH 4

#define ALH_SET_BITS(b_hi, b_lo, x)	\
	(((x) & ((1ULL << ((b_hi) - (b_lo) + 1ULL)) - 1ULL)) << (b_lo))
#define ALHASCTL_OSEL(x)          ALH_SET_BITS(25, 24, x)

#define dai_get_drvdata(dai) &dai->priv_data
#define dai_base(dai) dai->plat_data.base

#define DAI_DIR_PLAYBACK 0
#define DAI_DIR_CAPTURE 1

#define ALH_CHANNELS_DEFAULT 2
#define ALH_RATE_DEFAULT 48000
#define ALH_WORD_SIZE_DEFAULT 32

#if CONFIG_INTEL_ADSP_CAVS
#define ALH_TXDA_OFFSET 0x400
#define ALH_RXDA_OFFSET 0x500
#else
#define ALH_TXDA_OFFSET 0
#define ALH_RXDA_OFFSET 0x100
#endif

union dai_intel_ipc4_gateway_attributes {
	/**< Raw value */
	uint32_t dw;

	/**< Access to the fields */
	struct {
		/**< Gateway data requested in low power memory. */
		uint32_t lp_buffer_alloc : 1;

		/**< Gateway data requested in register file memory. */
		uint32_t alloc_from_reg_file : 1;

		/**< Reserved field */
		uint32_t _rsvd : 30;
	} bits; /**<< Bits */
} __packed;

/* ALH Configuration Request - SOF_IPC_DAI_ALH_CONFIG */
struct dai_intel_ipc3_alh_params {
	uint32_t reserved0;
	uint32_t stream_id;
	uint32_t rate;
	uint32_t channels;

	/* reserved for future use */
	uint32_t reserved[13];
} __packed;

struct ipc4_alh_multi_gtw_cfg {
	/* Number of single channels (valid items in mapping array). */
	uint32_t count;
	/* Single to multi aggregation mapping item. */
	struct {
		/* Vindex of a single ALH channel aggregated. */
		uint32_t alh_id;
		/* Channel mask */
		uint32_t channel_mask;
	} mapping[IPC4_ALH_MAX_NUMBER_OF_GTW]; /* < Mapping items */
} __packed;

struct dai_intel_ipc4_alh_configuration_blob {
	union dai_intel_ipc4_gateway_attributes gtw_attributes;
	struct ipc4_alh_multi_gtw_cfg alh_cfg;
} __packed;

struct dai_intel_alh_plat_data {
	uint32_t base;
	uint32_t fifo_depth[2];
};

struct dai_intel_alh_pdata {
	struct dai_config config;
	struct dai_properties props;
	struct dai_intel_ipc3_alh_params params;
};

struct dai_intel_alh {
	uint32_t index;		/**< index */
	struct k_spinlock lock;	/**< locking mechanism */
	int sref;		/**< simple ref counter, guarded by lock */
	struct dai_intel_alh_plat_data plat_data;
	struct dai_intel_alh_pdata priv_data;
};

#endif
