/* * 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