diff options
Diffstat (limited to 'roms/skiboot/hw/fake-nvram.c')
-rw-r--r-- | roms/skiboot/hw/fake-nvram.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/roms/skiboot/hw/fake-nvram.c b/roms/skiboot/hw/fake-nvram.c new file mode 100644 index 000000000..44adde4a3 --- /dev/null +++ b/roms/skiboot/hw/fake-nvram.c @@ -0,0 +1,49 @@ +// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +/* Copyright 2013-2017 IBM Corp. */ + +#include <skiboot.h> +#include <opal.h> +#include <mem_region.h> +#include <lock.h> + +static struct mem_region *nvram_region; +static struct lock fake_nvram_lock = LOCK_UNLOCKED; + +int fake_nvram_info(uint32_t *total_size) +{ + nvram_region = find_mem_region("ibm,fake-nvram"); + + if (!nvram_region) + return OPAL_HARDWARE; + + *total_size = nvram_region->len; + + return OPAL_SUCCESS; +} + +int fake_nvram_start_read(void *dst, uint32_t src, uint32_t len) +{ + if (!nvram_region) + return -ENODEV; + + lock(&fake_nvram_lock); + memcpy(dst, (void *) (nvram_region->start + src), len); + unlock(&fake_nvram_lock); + + nvram_read_complete(true); + + return 0; +} + +int fake_nvram_write(uint32_t offset, void *src, uint32_t size) +{ + if (!nvram_region) + return OPAL_HARDWARE; + + lock(&fake_nvram_lock); + memcpy((void *) (nvram_region->start + offset), src, size); + unlock(&fake_nvram_lock); + + return 0; +} + |