Merge branch 'master' into sam460ex

Conflicts:
	src/system/boot/platform/u-boot/arch/ppc/Jamfile
This commit is contained in:
François Revol
2012-11-18 23:10:49 +01:00
855 changed files with 62868 additions and 7654 deletions
+12 -28
View File
@@ -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
+9 -12
View File
@@ -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 */
+11 -11
View File
@@ -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 */
+71 -27
View File
@@ -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 */
+23 -20
View File
@@ -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 */
+2
View File
@@ -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" {