+
+/** @} */
+
+/**
+ * @defgroup EXTERNAL_REGION External region APIs
+ * @ingroup libmemif
+ *
+ * @{
+ */
+
+/** \brief Get external buffer offset (optional)
+ @param private_ctx - private context
+
+ Find unallocated external buffer and return its offset.
+*/
+typedef uint32_t (memif_get_external_buffer_offset_t) (void *private_ctx);
+
+/** \brief Add external region
+ @param[out] addr - region address
+ @param size - requested region size
+ @param fd[out] - file descriptor
+ @param private_ctx - private context
+
+ Called by slave. Add external region created by client.
+*/
+typedef int (memif_add_external_region_t) (void * *addr, uint32_t size,
+ int *fd, void *private_ctx);
+
+/** \brief Get external region address
+ @param size - requested region size
+ @param fd - file descriptor
+ @param private_ctx - private context
+
+ Called by master. Get region address from client.
+
+ \return region address
+*/
+typedef void *(memif_get_external_region_addr_t) (uint32_t size, int fd,
+ void *private_ctx);
+
+/** \brief Delete external region
+ @param addr - region address
+ @param size - region size
+ @param fd - file descriptor
+ @param private_ctx - private context
+
+ Delete external region.
+*/
+typedef int (memif_del_external_region_t) (void *addr, uint32_t size, int fd,
+ void *private_ctx);
+
+/** \brief Register external region
+ @param ar - add external region callback
+ @param gr - get external region addr callback
+ @param dr - delete external region callback
+ @param go - get external buffer offset callback (optional)
+*/
+void memif_register_external_region (memif_add_external_region_t * ar,
+ memif_get_external_region_addr_t * gr,
+ memif_del_external_region_t * dr,
+ memif_get_external_buffer_offset_t * go);
+