wok annotate linld/stuff/src/COMMON.H @ rev 19515

linld: multi initrd support
author Pascal Bellard <pascal.bellard@slitaz.org>
date Tue Nov 22 21:19:01 2016 +0100 (2016-11-22)
parents
children 7f92b23984dc
rev   line source
pascal@19515 1 // This file is distributed under GPL
pascal@19515 2 //
pascal@19515 3 // Common defs not belonging to CRTL
pascal@19515 4
pascal@19515 5 #define NL "\r\n"
pascal@19515 6 #define VERSION_STR "0.97"
pascal@19515 7
pascal@19515 8 #if 0 // DEBUG
pascal@19515 9 #undef NDEBUG
pascal@19515 10 #define DEBUG
pascal@19515 11 #define static
pascal@19515 12 #else // not DEBUG
pascal@19515 13 #define NDEBUG
pascal@19515 14 #undef DEBUG
pascal@19515 15 #endif
pascal@19515 16
pascal@19515 17 typedef unsigned long u32; typedef signed long s32;
pascal@19515 18 typedef unsigned short u16; typedef signed short s16;
pascal@19515 19 typedef unsigned char u8; typedef signed char s8;
pascal@19515 20
pascal@19515 21 const u16 _16k = 16*1024u;
pascal@19515 22 const u16 _32k = 32*1024u;
pascal@19515 23 const u32 _64k = 64*1024ul;
pascal@19515 24 const u32 _1m = 1024ul*1024ul;
pascal@19515 25
pascal@19515 26 const PAGE_BITS = 12;
pascal@19515 27 const PAGE_SIZE = 1<<PAGE_BITS;
pascal@19515 28 const PAGE_MASK = PAGE_SIZE-1;
pascal@19515 29
pascal@19515 30 // WARNING!
pascal@19515 31 // BC 3.1 bug: seg() will generate incorrect code if inlined!
pascal@19515 32 // replaced by _dirty_ hack for now
pascal@19515 33 // u16 seg(const void far* p) { return FP_SEG(p); }
pascal@19515 34 inline u16 seg(const void far*) { return _DS; }
pascal@19515 35
pascal@19515 36 inline u16 ofs(const void* p) { return FP_OFF(p); }
pascal@19515 37
pascal@19515 38 extern struct image_himem {
pascal@19515 39 int fd;
pascal@19515 40 u32 fallback;
pascal@19515 41 u32 size;
pascal@19515 42 u32 remaining;
pascal@19515 43 u32 buf;
pascal@19515 44 u32 *bufv;
pascal@19515 45 const char *errmsg;
pascal@19515 46 u32 chunk_size;
pascal@19515 47 void (*next_chunk)(struct image_himem *);
pascal@19515 48 u16 state;
pascal@19515 49 } pm, initrd;
pascal@19515 50
pascal@19515 51 extern char vcpi;
pascal@19515 52 extern const char* kernel_name;
pascal@19515 53 extern const char* initrd_name;
pascal@19515 54 extern const char* cmdline;
pascal@19515 55 extern u16 root_dev;
pascal@19515 56 extern u16 vid_mode;
pascal@19515 57 // External asm helpers
pascal@19515 58 extern "C" void memcpy32(u16,u32, u16,u32, u32);
pascal@19515 59 extern "C" void set_sregs_jump_seg_ofs(u32 csip, u32 sssp);
pascal@19515 60 extern "C" u32 xmm_alloc(u32 size);
pascal@19515 61 extern u32 topmem;
pascal@19515 62 extern "C" u32 memtopz();
pascal@19515 63 extern "C" u32 memtop();
pascal@19515 64 extern "C" void enable_a20_or_die();
pascal@19515 65 extern "C" int get_vcpi_interface();
pascal@19515 66 extern "C" char* prepare_vcpi(void *pagebuf);
pascal@19515 67 //extern "C" int call_pm_routine(void* f);
pascal@19515 68 extern "C" void memcpy_vcpi(u32 dstofs,u16 srcseg,u16 srcofs);
pascal@19515 69 extern "C" void vm2rm();
pascal@19515 70 extern "C" void hook_int15_88();
pascal@19515 71
pascal@19515 72 // C++ helpers
pascal@19515 73 #ifdef DEBUG
pascal@19515 74 extern "C" void hang();
pascal@19515 75 #endif
pascal@19515 76
pascal@19515 77 void load_image(struct image_himem *m);
pascal@19515 78 extern "C" void open_image(const char *name, struct image_himem *m);
pascal@19515 79 extern "C" int read_image(struct image_himem *m, void* data, int sz);
pascal@19515 80 char* load_kernel();
pascal@19515 81 void load_initrd();
pascal@19515 82 void boot_kernel();