| #ifndef CORE_H |
| #define CORE_H |
| |
| #include <klibc/compiler.h> |
| #include <stddef.h> |
| #include <stdlib.h> |
| #include <stdbool.h> |
| #include <inttypes.h> |
| #include <stdio.h> |
| #include <dprintf.h> |
| #include <com32.h> |
| #include <errno.h> |
| #include <syslinux/pmapi.h> |
| #include <syslinux/sysappend.h> |
| #include <kaboom.h> |
| #include <timer.h> |
| |
| extern char core_xfer_buf[65536]; |
| extern char core_cache_buf[65536]; |
| extern char trackbuf[]; |
| extern char CurrentDirName[]; |
| extern char SubvolName[]; |
| extern char ConfigName[]; |
| extern char config_cwd[]; |
| extern char cmd_line[]; |
| extern char ConfigFile[]; |
| extern char syslinux_banner[]; |
| extern char copyright_str[]; |
| |
| extern const size_t __syslinux_shuffler_size; |
| |
| static inline size_t syslinux_shuffler_size(void) |
| { |
| return __syslinux_shuffler_size; |
| } |
| |
| /* |
| * Mark symbols that are only used by BIOS as __weak until we can move |
| * all references out of the generic (EFI + BIOS) code and into |
| * BIOS-specific code. |
| */ |
| extern __weak uint16_t BIOSName; |
| extern __weak char KernelName[]; |
| extern __weak char StackBuf[]; |
| |
| extern uint8_t KbdMap[256]; |
| |
| extern const uint16_t IPAppends[]; |
| extern size_t numIPAppends; |
| |
| extern uint16_t SerialPort; |
| extern uint16_t BaudDivisor; |
| extern uint8_t FlowOutput; |
| extern uint8_t FlowInput; |
| extern uint8_t FlowIgnore; |
| |
| extern uint8_t ScrollAttribute; |
| extern uint16_t DisplayCon; |
| |
| /* diskstart.inc isolinux.asm*/ |
| extern void getlinsec(void); |
| |
| /* pm.inc */ |
| void core_pm_null_hook(void); |
| extern void (*core_pm_hook)(void); |
| |
| /* getc.inc */ |
| extern void core_open(void); |
| |
| /* adv.inc */ |
| extern void adv_init(void); |
| extern void adv_write(void); |
| |
| /* hello.c */ |
| extern void myputs(const char*); |
| |
| /* idle.c */ |
| extern int (*idle_hook_func)(void); |
| extern void __idle(void); |
| extern void reset_idle(void); |
| |
| /* mem/malloc.c, mem/free.c, mem/init.c */ |
| extern void *lmalloc(size_t); |
| extern void *pmapi_lmalloc(size_t); |
| extern void *zalloc(size_t); |
| extern void free(void *); |
| extern void mem_init(void); |
| |
| /* sysappend.c */ |
| extern void print_sysappend(void); |
| extern const char *sysappend_strings[SYSAPPEND_MAX]; |
| extern uint32_t SysAppends; |
| extern void sysappend_set_uuid(const uint8_t *uuid); |
| extern void sysappend_set_fs_uuid(void); |
| |
| void __cdecl core_intcall(uint8_t, const com32sys_t *, com32sys_t *); |
| void __cdecl core_farcall(uint32_t, const com32sys_t *, com32sys_t *); |
| int __cdecl core_cfarcall(uint32_t, const void *, uint32_t); |
| |
| extern const com32sys_t zero_regs; |
| void call16(void (*)(void), const com32sys_t *, com32sys_t *); |
| |
| /* |
| * __lowmem is in the low 1 MB; __bss16 in the low 64K |
| */ |
| #ifdef __SYSLINUX_CORE__ /* Not supported in modules */ |
| # define __lowmem __attribute__((nocommon,section(".lowmem"))) |
| # define __bss16 __attribute__((nocommon,section(".bss16"))) |
| #endif |
| |
| /* |
| * Helper routine to return a specific set of flags |
| */ |
| static inline void set_flags(com32sys_t *regs, uint32_t flags) |
| { |
| uint32_t eflags; |
| |
| eflags = regs->eflags.l; |
| eflags &= ~(EFLAGS_CF|EFLAGS_PF|EFLAGS_AF|EFLAGS_ZF|EFLAGS_SF|EFLAGS_OF); |
| eflags |= flags; |
| regs->eflags.l = eflags; |
| } |
| |
| extern int start_ldlinux(int argc, char **argv); |
| extern int create_args_and_load(char *); |
| |
| extern void write_serial(char data); |
| extern void writestr(char *str); |
| extern void writechr(char data); |
| extern void crlf(void); |
| extern int pollchar(void); |
| extern char getchar(char *hi); |
| extern uint8_t kbd_shiftflags(void); |
| static inline bool shift_is_held(void) |
| { |
| return !!(kbd_shiftflags() & 0x5d); /* Caps/Scroll/Alt/Shift */ |
| } |
| static inline bool ctrl_is_held(void) |
| { |
| return !!(kbd_shiftflags() & 0x04); /* Only Ctrl */ |
| } |
| |
| extern void cleanup_hardware(void); |
| extern void sirq_cleanup(void); |
| extern void adjust_screen(void); |
| |
| extern void execute(const char *cmdline, uint32_t type, bool sysappend); |
| extern void load_kernel(const char *cmdline); |
| |
| extern void dmi_init(void); |
| |
| extern void do_sysappend(char *buf); |
| |
| extern void load_env32(com32sys_t *regs); |
| |
| #endif /* CORE_H */ |