blob: f1f3913eb956aeeb449a52e22c515aa3ad593e27 [file] [log] [blame]
/*
* Copyright 2017, Data61, CSIRO (ABN 41 687 119 230)
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <inttypes.h>
#include <stdint.h>
#include <platsupport/io.h>
typedef enum pmem_type {
PMEM_TYPE_RAM,
PMEM_TYPE_UNKNOWN,
PMEM_TYPE_DEVICE,
PMEM_NUM_REGION_TYPES,
} pmem_type_t;
typedef struct pmem_region {
pmem_type_t type;
/* these specifically match the grub boot header struct definitions,
* so must both be 64 bit on all systems */
uint64_t base_addr;
uint64_t length;
} pmem_region_t;
/*
* Map a single pmem region.
*
* @param ops to use,
* @param region to unmap,
* @param cached map the mappings cached or not,
* @param flags to pass through to mapper,
* @return vaddr the pmem is mapped to, NULL on failure.
*/
static inline void *ps_pmem_map(ps_io_ops_t *ops, pmem_region_t region, bool cached, ps_mem_flags_t flags)
{
void *vaddr = ps_io_map(&ops->io_mapper, region.base_addr, region.length, cached, flags);
if (vaddr == NULL) {
ZF_LOGE("Failed to map paddr %p length %" PRIu64 "\n", (void *) (uintptr_t) region.base_addr, region.length);
}
return vaddr;
}
/*
* Unmap a single pmem region.
*
* @param ops to use,
* @param region to unmap,
* @param vaddr the pmem_region is mapped to,
* @param mapper to unmap with.
*/
static inline void ps_pmem_unmap(ps_io_ops_t *ops, pmem_region_t region, void *vaddr) {
ps_io_unmap(&ops->io_mapper, vaddr, region.length);
}