From 17c1ca90e70597a834604f21dce8a0106f082050 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Tue, 12 Apr 2005 16:38:23 +0000 Subject: New device probing mechanism --- src/core/dev.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/core/dev.c (limited to 'src/core') diff --git a/src/core/dev.c b/src/core/dev.c new file mode 100644 index 000000000..cd69d3495 --- /dev/null +++ b/src/core/dev.c @@ -0,0 +1,44 @@ +#include "etherboot.h" +#include "stddef.h" +#include "dev.h" + +/* Defined by linker */ +extern struct boot_driver boot_drivers[]; +extern struct boot_driver boot_drivers_end[]; + +/* Current attempted boot driver */ +static struct boot_driver *boot_driver = boot_drivers; + +/* Current boot device */ +struct dev dev; + +/* Print all drivers */ +void print_drivers ( void ) { + struct boot_driver *driver; + + for ( driver = boot_drivers ; driver < boot_drivers_end ; driver++ ) { + printf ( "%s ", driver->name ); + } +} + +/* Get the next available boot device */ +int probe ( struct dev *dev ) { + + for ( ; boot_driver < boot_drivers_end ; boot_driver++ ) { + dev->name = "unknown"; + if ( boot_driver->probe ( dev ) ) + return 1; + } + + /* No more boot devices found */ + boot_driver = boot_drivers; + return 0; +} + +/* Disable a device */ +void disable ( struct dev *dev ) { + if ( dev->dev_op ) { + dev->dev_op->disable ( dev ); + dev->dev_op = NULL; + } +} -- cgit v1.2.3-55-g7522