diff options
Diffstat (limited to 'tip22/tftpload.c')
-rw-r--r-- | tip22/tftpload.c | 50 |
1 files changed, 24 insertions, 26 deletions
diff --git a/tip22/tftpload.c b/tip22/tftpload.c index 2d649a0..ed31e15 100644 --- a/tip22/tftpload.c +++ b/tip22/tftpload.c @@ -24,8 +24,6 @@ #define ANSI_CLEAR "\033[2J" -typedef enum { False = 0, True } Boolean; - extern void* __kernel_start; extern void* __kernel_end; extern void* __rd_start; @@ -34,18 +32,18 @@ extern void* __rd_end; /* convert an offset in the kernel image to an address in the loaded tftpboot image */ static void* offset2addr(unsigned long offset) { - void* address = (void*)((ULONG)&(__kernel_start) + offset); + void* address = (void*)((unsigned long)&(__kernel_start) + offset); return address; } /* copy program segments to the locations the kernel expects */ -static ULONG CopyProgramSegments32(Elf32_Ehdr * header) +static unsigned long CopyProgramSegments32(Elf32_Ehdr * header) { int idx; - Boolean loaded = False; + int loaded = 0; Elf32_Phdr *segment, *segments; size_t size = header->e_phentsize * header->e_phnum; - ULONG kernel_end=0L; + unsigned long kernel_end=0L; if (size <= 0) prom_fatal("No program segments\n\r"); @@ -79,7 +77,7 @@ static ULONG CopyProgramSegments32(Elf32_Ehdr * header) (KSEG0ADDR(segment-> p_vaddr + segment->p_filesz)), 0, size); } - loaded = True; + loaded = 1; } segment = (Elf32_Phdr *) (((char *) segment) + @@ -93,13 +91,13 @@ static ULONG CopyProgramSegments32(Elf32_Ehdr * header) return kernel_end; } -static ULONG CopyProgramSegments64(Elf64_Ehdr * header) +static unsigned long CopyProgramSegments64(Elf64_Ehdr * header) { int idx; - Boolean loaded = False; + int loaded = 0; Elf64_Phdr *segment, *segments; - ULONG size = header->e_phentsize * header->e_phnum; - ULONG kernel_end=0L; + unsigned long size = header->e_phentsize * header->e_phnum; + unsigned long kernel_end=0L; if (size <= 0) prom_fatal("No program segments\n\r"); @@ -126,17 +124,17 @@ static ULONG CopyProgramSegments64(Elf64_Ehdr * header) kernel_end = segment->p_vaddr + segment->p_memsz; } - size = (ULONG)segment->p_memsz - (ULONG)segment->p_filesz; + size = (unsigned long)segment->p_memsz - (unsigned long)segment->p_filesz; if (size > 0) { printf ("Zeroing memory at 0x%lx, size = 0x%lx\n\r", - (KSEG0ADDR((ULONG)segment->p_vaddr + - (ULONG)segment->p_filesz)), size); + (KSEG0ADDR((unsigned long)segment->p_vaddr + + (unsigned long)segment->p_filesz)), size); memset((void *) - (KSEG0ADDR((ULONG)segment->p_vaddr + - (ULONG)segment->p_filesz)), 0, size); + (KSEG0ADDR((unsigned long)segment->p_vaddr + + (unsigned long)segment->p_filesz)), 0, size); } - loaded = True; + loaded = 1; } segment = (Elf64_Phdr *) (((char *) segment) + @@ -150,7 +148,7 @@ static ULONG CopyProgramSegments64(Elf64_Ehdr * header) return kernel_end; } -static ULONG CopyKernel(ULONG* kernel_end) +static unsigned long CopyKernel(unsigned long* kernel_end) { Elf32_Ehdr *header = (Elf32_Ehdr*)offset2addr(0L); Elf64_Ehdr *header64 = (Elf64_Ehdr*)header; @@ -173,7 +171,7 @@ static ULONG CopyKernel(ULONG* kernel_end) (*kernel_end) = CopyProgramSegments32(header); printf("Kernel entry point is 0x%lx\n\r", - ((ULONG) KSEG0ADDR(header->e_entry))); + ((unsigned long) KSEG0ADDR(header->e_entry))); return KSEG0ADDR(header->e_entry); } else if (header->e_ident[EI_CLASS] == ELFCLASS64) { if (header64->e_ident[EI_DATA] != ELFDATA2MSB) @@ -190,7 +188,7 @@ static ULONG CopyKernel(ULONG* kernel_end) (*kernel_end) = CopyProgramSegments64(header64); printf("Kernel entry point is 0x%lx\n\r", - ((ULONG)KSEG0ADDR(header64->e_entry))); + ((unsigned long)KSEG0ADDR(header64->e_entry))); return KSEG0ADDR(header64->e_entry); } else prom_fatal("Neither an ELF32 nor an ELF64 kernel\n\r"); @@ -198,7 +196,7 @@ static ULONG CopyKernel(ULONG* kernel_end) return 0L; } -static void copyRamdisk(void* rd_vaddr, void* rd_start, ULONG rd_size) +static void copyRamdisk(void* rd_vaddr, void* rd_start, unsigned long rd_size) { printf("Copying initrd from 0x%p to 0x%p (0x%lx bytes)...\n\r", rd_start, rd_vaddr, rd_size); @@ -206,15 +204,15 @@ static void copyRamdisk(void* rd_vaddr, void* rd_start, ULONG rd_size) printf("Initrd copied.\n\r"); } -void _start(LONG argc, CHAR * argv[], CHAR * envp[]) +void _start(long argc, char * argv[], char * envp[]) { char* nargv[3]; int nargc,i; char argv_rd[128]; /* passed to the kernel on its commandline */ - ULONG kernel_end = 0L; - ULONG rd_size= ((char*)&__rd_end) - ((char*)&__rd_start); + unsigned long kernel_end = 0L; + unsigned long rd_size= ((char*)&__rd_end) - ((char*)&__rd_start); char* rd_vaddr=NULL; - void (*kernel_entry)(int argc, CHAR * argv[], CHAR * envp[]); + void (*kernel_entry)(int argc, char * argv[], char * envp[]); /* Print identification */ #if (SUBARCH == IP22) @@ -232,7 +230,7 @@ void _start(LONG argc, CHAR * argv[], CHAR * envp[]) printf("Embedded ramdisk image starts 0x%p, ends 0x%p\n\r", &__rd_start, &__rd_end); #endif - kernel_entry = (void (*)(int, CHAR *[], CHAR *[]))CopyKernel(&kernel_end); + kernel_entry = (void (*)(int, char *[], char *[]))CopyKernel(&kernel_end); /* align to page boundary */ #if (SUBARCH != IP22) |