]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[efi] Define an attachment priority order for EFI drivers
authorMichael Brown <mcb30@ipxe.org>
Sat, 29 Mar 2025 15:28:19 +0000 (15:28 +0000)
committerMichael Brown <mcb30@ipxe.org>
Sat, 29 Mar 2025 18:44:34 +0000 (18:44 +0000)
Define an ordering for internal EFI drivers on the basis of how close
the driver is to the hardware, and attempt to start drivers in this
order.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/drivers/net/efi/mnp.c
src/drivers/net/efi/snp.c
src/drivers/net/efi/snponly.c
src/drivers/usb/usbio.c
src/include/ipxe/efi/efi_driver.h
src/interface/efi/efi_pci.c

index 33218fb106d996b2976c6eac79c2f9c84ac26657..3c839d9685c7465629efc6f7a9f255420cce8fbd 100644 (file)
@@ -48,7 +48,7 @@ static int mnp_supported ( EFI_HANDLE device ) {
 }
 
 /** EFI MNP driver */
-struct efi_driver mnp_driver __efi_driver ( EFI_DRIVER_NORMAL ) = {
+struct efi_driver mnp_driver __efi_driver ( EFI_DRIVER_MNP ) = {
        .name = "MNP",
        .supported = mnp_supported,
        .start = mnpnet_start,
index cac8b38e2c07821df272cfc6daebd1e6465e2cda..58b5ad546195445a87eb03b3608b321a81436b27 100644 (file)
@@ -57,7 +57,7 @@ static int nii_supported ( EFI_HANDLE device ) {
 }
 
 /** EFI SNP driver */
-struct efi_driver snp_driver __efi_driver ( EFI_DRIVER_NORMAL ) = {
+struct efi_driver snp_driver __efi_driver ( EFI_DRIVER_SNP ) = {
        .name = "SNP",
        .supported = snp_supported,
        .start = snpnet_start,
@@ -65,7 +65,7 @@ struct efi_driver snp_driver __efi_driver ( EFI_DRIVER_NORMAL ) = {
 };
 
 /** EFI NII driver */
-struct efi_driver nii_driver __efi_driver ( EFI_DRIVER_NORMAL ) = {
+struct efi_driver nii_driver __efi_driver ( EFI_DRIVER_NII ) = {
        .name = "NII",
        .supported = nii_supported,
        .start = nii_start,
index 80ddfe00d7606a84b0866f93372dd9ba4a72c5c8..e40451885ecd84a068827fc9e023c917d3d165d7 100644 (file)
@@ -207,7 +207,7 @@ static int mnponly_supported ( EFI_HANDLE device ) {
 }
 
 /** EFI SNP chainloading-device-only driver */
-struct efi_driver snponly_driver __efi_driver ( EFI_DRIVER_NORMAL ) = {
+struct efi_driver snponly_driver __efi_driver ( EFI_DRIVER_SNP ) = {
        .name = "SNPONLY",
        .supported = snponly_supported,
        .start = snpnet_start,
@@ -215,7 +215,7 @@ struct efi_driver snponly_driver __efi_driver ( EFI_DRIVER_NORMAL ) = {
 };
 
 /** EFI NII chainloading-device-only driver */
-struct efi_driver niionly_driver __efi_driver ( EFI_DRIVER_NORMAL ) = {
+struct efi_driver niionly_driver __efi_driver ( EFI_DRIVER_NII ) = {
        .name = "NIIONLY",
        .supported = niionly_supported,
        .start = nii_start,
@@ -223,7 +223,7 @@ struct efi_driver niionly_driver __efi_driver ( EFI_DRIVER_NORMAL ) = {
 };
 
 /** EFI MNP chainloading-device-only driver */
-struct efi_driver mnponly_driver __efi_driver ( EFI_DRIVER_NORMAL ) = {
+struct efi_driver mnponly_driver __efi_driver ( EFI_DRIVER_MNP ) = {
        .name = "MNPONLY",
        .supported = mnponly_supported,
        .start = mnpnet_start,
index 73151c536f93363b4791023a2fc973d50063a714..e4dca7e8718bc1acb9d9a1e35b790e8ef926b61f 100644 (file)
@@ -1649,7 +1649,7 @@ static void usbio_stop ( struct efi_device *efidev ) {
 }
 
 /** EFI USB I/O driver */
-struct efi_driver usbio_driver __efi_driver ( EFI_DRIVER_NORMAL ) = {
+struct efi_driver usbio_driver __efi_driver ( EFI_DRIVER_HARDWARE ) = {
        .name = "USBIO",
        .supported = usbio_supported,
        .start = usbio_start,
index 7b64e1e0b9db407e0bdaf563e9dc243a9c77c463..e07bfd49d6527cdbe2f1d4b16e8ca5cd59fe831f 100644 (file)
@@ -62,8 +62,10 @@ struct efi_driver {
 #define __efi_driver( order ) __table_entry ( EFI_DRIVERS, order )
 
 #define EFI_DRIVER_EARLY       01      /**< Early drivers */
-#define EFI_DRIVER_NORMAL      02      /**< Normal drivers */
-#define EFI_DRIVER_LATE                03      /**< Late drivers */
+#define EFI_DRIVER_HARDWARE    02      /**< Hardware drivers */
+#define EFI_DRIVER_NII         03      /**< NII protocol drivers */
+#define EFI_DRIVER_SNP         04      /**< SNP protocol drivers */
+#define EFI_DRIVER_MNP         05      /**< MNP protocol drivers */
 
 /**
  * Set EFI driver-private data
index 0662302d29763627d999783f39acd62d4d773460..6bdc2d57506c52a7113e21517bacbe71a070e3c2 100644 (file)
@@ -914,7 +914,7 @@ static void efipci_stop ( struct efi_device *efidev ) {
 }
 
 /** EFI PCI driver */
-struct efi_driver efipci_driver __efi_driver ( EFI_DRIVER_NORMAL ) = {
+struct efi_driver efipci_driver __efi_driver ( EFI_DRIVER_HARDWARE ) = {
        .name = "PCI",
        .supported = efipci_supported,
        .start = efipci_start,