]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[pxe] Notify BIOS via INT 1a,564e for each new network device
authorMichael Brown <mcb30@ipxe.org>
Tue, 15 Sep 2015 12:43:35 +0000 (13:43 +0100)
committerMichael Brown <mcb30@ipxe.org>
Tue, 15 Sep 2015 12:43:35 +0000 (13:43 +0100)
Use INT 1a,564e to notify the BIOS of each network device that we
detect.  This provides an opportunity for the BIOS to implement
platform policy such as changing the MAC address by issuing a call to
PXENV_UNDI_SET_STATION_ADDRESS.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/arch/i386/interface/pxe/pxe_call.c

index 2d89cc4d4dbecba3e282e20c11bd7c7081719516..0b67880c7eb2e1df02eb8c8fc99234ba5ccc5bf0 100644 (file)
@@ -26,6 +26,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
 #include <ipxe/uaccess.h>
 #include <ipxe/init.h>
 #include <ipxe/profile.h>
+#include <ipxe/netdevice.h>
 #include <setjmp.h>
 #include <registers.h>
 #include <biosint.h>
@@ -358,6 +359,31 @@ int pxe_start_nbp ( void ) {
        return 0;
 }
 
+/**
+ * Notify BIOS of existence of network device
+ *
+ * @v netdev           Network device
+ * @ret rc             Return status code
+ */
+static int pxe_notify ( struct net_device *netdev ) {
+
+       /* Do nothing if we already have a network device */
+       if ( pxe_netdev )
+               return 0;
+
+       /* Activate (and deactivate) PXE stack to notify BIOS */
+       pxe_activate ( netdev );
+       pxe_deactivate();
+
+       return 0;
+}
+
+/** PXE BIOS notification driver */
+struct net_driver pxe_driver __net_driver = {
+       .name = "PXE",
+       .probe = pxe_notify,
+};
+
 REQUIRING_SYMBOL ( pxe_api_call );
 REQUIRE_OBJECT ( pxe_preboot );
 REQUIRE_OBJECT ( pxe_undi );