mirror of
https://github.com/apache/nuttx.git
synced 2026-05-23 14:58:13 +08:00
sim/sim_rptun: add 64-bit support for sim_rptun
add remote addrenv to make the da is start from 0, so the uint32_t da in resource table can store the correct address Signed-off-by: Bowen Wang <wangbowen6@xiaomi.com>
This commit is contained in:
@@ -72,6 +72,7 @@ struct sim_rptun_dev_s
|
||||
uint32_t seq;
|
||||
struct sim_rptun_shmem_s *shmem;
|
||||
struct simple_addrenv_s addrenv[2];
|
||||
struct rptun_addrenv_s raddrenv[2];
|
||||
char cpuname[RPMSG_NAME_SIZE + 1];
|
||||
char shmemname[RPMSG_NAME_SIZE + 1];
|
||||
pid_t pid;
|
||||
@@ -93,6 +94,15 @@ static const char *sim_rptun_get_cpuname(struct rptun_dev_s *dev)
|
||||
return priv->cpuname;
|
||||
}
|
||||
|
||||
static const struct rptun_addrenv_s *
|
||||
sim_rptun_get_addrenv(struct rptun_dev_s *dev)
|
||||
{
|
||||
struct sim_rptun_dev_s *priv = container_of(dev,
|
||||
struct sim_rptun_dev_s, rptun);
|
||||
|
||||
return &priv->raddrenv[0];
|
||||
}
|
||||
|
||||
static struct rptun_rsc_s *
|
||||
sim_rptun_get_resource(struct rptun_dev_s *dev)
|
||||
{
|
||||
@@ -101,18 +111,22 @@ sim_rptun_get_resource(struct rptun_dev_s *dev)
|
||||
|
||||
priv->shmem = host_allocshmem(priv->shmemname,
|
||||
sizeof(*priv->shmem));
|
||||
|
||||
if (!priv->shmem)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
priv->raddrenv[0].da = 0;
|
||||
priv->raddrenv[0].size = sizeof(*priv->shmem);
|
||||
|
||||
if (priv->master)
|
||||
{
|
||||
struct rptun_rsc_s *rsc = &priv->shmem->rsc;
|
||||
memset(priv->shmem->buf, 0, sizeof(priv->shmem->buf));
|
||||
memset(rsc, 0, sizeof(struct rptun_rsc_s));
|
||||
|
||||
priv->raddrenv[0].pa = (uintptr_t)priv->shmem;
|
||||
|
||||
rsc->rsc_tbl_hdr.ver = 1;
|
||||
rsc->rsc_tbl_hdr.num = 1;
|
||||
rsc->offset[0] = offsetof(struct rptun_rsc_s,
|
||||
@@ -164,11 +178,13 @@ sim_rptun_get_resource(struct rptun_dev_s *dev)
|
||||
usleep(1000);
|
||||
}
|
||||
|
||||
priv->shmem->boots = SIM_RPTUN_STATUS_OK;
|
||||
priv->raddrenv[0].pa = (uintptr_t)priv->shmem->base;
|
||||
|
||||
priv->addrenv[0].va = (uintptr_t)priv->shmem;
|
||||
priv->addrenv[0].pa = priv->shmem->base;
|
||||
priv->addrenv[0].size = sizeof(*priv->shmem);
|
||||
priv->shmem->boots = SIM_RPTUN_STATUS_OK;
|
||||
|
||||
priv->addrenv[0].va = (uintptr_t)priv->shmem;
|
||||
priv->addrenv[0].pa = priv->shmem->base;
|
||||
priv->addrenv[0].size = sizeof(*priv->shmem);
|
||||
|
||||
simple_addrenv_initialize(&priv->addrenv[0]);
|
||||
}
|
||||
@@ -365,6 +381,7 @@ static void sim_rptun_work(wdparm_t arg)
|
||||
static const struct rptun_ops_s g_sim_rptun_ops =
|
||||
{
|
||||
.get_cpuname = sim_rptun_get_cpuname,
|
||||
.get_addrenv = sim_rptun_get_addrenv,
|
||||
.get_resource = sim_rptun_get_resource,
|
||||
.is_autostart = sim_rptun_is_autostart,
|
||||
.is_master = sim_rptun_is_master,
|
||||
|
||||
Reference in New Issue
Block a user