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 77 extern int (*do_getfile)(cmd_tbl_t *cmdtp, const char *file_path, 78 char *file_addr); 79 void destroy_pxe_menu(struct pxe_menu *cfg); 80 int get_pxe_file(cmd_tbl_t *cmdtp, const char *file_path, 81 unsigned long file_addr); 82 int get_pxelinux_path(cmd_tbl_t *cmdtp, const char *file, 83 unsigned long pxefile_addr_r); 84 void handle_pxe_menu(cmd_tbl_t *cmdtp, struct pxe_menu *cfg); 85 struct pxe_menu *parse_pxefile(cmd_tbl_t *cmdtp, unsigned long menucfg); 86 int format_mac_pxe(char *outbuf, size_t outbuf_len); 87 88 #endif /* __PXE_UTILS_H */ 89