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