/* * This file is part of the coreboot project. * * Copyright (C) 2014 Google Inc * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef RMODULE_DEFS_H #define RMODULE_DEFS_H #include <stdint.h> #include <stddef.h> #define RMODULE_MAGIC 0xf8fe #define RMODULE_VERSION_1 1 /* All fields with '_offset' in the name are byte offsets into the flat blob. * The linker and the linker script takes are of assigning the values. */ struct rmodule_header { uint16_t magic; uint8_t version; uint8_t type; /* The payload represents the program's loadable code and data. */ uint32_t payload_begin_offset; uint32_t payload_end_offset; /* Begin and of relocation information about the program module. */ uint32_t relocations_begin_offset; uint32_t relocations_end_offset; /* The starting address of the linked program. This address is vital * for determining relocation offsets as the relocation info and other * symbols (bss, entry point) need this value as a basis to calculate * the offsets. */ uint32_t module_link_start_address; /* The module_program_size is the size of memory used while running * the program. The program is assumed to consume a contiguous amount * of memory. */ uint32_t module_program_size; /* This is program's execution entry point. */ uint32_t module_entry_point; /* Optional parameter structure that can be used to pass data into * the module. */ uint32_t parameters_begin; uint32_t parameters_end; /* BSS section information so the loader can clear the bss. */ uint32_t bss_begin; uint32_t bss_end; /* Add some room for growth. */ uint32_t padding[4]; } __attribute__ ((packed)); #endif /* RMODULE_DEFS_H */