The capability "phys_addr" is introduced and tells whether physical
address queries are available.
The function odpdrv_virt_to_phys() is added to query for physical address
(from virtual address)

Signed-off-by: Christophe Milard <christophe.mil...@linaro.org>
---
 platform/linux-generic/drv_shm.c                        | 12 ++++++++++++
 platform/linux-generic/include/_ishmphy_internal.h      |  3 ++-
 platform/linux-generic/include/odp/drv/plat/shm_types.h |  3 +++
 3 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/platform/linux-generic/drv_shm.c b/platform/linux-generic/drv_shm.c
index 9b2560d..6005f69 100644
--- a/platform/linux-generic/drv_shm.c
+++ b/platform/linux-generic/drv_shm.c
@@ -8,6 +8,7 @@
 #include <odp/api/std_types.h>
 #include <odp/drv/shm.h>
 #include <_ishm_internal.h>
+#include <_ishmphy_internal.h>
 
 static inline uint32_t from_handle(odpdrv_shm_t shm)
 {
@@ -24,6 +25,7 @@ int odpdrv_shm_capability(odpdrv_shm_capability_t *capa)
        capa->max_blocks = ODPDRV_CONFIG_SHM_BLOCKS;
        capa->max_size = 0;
        capa->max_align = 0;
+       capa->phys_addr = _odp_ishmphy_can_virt_to_phys();
 
        return 0;
 }
@@ -100,3 +102,13 @@ int odpdrv_shm_print_all(const char *title)
 {
        return _odp_ishm_status(title);
 }
+
+odpdrv_phys_addr_t odpdrv_virt_to_phys(const void *addr)
+{
+       return (odpdrv_phys_addr_t)_odp_ishmphy_virt_to_phys(addr);
+}
+
+void odpdrv_memmap_print(void *addr, uint64_t len)
+{
+       _odp_ishmphy_memmap_print(addr, len);
+}
diff --git a/platform/linux-generic/include/_ishmphy_internal.h 
b/platform/linux-generic/include/_ishmphy_internal.h
index c8752c0..00a5f8e 100644
--- a/platform/linux-generic/include/_ishmphy_internal.h
+++ b/platform/linux-generic/include/_ishmphy_internal.h
@@ -12,8 +12,9 @@ extern "C" {
 #endif
 
 #include <stdint.h>
+#include <odp/drv/shm.h>
 
-typedef uint64_t phys_addr_t; /* Physical address definition. */
+typedef odpdrv_phys_addr_t phys_addr_t; /* Physical address definition. */
 #define PHYS_ADDR_INVALID ((phys_addr_t)-1)
 
 void *_odp_ishmphy_book_va(uintptr_t len, intptr_t align);
diff --git a/platform/linux-generic/include/odp/drv/plat/shm_types.h 
b/platform/linux-generic/include/odp/drv/plat/shm_types.h
index c48eeca..a54d806 100644
--- a/platform/linux-generic/include/odp/drv/plat/shm_types.h
+++ b/platform/linux-generic/include/odp/drv/plat/shm_types.h
@@ -29,6 +29,9 @@ typedef ODPDRV_HANDLE_T(odpdrv_shm_t);
 
 #define ODPDRV_SHM_INVALID _odpdrv_cast_scalar(odpdrv_shm_t, 0)
 
+/* a physical address: */
+typedef uint64_t odpdrv_phys_addr_t;
+
 /** Get printable format of odpdrv_shm_t */
 static inline uint64_t odpdrv_shm_to_u64(odpdrv_shm_t hdl)
 {
-- 
2.7.4

Reply via email to