diff --git a/arch/arm/src/imx9/imx9_rptun.c b/arch/arm/src/imx9/imx9_rptun.c index c80093beac3..c221c82a5a7 100644 --- a/arch/arm/src/imx9/imx9_rptun.c +++ b/arch/arm/src/imx9/imx9_rptun.c @@ -80,7 +80,8 @@ static const char *imx9_rptun_get_cpuname(struct rptun_dev_s *dev); static const char *imx9_rptun_get_firmware(struct rptun_dev_s *dev); static const struct rptun_addrenv_s * imx9_rptun_get_addrenv(struct rptun_dev_s *dev); -static struct rptun_rsc_s *imx9_rptun_get_resource(struct rptun_dev_s *dev); +static struct resource_table * +imx9_rptun_get_resource(struct rptun_dev_s *dev); static bool imx9_rptun_is_autostart(struct rptun_dev_s *dev); static bool imx9_rptun_is_master(struct rptun_dev_s *dev); static int imx9_rptun_start(struct rptun_dev_s *dev); @@ -149,14 +150,15 @@ imx9_rptun_get_addrenv(struct rptun_dev_s *dev) * Name: imx9_rptun_get_resource ****************************************************************************/ -static struct rptun_rsc_s *imx9_rptun_get_resource(struct rptun_dev_s *dev) +static struct resource_table * +imx9_rptun_get_resource(struct rptun_dev_s *dev) { struct imx9_rptun_dev_s *priv = container_of(dev, struct imx9_rptun_dev_s, rptun); if (priv->shmem != NULL) { - return &priv->shmem->rsc; + return &priv->shmem->rsc.rsc_tbl_hdr; } priv->shmem = (struct imx9_rptun_shmem_s *)VRING_SHMEM; @@ -166,7 +168,7 @@ static struct rptun_rsc_s *imx9_rptun_get_resource(struct rptun_dev_s *dev) imx9_rsctable_copy(); } - return &priv->shmem->rsc; + return &priv->shmem->rsc.rsc_tbl_hdr; } /**************************************************************************** diff --git a/arch/arm/src/imx9/imx9_rsctable.c b/arch/arm/src/imx9/imx9_rsctable.c index 70f54caaf1a..937f6ff7e08 100644 --- a/arch/arm/src/imx9/imx9_rsctable.c +++ b/arch/arm/src/imx9/imx9_rsctable.c @@ -27,6 +27,7 @@ #include "imx9_rsctable.h" #include +#include /**************************************************************************** * Pre-processor Definitions @@ -40,7 +41,8 @@ #define RESOURCE_TABLE_BASE 0x88220000 #define NO_RESOURCE_ENTRIES (1) -#define RSC_VDEV_FEATURE_NS (1) /* Support name service announcement */ +#define RSC_VDEV_FEATURE (1 << VIRTIO_RPMSG_F_NS | \ + 1 << VIRTIO_RPMSG_F_CPUNAME) #define IMX9_RSC_TABLE_VERSION (1) /**************************************************************************** @@ -81,7 +83,7 @@ const struct rptun_rsc_s g_imx9_rsc_table = RSC_VDEV, 7, 2, - RSC_VDEV_FEATURE_NS, + RSC_VDEV_FEATURE, 0, 0, 0, @@ -111,7 +113,8 @@ const struct rptun_rsc_s g_imx9_rsc_table = .config = { - 0 + .host_cpuname = "netcore", + .remote_cpuname = "nuttx" } }; diff --git a/arch/arm/src/mx8mp/mx8mp_rptun.c b/arch/arm/src/mx8mp/mx8mp_rptun.c index 666d93009a8..0cee2454a5c 100644 --- a/arch/arm/src/mx8mp/mx8mp_rptun.c +++ b/arch/arm/src/mx8mp/mx8mp_rptun.c @@ -84,7 +84,7 @@ static const char *mx8mp_rptun_get_cpuname(struct rptun_dev_s *dev); static const char *mx8mp_rptun_get_firmware(struct rptun_dev_s *dev); static const struct rptun_addrenv_s * mx8mp_rptun_get_addrenv(struct rptun_dev_s *dev); -static struct rptun_rsc_s * +static struct resource_table * mx8mp_rptun_get_resource(struct rptun_dev_s *dev); static bool mx8mp_rptun_is_autostart(struct rptun_dev_s *dev); static bool mx8mp_rptun_is_master(struct rptun_dev_s *dev); @@ -154,14 +154,15 @@ mx8mp_rptun_get_addrenv(struct rptun_dev_s *dev) * Name: mx8mp_rptun_get_resource ****************************************************************************/ -static struct rptun_rsc_s *mx8mp_rptun_get_resource(struct rptun_dev_s *dev) +static struct resource_table * +mx8mp_rptun_get_resource(struct rptun_dev_s *dev) { struct mx8mp_rptun_dev_s *priv = container_of(dev, struct mx8mp_rptun_dev_s, rptun); if (priv->shmem != NULL) { - return &priv->shmem->rsc; + return &priv->shmem->rsc.rsc_tbl_hdr; } priv->shmem = (struct mx8mp_rptun_shmem_s *)VRING_SHMEM; @@ -171,7 +172,7 @@ static struct rptun_rsc_s *mx8mp_rptun_get_resource(struct rptun_dev_s *dev) mx8mp_copy_rsc_table(); } - return &priv->shmem->rsc; + return &priv->shmem->rsc.rsc_tbl_hdr; } /**************************************************************************** diff --git a/arch/arm/src/mx8mp/mx8mp_rsctable.c b/arch/arm/src/mx8mp/mx8mp_rsctable.c index 0210b147442..0a3fc9742fc 100644 --- a/arch/arm/src/mx8mp/mx8mp_rsctable.c +++ b/arch/arm/src/mx8mp/mx8mp_rsctable.c @@ -26,6 +26,8 @@ #include "mx8mp_rsctable.h" #include +#include +#include /**************************************************************************** * Pre-processor Definitions @@ -39,7 +41,8 @@ #define VRING_SIZE 0x8000 #define NO_RESOURCE_ENTRIES (1) -#define RSC_VDEV_FEATURE_NS (1) /* Support name service announcement */ +#define RSC_VDEV_FEATURE (1 << VIRTIO_RPMSG_F_NS | \ + 1 << VIRTIO_RPMSG_F_CPUNAME) #define MX8MP_RSC_TABLE_VERSION (1) /**************************************************************************** @@ -80,7 +83,7 @@ const struct rptun_rsc_s g_mx8mp_rsc_table = RSC_VDEV, 7, 2, - RSC_VDEV_FEATURE_NS, + RSC_VDEV_FEATURE, 0, 0, 0, @@ -110,8 +113,9 @@ const struct rptun_rsc_s g_mx8mp_rsc_table = .config = { - 0 - } + .host_cpuname = "netcore", + .remote_cpuname = "nuttx", + }, }; /**************************************************************************** diff --git a/arch/arm/src/nrf53/nrf53_rptun.c b/arch/arm/src/nrf53/nrf53_rptun.c index c99315abb9f..1f0d49a7366 100644 --- a/arch/arm/src/nrf53/nrf53_rptun.c +++ b/arch/arm/src/nrf53/nrf53_rptun.c @@ -102,7 +102,7 @@ struct nrf53_rptun_dev_s ****************************************************************************/ static const char *nrf53_rptun_get_cpuname(struct rptun_dev_s *dev); -static struct rptun_rsc_s * +static struct resource_table * nrf53_rptun_get_resource(struct rptun_dev_s *dev); static bool nrf53_rptun_is_autostart(struct rptun_dev_s *dev); static bool nrf53_rptun_is_master(struct rptun_dev_s *dev); @@ -167,7 +167,7 @@ static const char *nrf53_rptun_get_cpuname(struct rptun_dev_s *dev) * Name: nrf53_rptun_get_resource ****************************************************************************/ -static struct rptun_rsc_s * +static struct resource_table * nrf53_rptun_get_resource(struct rptun_dev_s *dev) { struct nrf53_rptun_dev_s *priv = container_of(dev, @@ -176,7 +176,7 @@ nrf53_rptun_get_resource(struct rptun_dev_s *dev) if (priv->shmem != NULL) { - return &priv->shmem->rsc; + return &priv->shmem->rsc.rsc_tbl_hdr; } #ifdef CONFIG_NRF53_APPCORE @@ -194,7 +194,7 @@ nrf53_rptun_get_resource(struct rptun_dev_s *dev) priv->shmem->base = (uintptr_t)priv->shmem; rsc->rsc_tbl_hdr.ver = 1; - rsc->rsc_tbl_hdr.num = 1; + rsc->rsc_tbl_hdr.num = 2; rsc->rsc_tbl_hdr.reserved[0] = 0; rsc->rsc_tbl_hdr.reserved[1] = 0; rsc->offset[0] = offsetof(struct rptun_rsc_s, @@ -204,7 +204,8 @@ nrf53_rptun_get_resource(struct rptun_dev_s *dev) rsc->rpmsg_vdev.id = VIRTIO_ID_RPMSG; rsc->rpmsg_vdev.dfeatures = 1 << VIRTIO_RPMSG_F_NS | 1 << VIRTIO_RPMSG_F_ACK - | 1 << VIRTIO_RPMSG_F_BUFSZ; + | 1 << VIRTIO_RPMSG_F_BUFSZ + | 1 << VIRTIO_RPMSG_F_CPUNAME; rsc->rpmsg_vdev.config_len = sizeof(struct fw_rsc_config); rsc->rpmsg_vdev.num_of_vrings = VRINGS; @@ -216,6 +217,23 @@ nrf53_rptun_get_resource(struct rptun_dev_s *dev) rsc->rpmsg_vring1.notifyid = VRING1_NOTIFYID; rsc->config.r2h_buf_size = VRING_SIZE; rsc->config.h2r_buf_size = VRING_SIZE; + strlcpy((char *)rsc->config.host_cpuname, "appcore", + VIRTIO_RPMSG_CPUNAME_SIZE); + strlcpy((char *)rsc->config.remote_cpuname, "netcore", + VIRTIO_RPMSG_CPUNAME_SIZE); + + /* Carveout, reserved 512 for vring descriptors and memory + * management header + */ + + rsc->offset[1] = offsetof(struct rptun_rsc_s, + carveout); + rsc->carveout.type = RSC_CARVEOUT; + rsc->carveout.da = (uintptr_t)rsc + ALIGN_UP(sizeof + (struct rptun_rsc_s), VRING_ALIGN); + rsc->carveout.pa = FW_RSC_U32_ADDR_ANY; + rsc->carveout.len = VRING_SIZE * VRING_NR * VRINGS + 512; + memcpy(rsc->carveout.name, "vdev0buffer", 11); } else { @@ -227,7 +245,7 @@ nrf53_rptun_get_resource(struct rptun_dev_s *dev) } } - return &priv->shmem->rsc; + return &priv->shmem->rsc.rsc_tbl_hdr; } /**************************************************************************** diff --git a/arch/arm/src/stm32h7/stm32_rptun.c b/arch/arm/src/stm32h7/stm32_rptun.c index 0c9584a8079..4646171defa 100644 --- a/arch/arm/src/stm32h7/stm32_rptun.c +++ b/arch/arm/src/stm32h7/stm32_rptun.c @@ -108,7 +108,7 @@ struct stm32_rptun_dev_s ****************************************************************************/ static const char *stm32_rptun_get_cpuname(struct rptun_dev_s *dev); -static struct rptun_rsc_s * +static struct resource_table * stm32_rptun_get_resource(struct rptun_dev_s *dev); static bool stm32_rptun_is_autostart(struct rptun_dev_s *dev); static bool stm32_rptun_is_master(struct rptun_dev_s *dev); @@ -173,7 +173,7 @@ static const char *stm32_rptun_get_cpuname(struct rptun_dev_s *dev) * Name: stm32_rptun_get_resource ****************************************************************************/ -static struct rptun_rsc_s * +static struct resource_table * stm32_rptun_get_resource(struct rptun_dev_s *dev) { struct stm32_rptun_dev_s *priv = container_of(dev, @@ -182,7 +182,7 @@ stm32_rptun_get_resource(struct rptun_dev_s *dev) if (priv->shmem != NULL) { - return &priv->shmem->rsc; + return &priv->shmem->rsc.rsc_tbl_hdr; } #ifdef CONFIG_ARCH_CHIP_STM32H7_CORTEXM7 @@ -197,7 +197,7 @@ stm32_rptun_get_resource(struct rptun_dev_s *dev) rsc = &priv->shmem->rsc; rsc->rsc_tbl_hdr.ver = 1; - rsc->rsc_tbl_hdr.num = 1; + rsc->rsc_tbl_hdr.num = 2; rsc->rsc_tbl_hdr.reserved[0] = 0; rsc->rsc_tbl_hdr.reserved[1] = 0; rsc->offset[0] = offsetof(struct rptun_rsc_s, @@ -207,7 +207,8 @@ stm32_rptun_get_resource(struct rptun_dev_s *dev) rsc->rpmsg_vdev.id = VIRTIO_ID_RPMSG; rsc->rpmsg_vdev.dfeatures = 1 << VIRTIO_RPMSG_F_NS | 1 << VIRTIO_RPMSG_F_ACK - | 1 << VIRTIO_RPMSG_F_BUFSZ; + | 1 << VIRTIO_RPMSG_F_BUFSZ + | 1 << VIRTIO_RPMSG_F_CPUNAME; rsc->rpmsg_vdev.config_len = sizeof(struct fw_rsc_config); rsc->rpmsg_vdev.num_of_vrings = VRINGS; @@ -219,6 +220,23 @@ stm32_rptun_get_resource(struct rptun_dev_s *dev) rsc->rpmsg_vring1.notifyid = VRING1_NOTIFYID; rsc->config.r2h_buf_size = VRING_SIZE; rsc->config.h2r_buf_size = VRING_SIZE; + strlcpy((char *)rsc->config.host_cpuname, "cm7", + VIRTIO_RPMSG_CPUNAME_SIZE); + strlcpy((char *)rsc->config.remote_cpuname, "cm4", + VIRTIO_RPMSG_CPUNAME_SIZE); + + /* Carveout, reserved 512 for vrings descriptors and memory + * management header + */ + + rsc->offset[1] = offsetof(struct rptun_rsc_s, + carveout); + rsc->carveout.type = RSC_CARVEOUT; + rsc->carveout.da = (uintptr_t)rsc + ALIGN_UP(sizeof + (struct rptun_rsc_s), VRING_ALIGN); + rsc->carveout.pa = FW_RSC_U32_ADDR_ANY; + rsc->carveout.len = VRING_SIZE * VRING_NR * VRINGS + 512; + memcpy(rsc->carveout.name, "vdev0buffer", 11); priv->shmem->base = (uintptr_t)priv->shmem; } @@ -232,7 +250,7 @@ stm32_rptun_get_resource(struct rptun_dev_s *dev) } } - return &priv->shmem->rsc; + return &priv->shmem->rsc.rsc_tbl_hdr; } /**************************************************************************** diff --git a/arch/risc-v/src/k230/k230_rptun.c b/arch/risc-v/src/k230/k230_rptun.c index 810a778d533..b740dafccb2 100644 --- a/arch/risc-v/src/k230/k230_rptun.c +++ b/arch/risc-v/src/k230/k230_rptun.c @@ -132,7 +132,7 @@ struct k230_rptun_dev_s ****************************************************************************/ static const char *rp_get_cpuname(struct rptun_dev_s *dev); -static struct rptun_rsc_s *rp_get_resource(struct rptun_dev_s *dev); +static struct resource_table *rp_get_resource(struct rptun_dev_s *dev); static bool rp_is_autostart(struct rptun_dev_s *dev); static bool rp_is_master(struct rptun_dev_s *dev); static int rp_start(struct rptun_dev_s *dev); @@ -173,14 +173,14 @@ static const char *rp_get_cpuname(struct rptun_dev_s *dev) return priv->peername; } -static struct rptun_rsc_s *rp_get_resource(struct rptun_dev_s *dev) +static struct resource_table *rp_get_resource(struct rptun_dev_s *dev) { struct k230_rptun_dev_s *priv = as_k230_rptun_dev(dev); struct rptun_rsc_s *rsc; if (priv->shmem != NULL) { - return &priv->shmem->rsc; + return &priv->shmem->rsc.rsc_tbl_hdr; } priv->shmem = SHMEM; @@ -192,7 +192,7 @@ static struct rptun_rsc_s *rp_get_resource(struct rptun_dev_s *dev) rsc = &priv->shmem->rsc; rsc->rsc_tbl_hdr.ver = 1; - rsc->rsc_tbl_hdr.num = 1; + rsc->rsc_tbl_hdr.num = 2; rsc->rsc_tbl_hdr.reserved[0] = 0; rsc->rsc_tbl_hdr.reserved[1] = 0; rsc->offset[0] = offsetof(struct rptun_rsc_s, @@ -202,7 +202,8 @@ static struct rptun_rsc_s *rp_get_resource(struct rptun_dev_s *dev) rsc->rpmsg_vdev.id = VIRTIO_ID_RPMSG; rsc->rpmsg_vdev.dfeatures = 1 << VIRTIO_RPMSG_F_NS | 1 << VIRTIO_RPMSG_F_ACK - | 1 << VIRTIO_RPMSG_F_BUFSZ; + | 1 << VIRTIO_RPMSG_F_BUFSZ + | 1 << VIRTIO_RPMSG_F_CPUNAME; rsc->rpmsg_vdev.config_len = sizeof(struct fw_rsc_config); rsc->rpmsg_vdev.num_of_vrings = VRINGS; @@ -214,6 +215,23 @@ static struct rptun_rsc_s *rp_get_resource(struct rptun_dev_s *dev) rsc->rpmsg_vring1.notifyid = VRING1_NOTIFYID; rsc->config.r2h_buf_size = VRING_SIZE; rsc->config.h2r_buf_size = VRING_SIZE; + strlcpy((char *)rsc->config.host_cpuname, "master", + VIRTIO_RPMSG_CPUNAME_SIZE); + strlcpy((char *)rsc->config.remote_cpuname, "remote", + VIRTIO_RPMSG_CPUNAME_SIZE); + + /* Carveout, reserved 512 for vrings descriptors and memory + * management header + */ + + rsc->offset[1] = offsetof(struct rptun_rsc_s, + carveout); + rsc->carveout.type = RSC_CARVEOUT; + rsc->carveout.da = (uintptr_t)rsc + ALIGN_UP(sizeof + (struct rptun_rsc_s), VRING_ALIGN); + rsc->carveout.pa = FW_RSC_U32_ADDR_ANY; + rsc->carveout.len = VRING_SIZE * VRING_NR * VRINGS + 512; + memcpy(rsc->carveout.name, "vdev0buffer", 11); priv->shmem->base = (uintptr_t)priv->shmem; @@ -232,7 +250,7 @@ static struct rptun_rsc_s *rp_get_resource(struct rptun_dev_s *dev) rpinfo("shmem:%lx, dev:%p\n", priv->shmem->base, dev); } - return &priv->shmem->rsc; + return &priv->shmem->rsc.rsc_tbl_hdr; } static bool rp_is_autostart(struct rptun_dev_s *dev) diff --git a/arch/risc-v/src/mpfs/mpfs_ihc.c b/arch/risc-v/src/mpfs/mpfs_ihc.c index 84dcd92a258..8da7a169b5f 100644 --- a/arch/risc-v/src/mpfs/mpfs_ihc.c +++ b/arch/risc-v/src/mpfs/mpfs_ihc.c @@ -81,7 +81,7 @@ /* rptun initialization names */ -#define MPFS_RPTUN_CPU_NAME "mpfs-ihc" +#define MPFS_RPTUN_CPU_NAME "mpfsihc" /* Vring configuration parameters */ @@ -147,7 +147,8 @@ struct mpfs_ihc_work_arg_s ****************************************************************************/ static const char *mpfs_rptun_get_cpuname(struct rptun_dev_s *dev); -static struct rptun_rsc_s *mpfs_rptun_get_resource(struct rptun_dev_s *dev); +static struct resource_table * +mpfs_rptun_get_resource(struct rptun_dev_s *dev); static bool mpfs_rptun_is_autostart(struct rptun_dev_s *dev); static bool mpfs_rptun_is_master(struct rptun_dev_s *dev); static int mpfs_rptun_start(struct rptun_dev_s *dev); @@ -845,7 +846,7 @@ static const char *mpfs_rptun_get_cpuname(struct rptun_dev_s *dev) * ****************************************************************************/ -static struct rptun_rsc_s * +static struct resource_table * mpfs_rptun_get_resource(struct rptun_dev_s *dev) { struct mpfs_rptun_dev_s *priv = container_of(dev, @@ -857,7 +858,7 @@ mpfs_rptun_get_resource(struct rptun_dev_s *dev) if (priv->shmem != NULL) { - return &priv->shmem->rsc; + return &priv->shmem->rsc.rsc_tbl_hdr; } else { @@ -876,10 +877,12 @@ mpfs_rptun_get_resource(struct rptun_dev_s *dev) rsc->rpmsg_vdev.id = VIRTIO_ID_RPMSG; rsc->rpmsg_vdev.notifyid = VDEV_NOTIFYID; rsc->rpmsg_vdev.dfeatures = 1 << VIRTIO_RPMSG_F_NS | - 1 << VIRTIO_RPMSG_F_ACK; + 1 << VIRTIO_RPMSG_F_ACK | + 1 << VIRTIO_RPMSG_F_CPUNAME; rsc->rpmsg_vdev.gfeatures = 1 << VIRTIO_RPMSG_F_NS | - 1 << VIRTIO_RPMSG_F_ACK; + 1 << VIRTIO_RPMSG_F_ACK | + 1 << VIRTIO_RPMSG_F_CPUNAME; /* If the master is up already, don't clear the status here */ @@ -888,6 +891,8 @@ mpfs_rptun_get_resource(struct rptun_dev_s *dev) rsc->rpmsg_vdev.status = 0; } + rsc->rpmsg_vdev.reserved[0] = VIRTIO_DEV_DRIVER; + rsc->rpmsg_vdev.reserved[1] = 0; rsc->rpmsg_vdev.config_len = sizeof(struct fw_rsc_config); rsc->rpmsg_vdev.num_of_vrings = VRINGS; rsc->rpmsg_vring0.align = VRING_ALIGN; @@ -900,6 +905,10 @@ mpfs_rptun_get_resource(struct rptun_dev_s *dev) rsc->rpmsg_vring1.notifyid = VRING1_NOTIFYID; rsc->config.r2h_buf_size = VRING_SIZE; rsc->config.h2r_buf_size = VRING_SIZE; + strlcpy((char *)rsc->config.host_cpuname, MPFS_RPTUN_CPU_NAME, + VIRTIO_RPMSG_CPUNAME_SIZE); + strlcpy((char *)rsc->config.remote_cpuname, "nuttx", + VIRTIO_RPMSG_CPUNAME_SIZE); } /* It might be tempting to set this at mpfs_rptun_start(), but it's only @@ -914,7 +923,7 @@ mpfs_rptun_get_resource(struct rptun_dev_s *dev) up_enable_irq(g_plic_irq); - return &priv->shmem->rsc; + return &priv->shmem->rsc.rsc_tbl_hdr; } /**************************************************************************** diff --git a/arch/risc-v/src/qemu-rv/qemu_rv_rptun.c b/arch/risc-v/src/qemu-rv/qemu_rv_rptun.c index 5c4bdc21fff..8eb1d727057 100644 --- a/arch/risc-v/src/qemu-rv/qemu_rv_rptun.c +++ b/arch/risc-v/src/qemu-rv/qemu_rv_rptun.c @@ -117,7 +117,7 @@ struct qemu_rptun_dev_s ****************************************************************************/ static const char *rp_get_cpuname(struct rptun_dev_s *dev); -static struct rptun_rsc_s *rp_get_resource(struct rptun_dev_s *dev); +static struct resource_table *rp_get_resource(struct rptun_dev_s *dev); static bool rp_is_autostart(struct rptun_dev_s *dev); static bool rp_is_master(struct rptun_dev_s *dev); static int rp_start(struct rptun_dev_s *dev); @@ -201,14 +201,14 @@ static const char *rp_get_cpuname(struct rptun_dev_s *dev) return priv->peername; } -static struct rptun_rsc_s *rp_get_resource(struct rptun_dev_s *dev) +static struct resource_table *rp_get_resource(struct rptun_dev_s *dev) { struct qemu_rptun_dev_s *priv = as_qemu_rptun_dev(dev); struct rptun_rsc_s *rsc; if (priv->shmem != NULL) { - return &priv->shmem->rsc; + return &priv->shmem->rsc.rsc_tbl_hdr; } priv->shmem = SHMEM + CONFIG_QEMU_RPTUN_SHM_SIZE * priv->ndx; @@ -220,7 +220,7 @@ static struct rptun_rsc_s *rp_get_resource(struct rptun_dev_s *dev) rsc = &priv->shmem->rsc; rsc->rsc_tbl_hdr.ver = 1; - rsc->rsc_tbl_hdr.num = 1; + rsc->rsc_tbl_hdr.num = 2; rsc->rsc_tbl_hdr.reserved[0] = 0; rsc->rsc_tbl_hdr.reserved[1] = 0; rsc->offset[0] = offsetof(struct rptun_rsc_s, @@ -230,7 +230,8 @@ static struct rptun_rsc_s *rp_get_resource(struct rptun_dev_s *dev) rsc->rpmsg_vdev.id = VIRTIO_ID_RPMSG; rsc->rpmsg_vdev.dfeatures = 1 << VIRTIO_RPMSG_F_NS | 1 << VIRTIO_RPMSG_F_ACK - | 1 << VIRTIO_RPMSG_F_BUFSZ; + | 1 << VIRTIO_RPMSG_F_BUFSZ + | 1 << VIRTIO_RPMSG_F_CPUNAME; rsc->rpmsg_vdev.config_len = sizeof(struct fw_rsc_config); rsc->rpmsg_vdev.num_of_vrings = VRINGS; @@ -242,6 +243,23 @@ static struct rptun_rsc_s *rp_get_resource(struct rptun_dev_s *dev) rsc->rpmsg_vring1.notifyid = VRING1_NOTIFYID; rsc->config.r2h_buf_size = VRING_SIZE; rsc->config.h2r_buf_size = VRING_SIZE; + strlcpy((char *)rsc->config.host_cpuname, "master", + VIRTIO_RPMSG_CPUNAME_SIZE); + snprintf((char *)rsc->config.remote_cpuname, VIRTIO_RPMSG_CPUNAME_SIZE, + "remote%d", priv->ndx + 1); + + /* Carveout, reserved 512 for vrings descriptors and memory + * management header + */ + + rsc->offset[1] = offsetof(struct rptun_rsc_s, + carveout); + rsc->carveout.type = RSC_CARVEOUT; + rsc->carveout.da = (uintptr_t)rsc + ALIGN_UP(sizeof + (struct rptun_rsc_s), VRING_ALIGN); + rsc->carveout.pa = FW_RSC_U32_ADDR_ANY; + rsc->carveout.len = VRING_SIZE * VRING_NR * VRINGS + 512; + memcpy(rsc->carveout.name, "vdev0buffer", 11); priv->shmem->base = (uintptr_t)priv->shmem; } @@ -258,7 +276,7 @@ static struct rptun_rsc_s *rp_get_resource(struct rptun_dev_s *dev) } rpinfo("shmem:%p, dev:%p\n", (void *)priv->shmem->base, dev); - return &priv->shmem->rsc; + return &priv->shmem->rsc.rsc_tbl_hdr; } static bool rp_is_autostart(struct rptun_dev_s *dev)