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 
syslinux_shuffler_size(void)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  */
set_flags(com32sys_t * regs,uint32_t flags)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);
shift_is_held(void)134 static inline bool shift_is_held(void)
135 {
136     return !!(kbd_shiftflags() & 0x5d); /* Caps/Scroll/Alt/Shift */
137 }
ctrl_is_held(void)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