diff --git a/src/Makefile b/src/Makefile index ab5cd33b2..7180a8756 100644 --- a/src/Makefile +++ b/src/Makefile @@ -249,11 +249,6 @@ DRIVERS_ipxe += # DRIVERS_rpi += smsc95xx lan78xx -# Virtualised NIC drivers with hypervisor-specific bus types -# -DRIVERS_vmbus_net += netvsc -DRIVERS_xenbus_net += netfront - ############################################################################### # # Drag in the bulk of the build system diff --git a/src/Makefile.efi b/src/Makefile.efi index b2c541d99..cbb2243f6 100644 --- a/src/Makefile.efi +++ b/src/Makefile.efi @@ -30,7 +30,6 @@ DRIVERS_ipxe += $(DRIVERS_pci_infiniband) # Include SNP and MNP drivers in the all-drivers build # -DRIVERS_efi_net += snp mnp DRIVERS_ipxe += $(DRIVERS_efi_net) # Rules for building EFI files diff --git a/src/Makefile.linux b/src/Makefile.linux index 95dcd84a3..1e3eb5b4d 100644 --- a/src/Makefile.linux +++ b/src/Makefile.linux @@ -19,6 +19,7 @@ LDFLAGS += -r -d # Source directories # SRCDIRS += drivers/linux +SRCDIRS += drivers/net/linux SRCDIRS += interface/linux NON_AUTO_SRCS += interface/linux/linux_api.c @@ -28,9 +29,6 @@ NON_AUTO_MEDIA = linux # Include Linux-specific drivers in all-drivers build # -DRIVERS_linux_net += af_packet -DRIVERS_linux_net += slirp -DRIVERS_linux_net += tap DRIVERS_ipxe += $(DRIVERS_linux_net) # Compiler flags for building host API wrapper diff --git a/src/arch/x86/Makefile.efi b/src/arch/x86/Makefile.efi index 8c2c1caf8..4d23c6806 100644 --- a/src/arch/x86/Makefile.efi +++ b/src/arch/x86/Makefile.efi @@ -7,5 +7,5 @@ include Makefile.efi # Include Xen and Hyper-V drivers in the all-drivers build # -DRIVERS_ipxe += $(DRIVERS_xenbus_net) +DRIVERS_ipxe += $(DRIVERS_xen_net) DRIVERS_ipxe += $(DRIVERS_vmbus_net) diff --git a/src/arch/x86/Makefile.pcbios b/src/arch/x86/Makefile.pcbios index fc5d9a719..c09a9e096 100644 --- a/src/arch/x86/Makefile.pcbios +++ b/src/arch/x86/Makefile.pcbios @@ -113,5 +113,5 @@ DRIVERS_ipxe += $(DRIVERS_pci_infiniband) # Include Xen and Hyper-V drivers in the all-drivers build # -DRIVERS_ipxe += $(DRIVERS_xenbus_net) +DRIVERS_ipxe += $(DRIVERS_xen_net) DRIVERS_ipxe += $(DRIVERS_vmbus_net) diff --git a/src/drivers/net/efi/mnp.c b/src/drivers/net/efi/mnp.c index c4a950d5e..eaa2f5061 100644 --- a/src/drivers/net/efi/mnp.c +++ b/src/drivers/net/efi/mnp.c @@ -55,3 +55,6 @@ struct efi_driver mnp_driver __efi_driver ( EFI_DRIVER_MNP ) = { .start = mnpnet_start, .stop = mnpnet_stop, }; + +/* Generate build rules */ +EFI_ROM ( "mnp", "Managed Network Protocol NIC" ); diff --git a/src/drivers/net/efi/snp.c b/src/drivers/net/efi/snp.c index a28a7bdfb..991e51ace 100644 --- a/src/drivers/net/efi/snp.c +++ b/src/drivers/net/efi/snp.c @@ -80,3 +80,6 @@ struct efi_driver nii_driver __efi_driver ( EFI_DRIVER_NII ) = { /** Drag in MNP driver */ REQUIRING_SYMBOL ( snp_driver ); REQUIRE_SYMBOL ( mnp_driver ); + +/* Generate build rules */ +EFI_ROM ( "snp", "Simple Network Protocol NIC" ); diff --git a/src/drivers/linux/af_packet.c b/src/drivers/net/linux/af_packet.c similarity index 99% rename from src/drivers/linux/af_packet.c rename to src/drivers/net/linux/af_packet.c index abb01a90a..98a7987b8 100644 --- a/src/drivers/linux/af_packet.c +++ b/src/drivers/net/linux/af_packet.c @@ -323,3 +323,6 @@ struct linux_driver af_packet_nic_driver __linux_driver = { .probe = af_packet_nic_probe, .remove = af_packet_nic_remove, }; + +/* Generate build rules */ +LINUX_ROM ( "af_packet", "AF_PACKET binding NIC" ); diff --git a/src/drivers/linux/slirp.c b/src/drivers/net/linux/slirp.c similarity index 99% rename from src/drivers/linux/slirp.c rename to src/drivers/net/linux/slirp.c index 9ba0742ee..6d5d815d7 100644 --- a/src/drivers/linux/slirp.c +++ b/src/drivers/net/linux/slirp.c @@ -550,3 +550,6 @@ struct linux_driver slirp_driver __linux_driver = { .probe = slirp_probe, .remove = slirp_remove, }; + +/* Generate build rules */ +LINUX_ROM ( "slirp", "libslirp NIC" ); diff --git a/src/drivers/linux/tap.c b/src/drivers/net/linux/tap.c similarity index 98% rename from src/drivers/linux/tap.c rename to src/drivers/net/linux/tap.c index a4d4e6d59..ac7845e3b 100644 --- a/src/drivers/linux/tap.c +++ b/src/drivers/net/linux/tap.c @@ -259,3 +259,6 @@ struct linux_driver tap_driver __linux_driver = { .probe = tap_probe, .remove = tap_remove, }; + +/* Generate build rules */ +LINUX_ROM ( "tap", "Linux TUN/TAP NIC" ); diff --git a/src/drivers/net/netfront.c b/src/drivers/net/netfront.c index ba6a20002..9dfdc5ea7 100644 --- a/src/drivers/net/netfront.c +++ b/src/drivers/net/netfront.c @@ -1046,6 +1046,9 @@ struct xen_driver netfront_driver __xen_driver = { .remove = netfront_remove, }; +/* Generate build rules */ +XEN_ROM ( "netfront", "Xen netfront virtual NIC" ); + /****************************************************************************** * * Emulated PCI device inhibitor diff --git a/src/drivers/net/netvsc.c b/src/drivers/net/netvsc.c index 9b6ee88b4..681aa54e7 100644 --- a/src/drivers/net/netvsc.c +++ b/src/drivers/net/netvsc.c @@ -894,3 +894,6 @@ struct vmbus_driver netvsc_driver __vmbus_driver = { .reset = netvsc_reset, .remove = netvsc_remove, }; + +/* Generate build rules */ +VMBUS_ROM ( "netvsc", "Hyper-V NetVSC RNDIS virtual NIC" ); diff --git a/src/include/ipxe/efi/efi_driver.h b/src/include/ipxe/efi/efi_driver.h index f373e47d3..9f7ecb68d 100644 --- a/src/include/ipxe/efi/efi_driver.h +++ b/src/include/ipxe/efi/efi_driver.h @@ -75,6 +75,9 @@ struct efi_driver { #define EFI_DRIVER_SNP 04 /**< SNP protocol drivers */ #define EFI_DRIVER_MNP 05 /**< MNP protocol drivers */ +/** Define build rules for an EFI driver */ +#define EFI_ROM( _name, _desc ) + /** * Set EFI driver-private data * diff --git a/src/include/ipxe/linux.h b/src/include/ipxe/linux.h index 52c1f0bd7..7abeb78e9 100644 --- a/src/include/ipxe/linux.h +++ b/src/include/ipxe/linux.h @@ -66,6 +66,9 @@ struct linux_driver { /** Declare a Linux driver */ #define __linux_driver __table_entry(LINUX_DRIVERS, 01) +/** Define build rules for a Linux driver */ +#define LINUX_ROM( _name, _desc ) + /** * Set linux device driver-private data * diff --git a/src/include/ipxe/vmbus.h b/src/include/ipxe/vmbus.h index 5eee230fe..039cb728f 100644 --- a/src/include/ipxe/vmbus.h +++ b/src/include/ipxe/vmbus.h @@ -547,6 +547,9 @@ struct vmbus_driver { /** Declare a VMBus device driver */ #define __vmbus_driver __table_entry ( VMBUS_DRIVERS, 01 ) +/** Define build rules for a VMBus device driver */ +#define VMBUS_ROM( _name, _desc ) + /** * Set VMBus device driver-private data * diff --git a/src/include/ipxe/xenbus.h b/src/include/ipxe/xenbus.h index d73f29781..dd1d953cb 100644 --- a/src/include/ipxe/xenbus.h +++ b/src/include/ipxe/xenbus.h @@ -58,6 +58,9 @@ struct xen_driver { /** Declare a Xen device driver */ #define __xen_driver __table_entry ( XEN_DRIVERS, 01 ) +/** Define build rules for a Xen device driver */ +#define XEN_ROM( _name, _desc ) + /** * Set Xen device driver-private data * diff --git a/src/util/parserom.pl b/src/util/parserom.pl index d86be589d..4ba8df4d3 100755 --- a/src/util/parserom.pl +++ b/src/util/parserom.pl @@ -36,7 +36,8 @@ if ( $debug ) { my %RE = ( 'parse_driver_class' => qr{ drivers/ (\w+?) / }x, 'parse_family' => qr{^ (?:\./)? (.*) \..+? $}x, - 'find_rom_line' => qr/^ \s* ( (PCI|ISA|USB|DT)_ROM \s* + 'find_rom_line' => qr/^ \s* ( (PCI|ISA|USB|DT|EFI| + LINUX|XEN|VMBUS)_ROM \s* \( \s* (.*?) \s* \) \s* ) [,;]/msx, 'find_secboot' => qr/^ \s* FILE_SECBOOT \s* \( \s* PERMITTED \s* \) \s* ; \s* $/mx, @@ -122,7 +123,7 @@ sub process_rom_decl { return process_isa_rom($state, $rom_decl) if $rom_type eq "ISA"; return process_usb_rom($state, $rom_decl) if $rom_type eq "USB"; return process_dt_rom($state, $rom_decl) if $rom_type eq "DT"; - return; + return process_basic_rom($state, $rom_decl); } # Extract values from PCI_ROM declaration lines and dispatch to @@ -198,6 +199,23 @@ sub process_dt_rom { return 1; } +# Extract values from basic ROM declaration lines and dispatch to +# Makefile rule generator +sub process_basic_rom { + my ($state, $decl) = @_; + return unless defined $decl; + return unless length $decl; + (my $image, $decl) = extract_quoted_string($decl, 'IMAGE'); + (my $desc, $decl) = extract_quoted_string($decl, 'DESCRIPTION'); + if ( $image and $desc ) { + print_make_rules( $state, $image, $desc ); + } else { + my $macro = (uc $state->{'type'})."_ROM"; + log_debug("WARNING", "Malformed $macro macro on line $. of $state->{source_file}"); + } + return 1; +} + # Output Makefile rules for the specified ROM declarations sub print_make_rules { my ( $state, $image, $desc, $vendor, $device, $dup ) = @_;