mirror of https://github.com/thesofproject/sof.git
ipcgtw: merge ipcgtw.h to ipcgtw_copier.h header file
No need to keep separate ipcgtw.h header file, merge it to ipcgtw_copier.h. Signed-off-by: Baofeng Tian <baofeng.tian@intel.com>
This commit is contained in:
parent
5e200efdee
commit
bf6b875bd0
|
@ -8,7 +8,6 @@
|
||||||
#include <sof/lib/memory.h>
|
#include <sof/lib/memory.h>
|
||||||
#include <sof/ut.h>
|
#include <sof/ut.h>
|
||||||
#include <rtos/init.h>
|
#include <rtos/init.h>
|
||||||
#include <ipc4/ipcgtw.h>
|
|
||||||
#include <ipc4/copier.h>
|
#include <ipc4/copier.h>
|
||||||
#include <sof/audio/ipcgtw_copier.h>
|
#include <sof/audio/ipcgtw_copier.h>
|
||||||
|
|
||||||
|
@ -88,8 +87,8 @@ static inline struct comp_buffer *get_buffer(struct comp_dev *dev)
|
||||||
return list_first_item(&dev->bsource_list, struct comp_buffer, sink_list);
|
return list_first_item(&dev->bsource_list, struct comp_buffer, sink_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ipcgtw_process_cmd(const struct ipc4_ipcgtw_cmd *cmd,
|
int copier_ipcgtw_process(const struct ipc4_ipcgtw_cmd *cmd,
|
||||||
void *reply_payload, uint32_t *reply_payload_size)
|
void *reply_payload, uint32_t *reply_payload_size)
|
||||||
{
|
{
|
||||||
const struct ipc4_ipc_gateway_cmd_data *in;
|
const struct ipc4_ipc_gateway_cmd_data *in;
|
||||||
struct comp_dev *dev;
|
struct comp_dev *dev;
|
||||||
|
@ -106,7 +105,7 @@ int ipcgtw_process_cmd(const struct ipc4_ipcgtw_cmd *cmd,
|
||||||
if (!dev)
|
if (!dev)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
comp_dbg(dev, "ipcgtw_process_cmd(): %x %x",
|
comp_dbg(dev, "copier_ipcgtw_process(): %x %x",
|
||||||
cmd->primary.dat, cmd->extension.dat);
|
cmd->primary.dat, cmd->extension.dat);
|
||||||
|
|
||||||
buf = get_buffer(dev);
|
buf = get_buffer(dev);
|
||||||
|
@ -120,7 +119,7 @@ int ipcgtw_process_cmd(const struct ipc4_ipcgtw_cmd *cmd,
|
||||||
* 0 bytes free for SET_DATA.
|
* 0 bytes free for SET_DATA.
|
||||||
*/
|
*/
|
||||||
buf_c = NULL;
|
buf_c = NULL;
|
||||||
comp_warn(dev, "ipcgtw_process_cmd(): no buffer found");
|
comp_warn(dev, "copier_ipcgtw_process(): no buffer found");
|
||||||
}
|
}
|
||||||
|
|
||||||
out = (struct ipc4_ipc_gateway_cmd_data_reply *)reply_payload;
|
out = (struct ipc4_ipc_gateway_cmd_data_reply *)reply_payload;
|
||||||
|
@ -169,7 +168,7 @@ int ipcgtw_process_cmd(const struct ipc4_ipcgtw_cmd *cmd,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
comp_err(dev, "ipcgtw_process_cmd(): unexpected cmd: %u",
|
comp_err(dev, "copier_ipcgtw_process(): unexpected cmd: %u",
|
||||||
(unsigned int)cmd->primary.r.cmd);
|
(unsigned int)cmd->primary.r.cmd);
|
||||||
if (buf_c)
|
if (buf_c)
|
||||||
buffer_release(buf_c);
|
buffer_release(buf_c);
|
||||||
|
|
|
@ -1,69 +0,0 @@
|
||||||
/* SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
*
|
|
||||||
* Copyright 2023 Intel Corporation. All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __SOF_IPC4_IPCGTW_H__
|
|
||||||
#define __SOF_IPC4_IPCGTW_H__
|
|
||||||
|
|
||||||
/**< IPC header format for IPC gateway messages */
|
|
||||||
struct ipc4_ipcgtw_cmd {
|
|
||||||
union {
|
|
||||||
uint32_t dat;
|
|
||||||
|
|
||||||
struct {
|
|
||||||
/**< Command, see below */
|
|
||||||
uint32_t cmd : 24;
|
|
||||||
|
|
||||||
/**< One of Global::Type */
|
|
||||||
uint32_t type : 5;
|
|
||||||
|
|
||||||
/**< Msg::MSG_REQUEST */
|
|
||||||
uint32_t rsp : 1;
|
|
||||||
|
|
||||||
/**< Msg::FW_GEN_MSG */
|
|
||||||
uint32_t msg_tgt : 1;
|
|
||||||
|
|
||||||
uint32_t _reserved_0 : 1;
|
|
||||||
} r;
|
|
||||||
} primary;
|
|
||||||
union {
|
|
||||||
uint32_t dat;
|
|
||||||
struct {
|
|
||||||
uint32_t data_size : 30;
|
|
||||||
uint32_t _reserved_0 : 2;
|
|
||||||
} r;
|
|
||||||
} extension;
|
|
||||||
} __packed __aligned(4);
|
|
||||||
|
|
||||||
/**< Values of ipc4_ipcgtw_cmd::primary.r.cmd */
|
|
||||||
enum {
|
|
||||||
IPC4_IPCGWCMD_GET_DATA = 1,
|
|
||||||
IPC4_IPCGWCMD_SET_DATA = 2,
|
|
||||||
IPC4_IPCGWCMD_FLUSH_DATA = 3
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Incoming IPC gateway message */
|
|
||||||
struct ipc4_ipc_gateway_cmd_data {
|
|
||||||
/* node_id of the target gateway */
|
|
||||||
union ipc4_connector_node_id node_id;
|
|
||||||
/* Payload (actual size is in the header extension.r.data_size) */
|
|
||||||
uint8_t payload[];
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Reply to IPC gateway message */
|
|
||||||
struct ipc4_ipc_gateway_cmd_data_reply {
|
|
||||||
union {
|
|
||||||
uint32_t size_avail; /* Reply for IPC4_IPCGWCMD_GET_DATA */
|
|
||||||
uint32_t size_consumed; /* Reply for IPC4_IPCGWCMD_SET_DATA */
|
|
||||||
} u;
|
|
||||||
/* Total reply size is returned in reply header extension.r.data_size.
|
|
||||||
* This payload size if 4 bytes smaller (size of the union above).
|
|
||||||
*/
|
|
||||||
uint8_t payload[];
|
|
||||||
};
|
|
||||||
|
|
||||||
int ipcgtw_process_cmd(const struct ipc4_ipcgtw_cmd *cmd,
|
|
||||||
void *reply_payload, uint32_t *reply_payload_size);
|
|
||||||
|
|
||||||
#endif /* __SOF_IPC4_IPCGTW_H__ */
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include <ipc4/gateway.h>
|
#include <ipc4/gateway.h>
|
||||||
#include <sof/list.h>
|
#include <sof/list.h>
|
||||||
#include <ipc/stream.h>
|
#include <ipc/stream.h>
|
||||||
|
#include <ipc4/copier.h>
|
||||||
|
|
||||||
/* Host communicates with IPC gateways via global IPC messages. To address a particular
|
/* Host communicates with IPC gateways via global IPC messages. To address a particular
|
||||||
* IPC gateway, its node_id is sent in message payload. Hence we need to keep a list of existing
|
* IPC gateway, its node_id is sent in message payload. Hence we need to keep a list of existing
|
||||||
|
@ -34,6 +35,66 @@ struct ipcgtw_data {
|
||||||
uint32_t buf_size;
|
uint32_t buf_size;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**< IPC header format for IPC gateway messages */
|
||||||
|
struct ipc4_ipcgtw_cmd {
|
||||||
|
union {
|
||||||
|
uint32_t dat;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
/**< Command, see below */
|
||||||
|
uint32_t cmd : 24;
|
||||||
|
|
||||||
|
/**< One of Global::Type */
|
||||||
|
uint32_t type : 5;
|
||||||
|
|
||||||
|
/**< Msg::MSG_REQUEST */
|
||||||
|
uint32_t rsp : 1;
|
||||||
|
|
||||||
|
/**< Msg::FW_GEN_MSG */
|
||||||
|
uint32_t msg_tgt : 1;
|
||||||
|
|
||||||
|
uint32_t _reserved_0 : 1;
|
||||||
|
} r;
|
||||||
|
} primary;
|
||||||
|
union {
|
||||||
|
uint32_t dat;
|
||||||
|
struct {
|
||||||
|
uint32_t data_size : 30;
|
||||||
|
uint32_t _reserved_0 : 2;
|
||||||
|
} r;
|
||||||
|
} extension;
|
||||||
|
} __packed __aligned(4);
|
||||||
|
|
||||||
|
/**< Values of ipc4_ipcgtw_cmd::primary.r.cmd */
|
||||||
|
enum {
|
||||||
|
IPC4_IPCGWCMD_GET_DATA = 1,
|
||||||
|
IPC4_IPCGWCMD_SET_DATA = 2,
|
||||||
|
IPC4_IPCGWCMD_FLUSH_DATA = 3
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Incoming IPC gateway message */
|
||||||
|
struct ipc4_ipc_gateway_cmd_data {
|
||||||
|
/* node_id of the target gateway */
|
||||||
|
union ipc4_connector_node_id node_id;
|
||||||
|
/* Payload (actual size is in the header extension.r.data_size) */
|
||||||
|
uint8_t payload[];
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Reply to IPC gateway message */
|
||||||
|
struct ipc4_ipc_gateway_cmd_data_reply {
|
||||||
|
union {
|
||||||
|
uint32_t size_avail; /* Reply for IPC4_IPCGWCMD_GET_DATA */
|
||||||
|
uint32_t size_consumed; /* Reply for IPC4_IPCGWCMD_SET_DATA */
|
||||||
|
} u;
|
||||||
|
/* Total reply size is returned in reply header extension.r.data_size.
|
||||||
|
* This payload size if 4 bytes smaller (size of the union above).
|
||||||
|
*/
|
||||||
|
uint8_t payload[];
|
||||||
|
};
|
||||||
|
|
||||||
|
int copier_ipcgtw_process(const struct ipc4_ipcgtw_cmd *cmd,
|
||||||
|
void *reply_payload, uint32_t *reply_payload_size);
|
||||||
|
|
||||||
int copier_ipcgtw_params(struct ipcgtw_data *ipcgtw_data, struct comp_dev *dev,
|
int copier_ipcgtw_params(struct ipcgtw_data *ipcgtw_data, struct comp_dev *dev,
|
||||||
struct sof_ipc_stream_params *params);
|
struct sof_ipc_stream_params *params);
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#include <ipc4/module.h>
|
#include <ipc4/module.h>
|
||||||
#include <ipc4/pipeline.h>
|
#include <ipc4/pipeline.h>
|
||||||
#include <ipc4/notification.h>
|
#include <ipc4/notification.h>
|
||||||
#include <ipc4/ipcgtw.h>
|
#include <sof/audio/ipcgtw_copier.h>
|
||||||
#include <ipc/trace.h>
|
#include <ipc/trace.h>
|
||||||
#include <user/trace.h>
|
#include <user/trace.h>
|
||||||
|
|
||||||
|
@ -537,8 +537,8 @@ static int ipc4_process_ipcgtw_cmd(struct ipc4_message_request *ipc4)
|
||||||
* quite weird: seems one extra copying can be eliminated.
|
* quite weird: seems one extra copying can be eliminated.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
err = ipcgtw_process_cmd((const struct ipc4_ipcgtw_cmd *)ipc4, ipc->comp_data,
|
err = copier_ipcgtw_process((const struct ipc4_ipcgtw_cmd *)ipc4, ipc->comp_data,
|
||||||
&reply_size);
|
&reply_size);
|
||||||
/* reply size is returned in header extension dword */
|
/* reply size is returned in header extension dword */
|
||||||
msg_reply.extension = reply_size;
|
msg_reply.extension = reply_size;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue