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