Home | History | Annotate | Download | only in include
      1 #ifndef CORE_H
      2 #define CORE_H
      3 
      4 #include <klibc/compiler.h>
      5 #include <stddef.h>
      6 #include <stdlib.h>
      7 #include <stdbool.h>
      8 #include <inttypes.h>
      9 #include <stdio.h>
     10 #include <dprintf.h>
     11 #include <com32.h>
     12 #include <errno.h>
     13 #include <syslinux/pmapi.h>
     14 #include <syslinux/sysappend.h>
     15 #include <kaboom.h>
     16 #include <timer.h>
     17 
     18 extern char core_xfer_buf[65536];
     19 extern char core_cache_buf[65536];
     20 extern char trackbuf[];
     21 extern char CurrentDirName[];
     22 extern char SubvolName[];
     23 extern char ConfigName[];
     24 extern char config_cwd[];
     25 extern char cmd_line[];
     26 extern char ConfigFile[];
     27 extern char syslinux_banner[];
     28 extern char copyright_str[];
     29 
     30 extern const size_t __syslinux_shuffler_size;
     31 
     32 static inline size_t syslinux_shuffler_size(void)
     33 {
     34     return __syslinux_shuffler_size;
     35 }
     36 
     37 /*
     38  * Mark symbols that are only used by BIOS as __weak until we can move
     39  * all references out of the generic (EFI + BIOS) code and into
     40  * BIOS-specific code.
     41  */
     42 extern __weak uint16_t BIOSName;
     43 extern __weak char KernelName[];
     44 extern __weak char StackBuf[];
     45 
     46 extern uint8_t KbdMap[256];
     47 
     48 extern const uint16_t IPAppends[];
     49 extern size_t numIPAppends;
     50 
     51 extern uint16_t SerialPort;
     52 extern uint16_t BaudDivisor;
     53 extern uint8_t FlowOutput;
     54 extern uint8_t FlowInput;
     55 extern uint8_t FlowIgnore;
     56 
     57 extern uint8_t ScrollAttribute;
     58 extern uint16_t DisplayCon;
     59 
     60 /* diskstart.inc isolinux.asm*/
     61 extern void getlinsec(void);
     62 
     63 /* pm.inc */
     64 void core_pm_null_hook(void);
     65 extern void (*core_pm_hook)(void);
     66 
     67 /* getc.inc */
     68 extern void core_open(void);
     69 
     70 /* adv.inc */
     71 extern void adv_init(void);
     72 extern void adv_write(void);
     73 
     74 /* hello.c */
     75 extern void myputs(const char*);
     76 
     77 /* idle.c */
     78 extern int (*idle_hook_func)(void);
     79 extern void __idle(void);
     80 extern void reset_idle(void);
     81 
     82 /* mem/malloc.c, mem/free.c, mem/init.c */
     83 extern void *lmalloc(size_t);
     84 extern void *pmapi_lmalloc(size_t);
     85 extern void *zalloc(size_t);
     86 extern void free(void *);
     87 extern void mem_init(void);
     88 
     89 /* sysappend.c */
     90 extern void print_sysappend(void);
     91 extern const char *sysappend_strings[SYSAPPEND_MAX];
     92 extern uint32_t SysAppends;
     93 extern void sysappend_set_uuid(const uint8_t *uuid);
     94 extern void sysappend_set_fs_uuid(void);
     95 
     96 void __cdecl core_intcall(uint8_t, const com32sys_t *, com32sys_t *);
     97 void __cdecl core_farcall(uint32_t, const com32sys_t *, com32sys_t *);
     98 int __cdecl core_cfarcall(uint32_t, const void *, uint32_t);
     99 
    100 extern const com32sys_t zero_regs;
    101 void call16(void (*)(void), const com32sys_t *, com32sys_t *);
    102 
    103 /*
    104  * __lowmem is in the low 1 MB; __bss16 in the low 64K
    105  */
    106 #ifdef __SYSLINUX_CORE__	/* Not supported in modules */
    107 # define __lowmem __attribute__((nocommon,section(".lowmem")))
    108 # define __bss16  __attribute__((nocommon,section(".bss16")))
    109 #endif
    110 
    111 /*
    112  * Helper routine to return a specific set of flags
    113  */
    114 static inline void set_flags(com32sys_t *regs, uint32_t flags)
    115 {
    116     uint32_t eflags;
    117 
    118     eflags = regs->eflags.l;
    119     eflags &= ~(EFLAGS_CF|EFLAGS_PF|EFLAGS_AF|EFLAGS_ZF|EFLAGS_SF|EFLAGS_OF);
    120     eflags |= flags;
    121     regs->eflags.l = eflags;
    122 }
    123 
    124 extern int start_ldlinux(int argc, char **argv);
    125 extern int create_args_and_load(char *);
    126 
    127 extern void write_serial(char data);
    128 extern void writestr(char *str);
    129 extern void writechr(char data);
    130 extern void crlf(void);
    131 extern int pollchar(void);
    132 extern char getchar(char *hi);
    133 extern uint8_t kbd_shiftflags(void);
    134 static inline bool shift_is_held(void)
    135 {
    136     return !!(kbd_shiftflags() & 0x5d); /* Caps/Scroll/Alt/Shift */
    137 }
    138 static inline bool ctrl_is_held(void)
    139 {
    140     return !!(kbd_shiftflags() & 0x04); /* Only Ctrl */
    141 }
    142 
    143 extern void cleanup_hardware(void);
    144 extern void sirq_cleanup(void);
    145 extern void adjust_screen(void);
    146 
    147 extern void execute(const char *cmdline, uint32_t type, bool sysappend);
    148 extern void load_kernel(const char *cmdline);
    149 
    150 extern void dmi_init(void);
    151 
    152 extern void do_sysappend(char *buf);
    153 
    154 extern void load_env32(com32sys_t *regs);
    155 
    156 #endif /* CORE_H */
    157