| /* |
| * 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 */ |