david/ipxe
david
/
ipxe
Archived
1
0
Fork 0
This repository has been archived on 2020-12-06. You can view files and clone it, but cannot push or open issues or pull requests.
ipxe/src/core/config.c

218 lines
3.8 KiB
C

/*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2, or (at
* your option) any later version.
*/
#include "etherboot.h"
#include "nic.h"
#include "console.h"
#ifdef BUILD_SERIAL
#include ".buildserial.h"
#define xstr(s) str(s)
#define str(s) #s
#endif
void print_config(void)
{
printf( "Etherboot " VERSION
#ifdef BUILD_SERIAL
" [build "
#ifdef BUILD_ID
BUILD_ID " "
#endif
"#" xstr(BUILD_SERIAL_NUM) "]"
#endif /* BUILD_SERIAL */
" (GPL) http://etherboot.org\n"
"Drivers: " );
#ifdef CONFIG_PCI
pci_enumerate();
#endif
#ifdef CONFIG_ISA
isa_enumerate();
#endif
printf( " Images: "
#ifdef TAGGED_IMAGE
"NBI "
#endif
#ifdef ELF64_IMAGE
"ELF64 "
#endif
#ifdef ELF_IMAGE
"ELF "
#endif
#ifdef COFF_IMAGE
"COFF "
#endif
#ifdef IMAGE_FREEBSD
"FreeBSD "
#endif
#ifdef IMAGE_MULTIBOOT
"Multiboot "
#endif
#ifdef AOUT_IMAGE
"a.out "
#endif
#ifdef WINCE_IMAGE
"WINCE "
#endif
#ifdef PXE_IMAGE
"PXE "
#endif
#ifdef PXE_EXPORT /* All possible exports */
" Exports: "
#ifdef PXE_EXPORT
"PXE "
#endif
#endif /* All possible exports */
" "
);
#if (BOOTP_SERVER != 67) || (BOOTP_CLIENT != 68)
printf( "[DHCP ports %d and %d] ",
BOOTP_SERVER, BOOTP_CLIENT);
#endif
putchar('\n');
printf( "Protocols: "
#ifdef RARP_NOT_BOOTP
"RARP "
#else
# ifndef NO_DHCP_SUPPORT
"DHCP "
# else
"BOOTP "
# endif
#endif
#ifdef DOWNLOAD_PROTO_TFTP
"TFTP "
#endif
#ifdef DOWNLOAD_PROTO_NFS
"NFS "
#endif
#ifdef DOWNLOAD_PROTO_SLAM
"SLAM "
#endif
#ifdef DOWNLOAD_PROTO_TFTM
"TFTM "
#endif
#ifdef DOWNLOAD_PROTO_HTTP
"HTTP "
#endif
#ifdef PROTO_LACP
"LACP "
#endif
#ifdef DNS_RESOLVER
"DNS "
#endif
"\n");
#ifdef KEEP_IT_REAL
printf( "Keeping It Real [EXPERIMENTAL]\n" );
#endif
}
static const char *driver_name[] = {
"nic",
"disk",
"floppy",
};
int probe(struct dev *dev)
{
const char *type_name;
type_name = "";
if ((dev->type >= 0) &&
((unsigned)dev->type < sizeof(driver_name)/sizeof(driver_name[0]))) {
type_name = driver_name[dev->type];
}
if (dev->how_probe == PROBE_FIRST) {
dev->to_probe = PROBE_PCI;
memset(&dev->state, 0, sizeof(dev->state));
}
if (dev->to_probe == PROBE_PCI) {
#ifdef CONFIG_PCI
dev->how_probe = pci_probe(dev, type_name);
#else
dev->how_probe = PROBE_FAILED;
#endif
if (dev->how_probe == PROBE_FAILED) {
dev->to_probe = PROBE_ISA;
}
}
if (dev->to_probe == PROBE_ISA) {
#ifdef CONFIG_ISA
dev->how_probe = isa_probe(dev, type_name);
#else
dev->how_probe = PROBE_FAILED;
#endif
if (dev->how_probe == PROBE_FAILED) {
dev->to_probe = PROBE_NONE;
}
}
if ((dev->to_probe != PROBE_PCI) &&
(dev->to_probe != PROBE_ISA)) {
dev->how_probe = PROBE_FAILED;
}
return dev->how_probe;
}
void disable(struct dev *dev)
{
if (dev->disable) {
dev->disable(dev);
dev->disable = 0;
}
}
/*
* Drag in all requested console types
*
* At least one of the CONSOLE_xxx has to be set. CONSOLE_DUAL sets
* both CONSOLE_FIRMWARE and CONSOLE_SERIAL for legacy compatibility.
* If no CONSOLE_xxx is set, CONSOLE_FIRMWARE is assumed.
*/
#ifdef CONSOLE_CRT
#define CONSOLE_FIRMWARE
#endif
#ifdef CONSOLE_DUAL
#undef CONSOLE_FIRMWARE
#define CONSOLE_FIRMWARE
#undef CONSOLE_SERIAL
#define CONSOLE_SERIAL
#endif
#if !defined(CONSOLE_FIRMWARE) && !defined(CONSOLE_SERIAL)
#define CONSOLE_FIRMWARE
#endif
#ifdef CONSOLE_FIRMWARE
REQUIRE_OBJECT ( bios_console );
#endif
#ifdef CONSOLE_SERIAL
REQUIRE_OBJECT ( serial );
#endif
#ifdef CONSOLE_DIRECT_VGA
REQUIRE_OBJECT ( video_subr );
#endif
#ifdef CONSOLE_BTEXT
REQUIRE_OBJECT ( btext );
#endif
#ifdef CONSOLE_PC_KBD
REQUIRE_OBJECT ( pc_kbd );
#endif
/*
* Drag in relocate.o if required
*/
#ifndef NORELOCATE
REQUIRE_OBJECT ( relocate );
#endif