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();