blob: 9f96f5c197cb822d316ea77cda940864a815551b [file] [log] [blame]
// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
/*
* Copyright 2018-2019 IBM Corp.
*/
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <malloc.h>
#include <stdint.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <assert.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdint.h>
#include <interrupts.h>
#include <bitutils.h>
#include <compiler.h>
/*
* Skiboot malloc stubs
*
* The actual prototypes for these are defined in mem_region-malloc.h,
* but that file also #defines malloc, and friends so we don't pull that in
* directly.
*/
#define DEFAULT_ALIGN __alignof__(long)
void *__memalign(size_t blocksize, size_t bytes, const char *location __unused);
void *__memalign(size_t blocksize, size_t bytes, const char *location __unused)
{
return memalign(blocksize, bytes);
}
void *__malloc(size_t bytes, const char *location);
void *__malloc(size_t bytes, const char *location)
{
return __memalign(DEFAULT_ALIGN, bytes, location);
}
void __free(void *p, const char *location __unused);
void __free(void *p, const char *location __unused)
{
free(p);
}
void *__realloc(void *ptr, size_t size, const char *location __unused);
void *__realloc(void *ptr, size_t size, const char *location __unused)
{
return realloc(ptr, size);
}
void *__zalloc(size_t bytes, const char *location);
void *__zalloc(size_t bytes, const char *location)
{
void *p = __malloc(bytes, location);
if (p)
memset(p, 0, bytes);
return p;
}
#include <mem_region-malloc.h>
#include <opal-api.h>
#include "../../libfdt/fdt.c"
#include "../../libfdt/fdt_ro.c"
#include "../../libfdt/fdt_sw.c"
#include "../../libfdt/fdt_strerror.c"
#include "../../core/device.c"
#include "../../libstb/container-utils.h"
#include "../../libstb/container.h"
#include "../../libstb/container.c"
#include "../flash-firmware-versions.c"
#include <assert.h>
char __rodata_start[1], __rodata_end[1];
const char version[]="Hello world!";
enum proc_gen proc_gen = proc_gen_p8;
static char *loaded_version_buf;
static size_t loaded_version_buf_size;
#define min(x,y) ((x) < (y) ? x : y)
int start_preload_resource(enum resource_id id, uint32_t subid,
void *buf, size_t *len)
{
(void)id;
(void)subid;
(void)buf;
if (loaded_version_buf) {
*len = min(*len, loaded_version_buf_size);
memcpy(buf, loaded_version_buf, *len);
} else {
*len = 0;
}
return 0;
}
int wait_for_resource_loaded(enum resource_id id, uint32_t idx)
{
(void)id;
(void)idx;
return 0;
}
int main(int argc, char *argv[])
{
int fd;
struct stat ver_st;
int r;
dt_root = dt_new_root("");
if (argc > 1) {
fd = open(argv[1], O_RDONLY);
assert(fd > 0);
r = fstat(fd, &ver_st);
assert(r == 0);
loaded_version_buf = mmap(NULL, ver_st.st_size,
PROT_READ, MAP_PRIVATE, fd, 0);
assert(loaded_version_buf != (char*)-1);
loaded_version_buf_size = ver_st.st_size;
}
flash_fw_version_preload();
proc_gen = proc_gen_p9;
flash_fw_version_preload();
flash_dt_add_fw_version();
return 0;
}