|  | /* | 
|  | * Copyright (c) 2022 Intel Corporation. | 
|  | * | 
|  | * SPDX-License-Identifier: Apache-2.0 | 
|  | */ | 
|  |  | 
|  | #ifndef ZEPHYR_DRIVERS_DMA_INTEL_ADSP_HDA_COMMON_H_ | 
|  | #define ZEPHYR_DRIVERS_DMA_INTEL_ADSP_HDA_COMMON_H_ | 
|  |  | 
|  | #define INTEL_ADSP_HDA_MAX_CHANNELS DT_PROP(DT_NODELABEL(hda_host_out), dma_channels) | 
|  |  | 
|  | /* Minimum recommended FPI increment */ | 
|  | #define INTEL_HDA_MIN_FPI_INCREMENT_FOR_INTERRUPT 32 | 
|  |  | 
|  | #include <zephyr/drivers/dma.h> | 
|  | #include <zephyr/pm/device.h> | 
|  | #include <zephyr/pm/device_runtime.h> | 
|  |  | 
|  | struct intel_adsp_hda_dma_data { | 
|  | struct dma_context ctx; | 
|  |  | 
|  | ATOMIC_DEFINE(channels_atomic, INTEL_ADSP_HDA_MAX_CHANNELS); | 
|  | }; | 
|  |  | 
|  | struct intel_adsp_hda_dma_cfg { | 
|  | uint32_t base; | 
|  | uint32_t regblock_size; | 
|  | uint32_t dma_channels; | 
|  | enum dma_channel_direction direction; | 
|  | void (*irq_config)(void); | 
|  | }; | 
|  |  | 
|  | int intel_adsp_hda_dma_host_in_config(const struct device *dev, | 
|  | uint32_t channel, | 
|  | struct dma_config *dma_cfg); | 
|  |  | 
|  | int intel_adsp_hda_dma_host_out_config(const struct device *dev, | 
|  | uint32_t channel, | 
|  | struct dma_config *dma_cfg); | 
|  |  | 
|  | int intel_adsp_hda_dma_link_in_config(const struct device *dev, | 
|  | uint32_t channel, | 
|  | struct dma_config *dma_cfg); | 
|  |  | 
|  | int intel_adsp_hda_dma_link_out_config(const struct device *dev, | 
|  | uint32_t channel, | 
|  | struct dma_config *dma_cfg); | 
|  |  | 
|  | int intel_adsp_hda_dma_link_reload(const struct device *dev, uint32_t channel, | 
|  | uint32_t src, uint32_t dst, size_t size); | 
|  |  | 
|  | int intel_adsp_hda_dma_host_reload(const struct device *dev, uint32_t channel, | 
|  | uint32_t src, uint32_t dst, size_t size); | 
|  |  | 
|  | int intel_adsp_hda_dma_status(const struct device *dev, uint32_t channel, | 
|  | struct dma_status *stat); | 
|  |  | 
|  | bool intel_adsp_hda_dma_chan_filter(const struct device *dev, int channel, | 
|  | void *filter_param); | 
|  |  | 
|  | int intel_adsp_hda_dma_start(const struct device *dev, uint32_t channel); | 
|  |  | 
|  | int intel_adsp_hda_dma_stop(const struct device *dev, uint32_t channel); | 
|  |  | 
|  | int intel_adsp_hda_dma_init(const struct device *dev); | 
|  |  | 
|  | int intel_adsp_hda_dma_get_attribute(const struct device *dev, uint32_t type, uint32_t *value); | 
|  |  | 
|  | void intel_adsp_hda_dma_isr(void); | 
|  |  | 
|  | #ifdef CONFIG_PM_DEVICE | 
|  | int intel_adsp_hda_dma_pm_action(const struct device *dev, enum pm_device_action action); | 
|  | #endif | 
|  |  | 
|  | #endif /* ZEPHYR_DRIVERS_DMA_INTEL_ADSP_HDA_COMMON_H_ */ |