wok diff 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
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/linld/stuff/src/COMMON.H	Tue Nov 22 21:19:01 2016 +0100
     1.3 @@ -0,0 +1,82 @@
     1.4 +// This file is distributed under GPL
     1.5 +//
     1.6 +// Common defs not belonging to CRTL
     1.7 +
     1.8 +#define NL "\r\n"
     1.9 +#define VERSION_STR "0.97"
    1.10 +
    1.11 +#if 0       // DEBUG
    1.12 + #undef  NDEBUG
    1.13 + #define DEBUG
    1.14 + #define static
    1.15 +#else       // not DEBUG
    1.16 + #define NDEBUG
    1.17 + #undef  DEBUG
    1.18 +#endif
    1.19 +
    1.20 +typedef unsigned long  u32; typedef signed long  s32;
    1.21 +typedef unsigned short u16; typedef signed short s16;
    1.22 +typedef unsigned char  u8;  typedef signed char  s8;
    1.23 +
    1.24 +const u16 _16k = 16*1024u;
    1.25 +const u16 _32k = 32*1024u;
    1.26 +const u32 _64k = 64*1024ul;
    1.27 +const u32 _1m = 1024ul*1024ul;
    1.28 +
    1.29 +const PAGE_BITS = 12;
    1.30 +const PAGE_SIZE = 1<<PAGE_BITS;
    1.31 +const PAGE_MASK = PAGE_SIZE-1;
    1.32 +
    1.33 +// WARNING!
    1.34 +// BC 3.1 bug: seg() will generate incorrect code if inlined!
    1.35 +// replaced by _dirty_ hack for now
    1.36 +// u16 seg(const void far* p) { return FP_SEG(p); }
    1.37 +inline u16 seg(const void far*) { return _DS; }
    1.38 +
    1.39 +inline u16 ofs(const void* p) { return FP_OFF(p); }
    1.40 +
    1.41 +extern struct image_himem {
    1.42 +    int fd;
    1.43 +    u32 fallback;
    1.44 +    u32 size;
    1.45 +    u32 remaining;
    1.46 +    u32 buf;
    1.47 +    u32 *bufv;
    1.48 +    const char *errmsg;
    1.49 +    u32 chunk_size;
    1.50 +    void (*next_chunk)(struct image_himem *);
    1.51 +    u16 state;
    1.52 +} pm, initrd;
    1.53 +
    1.54 +extern char vcpi;
    1.55 +extern const char* kernel_name;
    1.56 +extern const char* initrd_name;
    1.57 +extern const char* cmdline;
    1.58 +extern u16 root_dev;
    1.59 +extern u16 vid_mode;
    1.60 +// External asm helpers
    1.61 +extern "C" void memcpy32(u16,u32, u16,u32, u32);
    1.62 +extern "C" void set_sregs_jump_seg_ofs(u32 csip, u32 sssp);
    1.63 +extern "C" u32 xmm_alloc(u32 size);
    1.64 +extern u32 topmem;
    1.65 +extern "C" u32 memtopz();
    1.66 +extern "C" u32 memtop();
    1.67 +extern "C" void enable_a20_or_die();
    1.68 +extern "C" int get_vcpi_interface();
    1.69 +extern "C" char* prepare_vcpi(void *pagebuf);
    1.70 +//extern "C" int call_pm_routine(void* f);
    1.71 +extern "C" void memcpy_vcpi(u32 dstofs,u16 srcseg,u16 srcofs);
    1.72 +extern "C" void vm2rm();
    1.73 +extern "C" void hook_int15_88();
    1.74 +
    1.75 +// C++ helpers
    1.76 +#ifdef DEBUG
    1.77 +extern "C" void hang();
    1.78 +#endif
    1.79 +
    1.80 +void load_image(struct image_himem *m);
    1.81 +extern "C" void open_image(const char *name, struct image_himem *m);
    1.82 +extern "C" int read_image(struct image_himem *m, void* data, int sz);
    1.83 +char* load_kernel();
    1.84 +void load_initrd();
    1.85 +void boot_kernel();