]>
Commit | Line | Data |
---|---|---|
2373cba3 PC |
1 | /* SPDX-License-Identifier: GPL-2.0+ */ |
2 | ||
3 | #ifndef __PXE_UTILS_H | |
4 | #define __PXE_UTILS_H | |
5 | ||
6 | /* | |
7 | * A note on the pxe file parser. | |
8 | * | |
9 | * We're parsing files that use syslinux grammar, which has a few quirks. | |
10 | * String literals must be recognized based on context - there is no | |
11 | * quoting or escaping support. There's also nothing to explicitly indicate | |
12 | * when a label section completes. We deal with that by ending a label | |
13 | * section whenever we see a line that doesn't include. | |
14 | * | |
15 | * As with the syslinux family, this same file format could be reused in the | |
16 | * future for non pxe purposes. The only action it takes during parsing that | |
17 | * would throw this off is handling of include files. It assumes we're using | |
18 | * pxe, and does a tftp download of a file listed as an include file in the | |
19 | * middle of the parsing operation. That could be handled by refactoring it to | |
20 | * take a 'include file getter' function. | |
21 | */ | |
22 | ||
23 | /* | |
24 | * Describes a single label given in a pxe file. | |
25 | * | |
26 | * Create these with the 'label_create' function given below. | |
27 | * | |
28 | * name - the name of the menu as given on the 'menu label' line. | |
29 | * kernel - the path to the kernel file to use for this label. | |
30 | * append - kernel command line to use when booting this label | |
31 | * initrd - path to the initrd to use for this label. | |
32 | * attempted - 0 if we haven't tried to boot this label, 1 if we have. | |
33 | * localboot - 1 if this label specified 'localboot', 0 otherwise. | |
34 | * list - lets these form a list, which a pxe_menu struct will hold. | |
35 | */ | |
36 | struct pxe_label { | |
37 | char num[4]; | |
38 | char *name; | |
39 | char *menu; | |
40 | char *kernel; | |
41 | char *config; | |
42 | char *append; | |
43 | char *initrd; | |
44 | char *fdt; | |
45 | char *fdtdir; | |
46 | int ipappend; | |
47 | int attempted; | |
48 | int localboot; | |
49 | int localboot_val; | |
50 | struct list_head list; | |
51 | }; | |
52 | ||
53 | /* | |
54 | * Describes a pxe menu as given via pxe files. | |
55 | * | |
56 | * title - the name of the menu as given by a 'menu title' line. | |
57 | * default_label - the name of the default label, if any. | |
58 | * bmp - the bmp file name which is displayed in background | |
59 | * timeout - time in tenths of a second to wait for a user key-press before | |
60 | * booting the default label. | |
61 | * prompt - if 0, don't prompt for a choice unless the timeout period is | |
62 | * interrupted. If 1, always prompt for a choice regardless of | |
63 | * timeout. | |
64 | * labels - a list of labels defined for the menu. | |
65 | */ | |
66 | struct pxe_menu { | |
67 | char *title; | |
68 | char *default_label; | |
69 | char *bmp; | |
70 | int timeout; | |
71 | int prompt; | |
72 | struct list_head labels; | |
73 | }; | |
74 | ||
75 | extern bool is_pxe; | |
76 | ||
09140113 | 77 | extern int (*do_getfile)(struct cmd_tbl *cmdtp, const char *file_path, |
2373cba3 PC |
78 | char *file_addr); |
79 | void destroy_pxe_menu(struct pxe_menu *cfg); | |
09140113 | 80 | int get_pxe_file(struct cmd_tbl *cmdtp, const char *file_path, |
2373cba3 | 81 | unsigned long file_addr); |
09140113 | 82 | int get_pxelinux_path(struct cmd_tbl *cmdtp, const char *file, |
2373cba3 | 83 | unsigned long pxefile_addr_r); |
09140113 SG |
84 | void handle_pxe_menu(struct cmd_tbl *cmdtp, struct pxe_menu *cfg); |
85 | struct pxe_menu *parse_pxefile(struct cmd_tbl *cmdtp, unsigned long menucfg); | |
2373cba3 PC |
86 | int format_mac_pxe(char *outbuf, size_t outbuf_len); |
87 | ||
88 | #endif /* __PXE_UTILS_H */ |