176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* ----------------------------------------------------------------------- *
276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   Copyright 2009 Erwan Velu - All Rights Reserved
476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   Permission is hereby granted, free of charge, to any person
676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   obtaining a copy of this software and associated documentation
776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   files (the "Software"), to deal in the Software without
876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   restriction, including without limitation the rights to use,
976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   copy, modify, merge, publish, distribute, sublicense, and/or
1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   sell copies of the Software, and to permit persons to whom
1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   the Software is furnished to do so, subject to the following
1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   conditions:
1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   The above copyright notice and this permission notice shall
1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   be included in all copies or substantial portions of the Software.
1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   OTHER DEALINGS IN THE SOFTWARE.
2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * -----------------------------------------------------------------------
2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */
2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef DEFINE_HDT_COMMON_H
3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DEFINE_HDT_COMMON_H
3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <stdio.h>
3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <syslinux/pxe.h>
3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <console.h>
3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <consoles.h>
3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <syslinux/vesacon.h>
3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include "sys/pci.h"
3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <disk/bootloaders.h>
3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <disk/errno_disk.h>
4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <disk/error.h>
4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <disk/geom.h>
4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <disk/mbrs.h>
4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <disk/msdos.h>
4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <disk/partition.h>
4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <disk/swsusp.h>
4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <disk/read.h>
4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include "cpuid.h"
4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include "dmi/dmi.h"
5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include "hdt-ata.h"
5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <lib/sys/vesa/vesa.h>
5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <vpd/vpd.h>
5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <libansi.h>
5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <acpi/acpi.h>
5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <libupload/upload_backend.h>
5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* This two values are used for switching for the menu to the CLI mode */
5876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define HDT_SWITCH_TO_CLI "hdt_switch_to_cli"
5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define HDT_DUMP "hdt_dump"
6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define HDT_RETURN_TO_CLI 100
6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MAX_VESA_MODES 255
6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* This value is used for rebooting from the menu mode */
6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define HDT_REBOOT "hdt_reboot"
6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* The maximum number of commands we can process */
6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MAX_NB_AUTO_COMMANDS 255
6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* The maximum size of a command */
6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define AUTO_COMMAND_SIZE 255
7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* The char that separate two commands */
7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define AUTO_SEPARATOR ";"
7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* The char that surround the list of commands */
7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define AUTO_DELIMITER '\''
7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
7576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Graphic to load in background when using the vesa mode */
7676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define CLI_DEFAULT_BACKGROUND "backgnd.png"
7776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
7876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* The maximum number of lines */
7976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MAX_CLI_LINES 20
8076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MAX_VESA_CLI_LINES 24
8176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
8276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct upload_backend *upload;
8376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
8476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Defines if the cli is quiet*/
8576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanbool quiet;
8676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
8776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Defines if the cli is totally silent*/
8876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanbool silent;
8976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
9076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Defines if we must use the vesa mode */
9176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanbool vesamode;
9276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
9376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Defines if we must use the menu mode */
9476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanbool menumode;
9576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
9676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Defines if we are running the auto mode */
9776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanbool automode;
9876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
9976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Defines the number of lines in the console
10076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Default is 20 for a std console */
10176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanextern int max_console_lines;
10276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
10376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanextern int display_line_nb;
10476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanextern bool disable_more_printf;
10576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
10676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define pause_printf() do {\
10776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman       printf("--More--");\
10876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman       get_key(stdin, 0);\
10976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman       printf("\033[2K\033[1G\033[1F\n");\
11076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} while (0);
11176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
11276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* The brokeness of that macro is that
11376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * it assumes that __VA_ARGS__ contains
11476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * one \n (and only one)
11576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */
11676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define more_printf(...) do {\
11776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (__likely(!silent)) {\
11876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  if (__likely(!disable_more_printf)) {\
11976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman   if (display_line_nb == max_console_lines) {\
12076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    display_line_nb=0;\
12176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    printf("\n--More--");\
12276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    get_key(stdin, 0);\
12376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    printf("\033[2K\033[1G\033[1F");\
12476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman   }\
12576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman   display_line_nb++;\
12676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  }\
12776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  printf(__VA_ARGS__);\
12876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman }\
12976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} while (0);
13076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
13176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Display CPU registers for debugging purposes */
13276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstatic inline void printregs(const com32sys_t * r)
13376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{
13476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    printf("eflags = %08x  ds = %04x  es = %04x  fs = %04x  gs = %04x\n"
13576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	   "eax = %08x  ebx = %08x  ecx = %08x  edx = %08x\n"
13676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	   "ebp = %08x  esi = %08x  edi = %08x  esp = %08x\n",
13776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	   r->eflags.l, r->ds, r->es, r->fs, r->gs,
13876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	   r->eax.l, r->ebx.l, r->ecx.l, r->edx.l,
13976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	   r->ebp.l, r->esi.l, r->edi.l, r->_unused_esp.l);
14076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}
14176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
14276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct s_pxe {
14376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    uint16_t vendor_id;
14476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    uint16_t product_id;
14576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    uint16_t subvendor_id;
14676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    uint16_t subproduct_id;
14776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    uint8_t rev;
14876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    uint8_t pci_bus;
14976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    uint8_t pci_dev;
15076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    uint8_t pci_func;
15176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    uint8_t base_class;
15276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    uint8_t sub_class;
15376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    uint8_t prog_intf;
15476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    uint8_t nictype;
15576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    char mac_addr[18];		/* The current mac address */
15676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    uint8_t ip_addr[4];
15776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    pxe_bootp_t dhcpdata;	/* The dhcp answer */
15876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    struct pci_device *pci_device;	/* The matching pci device */
15976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    uint8_t pci_device_pos;	/* It position in our pci sorted list */
16076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman};
16176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
16276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct s_vesa_mode_info {
16376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    struct vesa_mode_info mi;
16476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    uint16_t mode;
16576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman};
16676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
16776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct s_vesa {
16876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    uint8_t major_version;
16976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    uint8_t minor_version;
17076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    struct s_vesa_mode_info vmi[MAX_VESA_MODES];
17176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    uint8_t vmi_count;
17276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    uint16_t total_memory;
17376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    char vendor[256];
17476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    char product[256];
17576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    char product_revision[256];
17676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    uint16_t software_rev;
17776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman};
17876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
17976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct s_hardware {
18076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    s_dmi dmi;			/* DMI table */
18176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    s_cpu cpu;			/* CPU information */
18276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    uint8_t physical_cpu_count; /* Number of physical cpu */
18376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    s_vpd vpd;			/* VPD information */
18476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    s_acpi acpi;
18576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    struct pci_domain *pci_domain;	/* PCI Devices */
18676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    struct driveinfo disk_info[256];	/* Disk Information */
18776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    uint32_t mbr_ids[256];	/* MBR ids */
18876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    int disks_count;		/* Number of detected disks */
18976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    struct s_pxe pxe;
19076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    struct s_vesa vesa;
19176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    unsigned long detected_memory_size;	/* The detected memory size (in KB) */
19276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
19376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    int pci_ids_return_code;
19476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    int modules_pcimap_return_code;
19576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    int modules_alias_return_code;
19676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    int nb_pci_devices;
19776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    bool is_dmi_valid;
19876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    bool is_pxe_valid;
19976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    bool is_vesa_valid;
20076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    bool is_vpd_valid;
20176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    bool is_acpi_valid;
20276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
20376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    bool dmi_detection;		/* Does the dmi stuff has already been detected? */
20476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    bool pci_detection;		/* Does the pci stuff has already been detected? */
20576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    bool cpu_detection;		/* Does the cpu stuff has already been detected? */
20676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    bool disk_detection;	/* Does the disk stuff has already been detected? */
20776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    bool pxe_detection;		/* Does the pxe stuff has already been detected? */
20876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    bool vesa_detection;	/* Does the vesa sutff have been already detected? */
20976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    bool vpd_detection;		/* Does the vpd stuff has already been detected? */
21076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    bool memory_detection;	/* Does the memory size got detected ?*/
21176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    bool acpi_detection;	/* Does the acpi got detected ?*/
21276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
21376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    char syslinux_fs[22];
21476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    const struct syslinux_version *sv;
21576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    char modules_pcimap_path[255];
21676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    char modules_alias_path[255];
21776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    char pciids_path[255];
21876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    char dump_path[255]; /* Dump path on the tftp server */
21976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    char dump_filename[255]; /* Dump filename on the tftp server */
22076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    char tftp_ip[255];   /* IP address of tftp server (dump mode) */
22176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    char memtest_label[255];
22276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    char auto_label[AUTO_COMMAND_SIZE];
22376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    char vesa_background[255];
22476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    char postexec[255];
22576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman};
22676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
22776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid reset_more_printf(void);
22876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanconst char *find_argument(const char **argv, const char *argument);
22976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanchar *remove_spaces(char *p);
23076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanchar *remove_trailing_lf(char *p);
23176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanchar *skip_spaces(char *p);
23276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanchar *del_multi_spaces(char *p);
23376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanint detect_dmi(struct s_hardware *hardware);
23476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanint detect_vpd(struct s_hardware *hardware);
23576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid detect_disks(struct s_hardware *hardware);
23676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid detect_pci(struct s_hardware *hardware);
23776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid cpu_detect(struct s_hardware *hardware);
23876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanint detect_pxe(struct s_hardware *hardware);
23976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid init_hardware(struct s_hardware *hardware);
24076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid clear_screen(void);
24176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid detect_syslinux(struct s_hardware *hardware);
24276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanint detect_acpi(struct s_hardware *hardware);
24376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid detect_parameters(const int argc, const char *argv[],
24476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman		       struct s_hardware *hardware);
24576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanint detect_vesa(struct s_hardware *hardware);
24676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid detect_memory(struct s_hardware *hardware);
24776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid init_console(struct s_hardware *hardware);
24876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid detect_hardware(struct s_hardware *hardware);
24976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid dump(struct s_hardware *hardware);
25076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif
251