Hi all,
I have a probably a dumb question that need some clarification. I was reading the kernel source code and I’m little bit confused with the three data type:
paddr_t, pptr_t, vptr_t and the following three data struct related to them.
typedef struct region { pptr_t start; pptr_t end; } region_t;
typedef struct p_region { paddr_t start; paddr_t end; } p_region_t;
typedef struct v_region { vptr_t start; vptr_t end; } v_region_t;
Based on how those are being used I assume the paddr_t and p_region are data struct for physical address, vptr_t and v_region are for virtual address. According to the following functions seem that the translation between physical address to pptr_r is by adding/subtracting a offset. But I’m confused with the pptr_t and region I wonder what are those for? Tank you very much!
static inline void* CONST ptrFromPAddr(paddr_t paddr) { return (void*)(paddr + physMappingOffset); }
static inline paddr_t CONST addrFromPPtr(void* pptr) { return (paddr_t)pptr - physMappingOffset; }
static inline region_t CONST paddr_to_pptr_reg(p_region_t p_reg) { return (region_t) { p_reg.start + physMappingOffset, p_reg.end + physMappingOffset }; }
static inline p_region_t CONST pptr_to_paddr_reg(region_t reg) { return (p_region_t) { reg.start - physMappingOffset, reg.end - physMappingOffset }; }
Thanks -Dan