From: Michael Brown Date: Fri, 13 Feb 2026 13:43:37 +0000 (+0000) Subject: [build] Handle all driver list construction via parserom.pl X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ae8e23a45280761513c91e6000539be4d3889541;p=thirdparty%2Fipxe.git [build] Handle all driver list construction via parserom.pl Handle construction of the EFI, Linux, Xen, and VMBus driver build rules via parserom.pl to ensure consistency. In particular, this allows those drivers to appear in the DRIVERS_SECBOOT list used to filter out non-permitted drivers in a Secure Boot build. Signed-off-by: Michael Brown --- 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 ) = @_;