// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (C) 2020-21 Intel Corporation.
*/
#include <linux/delay.h>
#include "iosm_ipc_chnl_cfg.h"
#include "iosm_ipc_devlink.h"
#include "iosm_ipc_flash.h"
#include "iosm_ipc_imem.h"
#include "iosm_ipc_port.h"
#include "iosm_ipc_trace.h"
#include "iosm_ipc_debugfs.h"
/* Check the wwan ips if it is valid with Channel as input. */
static int ipc_imem_check_wwan_ips(struct ipc_mem_channel *chnl)
{
if (chnl)
return chnl->ctype == IPC_CTYPE_WWAN &&
chnl->if_id == IPC_MEM_MUX_IP_CH_IF_ID;
return false;
}
static int ipc_imem_msg_send_device_sleep(struct iosm_imem *ipc_imem, u32 state)
{
union ipc_msg_prep_args prep_args = {
.sleep.target = 1,
.sleep.state = state,
};
ipc_imem->device_sleep = state;
return ipc_protocol_tq_msg_send(ipc_imem->ipc_protocol,
IPC_MSG_PREP_SLEEP, &prep_args, NULL);
}
static bool ipc_imem_dl_skb_alloc(struct iosm_imem *ipc_imem,
struct ipc_pipe *pipe)
{
/* limit max. nr of entries */
if (pipe->nr_of_queued_entries >=