#include #include /** * Given a bus and a devfn number, find the device structure * @param bus The bus number * @param devfn a device/function number * @return pointer to the device structure */ struct device *dev_find_slot(unsigned int bus, unsigned int devfn) { struct device *dev; for (dev = all_devices; dev; dev = dev->next) if (dev->bus->secondary == bus && dev->devfn == devfn) break; return dev; } /** Find a device of a given vendor and type * @param vendor Vendor ID (e.g. 0x8086 for Intel) * @param device Device ID * @param from Pointer to the device structure, used as a starting point * in the linked list of all_devices, which can be 0 to start at the * head of the list (i.e. all_devices) * @return Pointer to the device struct */ struct device *dev_find_device(unsigned int vendor, unsigned int device, struct device *from) { if (!from) from = all_devices; else from = from->next; while (from && (from->vendor != vendor || from->device != device)) from = from->next; return from; } /** Find a device of a given class * @param class Class of the device * @param from Pointer to the device structure, used as a starting point * in the linked list of all_devices, which can be 0 to start at the * head of the list (i.e. all_devices) * @return Pointer to the device struct */ struct device *dev_find_class(unsigned int class, struct device *from) { if (!from) from = all_devices; else from = from->next; while (from && from->class != class) from = from->next; return from; }