Global struct dev is now in main.c
[people/xl0/gpxe.git] / src / core / dev.c
1 #include "etherboot.h"
2 #include "stddef.h"
3 #include "dev.h"
4
5 /* Defined by linker */
6 extern struct boot_driver boot_drivers[];
7 extern struct boot_driver boot_drivers_end[];
8
9 /* Current attempted boot driver */
10 static struct boot_driver *boot_driver = boot_drivers;
11
12 /* Print all drivers */
13 void print_drivers ( void ) {
14         struct boot_driver *driver;
15
16         for ( driver = boot_drivers ; driver < boot_drivers_end ; driver++ ) {
17                 printf ( "%s ", driver->name );
18         }
19 }
20
21 /* Get the next available boot device */
22 int probe ( struct dev *dev ) {
23         
24         for ( ; boot_driver < boot_drivers_end ; boot_driver++ ) {
25                 dev->name = "unknown";
26                 if ( boot_driver->probe ( dev ) )
27                         return 1;
28         }
29         
30         /* No more boot devices found */
31         boot_driver = boot_drivers;
32         return 0;
33 }
34
35 /* Disable a device */
36 void disable ( struct dev *dev ) {
37         if ( dev->dev_op ) {
38                 dev->dev_op->disable ( dev );
39                 dev->dev_op = NULL;
40         }
41 }