Merge branch 'master' into sam460ex
Conflicts: src/system/boot/platform/u-boot/arch/ppc/Jamfile
This commit is contained in:
@@ -11,15 +11,9 @@
|
||||
|
||||
|
||||
typedef struct addr_range {
|
||||
addr_t start;
|
||||
size_t size;
|
||||
} addr_range;
|
||||
|
||||
|
||||
typedef struct phys_addr_range {
|
||||
phys_addr_t start;
|
||||
phys_size_t size;
|
||||
} phys_addr_range;
|
||||
uint64 start;
|
||||
uint64 size;
|
||||
} _PACKED addr_range;
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -27,28 +21,18 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
status_t insert_address_range(addr_range* ranges, uint32* _numRanges,
|
||||
uint32 maxRanges, addr_t start, size_t size);
|
||||
uint32 maxRanges, uint64 start, uint64 size);
|
||||
status_t remove_address_range(addr_range* ranges, uint32* _numRanges,
|
||||
uint32 maxRanges, addr_t start, size_t size);
|
||||
bool get_free_address_range(addr_range* ranges, uint32 numRanges, addr_t base,
|
||||
size_t size, addr_t* _rangeBase);
|
||||
bool is_address_range_covered(addr_range* ranges, uint32 numRanges, addr_t base,
|
||||
size_t size);
|
||||
uint32 maxRanges, uint64 start, uint64 size);
|
||||
bool get_free_address_range(addr_range* ranges, uint32 numRanges, uint64 base,
|
||||
uint64 size, uint64* _rangeBase);
|
||||
bool is_address_range_covered(addr_range* ranges, uint32 numRanges, uint64 base,
|
||||
uint64 size);
|
||||
void sort_address_ranges(addr_range* ranges, uint32 numRanges);
|
||||
|
||||
status_t insert_physical_address_range(phys_addr_range* ranges,
|
||||
uint32* _numRanges, uint32 maxRanges, phys_addr_t start, phys_size_t size);
|
||||
status_t remove_physical_address_range(phys_addr_range* ranges,
|
||||
uint32* _numRanges, uint32 maxRanges, phys_addr_t start, phys_size_t size);
|
||||
bool get_free_physical_address_range(phys_addr_range* ranges, uint32 numRanges,
|
||||
phys_addr_t base, phys_size_t size, phys_addr_t* _rangeBase);
|
||||
bool is_physical_address_range_covered(phys_addr_range* ranges,
|
||||
uint32 numRanges, phys_addr_t base, phys_size_t size);
|
||||
void sort_physical_address_ranges(phys_addr_range* ranges, uint32 numRanges);
|
||||
|
||||
status_t insert_physical_memory_range(phys_addr_t start, phys_size_t size);
|
||||
status_t insert_physical_allocated_range(phys_addr_t start, phys_size_t size);
|
||||
status_t insert_virtual_allocated_range(addr_t start, size_t size);
|
||||
status_t insert_physical_memory_range(uint64 start, uint64 size);
|
||||
status_t insert_physical_allocated_range(uint64 start, uint64 size);
|
||||
status_t insert_virtual_allocated_range(uint64 start, uint64 size);
|
||||
void ignore_physical_memory_ranges_beyond_4gb();
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -5,24 +5,21 @@
|
||||
#ifndef KERNEL_BOOT_ARCH_H
|
||||
#define KERNEL_BOOT_ARCH_H
|
||||
|
||||
|
||||
#include <SupportDefs.h>
|
||||
#include <boot/elf.h>
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* ELF support */
|
||||
|
||||
extern status_t boot_arch_elf_relocate_rel(struct preloaded_image *image,
|
||||
struct Elf32_Rel *rel, int rel_len);
|
||||
extern status_t boot_arch_elf_relocate_rela(struct preloaded_image *image,
|
||||
struct Elf32_Rela *rel, int rel_len);
|
||||
extern status_t boot_arch_elf_relocate_rel(preloaded_elf32_image* image,
|
||||
struct Elf32_Rel* rel, int rel_len);
|
||||
extern status_t boot_arch_elf_relocate_rel(preloaded_elf64_image* image,
|
||||
struct Elf64_Rel* rel, int rel_len);
|
||||
extern status_t boot_arch_elf_relocate_rela(preloaded_elf32_image* image,
|
||||
struct Elf32_Rela* rel, int rel_len);
|
||||
extern status_t boot_arch_elf_relocate_rela(preloaded_elf64_image* image,
|
||||
struct Elf64_Rela* rel, int rel_len);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* KERNEL_BOOT_ARCH_H */
|
||||
|
||||
@@ -34,41 +34,41 @@ typedef struct disk_identifier {
|
||||
union {
|
||||
struct {
|
||||
uint16 base_address;
|
||||
} legacy;
|
||||
} _PACKED legacy;
|
||||
struct {
|
||||
uint8 bus;
|
||||
uint8 slot;
|
||||
uint8 function;
|
||||
} pci;
|
||||
} _PACKED pci;
|
||||
} bus;
|
||||
union {
|
||||
struct {
|
||||
bool master;
|
||||
} ata;
|
||||
} _PACKED ata;
|
||||
struct {
|
||||
bool master;
|
||||
uint8 logical_unit;
|
||||
} atapi;
|
||||
} _PACKED atapi;
|
||||
struct {
|
||||
uint8 logical_unit;
|
||||
} scsi;
|
||||
} _PACKED scsi;
|
||||
struct {
|
||||
uint8 tbd;
|
||||
} usb;
|
||||
} _PACKED usb;
|
||||
struct {
|
||||
uint64 guid;
|
||||
} firewire;
|
||||
} _PACKED firewire;
|
||||
struct {
|
||||
uint64 wwd;
|
||||
} fibre;
|
||||
} _PACKED fibre;
|
||||
struct {
|
||||
off_t size;
|
||||
struct {
|
||||
off_t offset;
|
||||
uint32 sum;
|
||||
} check_sums[NUM_DISK_CHECK_SUMS];
|
||||
} unknown;
|
||||
} _PACKED check_sums[NUM_DISK_CHECK_SUMS];
|
||||
} _PACKED unknown;
|
||||
} device;
|
||||
} disk_identifier;
|
||||
} _PACKED disk_identifier;
|
||||
|
||||
#endif /* KERNEL_BOOT_DISK_IDENTIFIER_H */
|
||||
|
||||
@@ -6,14 +6,15 @@
|
||||
#define KERNEL_BOOT_DRIVER_SETTINGS_H
|
||||
|
||||
|
||||
#include <util/FixedWidthPointer.h>
|
||||
#include <util/list.h>
|
||||
|
||||
|
||||
struct driver_settings_file {
|
||||
struct driver_settings_file *next;
|
||||
FixedWidthPointer<struct driver_settings_file> next;
|
||||
char name[B_OS_NAME_LENGTH];
|
||||
char *buffer;
|
||||
size_t size;
|
||||
};
|
||||
FixedWidthPointer<char> buffer;
|
||||
uint32 size;
|
||||
} _PACKED;
|
||||
|
||||
#endif /* KERNEL_BOOT_DRIVER_SETTINGS_H */
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
/*
|
||||
** Copyright 2003-2004, Axel Dörfler, [email protected]. All rights reserved.
|
||||
** Distributed under the terms of the OpenBeOS License.
|
||||
*/
|
||||
* Copyright 2003-2004, Axel Dörfler, [email protected]. All rights reserved.
|
||||
* Copyright 2012, Alex Smith, [email protected].
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
#ifndef KERNEL_BOOT_ELF_H
|
||||
#define KERNEL_BOOT_ELF_H
|
||||
|
||||
@@ -9,45 +10,88 @@
|
||||
#include <boot/addr_range.h>
|
||||
#include <sys/stat.h>
|
||||
#include <elf_priv.h>
|
||||
#include <util/FixedWidthPointer.h>
|
||||
|
||||
typedef struct elf32_region {
|
||||
area_id id;
|
||||
uint32 start;
|
||||
uint32 size;
|
||||
int32 delta;
|
||||
} _PACKED elf32_region;
|
||||
|
||||
typedef struct elf64_region {
|
||||
area_id id;
|
||||
uint64 start;
|
||||
uint64 size;
|
||||
int64 delta;
|
||||
} _PACKED elf64_region;
|
||||
|
||||
struct preloaded_image {
|
||||
struct preloaded_image *next;
|
||||
char *name;
|
||||
elf_region text_region;
|
||||
elf_region data_region;
|
||||
FixedWidthPointer<struct preloaded_image> next;
|
||||
FixedWidthPointer<char> name;
|
||||
uint8 elf_class;
|
||||
addr_range dynamic_section;
|
||||
struct Elf32_Ehdr elf_header;
|
||||
|
||||
struct Elf32_Sym *syms;
|
||||
struct Elf32_Rel *rel;
|
||||
int rel_len;
|
||||
struct Elf32_Rela *rela;
|
||||
int rela_len;
|
||||
struct Elf32_Rel *pltrel;
|
||||
int pltrel_len;
|
||||
int pltrel_type;
|
||||
|
||||
struct Elf32_Sym *debug_symbols;
|
||||
const char *debug_string_table;
|
||||
uint32 num_debug_symbols, debug_string_table_size;
|
||||
FixedWidthPointer<char> debug_string_table;
|
||||
uint32 num_debug_symbols;
|
||||
uint32 debug_string_table_size;
|
||||
|
||||
ino_t inode;
|
||||
image_id id;
|
||||
// the ID field will be filled out in the kernel
|
||||
bool is_module;
|
||||
// set by the module initialization code
|
||||
};
|
||||
} _PACKED;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
struct preloaded_elf32_image : public preloaded_image {
|
||||
Elf32_Ehdr elf_header;
|
||||
elf32_region text_region;
|
||||
elf32_region data_region;
|
||||
|
||||
FixedWidthPointer<Elf32_Sym> syms;
|
||||
FixedWidthPointer<Elf32_Rel> rel;
|
||||
int32 rel_len;
|
||||
FixedWidthPointer<Elf32_Rela> rela;
|
||||
int32 rela_len;
|
||||
FixedWidthPointer<Elf32_Rel> pltrel;
|
||||
int32 pltrel_len;
|
||||
int32 pltrel_type;
|
||||
|
||||
FixedWidthPointer<Elf32_Sym> debug_symbols;
|
||||
} _PACKED;
|
||||
|
||||
struct preloaded_elf64_image : public preloaded_image {
|
||||
Elf64_Ehdr elf_header;
|
||||
elf64_region text_region;
|
||||
elf64_region data_region;
|
||||
|
||||
FixedWidthPointer<Elf64_Sym> syms;
|
||||
FixedWidthPointer<Elf64_Rel> rel;
|
||||
int64 rel_len;
|
||||
FixedWidthPointer<Elf64_Rela> rela;
|
||||
int64 rela_len;
|
||||
FixedWidthPointer<Elf64_Rel> pltrel;
|
||||
int64 pltrel_len;
|
||||
int64 pltrel_type;
|
||||
|
||||
FixedWidthPointer<Elf64_Sym> debug_symbols;
|
||||
} _PACKED;
|
||||
|
||||
|
||||
#if B_HAIKU_64_BIT
|
||||
typedef preloaded_elf64_image preloaded_elf_image;
|
||||
#else
|
||||
typedef preloaded_elf32_image preloaded_elf_image;
|
||||
#endif
|
||||
|
||||
extern status_t boot_elf_resolve_symbol(struct preloaded_image *image,
|
||||
struct Elf32_Sym *symbol, addr_t *symbolAddress);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#ifdef _BOOT_MODE
|
||||
extern status_t boot_elf_resolve_symbol(preloaded_elf32_image* image,
|
||||
struct Elf32_Sym* symbol, Elf32_Addr* symbolAddress);
|
||||
extern status_t boot_elf_resolve_symbol(preloaded_elf64_image* image,
|
||||
struct Elf64_Sym* symbol, Elf64_Addr* symbolAddress);
|
||||
extern void boot_elf64_set_relocation(Elf64_Addr resolveAddress,
|
||||
Elf64_Addr finalAddress);
|
||||
#endif
|
||||
|
||||
#endif /* KERNEL_BOOT_ELF_H */
|
||||
|
||||
@@ -18,7 +18,8 @@
|
||||
#include <platform_kernel_args.h>
|
||||
#include <arch_kernel_args.h>
|
||||
|
||||
#include <util/KMessage.h>
|
||||
#include <util/FixedWidthPointer.h>
|
||||
|
||||
|
||||
#define CURRENT_KERNEL_ARGS_VERSION 1
|
||||
#define MAX_KERNEL_ARGS_RANGE 20
|
||||
@@ -43,28 +44,30 @@ typedef struct kernel_args {
|
||||
uint32 kernel_args_size;
|
||||
uint32 version;
|
||||
|
||||
struct preloaded_image kernel_image;
|
||||
struct preloaded_image *preloaded_images;
|
||||
FixedWidthPointer<struct preloaded_image> kernel_image;
|
||||
FixedWidthPointer<struct preloaded_image> preloaded_images;
|
||||
|
||||
uint32 num_physical_memory_ranges;
|
||||
phys_addr_range physical_memory_range[MAX_PHYSICAL_MEMORY_RANGE];
|
||||
uint32 num_physical_allocated_ranges;
|
||||
phys_addr_range physical_allocated_range[MAX_PHYSICAL_ALLOCATED_RANGE];
|
||||
uint32 num_virtual_allocated_ranges;
|
||||
addr_range virtual_allocated_range[MAX_VIRTUAL_ALLOCATED_RANGE];
|
||||
uint32 num_kernel_args_ranges;
|
||||
addr_range kernel_args_range[MAX_KERNEL_ARGS_RANGE];
|
||||
uint64 ignored_physical_memory;
|
||||
uint32 num_physical_memory_ranges;
|
||||
addr_range physical_memory_range[MAX_PHYSICAL_MEMORY_RANGE];
|
||||
uint32 num_physical_allocated_ranges;
|
||||
addr_range physical_allocated_range[MAX_PHYSICAL_ALLOCATED_RANGE];
|
||||
uint32 num_virtual_allocated_ranges;
|
||||
addr_range virtual_allocated_range[MAX_VIRTUAL_ALLOCATED_RANGE];
|
||||
uint32 num_kernel_args_ranges;
|
||||
addr_range kernel_args_range[MAX_KERNEL_ARGS_RANGE];
|
||||
uint64 ignored_physical_memory;
|
||||
|
||||
uint32 num_cpus;
|
||||
addr_range cpu_kstack[MAX_BOOT_CPUS];
|
||||
|
||||
KMessage boot_volume;
|
||||
// boot volume KMessage data
|
||||
FixedWidthPointer<void> boot_volume;
|
||||
int32 boot_volume_size;
|
||||
|
||||
struct driver_settings_file *driver_settings;
|
||||
FixedWidthPointer<struct driver_settings_file> driver_settings;
|
||||
|
||||
struct {
|
||||
phys_addr_range physical_buffer;
|
||||
addr_range physical_buffer;
|
||||
uint32 bytes_per_row;
|
||||
uint16 width;
|
||||
uint16 height;
|
||||
@@ -72,12 +75,12 @@ typedef struct kernel_args {
|
||||
bool enabled;
|
||||
} frame_buffer;
|
||||
|
||||
void *vesa_modes;
|
||||
FixedWidthPointer<void> vesa_modes;
|
||||
uint16 vesa_modes_size;
|
||||
uint8 vesa_capabilities;
|
||||
void *edid_info;
|
||||
FixedWidthPointer<void> edid_info;
|
||||
|
||||
void *debug_output;
|
||||
FixedWidthPointer<void> debug_output;
|
||||
uint32 debug_size;
|
||||
bool keep_debug_output_buffer;
|
||||
|
||||
@@ -85,8 +88,8 @@ typedef struct kernel_args {
|
||||
arch_kernel_args arch_args;
|
||||
|
||||
// bootsplash data
|
||||
uint8 *boot_splash;
|
||||
FixedWidthPointer<uint8> boot_splash;
|
||||
|
||||
} kernel_args;
|
||||
} _PACKED kernel_args;
|
||||
|
||||
#endif /* KERNEL_BOOT_KERNEL_ARGS_H */
|
||||
|
||||
@@ -10,8 +10,9 @@
|
||||
#endif
|
||||
|
||||
|
||||
#include <apm.h>
|
||||
#include <arch/x86/apm.h>
|
||||
#include <bios_drive.h>
|
||||
#include <util/FixedWidthPointer.h>
|
||||
|
||||
|
||||
// must match SMP_MAX_CPUS in arch_smp.h
|
||||
@@ -25,9 +26,10 @@
|
||||
typedef struct {
|
||||
uint16 serial_base_ports[MAX_SERIAL_PORTS];
|
||||
|
||||
bios_drive *drives; // this does not contain the boot drive
|
||||
FixedWidthPointer<bios_drive> drives;
|
||||
// this does not contain the boot drive
|
||||
|
||||
apm_info apm;
|
||||
} platform_kernel_args;
|
||||
} _PACKED platform_kernel_args;
|
||||
|
||||
#endif /* KERNEL_BOOT_PLATFORM_BIOS_IA32_KERNEL_ARGS_H */
|
||||
|
||||
@@ -8,10 +8,12 @@
|
||||
|
||||
#include <boot/kernel_args.h>
|
||||
|
||||
#include <util/KMessage.h>
|
||||
|
||||
struct stage2_args;
|
||||
|
||||
extern struct kernel_args gKernelArgs;
|
||||
extern KMessage gBootVolume;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
||||
Reference in New Issue
Block a user