2 * Copyright (C) 2001-2003 Hewlett-Packard Co.
3 * Contributed by Stephane Eranian <eranian@hpl.hp.com>
5 * Copyright (C) 2001 Silicon Graphics, Inc.
6 * Contributed by Brent Casavant <bcasavan@sgi.com>
8 * This file is part of the ELILO, the EFI Linux boot loader.
10 * GNU EFI is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2, or (at your option)
15 * GNU EFI is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with GNU EFI; see the file COPYING. If not, write to the Free
22 * Software Foundation, 59 Temple Place - Suite 330, Boston, MA
25 * Please check out the elilo.txt for complete documentation on how
26 * to use this program.
32 #define ELILO_VERSION L"3.12"
37 #define PTR_FMT L"0x%x"
39 #define PTR_FMT L"0x%lx"
42 #include "elilo_debug.h"
51 #define MB (1024*1024) /* 1 megabyte */
53 /* Round X up/down to A, which must be an integer power of two. */
54 #define ROUNDUP(x,a) (((x) + (a) - 1) & ~((a) - 1))
55 #define ROUNDDOWN(x,a) ((x) & ~((a) - 1))
60 #define ELILO_LOAD_SUCCESS 0
61 #define ELILO_LOAD_ABORTED 1
62 #define ELILO_LOAD_ERROR 2
63 #define ELILO_LOAD_RETRY 3
65 #define ELILO_DEFAULT_TIMEOUT ELILO_TIMEOUT_INFINITY
66 #define ELILO_TIMEOUT_INFINITY (~0UL)
68 #define CMDLINE_MAXLEN 512 /* needed by ia32 */
69 #define FILENAME_MAXLEN 256
71 /* Just pick an arbitrary number that's high enough for now :o) */
72 #define MAX_DEFAULT_CONFIGS 16
78 typedef struct config_file {
79 CHAR16 fname[FILENAME_MAXLEN];
84 * list of options controllable from both the command line
87 UINTN alt_check; /* always check for alternate kernel */
88 UINTN debug; /* debug print() on */
89 UINTN delay; /* delay before booting the image */
90 UINTN verbose; /* verbosity level [1-5] */
91 CHAR16 initrd[FILENAME_MAXLEN]; /* name of file for initial ramdisk */
92 CHAR16 vmcode[FILENAME_MAXLEN]; /* name of file for boot time module*/
93 UINT8 delay_set; /* mark whether or not delay was specified on cmdline */
94 UINT8 edd30_on; /* true is EDD30 variable is TRUE */
95 UINT8 edd30_no_force; /* don't force EDD30 variable to true */
97 * list of options controllable from either the command line
100 UINTN prompt; /* enter interactive mode */
101 UINTN parse_only; /* only parses the config file */
102 UINTN timeout; /* timeout before leaving interactive mode*/
104 image_opt_t img_opt; /* architecture independent per image options*/
106 sys_img_options_t *sys_img_opts; /* architecture depdendent per image options */
108 CHAR16 default_kernel[FILENAME_MAXLEN];
109 /* CHAR16 default_config[FILENAME_MAXLEN]; */
110 config_file_t default_configs[MAX_DEFAULT_CONFIGS];
112 CHAR16 config[FILENAME_MAXLEN]; /* name of config file */
113 CHAR16 chooser[FILENAME_MAXLEN]; /* image chooser to use */
117 extern elilo_config_t elilo_opt;
119 extern EFI_SYSTEM_TABLE *systab;
134 EFI_MEMORY_DESCRIPTOR *md;
142 #define MAX(a,b) ((a)>(b) ? (a) : (b))
146 #define MIN(a,b) ((a)>(b) ? (b) : (a))
149 #define VERB_PRT(n,cmd) \
150 { if (elilo_opt.verbose >= (n)) { cmd; } }
154 extern INTN alloc_init(VOID);
155 extern VOID *alloc(UINTN, EFI_MEMORY_TYPE);
156 extern VOID free(VOID *);
157 extern VOID *alloc_pages(UINTN, EFI_MEMORY_TYPE, EFI_ALLOCATE_TYPE, VOID *);
158 extern VOID free_pages(VOID *);
159 extern VOID free_all(VOID);
160 extern INTN alloc_kmem(VOID *, UINTN);
161 extern INTN alloc_kmem_anywhere(VOID **, UINTN);
162 extern VOID free_kmem(VOID);
163 extern VOID free_all_memory(VOID);
166 extern INTN read_file(UINTN fd, UINTN, CHAR8 *);
167 extern EFI_STATUS check_abort(VOID);
168 extern VOID reset_input(VOID);
169 extern INTN wait_timeout(UINTN);
170 extern INTN argify(CHAR16 *, UINTN, CHAR16 **);
171 extern VOID unargify(CHAR16 **, CHAR16 **);
172 extern void split_args(CHAR16 *, CHAR16 *, CHAR16 *);
173 extern INTN get_memmap(mmap_desc_t *);
174 extern VOID free_memmap(mmap_desc_t *);
175 extern INTN find_kernel_memory(VOID *low_addr, VOID *max_addr, UINTN alignment, VOID ** start);
176 extern VOID print_memmap(mmap_desc_t *);
177 extern VOID ascii2U(CHAR8 *, CHAR16 *, UINTN);
178 extern VOID U2ascii(CHAR16 *, CHAR8 *, UINTN);
180 /* from config.c (more in config.h) */
181 extern EFI_STATUS read_config(CHAR16 *);
182 extern VOID print_config_options(VOID);
183 extern INTN find_label(CHAR16 *, CHAR16 *, CHAR16 *, CHAR16 *, CHAR16 *);
184 extern VOID print_label_list(VOID);
185 extern INTN config_init(VOID);
186 extern CHAR16 *get_message_filename(INTN which);
187 extern CHAR16 *find_description(CHAR16 *label);
188 extern VOID *get_next_description(VOID *prev, CHAR16 **label, CHAR16 **description);
189 extern CHAR16 *get_config_file(VOID);
192 extern INTN load_file(CHAR16 *, memdesc_t *);
194 /* from alternate.c */
195 extern INTN alternate_kernel(CHAR16 *, UINTN);
197 /* from bootparams.c */
198 extern VOID *create_boot_params (CHAR16 *, memdesc_t *, memdesc_t *, UINTN *);
199 extern VOID free_boot_params(VOID *bp);
202 * architecture-specific API
206 extern INTN sysdeps_create_boot_params(boot_params_t *, CHAR8 *, memdesc_t *, memdesc_t *, UINTN *);
207 extern VOID sysdeps_free_boot_params(boot_params_t *);
208 extern INTN sysdeps_init(EFI_HANDLE dev);
209 extern INTN sysdeps_initrd_get_addr(kdesc_t *, memdesc_t *);
210 extern INTN sysdeps_preloop_actions(EFI_HANDLE, CHAR16 **, INTN, INTN, EFI_HANDLE);
211 extern CHAR16 *sysdeps_get_cmdline_opts(VOID);
212 extern INTN sysdeps_getopt(INTN, INTN, CHAR16 *);
213 extern VOID sysdeps_print_cmdline_opts(VOID);
214 extern INTN sysdeps_register_options(VOID);
216 #define CHAR_SLASH L'/'
217 #define CHAR_BACKSLASH L'\\'
219 #endif /* __ELILO_H__ */