diff options
Diffstat (limited to 'contrib/syslinux-4.02/memdisk/memdisk.h')
-rw-r--r-- | contrib/syslinux-4.02/memdisk/memdisk.h | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/contrib/syslinux-4.02/memdisk/memdisk.h b/contrib/syslinux-4.02/memdisk/memdisk.h new file mode 100644 index 0000000..b6b277a --- /dev/null +++ b/contrib/syslinux-4.02/memdisk/memdisk.h @@ -0,0 +1,137 @@ +/* ----------------------------------------------------------------------- * + * + * Copyright 2001-2008 H. Peter Anvin - All Rights Reserved + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, Inc., 53 Temple Place Ste 330, + * Boston MA 02111-1307, USA; either version 2 of the License, or + * (at your option) any later version; incorporated herein by reference. + * + * ----------------------------------------------------------------------- */ + +/* + * memdisk.h + * + * Miscellaneous header definitions + */ + +#ifndef MEMDISK_H +#define MEMDISK_H + +#include <stddef.h> + +/* We use the com32 interface for calling 16-bit code */ +#include <com32.h> + +#define __cdecl __attribute__((cdecl,regparm(0))) + +void __cdecl intcall(uint8_t, com32sys_t *, com32sys_t *); + +/* Structure passed in from the real-mode code */ +struct real_mode_args { + uint32_t rm_return; + uint32_t rm_intcall; + uint32_t rm_bounce; + uint32_t rm_base; + uint32_t rm_handle_interrupt; + uint32_t rm_gdt; + uint32_t rm_size; + uint32_t rm_pmjmp; + uint32_t rm_rmjmp; +}; +extern struct real_mode_args rm_args; +#define sys_bounce ((void *)rm_args.rm_bounce) + +/* This is the header in the boot sector/setup area */ +struct setup_header { + char cmdline[0x1f1]; + uint8_t setup_secs; + uint16_t syssize; + uint16_t swap_dev; + uint16_t ram_size; + uint16_t vid_mode; + uint16_t root_dev; + uint16_t boot_flag; + uint16_t jump; + char header[4]; + uint16_t version; + uint32_t realmode_swtch; + uint32_t start_sys; + uint8_t type_of_loader; + uint8_t loadflags; + uint16_t setup_move_size; + uint32_t code32_start; + uint32_t ramdisk_image; + uint32_t ramdisk_size; + uint32_t bootsect_kludge; + uint16_t head_end_ptr; + uint16_t pad1; + uint32_t cmd_line_ptr; + uint32_t initrd_addr_max; + uint32_t esdi; + uint32_t edx; + uint32_t sssp; + uint32_t csip; +}; +#define shdr ((struct setup_header *)rm_args.rm_base) + +/* Standard routines */ +void *memcpy(void *, const void *, size_t); +void *memset(void *, int, size_t); +void *memmove(void *, const void *, size_t); + +#define strcpy(a,b) __builtin_strcpy(a,b) + +static inline size_t strlen(const char *__a) +{ + const char *__D; + size_t __c; + +asm("repne;scasb":"=D"(__D), "=c"(__c) +: "D"(__a), "c"(-1), "a"(0), "m"(*__a)); + + return __D - __a - 1; +} + +/* memcpy() but returns a pointer to end of buffer */ +static inline void *mempcpy(void *__d, const void *__s, unsigned int __n) +{ + memcpy(__d, __s, __n); + return (void *)((char *)__d + __n); +} + +/* memcmp() */ +static inline int memcmp(const void *__a, const void *__b, unsigned int __n) +{ + const unsigned char *__aa = __a; + const unsigned char *__bb = __b; + int __d; + + while (__n--) { + __d = *__bb++ - *__aa++; + if (__d) + return __d; + } + + return 0; +} + +static inline void sti(void) +{ + asm volatile("sti"); +} + +static inline void cli(void) +{ + asm volatile("cli"); +} + +/* Decompression */ +extern int check_zip(void *indata, uint32_t size, uint32_t * zbytes_p, + uint32_t * dbytes_p, uint32_t * orig_crc, + uint32_t * offset_p); +extern void *unzip(void *indata, uint32_t zbytes, uint32_t dbytes, + uint32_t orig_crc, void *target); + +#endif |