diff options
| author | Jeff Garzik <jgarzik@pobox.com> | 2005-11-10 04:12:10 -0500 |
|---|---|---|
| committer | Jeff Garzik <jgarzik@pobox.com> | 2005-11-10 04:12:10 -0500 |
| commit | 2f67bdb23d74a6c6fd4f98f64239c5c34d1833cc (patch) | |
| tree | fe533abe3e7c400848647b95e4806f5125c654c3 /arch/powerpc/kernel/vio.c | |
| parent | d40d9d29c020f8466c96f8e3ad4b7c014ff1085d (diff) | |
| parent | 3b44f137b9a846c5452d9e6e1271b79b1dbcc942 (diff) | |
Merge branch 'master'
Diffstat (limited to 'arch/powerpc/kernel/vio.c')
| -rw-r--r-- | arch/powerpc/kernel/vio.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/vio.c b/arch/powerpc/kernel/vio.c index 97082a4203ad..71a6addf9f7f 100644 --- a/arch/powerpc/kernel/vio.c +++ b/arch/powerpc/kernel/vio.c | |||
| @@ -21,6 +21,7 @@ | |||
| 21 | #include <asm/iommu.h> | 21 | #include <asm/iommu.h> |
| 22 | #include <asm/dma.h> | 22 | #include <asm/dma.h> |
| 23 | #include <asm/vio.h> | 23 | #include <asm/vio.h> |
| 24 | #include <asm/prom.h> | ||
| 24 | 25 | ||
| 25 | static const struct vio_device_id *vio_match_device( | 26 | static const struct vio_device_id *vio_match_device( |
| 26 | const struct vio_device_id *, const struct vio_dev *); | 27 | const struct vio_device_id *, const struct vio_dev *); |
| @@ -265,7 +266,33 @@ static int vio_bus_match(struct device *dev, struct device_driver *drv) | |||
| 265 | return (ids != NULL) && (vio_match_device(ids, vio_dev) != NULL); | 266 | return (ids != NULL) && (vio_match_device(ids, vio_dev) != NULL); |
| 266 | } | 267 | } |
| 267 | 268 | ||
| 269 | static int vio_hotplug(struct device *dev, char **envp, int num_envp, | ||
| 270 | char *buffer, int buffer_size) | ||
| 271 | { | ||
| 272 | const struct vio_dev *vio_dev = to_vio_dev(dev); | ||
| 273 | char *cp; | ||
| 274 | int length; | ||
| 275 | |||
| 276 | if (!num_envp) | ||
| 277 | return -ENOMEM; | ||
| 278 | |||
| 279 | if (!vio_dev->dev.platform_data) | ||
| 280 | return -ENODEV; | ||
| 281 | cp = (char *)get_property(vio_dev->dev.platform_data, "compatible", &length); | ||
| 282 | if (!cp) | ||
| 283 | return -ENODEV; | ||
| 284 | |||
| 285 | envp[0] = buffer; | ||
| 286 | length = scnprintf(buffer, buffer_size, "MODALIAS=vio:T%sS%s", | ||
| 287 | vio_dev->type, cp); | ||
| 288 | if (buffer_size - length <= 0) | ||
| 289 | return -ENOMEM; | ||
| 290 | envp[1] = NULL; | ||
| 291 | return 0; | ||
| 292 | } | ||
| 293 | |||
| 268 | struct bus_type vio_bus_type = { | 294 | struct bus_type vio_bus_type = { |
| 269 | .name = "vio", | 295 | .name = "vio", |
| 296 | .hotplug = vio_hotplug, | ||
| 270 | .match = vio_bus_match, | 297 | .match = vio_bus_match, |
| 271 | }; | 298 | }; |
