]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[build] Handle all driver list construction via parserom.pl
authorMichael Brown <mcb30@ipxe.org>
Fri, 13 Feb 2026 13:43:37 +0000 (13:43 +0000)
committerMichael Brown <mcb30@ipxe.org>
Fri, 13 Feb 2026 14:16:44 +0000 (14:16 +0000)
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 <mcb30@ipxe.org>
17 files changed:
src/Makefile
src/Makefile.efi
src/Makefile.linux
src/arch/x86/Makefile.efi
src/arch/x86/Makefile.pcbios
src/drivers/net/efi/mnp.c
src/drivers/net/efi/snp.c
src/drivers/net/linux/af_packet.c [moved from src/drivers/linux/af_packet.c with 99% similarity]
src/drivers/net/linux/slirp.c [moved from src/drivers/linux/slirp.c with 99% similarity]
src/drivers/net/linux/tap.c [moved from src/drivers/linux/tap.c with 98% similarity]
src/drivers/net/netfront.c
src/drivers/net/netvsc.c
src/include/ipxe/efi/efi_driver.h
src/include/ipxe/linux.h
src/include/ipxe/vmbus.h
src/include/ipxe/xenbus.h
src/util/parserom.pl

index ab5cd33b242ae9da111af076f0f112c9afe09d25..7180a8756eaa87137e052d240f9526b8c2fc964a 100644 (file)
@@ -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
index b2c541d9914e5003b9a156ad0a0d8d4197a789a5..cbb2243f6b68ee0b5762ed3bfd74bc911ea946ef 100644 (file)
@@ -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
index 95dcd84a380086efece1c8b130d66fca6eade7c7..1e3eb5b4dc4b3d977ac57bd2703c8bb9343d0354 100644 (file)
@@ -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
index 8c2c1caf8689eb15c8daeb4e2d1c1bc60bd8fdb9..4d23c6806ef8373f8b3a8f47b9a772d188da5837 100644 (file)
@@ -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)
index fc5d9a719954c7a0b585b18be049f6a1816d4d23..c09a9e09691fceee3f43544f54646f2072c6dd87 100644 (file)
@@ -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)
index c4a950d5e7b05d2a057838441e4485cb1b7b569b..eaa2f5061bfb3315a4850ddd46d76a35debbc0cd 100644 (file)
@@ -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" );
index a28a7bdfb54cbae3fd4c788863ee2eb86ead0038..991e51aced75447054a5fa1bce7cbb4a92229cef 100644 (file)
@@ -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" );
similarity index 99%
rename from src/drivers/linux/af_packet.c
rename to src/drivers/net/linux/af_packet.c
index abb01a90a8651691ab3b35b14afbeeffc467cb8f..98a7987b8a5da574b03f923fabcd5e753798fdfe 100644 (file)
@@ -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" );
similarity index 99%
rename from src/drivers/linux/slirp.c
rename to src/drivers/net/linux/slirp.c
index 9ba0742ee43fa1a9f1b3cd7fc91353b39ad60cd4..6d5d815d77f7f201e6801ca0f1efffa7ed2a355e 100644 (file)
@@ -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" );
similarity index 98%
rename from src/drivers/linux/tap.c
rename to src/drivers/net/linux/tap.c
index a4d4e6d59c32c43661eb51891e4c7ee95b80d67a..ac7845e3bb146ae4506757eaaab1e9a12fe99bf2 100644 (file)
@@ -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" );
index ba6a200023a4280f6de75e10c9f77e2d981edeec..9dfdc5ea74e71963a085120926f60fb5cfda0827 100644 (file)
@@ -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
index 9b6ee88b47da2cdf365a929721c9038cbe9973af..681aa54e71f71b98ff134a75547c8198e788bdf5 100644 (file)
@@ -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" );
index f373e47d34abead88d918733208be73dee13243a..9f7ecb68d7acaab8b8b45d75273138652015eaf7 100644 (file)
@@ -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
  *
index 52c1f0bd745c14d7c05262f2fb03c3d9ec4343aa..7abeb78e9478ec77e9d97e5e4a1e33fa808fb2f5 100644 (file)
@@ -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
  *
index 5eee230fef3e39712fae6abd787cda04dc72f4e5..039cb728f7a11a8163b40ea15a252b0861303d14 100644 (file)
@@ -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
  *
index d73f29781b7eeaf36a8b044921cc28de5a8d788c..dd1d953cb9787d0a634be4436ae6f7ece654350f 100644 (file)
@@ -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
  *
index d86be589d07fe15c4c5fe89eb75c93c316f5acd3..4ba8df4d3a4828f5c66f0eb5f2bd4606ad4f30e2 100755 (executable)
@@ -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 ) = @_;