| Index: embios/trunk/execimage.c | 
| — | — | @@ -0,0 +1,54 @@ | 
|  | 2 | +// | 
|  | 3 | +// | 
|  | 4 | +//    Copyright 2010 TheSeven | 
|  | 5 | +// | 
|  | 6 | +// | 
|  | 7 | +//    This file is part of emBIOS. | 
|  | 8 | +// | 
|  | 9 | +//    emBIOS is free software: you can redistribute it and/or | 
|  | 10 | +//    modify it under the terms of the GNU General Public License as | 
|  | 11 | +//    published by the Free Software Foundation, either version 2 of the | 
|  | 12 | +//    License, or (at your option) any later version. | 
|  | 13 | +// | 
|  | 14 | +//    emBIOS is distributed in the hope that it will be useful, | 
|  | 15 | +//    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | 16 | +//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | 
|  | 17 | +//    See the GNU General Public License for more details. | 
|  | 18 | +// | 
|  | 19 | +//    You should have received a copy of the GNU General Public License along | 
|  | 20 | +//    with emBIOS.  If not, see <http://www.gnu.org/licenses/>. | 
|  | 21 | +// | 
|  | 22 | +// | 
|  | 23 | + | 
|  | 24 | + | 
|  | 25 | +#include "global.h" | 
|  | 26 | +#include "console.h" | 
|  | 27 | +#include "execimage.h" | 
|  | 28 | + | 
|  | 29 | + | 
|  | 30 | +int execimage(void* image) | 
|  | 31 | +{ | 
|  | 32 | +    struct execimage_header* header = (struct execimage_header*)image; | 
|  | 33 | +    if (memcmp(header, "emBIexec", 8)) | 
|  | 34 | +    { | 
|  | 35 | +        cprintf(CONSOLE_BOOT, "execimage: Bad signature!\n" | 
|  | 36 | +                              "%02X %02X %02X %02X %02X %02X %02X %02X\n", | 
|  | 37 | +                header->signature[0], header->signature[1], header->signature[2], | 
|  | 38 | +                header->signature[3], header->signature[4], header->signature[5], | 
|  | 39 | +                header->signature[6], header->signature[7]); | 
|  | 40 | +        return -1; | 
|  | 41 | +    } | 
|  | 42 | +    if (header->version > 0) | 
|  | 43 | +    { | 
|  | 44 | +        cprintf(CONSOLE_BOOT, "execimage: Unsupported version! (%08X)\n", header->version); | 
|  | 45 | +        return -2; | 
|  | 46 | +    } | 
|  | 47 | +    if (header->baseaddr != image) | 
|  | 48 | +    { | 
|  | 49 | +        cprintf(CONSOLE_BOOT, "execimage: Image loaded to wrong address! " | 
|  | 50 | +                              "(expected: %08X, got: %08X)\n", header->baseaddr, image); | 
|  | 51 | +        return -3; | 
|  | 52 | +    } | 
|  | 53 | +    return thread_create(header->threadname, header->entrypoint, header->stackaddr, | 
|  | 54 | +                         header->stacksize, header->threadtype, header->threadpriority, true); | 
|  | 55 | +} | 
| Index: embios/trunk/execimage.h | 
| — | — | @@ -0,0 +1,50 @@ | 
|  | 2 | +// | 
|  | 3 | +// | 
|  | 4 | +//    Copyright 2010 TheSeven | 
|  | 5 | +// | 
|  | 6 | +// | 
|  | 7 | +//    This file is part of emBIOS. | 
|  | 8 | +// | 
|  | 9 | +//    emBIOS is free software: you can redistribute it and/or | 
|  | 10 | +//    modify it under the terms of the GNU General Public License as | 
|  | 11 | +//    published by the Free Software Foundation, either version 2 of the | 
|  | 12 | +//    License, or (at your option) any later version. | 
|  | 13 | +// | 
|  | 14 | +//    emBIOS is distributed in the hope that it will be useful, | 
|  | 15 | +//    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | 16 | +//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | 
|  | 17 | +//    See the GNU General Public License for more details. | 
|  | 18 | +// | 
|  | 19 | +//    You should have received a copy of the GNU General Public License along | 
|  | 20 | +//    with emBIOS.  If not, see <http://www.gnu.org/licenses/>. | 
|  | 21 | +// | 
|  | 22 | +// | 
|  | 23 | + | 
|  | 24 | + | 
|  | 25 | +#ifndef __EXECIMAGE_H__ | 
|  | 26 | +#define __EXECIMAGE_H__ | 
|  | 27 | + | 
|  | 28 | + | 
|  | 29 | +#include "global.h" | 
|  | 30 | + | 
|  | 31 | + | 
|  | 32 | +struct execimage_header | 
|  | 33 | +{ | 
|  | 34 | +    char signature[8]; | 
|  | 35 | +    int version; | 
|  | 36 | +    void* baseaddr; | 
|  | 37 | +    int size; | 
|  | 38 | +    uint32_t crc32; | 
|  | 39 | +    void* stackaddr; | 
|  | 40 | +    int stacksize; | 
|  | 41 | +    void* entrypoint; | 
|  | 42 | +    char* threadname; | 
|  | 43 | +    int threadtype; | 
|  | 44 | +    int threadpriority; | 
|  | 45 | +}; | 
|  | 46 | + | 
|  | 47 | + | 
|  | 48 | +int execimage(void* image); | 
|  | 49 | + | 
|  | 50 | + | 
|  | 51 | +#endif |