// SPDX-License-Identifier: GPL-2.0-only /* * sst_ipc.c - Intel SST Driver for audio engine * * Copyright (C) 2008-14 Intel Corporation * Authors: Vinod Koul <[email protected]> * Harsha Priya <[email protected]> * Dharageswari R <[email protected]> * KP Jeeja <[email protected]> * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ #include <linux/pci.h> #include <linux/firmware.h> #include <linux/sched.h> #include <linux/delay.h> #include <sound/core.h> #include <sound/pcm.h> #include <sound/soc.h> #include <sound/compress_driver.h> #include <asm/platform_sst_audio.h> #include "../sst-mfld-platform.h" #include "sst.h" struct sst_block *sst_create_block(struct intel_sst_drv *ctx, u32 msg_id, u32 drv_id) { … } /* * while handling the interrupts, we need to check for message status and * then if we are blocking for a message * * here we are unblocking the blocked ones, this is based on id we have * passed and search that for block threads. * We will not find block in two cases * a) when its small message and block in not there, so silently ignore * them * b) when we are actually not able to find the block (bug perhaps) * * Since we have bit of small messages we can spam kernel log with err * print on above so need to keep as debug prints which should be enabled * via dynamic debug while debugging IPC issues */ int sst_wake_up_block(struct intel_sst_drv *ctx, int result, u32 drv_id, u32 ipc, void *data, u32 size) { … } int sst_free_block(struct intel_sst_drv *ctx, struct sst_block *freed) { … } int sst_post_message_mrfld(struct intel_sst_drv *sst_drv_ctx, struct ipc_post *ipc_msg, bool sync) { … } void intel_sst_clear_intr_mrfld(struct intel_sst_drv *sst_drv_ctx) { … } /* * process_fw_init - process the FW init msg * * @msg: IPC message mailbox data from FW * * This function processes the FW init msg from FW * marks FW state and prints debug info of loaded FW */ static void process_fw_init(struct intel_sst_drv *sst_drv_ctx, void *msg) { … } static void process_fw_async_msg(struct intel_sst_drv *sst_drv_ctx, struct ipc_post *msg) { … } void sst_process_reply_mrfld(struct intel_sst_drv *sst_drv_ctx, struct ipc_post *msg) { … }