/branches/rcu/boot/tools/ia32/gen_vga323.c |
---|
0,0 → 1,14 |
#include <stdio.h> |
#define RED(i) ((i >> 5) & ((1 << 3) - 1)) |
#define GREEN(i) ((i >> 3) & ((1 << 2) - 1)) |
#define BLUE(i) (i & ((1 << 3) - 1)) |
int main(int argc, char *argv[]) { |
unsigned int i; |
for (i = 0; i < 256; i++) |
printf("\t.byte 0x%02x, 0x%02x, 0x%02x, 0x00\n", BLUE(i) * 9, GREEN(i) * 21, RED(i) * 9); |
return 0; |
} |
/branches/rcu/boot/genarch/ofw.h |
---|
117,7 → 117,8 |
extern unsigned int ofw_get_size_cells(const phandle device); |
extern void *ofw_translate(const void *virt); |
extern int ofw_translate_failed(ofw_arg_t flag); |
extern void *ofw_claim(const void *virt, const int len); |
extern void *ofw_claim_virt(const void *virt, const int len); |
extern void *ofw_claim_phys(const void *virt, const int len); |
extern int ofw_map(const void *phys, const void *virt, const int size, const int mode); |
extern int ofw_memmap(memmap_t *map); |
extern int ofw_screen(screen_t *screen); |
/branches/rcu/boot/genarch/balloc.h |
---|
31,6 → 31,8 |
#include <types.h> |
#define BALLOC_MAX_SIZE (1024 * 1024) |
typedef struct { |
uintptr_t base; |
size_t size; |
/branches/rcu/boot/genarch/ofw.c |
---|
38,6 → 38,7 |
ihandle ofw_stdout; |
phandle ofw_root; |
ihandle ofw_mmu; |
ihandle ofw_memory_prop; |
phandle ofw_memory; |
phandle ofw_aliases; |
60,6 → 61,10 |
puts("\r\nError: Unable to get mmu property, halted.\r\n"); |
halt(); |
} |
if (ofw_get_property(ofw_chosen, "memory", &ofw_memory_prop, sizeof(ofw_memory_prop)) <= 0) { |
puts("\r\nError: Unable to get memory property, halted.\r\n"); |
halt(); |
} |
ofw_memory = ofw_find_device("/memory"); |
if (ofw_memory == -1) { |
203,10 → 208,9 |
return (void *) ((result[2]<<shift)|result[3]); |
} |
void *ofw_claim(const void *virt, const int len) |
void *ofw_claim_virt(const void *virt, const int len) |
{ |
ofw_arg_t retaddr; |
int shift; |
if (ofw_call("call-method", 5, 2, &retaddr, "claim", ofw_mmu, 0, len, virt) != 0) { |
puts("Error: MMU method claim() failed, halting.\n"); |
216,6 → 220,42 |
return (void *) retaddr; |
} |
void *ofw_claim_phys(const void *phys, const int len) |
{ |
ofw_arg_t retaddr[2]; |
int shift; |
if (sizeof(unative_t) == 8) { |
shift = 32; |
if (ofw_call("call-method", 6, 3, retaddr, "claim", |
ofw_memory_prop, 0, len, ((uintptr_t) phys) >> shift, |
((uintptr_t) phys) & ((uint32_t) -1)) != 0) { |
/* |
* Note that this will help us to discover |
* conflicts between OpenFirmware allocations |
* and our use of physical memory. |
* It is better to detect collisions here |
* than to cope with weird errors later. |
* |
* So this is really not to make the loader |
* more generic; it is here for debugging |
* purposes. |
*/ |
puts("Error: memory method claim() failed, halting.\n"); |
halt(); |
} |
} else { |
shift = 0; |
/* |
* FIXME: the number of arguments is probably different... |
*/ |
puts("Error: 32-bit ofw_claim_phys not implemented.\n"); |
halt(); |
} |
return (void *) ((retaddr[0] << shift) | retaddr[1]); |
} |
int ofw_map(const void *phys, const void *virt, const int size, const int mode) |
{ |
uintptr_t phys_hi, phys_lo; |
252,8 → 292,8 |
int pos; |
map->total = 0; |
map->count = 0; |
for (pos = 0; (pos < ret / sizeof(uint32_t)) && (map->count < |
MEMMAP_MAX_RECORDS); pos += ac + sc) { |
for (pos = 0; (pos < ret / sizeof(uint32_t)) && |
(map->count < MEMMAP_MAX_RECORDS); pos += ac + sc) { |
void * start = (void *) ((uintptr_t) buf[pos + ac - 1]); |
unsigned int size = buf[pos + ac + sc - 1]; |
/branches/rcu/boot/genarch/balloc.c |
---|
48,6 → 48,9 |
addr = ballocs->base + ALIGN_UP(ballocs->size, alignment); |
if (ALIGN_UP(ballocs->size, alignment) + size > BALLOC_MAX_SIZE) |
return NULL; |
ballocs->size = ALIGN_UP(ballocs->size, alignment) + size; |
return (void *) addr; |
/branches/rcu/boot/arch/sparc64/loader/main.c |
---|
102,10 → 102,24 |
for (i = 0; i < COMPONENTS; i++) { |
printf(" %s...", components[i].name); |
top = ALIGN_UP(top, PAGE_SIZE); |
/* |
* At this point, we claim the physical memory that we are |
* going to use. We should be safe in case of the virtual |
* address space because the OpenFirmware, according to its |
* SPARC binding, should restrict its use of virtual memory |
* to addresses from [0xffd00000; 0xffefffff] and |
* [0xfe000000; 0xfeffffff]. |
*/ |
(void) ofw_claim_phys(bootinfo.physmem_start + base + top, |
ALIGN_UP(components[i].size, PAGE_SIZE)); |
memcpy(base + top, components[i].start, components[i].size); |
if (i > 0) { |
bootinfo.taskmap.tasks[bootinfo.taskmap.count].addr = base + top; |
bootinfo.taskmap.tasks[bootinfo.taskmap.count].size = components[i].size; |
bootinfo.taskmap.tasks[bootinfo.taskmap.count].addr = |
base + top; |
bootinfo.taskmap.tasks[bootinfo.taskmap.count].size = |
components[i].size; |
bootinfo.taskmap.count++; |
} |
top += components[i].size; |
112,7 → 126,14 |
printf("done.\n"); |
} |
balloc_init(&bootinfo.ballocs, ALIGN_UP(((uintptr_t) base) + top, PAGE_SIZE)); |
/* |
* Claim the physical memory for the boot allocator. |
* Initialize the boot allocator. |
*/ |
(void) ofw_claim_phys(bootinfo.physmem_start + |
base + ALIGN_UP(top, PAGE_SIZE), BALLOC_MAX_SIZE); |
balloc_init(&bootinfo.ballocs, ALIGN_UP(((uintptr_t) base) + top, |
PAGE_SIZE)); |
printf("\nCanonizing OpenFirmware device tree..."); |
bootinfo.ofw_root = ofw_tree_build(); |
127,5 → 148,7 |
printf("\nBooting the kernel...\n"); |
jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS, |
bootinfo.physmem_start | BSP_PROCESSOR, &bootinfo, sizeof(bootinfo)); |
bootinfo.physmem_start | BSP_PROCESSOR, &bootinfo, |
sizeof(bootinfo)); |
} |
/branches/rcu/boot/arch/sparc64/loader/Makefile |
---|
78,7 → 78,7 |
$(USPACEDIR)/kbd/kbd \ |
$(USPACEDIR)/console/console \ |
$(USPACEDIR)/tetris/tetris \ |
$(USPACEDIR)/ipcc/ipcc \ |
$(USPACEDIR)/tester/tester \ |
$(USPACEDIR)/klog/klog |
OBJECTS := $(addsuffix .o,$(basename $(SOURCES))) |
/branches/rcu/boot/arch/sparc64/silo/silo.tar.gz |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/rcu/boot/arch/ppc32/loader/Makefile |
---|
75,7 → 75,7 |
$(USPACEDIR)/kbd/kbd \ |
$(USPACEDIR)/console/console \ |
$(USPACEDIR)/tetris/tetris \ |
$(USPACEDIR)/ipcc/ipcc \ |
$(USPACEDIR)/tester/tester \ |
$(USPACEDIR)/klog/klog |
OBJECTS := $(addsuffix .o,$(basename $(SOURCES))) |
/branches/rcu/boot/arch/ia32xen/grub/menu.lst |
---|
12,5 → 12,5 |
module /boot/kbd |
module /boot/console |
module /boot/tetris |
module /boot/ipcc |
module /boot/tester |
module /boot/klog |
/branches/rcu/boot/arch/ia32xen/grub/menu.debug.lst |
---|
12,5 → 12,5 |
module /boot/kbd |
module /boot/console |
module /boot/tetris |
module /boot/ipcc |
module /boot/tester |
module /boot/klog |
/branches/rcu/boot/arch/ia32xen/Makefile.inc |
---|
34,7 → 34,7 |
$(USPACEDIR)/kbd/kbd \ |
$(USPACEDIR)/console/console \ |
$(USPACEDIR)/tetris/tetris \ |
$(USPACEDIR)/ipcc/ipcc \ |
$(USPACEDIR)/tester/tester \ |
$(USPACEDIR)/klog/klog |
build: $(BASE)/image.iso |
/branches/rcu/boot/arch/amd64/grub/menu.lst |
---|
11,5 → 11,5 |
module /boot/kbd |
module /boot/console |
module /boot/tetris |
module /boot/ipcc |
module /boot/tester |
module /boot/klog |
/branches/rcu/boot/arch/amd64/Makefile.inc |
---|
34,7 → 34,7 |
$(USPACEDIR)/kbd/kbd \ |
$(USPACEDIR)/console/console \ |
$(USPACEDIR)/tetris/tetris \ |
$(USPACEDIR)/ipcc/ipcc \ |
$(USPACEDIR)/tester/tester \ |
$(USPACEDIR)/klog/klog |
build: $(BASE)/image.iso |
/branches/rcu/boot/arch/ppc64/loader/Makefile |
---|
75,7 → 75,7 |
$(USPACEDIR)/kbd/kbd \ |
$(USPACEDIR)/console/console \ |
$(USPACEDIR)/tetris/tetris \ |
$(USPACEDIR)/ipcc/ipcc \ |
$(USPACEDIR)/tester/tester \ |
$(USPACEDIR)/klog/klog |
OBJECTS := $(addsuffix .o,$(basename $(SOURCES))) |
/branches/rcu/boot/arch/mips32/loader/Makefile |
---|
74,7 → 74,7 |
$(USPACEDIR)/kbd/kbd \ |
$(USPACEDIR)/console/console \ |
$(USPACEDIR)/tetris/tetris \ |
$(USPACEDIR)/ipcc/ipcc \ |
$(USPACEDIR)/tester/tester \ |
$(USPACEDIR)/klog/klog |
OBJECTS := $(addsuffix .o,$(basename $(SOURCES))) |
/branches/rcu/boot/arch/ia32/grub/menu.lst |
---|
11,5 → 11,5 |
module /boot/kbd |
module /boot/console |
module /boot/tetris |
module /boot/ipcc |
module /boot/tester |
module /boot/klog |
/branches/rcu/boot/arch/ia32/Makefile.inc |
---|
34,7 → 34,7 |
$(USPACEDIR)/kbd/kbd \ |
$(USPACEDIR)/console/console \ |
$(USPACEDIR)/tetris/tetris \ |
$(USPACEDIR)/ipcc/ipcc \ |
$(USPACEDIR)/tester/tester \ |
$(USPACEDIR)/klog/klog |
build: $(BASE)/image.iso |