aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorDavid Shaohua Li <shaohua.li@intel.com>2005-03-18 18:45:35 -0500
committerLen Brown <len.brown@intel.com>2005-07-11 23:28:24 -0400
commit4e10d12a3d88c88fba3258809aa42d14fd8cf1d1 (patch)
tree195f69e8e25dec0f7344aab2bbdb353b9639df79 /include
parentfb9802fa59b196d7f90bb3c2e33c555c6bdc4c54 (diff)
[ACPI] Bind PCI devices with ACPI devices
Implement the framework for binding physical devices with ACPI devices. A physical bus like PCI bus should create a 'acpi_bus_type', with: .find_device: For device which has parent such as normal PCI devices. .find_bridge: It's for special devices, such as PCI root bridge or IDE controller. Such devices generally haven't a parent or ->bus. We use the special method to get an ACPI handle. Uses new field in struct device: firmware_data http://bugzilla.kernel.org/show_bug.cgi?id=4277 Signed-off-by: David Shaohua Li <shaohua.li@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'include')
-rw-r--r--include/acpi/acpi_bus.h21
-rw-r--r--include/linux/device.h6
2 files changed, 25 insertions, 2 deletions
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
index c627bc408a6b..53b821d7b8a8 100644
--- a/include/acpi/acpi_bus.h
+++ b/include/acpi/acpi_bus.h
@@ -336,6 +336,27 @@ int acpi_match_ids (struct acpi_device *device, char *ids);
336int acpi_create_dir(struct acpi_device *); 336int acpi_create_dir(struct acpi_device *);
337void acpi_remove_dir(struct acpi_device *); 337void acpi_remove_dir(struct acpi_device *);
338 338
339
340/*
341 * Bind physical devices with ACPI devices
342 */
343#include <linux/device.h>
344struct acpi_bus_type {
345 struct list_head list;
346 struct bus_type *bus;
347 /* For general devices under the bus*/
348 int (*find_device)(struct device *, acpi_handle*);
349 /* For bridges, such as PCI root bridge, IDE controller */
350 int (*find_bridge)(struct device *, acpi_handle *);
351};
352int register_acpi_bus_type(struct acpi_bus_type *);
353int unregister_acpi_bus_type(struct acpi_bus_type *);
354struct device *acpi_get_physical_device(acpi_handle);
355/* helper */
356acpi_handle acpi_get_child(acpi_handle, acpi_integer);
357acpi_handle acpi_get_pci_rootbridge_handle(unsigned int, unsigned int);
358#define DEVICE_ACPI_HANDLE(dev) ((acpi_handle)((dev)->firmware_data))
359
339#endif /*CONFIG_ACPI_BUS*/ 360#endif /*CONFIG_ACPI_BUS*/
340 361
341#endif /*__ACPI_BUS_H__*/ 362#endif /*__ACPI_BUS_H__*/
diff --git a/include/linux/device.h b/include/linux/device.h
index df94c0de53f2..de2d6fe349de 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -269,8 +269,10 @@ struct device {
269 struct device_driver *driver; /* which driver has allocated this 269 struct device_driver *driver; /* which driver has allocated this
270 device */ 270 device */
271 void *driver_data; /* data private to the driver */ 271 void *driver_data; /* data private to the driver */
272 void *platform_data; /* Platform specific data (e.g. ACPI, 272 void *platform_data; /* Platform specific data, device
273 BIOS data relevant to device) */ 273 core doesn't touch it */
274 void *firmware_data; /* Firmware specific data (e.g. ACPI,
275 BIOS data),reserved for device core*/
274 struct dev_pm_info power; 276 struct dev_pm_info power;
275 277
276 u64 *dma_mask; /* dma mask (if dma'able device) */ 278 u64 *dma_mask; /* dma mask (if dma'able device) */