X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvlib%2Fphysmem.h;h=a986a50b1cbb5b9c8a977804ff515297784027d4;hb=d2bfb78f4f8fbfae204424467a4106530b89e608;hp=9e7d52a62261dcf2fd289c7c74fb33685f0bf316;hpb=7cd468a3d7dee7d6c92f69a0bb7061ae208ec727;p=vpp.git diff --git a/src/vlib/physmem.h b/src/vlib/physmem.h index 9e7d52a6226..a986a50b1cb 100644 --- a/src/vlib/physmem.h +++ b/src/vlib/physmem.h @@ -40,63 +40,28 @@ #ifndef included_vlib_physmem_h #define included_vlib_physmem_h +#include + typedef struct { - uword start, end, size; -} vlib_physmem_region_t; + int index; + int fd; + void *base; + u32 n_pages; + uword *page_table; + u32 log2_page_size; + u32 numa_node; +} vlib_physmem_map_t; typedef struct { - vlib_physmem_region_t virtual; - - uword log2_n_bytes_per_page; - - /* 1 << log2_n_bytes_per_page - 1. */ - uword page_mask; - - u64 *page_table; - - /* is fake physmem */ - u8 is_fake; + u32 flags; +#define VLIB_PHYSMEM_MAIN_F_HAVE_PAGEMAP (1 << 0) +#define VLIB_PHYSMEM_MAIN_F_HAVE_IOMMU (1 << 1) + vlib_physmem_map_t *maps; + clib_pmalloc_main_t *pmalloc_main; } vlib_physmem_main_t; -always_inline u64 -vlib_physmem_offset_to_physical (vlib_physmem_main_t * pm, uword o) -{ - uword page_index = o >> pm->log2_n_bytes_per_page; - ASSERT (o < pm->virtual.size); - ASSERT (pm->page_table[page_index] != 0); - return (vec_elt (pm->page_table, page_index) + (o & pm->page_mask)); -} - -always_inline int -vlib_physmem_is_virtual (vlib_physmem_main_t * pm, uword p) -{ - return p >= pm->virtual.start && p < pm->virtual.end; -} - -always_inline uword -vlib_physmem_offset_of (vlib_physmem_main_t * pm, void *p) -{ - uword a = pointer_to_uword (p); - uword o; - - ASSERT (vlib_physmem_is_virtual (pm, a)); - o = a - pm->virtual.start; - - /* Offset must fit in 32 bits. */ - ASSERT ((uword) o == a - pm->virtual.start); - - return o; -} - -always_inline void * -vlib_physmem_at_offset (vlib_physmem_main_t * pm, uword offset) -{ - ASSERT (offset < pm->virtual.size); - return uword_to_pointer (pm->virtual.start + offset, void *); -} - #endif /* included_vlib_physmem_h */ /*