aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/arch/i386/interface/pxe/pxe_call.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/arch/i386/interface/pxe/pxe_call.c b/src/arch/i386/interface/pxe/pxe_call.c
index 2d89cc4d4..0b67880c7 100644
--- a/src/arch/i386/interface/pxe/pxe_call.c
+++ b/src/arch/i386/interface/pxe/pxe_call.c
@@ -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 );