123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- #ifndef _GPXE_DEVICE_H
- #define _GPXE_DEVICE_H
-
- /**
- * @file
- *
- * Device model
- *
- */
-
- FILE_LICENCE ( GPL2_OR_LATER );
-
- #include <gpxe/list.h>
- #include <gpxe/tables.h>
-
- /** A hardware device description */
- struct device_description {
- /** Bus type
- *
- * This must be a BUS_TYPE_XXX constant.
- */
- unsigned int bus_type;
- /** Location
- *
- * The interpretation of this field is bus-type-specific.
- */
- unsigned int location;
- /** Vendor ID */
- unsigned int vendor;
- /** Device ID */
- unsigned int device;
- /** Device class */
- unsigned long class;
- /** I/O address */
- unsigned long ioaddr;
- /** IRQ */
- unsigned int irq;
- };
-
- /** PCI bus type */
- #define BUS_TYPE_PCI 1
-
- /** ISAPnP bus type */
- #define BUS_TYPE_ISAPNP 2
-
- /** EISA bus type */
- #define BUS_TYPE_EISA 3
-
- /** MCA bus type */
- #define BUS_TYPE_MCA 4
-
- /** ISA bus type */
- #define BUS_TYPE_ISA 5
-
- /** A hardware device */
- struct device {
- /** Name */
- char name[16];
- /** Device description */
- struct device_description desc;
- /** Devices on the same bus */
- struct list_head siblings;
- /** Devices attached to this device */
- struct list_head children;
- /** Bus device */
- struct device *parent;
- };
-
- /**
- * A root device
- *
- * Root devices are system buses such as PCI, EISA, etc.
- *
- */
- struct root_device {
- /** Device chain
- *
- * A root device has a NULL parent field.
- */
- struct device dev;
- /** Root device driver */
- struct root_driver *driver;
- };
-
- /** A root device driver */
- struct root_driver {
- /**
- * Add root device
- *
- * @v rootdev Root device
- * @ret rc Return status code
- *
- * Called from probe_devices() for all root devices in the build.
- */
- int ( * probe ) ( struct root_device *rootdev );
- /**
- * Remove root device
- *
- * @v rootdev Root device
- *
- * Called from remove_device() for all successfully-probed
- * root devices.
- */
- void ( * remove ) ( struct root_device *rootdev );
- };
-
- /** Root device table */
- #define ROOT_DEVICES __table ( struct root_device, "root_devices" )
-
- /** Declare a root device */
- #define __root_device __table_entry ( ROOT_DEVICES, 01 )
-
- #endif /* _GPXE_DEVICE_H */
|