diff --git a/kernel/rpmsg/ethosu_rpmsg_capabilities.c b/kernel/rpmsg/ethosu_rpmsg_capabilities.c
index 73ce2dc..3c21d3e 100644
--- a/kernel/rpmsg/ethosu_rpmsg_capabilities.c
+++ b/kernel/rpmsg/ethosu_rpmsg_capabilities.c
@@ -41,16 +41,17 @@
  * Functions
  ****************************************************************************/
 
-static inline int ethosu_capabilities_send(struct ethosu_capabilities *cap,
-					   struct ethosu_mailbox *mailbox)
+static inline int ethosu_rpmsg_capabilities_send(
+	struct ethosu_rpmsg_capabilities *cap,
+	struct ethosu_rpmsg_mailbox *mailbox)
 {
-	return ethosu_mailbox_capabilities_request(mailbox,
-						   &cap->msg);
+	return ethosu_rpmsg_mailbox_capabilities_request(mailbox,
+							 &cap->msg);
 }
 
-static void ethosu_capabilities_fail(struct ethosu_mailbox_msg *msg)
+static void ethosu_rpmsg_capabilities_fail(struct ethosu_rpmsg_mailbox_msg *msg)
 {
-	struct ethosu_capabilities *cap =
+	struct ethosu_rpmsg_capabilities *cap =
 		container_of(msg, typeof(*cap), msg);
 
 	if (completion_done(&cap->done))
@@ -60,16 +61,16 @@
 	complete(&cap->done);
 }
 
-void ethosu_capability_rsp(struct ethosu_mailbox *mailbox,
+void ethosu_capability_rsp(struct ethosu_rpmsg_mailbox *mailbox,
 			   int msg_id,
-			   struct ethosu_core_msg_capabilities_rsp *rsp)
+			   struct ethosu_rpmsg_capabilities_rsp *rsp)
 {
 	struct device *dev = mailbox->dev;
-	struct ethosu_mailbox_msg *msg;
-	struct ethosu_capabilities *cap;
+	struct ethosu_rpmsg_mailbox_msg *msg;
+	struct ethosu_rpmsg_capabilities *cap;
 
-	msg = ethosu_mailbox_find(mailbox, msg_id,
-				  ETHOSU_CORE_MSG_CAPABILITIES_REQ);
+	msg = ethosu_rpmsg_mailbox_find(mailbox, msg_id,
+					ETHOSU_RPMSG_CAPABILITIES_REQ);
 	if (IS_ERR(msg)) {
 		dev_warn(dev,
 			 "Id for capabilities msg not found. Id=0x%0x: %ld\n",
@@ -101,15 +102,15 @@
 	complete(&cap->done);
 }
 
-int ethosu_capabilities_request(struct device *dev,
-				struct ethosu_mailbox *mailbox,
-				struct ethosu_uapi_device_capabilities *uapi)
+int ethosu_rpmsg_capabilities_request(struct device *dev,
+				      struct ethosu_rpmsg_mailbox *mailbox,
+				      struct ethosu_uapi_device_capabilities *uapi)
 {
-	struct ethosu_capabilities *cap;
+	struct ethosu_rpmsg_capabilities *cap;
 	int ret;
 	int timeout;
 
-	cap = devm_kzalloc(dev, sizeof(struct ethosu_capabilities),
+	cap = devm_kzalloc(dev, sizeof(struct ethosu_rpmsg_capabilities),
 			   GFP_KERNEL);
 	if (!cap)
 		return -ENOMEM;
@@ -117,16 +118,16 @@
 	cap->dev = dev;
 	cap->uapi = uapi;
 	init_completion(&cap->done);
-	cap->msg.fail = ethosu_capabilities_fail;
+	cap->msg.fail = ethosu_rpmsg_capabilities_fail;
 
-	ret = ethosu_mailbox_register(mailbox, &cap->msg);
+	ret = ethosu_rpmsg_mailbox_register(mailbox, &cap->msg);
 	if (ret < 0)
 		goto kfree;
 
 	dev_dbg(dev, "Capabilities create. Id=%d, handle=0x%p\n",
 		cap->msg.id, cap);
 
-	ret = ethosu_capabilities_send(cap, mailbox);
+	ret = ethosu_rpmsg_capabilities_send(cap, mailbox);
 	if (0 != ret)
 		goto deregister;
 
@@ -153,7 +154,7 @@
 	}
 
 deregister:
-	ethosu_mailbox_deregister(mailbox, &cap->msg);
+	ethosu_rpmsg_mailbox_deregister(mailbox, &cap->msg);
 
 kfree:
 	dev_dbg(dev, "Capabilities destroy. Id=%d, handle=0x%p\n",
