apps: Convert examples to rpmsg_get_{tx,rx}_buffer_size()

The contents of app() in these examples is given a rpmsg_device. We should
not have to know about the backing transport layer. We assume it is virtio
and call into the virtio layer to get the buffer size. This information is
now available from the rpmsg layer. Use those functions to make the app()
agnostic to the backing layer.

Signed-off-by: Andrew Davis <afd@ti.com>
This commit is contained in:
Andrew Davis
2024-04-09 09:20:43 +02:00
committed by Arnaud Pouliquen
parent 52c27fbd91
commit 89a8a3002f
6 changed files with 67 additions and 61 deletions
+2 -2
View File
@@ -76,8 +76,8 @@ int app(struct rpmsg_device *rdev, void *priv)
LPRINTF("Successfully created rpmsg endpoint.\r\n");
LPRINTF("RPMsg device TX buffer size: %#x\r\n", rpmsg_virtio_get_tx_buffer_size(rdev));
LPRINTF("RPMsg device RX buffer size: %#x\r\n", rpmsg_virtio_get_rx_buffer_size(rdev));
LPRINTF("RPMsg device TX buffer size: %#x\r\n", rpmsg_get_tx_buffer_size(&lept));
LPRINTF("RPMsg device RX buffer size: %#x\r\n", rpmsg_get_rx_buffer_size(&lept));
while(1) {
platform_poll(priv);
+16 -15
View File
@@ -103,9 +103,20 @@ int app (struct rpmsg_device *rdev, void *priv)
LPRINTF(" 1 - Send data to remote core, retrieve the echo");
LPRINTF(" and validate its integrity ..\r\n");
max_size = rpmsg_virtio_get_buffer_size(rdev);
if (max_size < 0) {
/* Create RPMsg endpoint */
ret = rpmsg_create_ept(&lept, rdev, RPMSG_SERVICE_NAME,
RPMSG_ADDR_ANY, RPMSG_ADDR_ANY,
rpmsg_endpoint_cb, rpmsg_service_unbind);
if (ret) {
LPERROR("Failed to create RPMsg endpoint.\r\n");
return ret;
}
max_size = rpmsg_get_tx_buffer_size(&lept);
if (max_size <= 0) {
LPERROR("No available buffer size.\r\n");
rpmsg_destroy_ept(&lept);
return -1;
}
max_size -= sizeof(struct _payload);
@@ -116,22 +127,12 @@ int app (struct rpmsg_device *rdev, void *priv)
if (!i_payload) {
LPERROR("memory allocation failed.\r\n");
rpmsg_destroy_ept(&lept);
return -1;
}
/* Create RPMsg endpoint */
ret = rpmsg_create_ept(&lept, rdev, RPMSG_SERVICE_NAME,
RPMSG_ADDR_ANY, RPMSG_ADDR_ANY,
rpmsg_endpoint_cb, rpmsg_service_unbind);
if (ret) {
LPERROR("Failed to create RPMsg endpoint.\r\n");
metal_free_memory(i_payload);
return ret;
}
LPRINTF("RPMsg driver TX buffer size: %#x\r\n", rpmsg_virtio_get_tx_buffer_size(rdev));
LPRINTF("RPMsg driver RX buffer size: %#x\r\n", rpmsg_virtio_get_rx_buffer_size(rdev));
LPRINTF("RPMsg device TX buffer size: %#x\r\n", rpmsg_get_tx_buffer_size(&lept));
LPRINTF("RPMsg device RX buffer size: %#x\r\n", rpmsg_get_rx_buffer_size(&lept));
while (!is_rpmsg_ept_ready(&lept))
platform_poll(priv);
+10 -9
View File
@@ -122,14 +122,6 @@ static int app(struct rpmsg_device *rdev, void *priv)
LPRINTF(" 1 - Send data to remote core, retrieve the echo");
LPRINTF(" and validate its integrity ..\r\n");
max_size = rpmsg_virtio_get_buffer_size(rdev);
if ((int32_t)max_size < 0) {
LPERROR("No available buffer size.\r\n");
return -1;
}
max_size -= sizeof(struct _payload);
num_payloads = max_size - PAYLOAD_MIN_SIZE + 1;
/* Create RPMsg endpoint */
ret = rpmsg_create_ept(&lept, rdev, RPMSG_SERVICE_NAME,
RPMSG_ADDR_ANY, RPMSG_ADDR_ANY,
@@ -142,8 +134,17 @@ static int app(struct rpmsg_device *rdev, void *priv)
while (!is_rpmsg_ept_ready(&lept))
platform_poll(priv);
LPRINTF("RPMSG endpoint is binded with remote.\r\n");
max_size = rpmsg_get_tx_buffer_size(&lept);
if ((int32_t)max_size <= 0) {
LPERROR("No available buffer size.\r\n");
rpmsg_destroy_ept(&lept);
return -1;
}
max_size -= sizeof(struct _payload);
num_payloads = max_size - PAYLOAD_MIN_SIZE + 1;
for (i = 0, size = PAYLOAD_MIN_SIZE; i < num_payloads; i++, size++) {
struct _payload *i_payload;
+15 -13
View File
@@ -116,18 +116,6 @@ int app (struct rpmsg_device *rdev, void *priv)
LPRINTF(" and validate its integrity ..\r\n");
num_pkgs = NUMS_PACKAGES;
max_size = rpmsg_virtio_get_buffer_size(rdev);
if (max_size < 0) {
LPERROR("No available buffer size.\r\n");
return -1;
}
i_payload = (struct _payload *)metal_allocate_memory(max_size);
if (!i_payload) {
LPERROR("memory allocation failed.\r\n");
return -1;
}
max_size -= sizeof(struct _payload);
/* Create RPMsg endpoint */
ret = rpmsg_create_ept(&lept, rdev, RPMSG_SERVICE_NAME, APP_EPT_ADDR,
@@ -135,7 +123,6 @@ int app (struct rpmsg_device *rdev, void *priv)
rpmsg_endpoint_cb, rpmsg_service_unbind);
if (ret) {
LPERROR("Failed to create RPMsg endpoint.\r\n");
metal_free_memory(i_payload);
return ret;
}
@@ -143,6 +130,21 @@ int app (struct rpmsg_device *rdev, void *priv)
platform_poll(priv);
LPRINTF("RPMSG endpoint is binded with remote.\r\n");
max_size = rpmsg_get_tx_buffer_size(&lept);
if (max_size <= 0) {
LPERROR("No available buffer size.\r\n");
rpmsg_destroy_ept(&lept);
return -1;
}
i_payload = (struct _payload *)metal_allocate_memory(max_size);
if (!i_payload) {
LPERROR("memory allocation failed.\r\n");
rpmsg_destroy_ept(&lept);
return -1;
}
max_size -= sizeof(struct _payload);
memset(&(i_payload->data[0]), 0xA5, max_size);
for (s = PAYLOAD_MIN_SIZE; s <= max_size; s++) {
int size;
+9 -8
View File
@@ -132,14 +132,6 @@ int app(struct rpmsg_device *rdev, void *priv)
int expect_rnum = 0;
void *buff_list[MAX_NB_TX_BUFF];
max_size = rpmsg_virtio_get_buffer_size(rdev);
if (((int)max_size) < 0) {
LPERROR("No available buffer size.\r\n");
return -1;
}
max_size -= sizeof(struct _payload);
num_payloads = max_size - PAYLOAD_MIN_SIZE + 1;
/* Create RPMsg endpoint */
ret = rpmsg_create_ept(&lept, rdev, RPMSG_SERVICE_NAME,
RPMSG_ADDR_ANY, RPMSG_ADDR_ANY,
@@ -155,6 +147,15 @@ int app(struct rpmsg_device *rdev, void *priv)
LPRINTF("RPMSG endpoint is binded with remote.\r\n");
max_size = rpmsg_get_tx_buffer_size(&lept);
if (((int)max_size) <= 0) {
LPERROR("No available buffer size.\r\n");
rpmsg_destroy_ept(&lept);
return -1;
}
max_size -= sizeof(struct _payload);
num_payloads = max_size - PAYLOAD_MIN_SIZE + 1;
LPRINTF(" 1 - Get some TX buffers\r\n");
for (i = 0; i < MAX_NB_TX_BUFF; i++)
buff_list[i] = rpmsg_get_tx_payload_buffer(&lept, &max_size, 1);
+15 -14
View File
@@ -108,9 +108,19 @@ int app (struct rpmsg_device *rdev, void *priv)
LPRINTF(" 1 - Send data to remote core, retrieve the echo");
LPRINTF(" and validate its integrity ..\r\n");
max_size = rpmsg_virtio_get_buffer_size(rdev);
if (max_size < 0) {
/* Create RPMsg endpoint */
ret = rpmsg_create_ept(&lept, rdev, RPMSG_SERVICE_NAME,
RPMSG_ADDR_ANY, RPMSG_ADDR_ANY,
rpmsg_endpoint_cb, rpmsg_service_unbind);
if (ret) {
LPERROR("Failed to create RPMsg endpoint.\r\n");
return ret;
}
max_size = rpmsg_get_tx_buffer_size(&lept);
if (max_size <= 0) {
LPERROR("No available buffer size.\r\n");
rpmsg_destroy_ept(&lept);
return -1;
}
max_size -= sizeof(struct _payload);
@@ -121,21 +131,12 @@ int app (struct rpmsg_device *rdev, void *priv)
if (!i_payload) {
LPERROR("memory allocation failed.\r\n");
rpmsg_destroy_ept(&lept);
return -1;
}
/* Create RPMsg endpoint */
ret = rpmsg_create_ept(&lept, rdev, RPMSG_SERVICE_NAME,
RPMSG_ADDR_ANY, RPMSG_ADDR_ANY,
rpmsg_endpoint_cb, rpmsg_service_unbind);
if (ret) {
LPERROR("Failed to create RPMsg endpoint.\r\n");
metal_free_memory(i_payload);
return ret;
}
LPRINTF("RPMsg driver TX buffer size: %#x\r\n", rpmsg_virtio_get_tx_buffer_size(rdev));
LPRINTF("RPMsg driver RX buffer size: %#x\r\n", rpmsg_virtio_get_rx_buffer_size(rdev));
LPRINTF("RPMsg device TX buffer size: %#x\r\n", rpmsg_get_tx_buffer_size(&lept));
LPRINTF("RPMsg device RX buffer size: %#x\r\n", rpmsg_get_rx_buffer_size(&lept));
while (!is_rpmsg_ept_ready(&lept))
platform_poll(priv);