1/*
2 * Copyright 2014, General Dynamics C4 Systems
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 */
6
7#pragma once
8
9#include <plat/machine.h>
10#include <machine/registerset.h>
11#include <hardware.h>
12
13/* When translating a physical address into an address accessible to the
14 * kernel via virtual addressing we always use the mapping of the memory
15 * into the physical memory window, even if the mapping originally
16 * referred to a kernel virtual address. */
17static inline void *CONST ptrFromPAddr(paddr_t paddr)
18{
19    return (void *)(paddr + PPTR_BASE_OFFSET);
20}
21
22/* When obtaining a physical address from a reference to any object in
23 * the physical mapping window, this function must be used. */
24static inline paddr_t CONST addrFromPPtr(void *pptr)
25{
26    return (paddr_t)pptr - PPTR_BASE_OFFSET;
27}
28
29static inline region_t CONST paddr_to_pptr_reg(p_region_t p_reg)
30{
31    return (region_t) {
32        p_reg.start + PPTR_BASE_OFFSET, p_reg.end + PPTR_BASE_OFFSET
33    };
34}
35
36static inline p_region_t CONST pptr_to_paddr_reg(region_t reg)
37{
38    return (p_region_t) {
39        reg.start - PPTR_BASE_OFFSET, reg.end - PPTR_BASE_OFFSET
40    };
41}
42
43#define paddr_to_pptr ptrFromPAddr
44#define pptr_to_paddr(x) addrFromPPtr(x)
45
46#include <mode/machine.h>
47