162306a36Sopenharmony_ci// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) 262306a36Sopenharmony_ci// 362306a36Sopenharmony_ci// This file is provided under a dual BSD/GPLv2 license. When using or 462306a36Sopenharmony_ci// redistributing this file, you may do so under either license. 562306a36Sopenharmony_ci// 662306a36Sopenharmony_ci// Copyright(c) 2022 Intel Corporation. All rights reserved. 762306a36Sopenharmony_ci// 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci/* 1062306a36Sopenharmony_ci * common ops for SKL+ HDAudio platforms 1162306a36Sopenharmony_ci */ 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#include "../sof-priv.h" 1462306a36Sopenharmony_ci#include "hda.h" 1562306a36Sopenharmony_ci#include "../sof-audio.h" 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_cistruct snd_sof_dsp_ops sof_hda_common_ops = { 1862306a36Sopenharmony_ci /* probe/remove/shutdown */ 1962306a36Sopenharmony_ci .probe = hda_dsp_probe, 2062306a36Sopenharmony_ci .remove = hda_dsp_remove, 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci /* Register IO uses direct mmio */ 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci /* Block IO */ 2562306a36Sopenharmony_ci .block_read = sof_block_read, 2662306a36Sopenharmony_ci .block_write = sof_block_write, 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci /* Mailbox IO */ 2962306a36Sopenharmony_ci .mailbox_read = sof_mailbox_read, 3062306a36Sopenharmony_ci .mailbox_write = sof_mailbox_write, 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci /* ipc */ 3362306a36Sopenharmony_ci .get_mailbox_offset = hda_dsp_ipc_get_mailbox_offset, 3462306a36Sopenharmony_ci .get_window_offset = hda_dsp_ipc_get_window_offset, 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci .ipc_msg_data = hda_ipc_msg_data, 3762306a36Sopenharmony_ci .set_stream_data_offset = hda_set_stream_data_offset, 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci /* machine driver */ 4062306a36Sopenharmony_ci .machine_select = hda_machine_select, 4162306a36Sopenharmony_ci .machine_register = sof_machine_register, 4262306a36Sopenharmony_ci .machine_unregister = sof_machine_unregister, 4362306a36Sopenharmony_ci .set_mach_params = hda_set_mach_params, 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci /* debug */ 4662306a36Sopenharmony_ci .dbg_dump = hda_dsp_dump, 4762306a36Sopenharmony_ci .debugfs_add_region_item = snd_sof_debugfs_add_region_item_iomem, 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci /* stream callbacks */ 5062306a36Sopenharmony_ci .pcm_open = hda_dsp_pcm_open, 5162306a36Sopenharmony_ci .pcm_close = hda_dsp_pcm_close, 5262306a36Sopenharmony_ci .pcm_hw_params = hda_dsp_pcm_hw_params, 5362306a36Sopenharmony_ci .pcm_hw_free = hda_dsp_stream_hw_free, 5462306a36Sopenharmony_ci .pcm_trigger = hda_dsp_pcm_trigger, 5562306a36Sopenharmony_ci .pcm_pointer = hda_dsp_pcm_pointer, 5662306a36Sopenharmony_ci .pcm_ack = hda_dsp_pcm_ack, 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci /* firmware loading */ 5962306a36Sopenharmony_ci .load_firmware = snd_sof_load_firmware_raw, 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci /* pre/post fw run */ 6262306a36Sopenharmony_ci .pre_fw_run = hda_dsp_pre_fw_run, 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci /* firmware run */ 6562306a36Sopenharmony_ci .run = hda_dsp_cl_boot_firmware, 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ci /* parse platform specific extended manifest */ 6862306a36Sopenharmony_ci .parse_platform_ext_manifest = hda_dsp_ext_man_get_cavs_config_data, 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci /* dsp core get/put */ 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci /* trace callback */ 7362306a36Sopenharmony_ci .trace_init = hda_dsp_trace_init, 7462306a36Sopenharmony_ci .trace_release = hda_dsp_trace_release, 7562306a36Sopenharmony_ci .trace_trigger = hda_dsp_trace_trigger, 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ci /* client ops */ 7862306a36Sopenharmony_ci .register_ipc_clients = hda_register_clients, 7962306a36Sopenharmony_ci .unregister_ipc_clients = hda_unregister_clients, 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci /* DAI drivers */ 8262306a36Sopenharmony_ci .drv = skl_dai, 8362306a36Sopenharmony_ci .num_drv = SOF_SKL_NUM_DAIS, 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ci /* PM */ 8662306a36Sopenharmony_ci .suspend = hda_dsp_suspend, 8762306a36Sopenharmony_ci .resume = hda_dsp_resume, 8862306a36Sopenharmony_ci .runtime_suspend = hda_dsp_runtime_suspend, 8962306a36Sopenharmony_ci .runtime_resume = hda_dsp_runtime_resume, 9062306a36Sopenharmony_ci .runtime_idle = hda_dsp_runtime_idle, 9162306a36Sopenharmony_ci .set_hw_params_upon_resume = hda_dsp_set_hw_params_upon_resume, 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ci /* ALSA HW info flags */ 9462306a36Sopenharmony_ci .hw_info = SNDRV_PCM_INFO_MMAP | 9562306a36Sopenharmony_ci SNDRV_PCM_INFO_MMAP_VALID | 9662306a36Sopenharmony_ci SNDRV_PCM_INFO_INTERLEAVED | 9762306a36Sopenharmony_ci SNDRV_PCM_INFO_PAUSE | 9862306a36Sopenharmony_ci SNDRV_PCM_INFO_NO_PERIOD_WAKEUP, 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_ci .dsp_arch_ops = &sof_xtensa_arch_ops, 10162306a36Sopenharmony_ci}; 102